Browse Source

Improve legacy network and volume detection

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 7 years ago
parent
commit
d9a6d30f6d
2 changed files with 29 additions and 22 deletions
  1. 14 12
      compose/network.py
  2. 15 10
      compose/volume.py

+ 14 - 12
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:

+ 15 - 10
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)