[cloud] ECS Service load balancer modification graceful fail (#32876)

It is not possible to modify the load balancer configuration
for ECS Service.

As it is possible to detect this, it's nicer to fail gracefully
than return AWS's less meaningful failure message.

Fix PEP8 compliance
This commit is contained in:
Will Thames 2018-01-23 04:37:09 +10:00 committed by Ryan Brown
parent b24d502682
commit 142cacfec3

View file

@ -334,32 +334,17 @@ class EcsServiceManager:
deploymentConfiguration=deployment_configuration, deploymentConfiguration=deployment_configuration,
placementConstraints=placement_constraints, placementConstraints=placement_constraints,
placementStrategy=placement_strategy) placementStrategy=placement_strategy)
return self.jsonize(response['service']) return response['service']
def update_service(self, service_name, cluster_name, task_definition, def update_service(self, service_name, cluster_name, task_definition,
load_balancers, desired_count, client_token, role, deployment_configuration): desired_count, deployment_configuration):
response = self.ecs.update_service( response = self.ecs.update_service(
cluster=cluster_name, cluster=cluster_name,
service=service_name, service=service_name,
taskDefinition=task_definition, taskDefinition=task_definition,
desiredCount=desired_count, desiredCount=desired_count,
deploymentConfiguration=deployment_configuration) deploymentConfiguration=deployment_configuration)
return self.jsonize(response['service']) return response['service']
def jsonize(self, service):
# some fields are datetime which is not JSON serializable
# make them strings
if 'deployments' in service:
for d in service['deployments']:
if 'createdAt' in d:
d['createdAt'] = str(d['createdAt'])
if 'updatedAt' in d:
d['updatedAt'] = str(d['updatedAt'])
if 'events' in service:
for e in service['events']:
if 'createdAt' in e:
e['createdAt'] = str(e['createdAt'])
return service
def delete_service(self, service, cluster=None): def delete_service(self, service, cluster=None):
return self.ecs.delete_service(cluster=cluster, service=service) return self.ecs.delete_service(cluster=cluster, service=service)
@ -414,31 +399,30 @@ def main():
if existing and 'status' in existing and existing['status'] == "ACTIVE": if existing and 'status' in existing and existing['status'] == "ACTIVE":
if service_mgr.is_matching_service(module.params, existing): if service_mgr.is_matching_service(module.params, existing):
matching = True matching = True
results['service'] = service_mgr.jsonize(existing) results['service'] = existing
else: else:
update = True update = True
if not matching: if not matching:
if not module.check_mode: if not module.check_mode:
loadBalancers = module.params['load_balancers']
for loadBalancer in loadBalancers:
if 'containerPort' in loadBalancer:
loadBalancer['containerPort'] = int(loadBalancer['containerPort'])
role = module.params['role'] role = module.params['role']
clientToken = module.params['client_token'] clientToken = module.params['client_token']
loadBalancers = module.params['load_balancers']
if update: if update:
if (existing['loadBalancers'] or []) != loadBalancers:
module.fail_json(msg="It is not possible to update the load balancers of an existing service")
# update required # update required
response = service_mgr.update_service(module.params['name'], response = service_mgr.update_service(module.params['name'],
module.params['cluster'], module.params['cluster'],
module.params['task_definition'], module.params['task_definition'],
loadBalancers,
module.params['desired_count'], module.params['desired_count'],
clientToken,
role,
deploymentConfiguration) deploymentConfiguration)
else: else:
for loadBalancer in loadBalancers:
if 'containerPort' in loadBalancer:
loadBalancer['containerPort'] = int(loadBalancer['containerPort'])
# doesn't exist. create it. # doesn't exist. create it.
response = service_mgr.create_service(module.params['name'], response = service_mgr.create_service(module.params['name'],
module.params['cluster'], module.params['cluster'],