From d9a6d30f6dccb28cf5a3d5a83e01c8701e172fd7 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Tue, 24 Apr 2018 15:48:02 -0700 Subject: [PATCH] Improve legacy network and volume detection Signed-off-by: Joffrey F --- compose/network.py | 26 ++++++++++++++------------ compose/volume.py | 25 +++++++++++++++---------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/compose/network.py b/compose/network.py index 98b8f7b1d..5e9d929d9 100644 --- a/compose/network.py +++ b/compose/network.py @@ -42,7 +42,7 @@ class Network(object): self.enable_ipv6 = enable_ipv6 self.labels = labels self.custom_name = custom_name - self.legacy = False + self.legacy = None def ensure(self): if self.external: @@ -68,25 +68,17 @@ class Network(object): ) return + self._set_legacy_flag() try: - data = self.inspect() + data = self.inspect(legacy=self.legacy) check_remote_network_config(data, self) except NotFound: - try: - data = self.inspect(legacy=True) - self.legacy = True - check_remote_network_config(data, self) - return - except NotFound: - pass - driver_name = 'the default driver' if self.driver: driver_name = 'driver "{}"'.format(self.driver) log.info( - 'Creating network "{}" with {}' - .format(self.full_name, driver_name) + 'Creating network "{}" with {}'.format(self.full_name, driver_name) ) self.client.create_network( @@ -133,6 +125,7 @@ class Network(object): @property def true_name(self): + self._set_legacy_flag() if self.legacy: return self.legacy_full_name return self.full_name @@ -149,6 +142,15 @@ class Network(object): }) return labels + def _set_legacy_flag(self): + if self.legacy is not None: + return + try: + data = self.inspect(legacy=True) + self.legacy = data is not None + except NotFound: + self.legacy = False + def create_ipam_config_from_dict(ipam_dict): if not ipam_dict: diff --git a/compose/volume.py b/compose/volume.py index 6cad1e0de..56ff601cd 100644 --- a/compose/volume.py +++ b/compose/volume.py @@ -29,7 +29,7 @@ class Volume(object): self.external = external self.labels = labels self.custom_name = custom_name - self.legacy = False + self.legacy = None def create(self): return self.client.create_volume( @@ -46,21 +46,16 @@ class Volume(object): except NotFound: self.client.remove_volume(self.legacy_full_name) - def inspect(self, legacy=False): + def inspect(self, legacy=None): if legacy: return self.client.inspect_volume(self.legacy_full_name) return self.client.inspect_volume(self.full_name) def exists(self): + self._set_legacy_flag() try: - self.inspect() + self.inspect(legacy=self.legacy) except NotFound: - try: - self.inspect(legacy=True) - self.legacy = True - return True - except NotFound: - pass return False return True @@ -80,6 +75,7 @@ class Volume(object): @property def true_name(self): + self._set_legacy_flag() if self.legacy: return self.legacy_full_name return self.full_name @@ -96,6 +92,15 @@ class Volume(object): }) return labels + def _set_legacy_flag(self): + if self.legacy is not None: + return + try: + data = self.inspect(legacy=True) + self.legacy = data is not None + except NotFound: + self.legacy = False + class ProjectVolumes(object): @@ -155,7 +160,7 @@ class ProjectVolumes(object): ) volume.create() else: - check_remote_volume_config(volume.inspect(), volume) + check_remote_volume_config(volume.inspect(legacy=volume.legacy), volume) except NotFound: raise ConfigurationError( 'Volume %s specifies nonexistent driver %s' % (volume.name, volume.driver)