Merge "Refactor list function in docker driver"

This commit is contained in:
Zuul 2018-08-08 04:06:19 +00:00 committed by Gerrit Code Review
commit 14fa80132f
3 changed files with 15 additions and 12 deletions

View File

@ -70,8 +70,9 @@ class Manager(periodic_task.PeriodicTasks):
def init_containers(self, context):
containers = objects.Container.list_by_host(context, self.host)
local_containers, _ = self.driver.list(context)
uuid_to_status_map = {container.uuid: container.status
for container in self.driver.list(context)}
for container in local_containers}
for container in containers:
current_status = uuid_to_status_map[container.uuid]
self._init_container(context, container)

View File

@ -444,8 +444,7 @@ class DockerDriver(driver.ContainerDriver):
return True
def list(self, context):
id_to_container_map = {}
uuids = []
non_existent_containers = []
with docker_utils.docker_client() as docker:
docker_containers = docker.list_containers()
id_to_container_map = {c['Id']: c
@ -463,17 +462,12 @@ class DockerDriver(driver.ContainerDriver):
container_id = container.container_id
docker_container = id_to_container_map.get(container_id)
if not container_id or not docker_container:
if container.auto_remove:
container.status = consts.DELETED
container.save(context)
else:
self.heal_with_rebuilding_container(context,
container)
non_existent_containers.append(container)
continue
self._populate_container(container, docker_container)
return local_containers
return local_containers, non_existent_containers
def heal_with_rebuilding_container(self, context, container):
compute_api = zun_compute.API(context)
@ -510,7 +504,7 @@ class DockerDriver(driver.ContainerDriver):
return containers
def update_containers_states(self, context, containers):
local_containers = self.list(context)
local_containers, non_existent_containers = self.list(context)
if not local_containers:
return
@ -541,6 +535,14 @@ class DockerDriver(driver.ContainerDriver):
container.save(context)
LOG.info('Host of container %s changed from %s to %s',
container.uuid, old_host, container.host)
for container in non_existent_containers:
if container.host == cur_host:
if container.auto_remove:
container.status = consts.DELETED
container.save(context)
else:
self.heal_with_rebuilding_container(context,
container)
def show(self, context, container):
with docker_utils.docker_client() as docker:

View File

@ -458,7 +458,7 @@ class TestDockerDriver(base.DriverTestCase):
self.context, status='Stopped')
conf.CONF.set_override('host', 'host2')
with mock.patch.object(self.driver, 'list') as mock_list:
mock_list.return_value = [mock_container_2]
mock_list.return_value = ([mock_container_2], [])
self.assertEqual(mock_container.host, 'host1')
self.assertEqual(mock_container.status, 'Running')
self.driver.update_containers_states(