Implement container instance deregistration

This commit is contained in:
GuyTempleton 2017-04-13 17:46:15 +01:00
commit acb6c3ce01
No known key found for this signature in database
GPG key ID: 64359D336E412597
4 changed files with 99 additions and 6 deletions

View file

@ -652,6 +652,7 @@ class EC2ContainerServiceBackend(BaseBackend):
'/')[-1]
self.container_instances[cluster_name][
container_instance_id] = container_instance
self.clusters[cluster_name].registered_container_instances_count += 1
return container_instance
def list_container_instances(self, cluster_str):
@ -715,8 +716,10 @@ class EC2ContainerServiceBackend(BaseBackend):
resource["stringSetValue"].remove(str(port))
else:
resource["stringSetValue"].append(str(port))
container_instance.runningTaskCount += resource_multiplier * 1
def deregister_container_instance(self, cluster_str, container_instance_str, force):
failures = []
cluster_name = cluster_str.split('/')[-1]
if cluster_name not in self.clusters:
raise Exception("{0} is not a cluster".format(cluster_name))
@ -724,18 +727,18 @@ class EC2ContainerServiceBackend(BaseBackend):
container_instance = self.container_instances[cluster_name].get(container_instance_id)
if container_instance is None:
raise Exception("{0} is not a container id in the cluster")
if not force and container_instance.running_tasks_count > 0:
if not force and container_instance.runningTaskCount > 0:
raise Exception("Found running tasks on the instance.")
# Currently assume that people might want to do something based around deregistered instances
# with tasks left running on them - but nothing if deregistration is forced or no tasks were
# running already
elif force and container_instance.running_tasks_count > 0:
elif force and container_instance.runningTaskCount > 0:
if not self.container_instances.get('orphaned'):
self.container_instances['orphaned'] = {}
self.container_instances['orphaned'][container_instance_id] = container_instance
del(self.container_instances[cluster_name][container_instance_id])
self._respond_to_cluster_state_update(cluster_str)
pass
return container_instance, failures
def _respond_to_cluster_state_update(self, cluster_str):
cluster_name = cluster_str.split('/')[-1]

View file

@ -204,10 +204,12 @@ class EC2ContainerServiceResponse(BaseResponse):
})
def deregister_container_instance(self):
cluster_str = self._get_param('cluster', 'default'),
cluster_str = self._get_param('cluster')
if not cluster_str:
cluster_str = 'default'
container_instance_str = self._get_param('containerInstance')
force = self._get_param('force', False)
container_instance = self.ecs_backend.deregister_container_instance(
force = self._get_param('force')
container_instance, failures = self.ecs_backend.deregister_container_instance(
cluster_str, container_instance_str, force
)
return json.dumps({