From 3610a2457f89362cc61255fbfa93df0d60b33677 Mon Sep 17 00:00:00 2001 From: Nikolay Murga Date: Thu, 25 May 2017 00:21:24 +0300 Subject: [PATCH] Fixed #21464 - docker_network: TypeError with existing network (#24266) Fixed #22530 - docker_network Failed but Overlay network created successfully on Docker swarm mode --- .../modules/cloud/docker/docker_network.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/ansible/modules/cloud/docker/docker_network.py b/lib/ansible/modules/cloud/docker/docker_network.py index 5352a716aab..9d842490470 100644 --- a/lib/ansible/modules/cloud/docker/docker_network.py +++ b/lib/ansible/modules/cloud/docker/docker_network.py @@ -194,8 +194,7 @@ class TaskParameters(DockerBaseClass): def container_names_in_network(network): - return [c['Name'] for c in network['Containers'].values()] - + return [c['Name'] for c in network['Containers'].values()] if network['Containers'] else [] class DockerNetworkManager(object): @@ -247,7 +246,7 @@ class DockerNetworkManager(object): differences.append('driver_options') else: for key, value in self.parameters.driver_options.items(): - if not net['Options'].get(key) or value != net['Options'][key]: + if not (key in net['Options']) or value != net['Options'][key]: different = True differences.append('driver_options.%s' % key) if self.parameters.ipam_driver: @@ -286,10 +285,10 @@ class DockerNetworkManager(object): if HAS_DOCKER_PY_2: ipam_config = IPAMConfig(driver=self.parameters.ipam_driver, - pool_configs=ipam_pools) + pool_configs=ipam_pools) else: ipam_config = utils.create_ipam_config(driver=self.parameters.ipam_driver, - pool_configs=ipam_pools) + pool_configs=ipam_pools) if not self.check_mode: resp = self.client.create_network(self.parameters.network_name, @@ -321,13 +320,18 @@ class DockerNetworkManager(object): self.results['changed'] = True def disconnect_missing(self): - for c in self.existing_network['Containers'].values(): + containers = self.existing_network['Containers'] + if not containers: + return + for c in containers.values(): name = c['Name'] if name not in self.parameters.connected: self.disconnect_container(name) def disconnect_all_containers(self): containers = self.client.inspect_network(self.parameters.network_name)['Containers'] + if not containers: + return for cont in containers.values(): self.disconnect_container(cont['Name'])