Merge "Refactor list function in docker driver"
This commit is contained in:
commit
14fa80132f
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue