diff --git a/eds.go b/eds.go index 07184d8..623e8bc 100644 --- a/eds.go +++ b/eds.go @@ -59,7 +59,9 @@ const ( type edsOptFunc func(*edsOpt) type edsOpt struct { - loadBalancingWeight uint32 + loadBalancingWeight uint32 + healthStatus corev3.HealthStatus + setInitialHealthStatus bool } func EdsLoadBalancingWeight(weight uint32) edsOptFunc { @@ -68,6 +70,13 @@ func EdsLoadBalancingWeight(weight uint32) edsOptFunc { } } +func EdsLbEndpointHealthStatus(status corev3.HealthStatus) edsOptFunc { + return func(opt *edsOpt) { + opt.healthStatus = status + opt.setInitialHealthStatus = true + } +} + func initEdsOpt(opt *edsOpt) { if opt.loadBalancingWeight < 1 { opt.loadBalancingWeight = defaultLoadBalancingWeight @@ -110,13 +119,32 @@ func (e *endpointDiscoveryService) instanceEndpoint(instance EDSInstanceConfig) } func (e *endpointDiscoveryService) lbEndpoints(instances []EDSInstanceConfig) []*endpointv3.LbEndpoint { + if e.opt.setInitialHealthStatus { + return e.lbEndpointsWithInitialStatus(instances, e.opt.healthStatus) + } + return e.lbEndpointsDefault(instances) +} + +func (e *endpointDiscoveryService) lbEndpointsWithInitialStatus(instances []EDSInstanceConfig, status corev3.HealthStatus) []*endpointv3.LbEndpoint { + endpoints := make([]*endpointv3.LbEndpoint, len(instances)) + for idx, ins := range instances { + endpoints[idx] = &endpointv3.LbEndpoint{ + HostIdentifier: &endpointv3.LbEndpoint_Endpoint{ + Endpoint: e.instanceEndpoint(ins), + }, + HealthStatus: status, + } + } + return endpoints +} + +func (e *endpointDiscoveryService) lbEndpointsDefault(instances []EDSInstanceConfig) []*endpointv3.LbEndpoint { endpoints := make([]*endpointv3.LbEndpoint, len(instances)) for idx, ins := range instances { endpoints[idx] = &endpointv3.LbEndpoint{ HostIdentifier: &endpointv3.LbEndpoint_Endpoint{ Endpoint: e.instanceEndpoint(ins), }, - HealthStatus: corev3.HealthStatus_UNHEALTHY, // initial status = unhealthy } } return endpoints diff --git a/version.go b/version.go index 24652b0..4526537 100644 --- a/version.go +++ b/version.go @@ -2,6 +2,6 @@ package xds const ( AppName string = "example-envoy-xds" - Version string = "1.0.0" + Version string = "1.0.1" UA string = AppName + "/" + Version )