Remove superfluous ELB region lookup logic.

The ELB client lookup isn't necessary because the service
does not operate across regions. Instead the client should
be built like the others by querying for the region from
the master node's metadata service.
This commit is contained in:
Trevor Pounds
2015-09-20 23:08:23 -07:00
parent ed8748a6b6
commit 4775a8a5bb
2 changed files with 31 additions and 74 deletions

View File

@@ -172,6 +172,7 @@ type InstanceGroupInfo interface {
type AWSCloud struct { type AWSCloud struct {
awsServices AWSServices awsServices AWSServices
ec2 EC2 ec2 EC2
elb ELB
asg ASG asg ASG
cfg *AWSCloudConfig cfg *AWSCloudConfig
availabilityZone string availabilityZone string
@@ -183,8 +184,6 @@ type AWSCloud struct {
selfAWSInstance *awsInstance selfAWSInstance *awsInstance
mutex sync.Mutex mutex sync.Mutex
// Protects elbClients
elbClients map[string]ELB
} }
type AWSCloudConfig struct { type AWSCloudConfig struct {
@@ -236,23 +235,6 @@ func (p *awsSDKProvider) Metadata() AWSMetadata {
return &awsSdkMetadata{} return &awsSdkMetadata{}
} }
// Builds an ELB client for the specified region
func (s *AWSCloud) getELBClient(regionName string) (ELB, error) {
s.mutex.Lock()
defer s.mutex.Unlock()
elbClient, found := s.elbClients[regionName]
if !found {
var err error
elbClient, err = s.awsServices.LoadBalancing(regionName)
if err != nil {
return nil, err
}
s.elbClients[regionName] = elbClient
}
return elbClient, nil
}
func stringPointerArray(orig []string) []*string { func stringPointerArray(orig []string) []*string {
if orig == nil { if orig == nil {
return nil return nil
@@ -566,6 +548,11 @@ func newAWSCloud(config io.Reader, awsServices AWSServices) (*AWSCloud, error) {
return nil, fmt.Errorf("error creating AWS EC2 client: %v", err) return nil, fmt.Errorf("error creating AWS EC2 client: %v", err)
} }
elb, err := awsServices.LoadBalancing(regionName)
if err != nil {
return nil, fmt.Errorf("error creating AWS ELB client: %v", err)
}
asg, err := awsServices.Autoscaling(regionName) asg, err := awsServices.Autoscaling(regionName)
if err != nil { if err != nil {
return nil, fmt.Errorf("error creating AWS autoscaling client: %v", err) return nil, fmt.Errorf("error creating AWS autoscaling client: %v", err)
@@ -574,11 +561,11 @@ func newAWSCloud(config io.Reader, awsServices AWSServices) (*AWSCloud, error) {
awsCloud := &AWSCloud{ awsCloud := &AWSCloud{
awsServices: awsServices, awsServices: awsServices,
ec2: ec2, ec2: ec2,
elb: elb,
asg: asg, asg: asg,
cfg: cfg, cfg: cfg,
region: regionName, region: regionName,
availabilityZone: zone, availabilityZone: zone,
elbClients: map[string]ELB{},
} }
filterTags := map[string]string{} filterTags := map[string]string{}
@@ -1240,16 +1227,11 @@ func (v *AWSCloud) Release(name string) error {
} }
// Gets the current load balancer state // Gets the current load balancer state
func (s *AWSCloud) describeLoadBalancer(region, name string) (*elb.LoadBalancerDescription, error) { func (s *AWSCloud) describeLoadBalancer(name string) (*elb.LoadBalancerDescription, error) {
elbClient, err := s.getELBClient(region)
if err != nil {
return nil, err
}
request := &elb.DescribeLoadBalancersInput{} request := &elb.DescribeLoadBalancersInput{}
request.LoadBalancerNames = []*string{&name} request.LoadBalancerNames = []*string{&name}
response, err := elbClient.DescribeLoadBalancers(request) response, err := s.elb.DescribeLoadBalancers(request)
if err != nil { if err != nil {
if awsError, ok := err.(awserr.Error); ok { if awsError, ok := err.(awserr.Error); ok {
if awsError.Code() == "LoadBalancerNotFound" { if awsError.Code() == "LoadBalancerNotFound" {
@@ -1613,11 +1595,6 @@ func (s *AWSCloud) createTags(request *ec2.CreateTagsInput) (*ec2.CreateTagsOutp
func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, ports []*api.ServicePort, hosts []string, affinity api.ServiceAffinity) (*api.LoadBalancerStatus, error) { func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, ports []*api.ServicePort, hosts []string, affinity api.ServiceAffinity) (*api.LoadBalancerStatus, error) {
glog.V(2).Infof("EnsureTCPLoadBalancer(%v, %v, %v, %v, %v)", name, region, publicIP, ports, hosts) glog.V(2).Infof("EnsureTCPLoadBalancer(%v, %v, %v, %v, %v)", name, region, publicIP, ports, hosts)
elbClient, err := s.getELBClient(region)
if err != nil {
return nil, err
}
if affinity != api.ServiceAffinityNone { if affinity != api.ServiceAffinityNone {
// ELB supports sticky sessions, but only when configured for HTTP/HTTPS // ELB supports sticky sessions, but only when configured for HTTP/HTTPS
return nil, fmt.Errorf("unsupported load balancer affinity: %v", affinity) return nil, fmt.Errorf("unsupported load balancer affinity: %v", affinity)
@@ -1720,12 +1697,12 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
} }
// Build the load balancer itself // Build the load balancer itself
loadBalancer, err := s.ensureLoadBalancer(region, name, listeners, subnetIDs, securityGroupIDs) loadBalancer, err := s.ensureLoadBalancer(name, listeners, subnetIDs, securityGroupIDs)
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = s.ensureLoadBalancerHealthCheck(region, loadBalancer, listeners) err = s.ensureLoadBalancerHealthCheck(loadBalancer, listeners)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1736,7 +1713,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
return nil, err return nil, err
} }
err = s.ensureLoadBalancerInstances(elbClient, orEmpty(loadBalancer.LoadBalancerName), loadBalancer.Instances, instances) err = s.ensureLoadBalancerInstances(orEmpty(loadBalancer.LoadBalancerName), loadBalancer.Instances, instances)
if err != nil { if err != nil {
glog.Warning("Error registering instances with the load balancer: %v", err) glog.Warning("Error registering instances with the load balancer: %v", err)
return nil, err return nil, err
@@ -1752,7 +1729,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
// GetTCPLoadBalancer is an implementation of TCPLoadBalancer.GetTCPLoadBalancer // GetTCPLoadBalancer is an implementation of TCPLoadBalancer.GetTCPLoadBalancer
func (s *AWSCloud) GetTCPLoadBalancer(name, region string) (*api.LoadBalancerStatus, bool, error) { func (s *AWSCloud) GetTCPLoadBalancer(name, region string) (*api.LoadBalancerStatus, bool, error) {
lb, err := s.describeLoadBalancer(region, name) lb, err := s.describeLoadBalancer(name)
if err != nil { if err != nil {
return nil, false, err return nil, false, err
} }
@@ -1912,12 +1889,7 @@ func (s *AWSCloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalan
// EnsureTCPLoadBalancerDeleted implements TCPLoadBalancer.EnsureTCPLoadBalancerDeleted. // EnsureTCPLoadBalancerDeleted implements TCPLoadBalancer.EnsureTCPLoadBalancerDeleted.
func (s *AWSCloud) EnsureTCPLoadBalancerDeleted(name, region string) error { func (s *AWSCloud) EnsureTCPLoadBalancerDeleted(name, region string) error {
elbClient, err := s.getELBClient(region) lb, err := s.describeLoadBalancer(name)
if err != nil {
return err
}
lb, err := s.describeLoadBalancer(region, name)
if err != nil { if err != nil {
return err return err
} }
@@ -1941,7 +1913,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancerDeleted(name, region string) error {
request := &elb.DeleteLoadBalancerInput{} request := &elb.DeleteLoadBalancerInput{}
request.LoadBalancerName = lb.LoadBalancerName request.LoadBalancerName = lb.LoadBalancerName
_, err = elbClient.DeleteLoadBalancer(request) _, err = s.elb.DeleteLoadBalancer(request)
if err != nil { if err != nil {
// TODO: Check if error was because load balancer was concurrently deleted // TODO: Check if error was because load balancer was concurrently deleted
glog.Error("error deleting load balancer: ", err) glog.Error("error deleting load balancer: ", err)
@@ -2012,12 +1984,7 @@ func (s *AWSCloud) UpdateTCPLoadBalancer(name, region string, hosts []string) er
return err return err
} }
elbClient, err := s.getELBClient(region) lb, err := s.describeLoadBalancer(name)
if err != nil {
return err
}
lb, err := s.describeLoadBalancer(region, name)
if err != nil { if err != nil {
return err return err
} }
@@ -2026,7 +1993,7 @@ func (s *AWSCloud) UpdateTCPLoadBalancer(name, region string, hosts []string) er
return fmt.Errorf("Load balancer not found") return fmt.Errorf("Load balancer not found")
} }
err = s.ensureLoadBalancerInstances(elbClient, orEmpty(lb.LoadBalancerName), lb.Instances, instances) err = s.ensureLoadBalancerInstances(orEmpty(lb.LoadBalancerName), lb.Instances, instances)
if err != nil { if err != nil {
return nil return nil
} }

View File

@@ -27,13 +27,8 @@ import (
"k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/sets"
) )
func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.Listener, subnetIDs []string, securityGroupIDs []string) (*elb.LoadBalancerDescription, error) { func (s *AWSCloud) ensureLoadBalancer(name string, listeners []*elb.Listener, subnetIDs []string, securityGroupIDs []string) (*elb.LoadBalancerDescription, error) {
elbClient, err := s.getELBClient(region) loadBalancer, err := s.describeLoadBalancer(name)
if err != nil {
return nil, err
}
loadBalancer, err := s.describeLoadBalancer(region, name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -53,7 +48,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
createRequest.SecurityGroups = stringPointerArray(securityGroupIDs) createRequest.SecurityGroups = stringPointerArray(securityGroupIDs)
glog.Info("Creating load balancer with name: ", name) glog.Info("Creating load balancer with name: ", name)
_, err := elbClient.CreateLoadBalancer(createRequest) _, err := s.elb.CreateLoadBalancer(createRequest)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -72,7 +67,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
request.LoadBalancerName = aws.String(name) request.LoadBalancerName = aws.String(name)
request.Subnets = stringSetToPointers(removals) request.Subnets = stringSetToPointers(removals)
glog.V(2).Info("Detaching load balancer from removed subnets") glog.V(2).Info("Detaching load balancer from removed subnets")
_, err := elbClient.DetachLoadBalancerFromSubnets(request) _, err := s.elb.DetachLoadBalancerFromSubnets(request)
if err != nil { if err != nil {
return nil, fmt.Errorf("error detaching AWS loadbalancer from subnets: %v", err) return nil, fmt.Errorf("error detaching AWS loadbalancer from subnets: %v", err)
} }
@@ -84,7 +79,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
request.LoadBalancerName = aws.String(name) request.LoadBalancerName = aws.String(name)
request.Subnets = stringSetToPointers(additions) request.Subnets = stringSetToPointers(additions)
glog.V(2).Info("Attaching load balancer to added subnets") glog.V(2).Info("Attaching load balancer to added subnets")
_, err := elbClient.AttachLoadBalancerToSubnets(request) _, err := s.elb.AttachLoadBalancerToSubnets(request)
if err != nil { if err != nil {
return nil, fmt.Errorf("error attaching AWS loadbalancer to subnets: %v", err) return nil, fmt.Errorf("error attaching AWS loadbalancer to subnets: %v", err)
} }
@@ -103,7 +98,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
request.LoadBalancerName = aws.String(name) request.LoadBalancerName = aws.String(name)
request.SecurityGroups = stringPointerArray(securityGroupIDs) request.SecurityGroups = stringPointerArray(securityGroupIDs)
glog.V(2).Info("Applying updated security groups to load balancer") glog.V(2).Info("Applying updated security groups to load balancer")
_, err := elbClient.ApplySecurityGroupsToLoadBalancer(request) _, err := s.elb.ApplySecurityGroupsToLoadBalancer(request)
if err != nil { if err != nil {
return nil, fmt.Errorf("error applying AWS loadbalancer security groups: %v", err) return nil, fmt.Errorf("error applying AWS loadbalancer security groups: %v", err)
} }
@@ -163,7 +158,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
request.LoadBalancerName = aws.String(name) request.LoadBalancerName = aws.String(name)
request.LoadBalancerPorts = removals request.LoadBalancerPorts = removals
glog.V(2).Info("Deleting removed load balancer listeners") glog.V(2).Info("Deleting removed load balancer listeners")
_, err := elbClient.DeleteLoadBalancerListeners(request) _, err := s.elb.DeleteLoadBalancerListeners(request)
if err != nil { if err != nil {
return nil, fmt.Errorf("error deleting AWS loadbalancer listeners: %v", err) return nil, fmt.Errorf("error deleting AWS loadbalancer listeners: %v", err)
} }
@@ -175,7 +170,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
request.LoadBalancerName = aws.String(name) request.LoadBalancerName = aws.String(name)
request.Listeners = additions request.Listeners = additions
glog.V(2).Info("Creating added load balancer listeners") glog.V(2).Info("Creating added load balancer listeners")
_, err := elbClient.CreateLoadBalancerListeners(request) _, err := s.elb.CreateLoadBalancerListeners(request)
if err != nil { if err != nil {
return nil, fmt.Errorf("error creating AWS loadbalancer listeners: %v", err) return nil, fmt.Errorf("error creating AWS loadbalancer listeners: %v", err)
} }
@@ -185,7 +180,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
} }
if dirty { if dirty {
loadBalancer, err = s.describeLoadBalancer(region, name) loadBalancer, err = s.describeLoadBalancer(name)
if err != nil { if err != nil {
glog.Warning("Unable to retrieve load balancer after creation/update") glog.Warning("Unable to retrieve load balancer after creation/update")
return nil, err return nil, err
@@ -196,12 +191,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
} }
// Makes sure that the health check for an ELB matches the configured listeners // Makes sure that the health check for an ELB matches the configured listeners
func (s *AWSCloud) ensureLoadBalancerHealthCheck(region string, loadBalancer *elb.LoadBalancerDescription, listeners []*elb.Listener) error { func (s *AWSCloud) ensureLoadBalancerHealthCheck(loadBalancer *elb.LoadBalancerDescription, listeners []*elb.Listener) error {
elbClient, err := s.getELBClient(region)
if err != nil {
return err
}
actual := loadBalancer.HealthCheck actual := loadBalancer.HealthCheck
// Default AWS settings // Default AWS settings
@@ -245,7 +235,7 @@ func (s *AWSCloud) ensureLoadBalancerHealthCheck(region string, loadBalancer *el
request.HealthCheck = healthCheck request.HealthCheck = healthCheck
request.LoadBalancerName = loadBalancer.LoadBalancerName request.LoadBalancerName = loadBalancer.LoadBalancerName
_, err = elbClient.ConfigureHealthCheck(request) _, err := s.elb.ConfigureHealthCheck(request)
if err != nil { if err != nil {
return fmt.Errorf("error configuring load-balancer health-check: %v", err) return fmt.Errorf("error configuring load-balancer health-check: %v", err)
} }
@@ -254,7 +244,7 @@ func (s *AWSCloud) ensureLoadBalancerHealthCheck(region string, loadBalancer *el
} }
// Makes sure that exactly the specified hosts are registered as instances with the load balancer // Makes sure that exactly the specified hosts are registered as instances with the load balancer
func (s *AWSCloud) ensureLoadBalancerInstances(elbClient ELB, loadBalancerName string, lbInstances []*elb.Instance, instances []*ec2.Instance) error { func (s *AWSCloud) ensureLoadBalancerInstances(loadBalancerName string, lbInstances []*elb.Instance, instances []*ec2.Instance) error {
expected := sets.NewString() expected := sets.NewString()
for _, instance := range instances { for _, instance := range instances {
expected.Insert(orEmpty(instance.InstanceID)) expected.Insert(orEmpty(instance.InstanceID))
@@ -286,7 +276,7 @@ func (s *AWSCloud) ensureLoadBalancerInstances(elbClient ELB, loadBalancerName s
registerRequest := &elb.RegisterInstancesWithLoadBalancerInput{} registerRequest := &elb.RegisterInstancesWithLoadBalancerInput{}
registerRequest.Instances = addInstances registerRequest.Instances = addInstances
registerRequest.LoadBalancerName = aws.String(loadBalancerName) registerRequest.LoadBalancerName = aws.String(loadBalancerName)
_, err := elbClient.RegisterInstancesWithLoadBalancer(registerRequest) _, err := s.elb.RegisterInstancesWithLoadBalancer(registerRequest)
if err != nil { if err != nil {
return err return err
} }
@@ -297,7 +287,7 @@ func (s *AWSCloud) ensureLoadBalancerInstances(elbClient ELB, loadBalancerName s
deregisterRequest := &elb.DeregisterInstancesFromLoadBalancerInput{} deregisterRequest := &elb.DeregisterInstancesFromLoadBalancerInput{}
deregisterRequest.Instances = removeInstances deregisterRequest.Instances = removeInstances
deregisterRequest.LoadBalancerName = aws.String(loadBalancerName) deregisterRequest.LoadBalancerName = aws.String(loadBalancerName)
_, err := elbClient.DeregisterInstancesFromLoadBalancer(deregisterRequest) _, err := s.elb.DeregisterInstancesFromLoadBalancer(deregisterRequest)
if err != nil { if err != nil {
return err return err
} }