瀏覽代碼

Normalize external_name

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 9 年之前
父節點
當前提交
d601199eb5
共有 5 個文件被更改,包括 22 次插入14 次删除
  1. 7 0
      compose/config/config.py
  2. 1 1
      compose/project.py
  3. 2 7
      compose/volume.py
  4. 6 2
      tests/integration/project_test.py
  5. 6 4
      tests/integration/volume_test.py

+ 7 - 0
compose/config/config.py

@@ -273,6 +273,13 @@ def load_volumes(config_files):
     for config_file in config_files:
         for name, volume_config in config_file.config.get('volumes', {}).items():
             volumes.update({name: volume_config})
+            external = volume_config.get('external')
+            if external:
+                if isinstance(external, dict):
+                    volume_config['external_name'] = external.get('name')
+                else:
+                    volume_config['external_name'] = name
+
     return volumes
 
 

+ 1 - 1
compose/project.py

@@ -79,7 +79,7 @@ class Project(object):
                         client=client, project=name, name=vol_name,
                         driver=data.get('driver'),
                         driver_opts=data.get('driver_opts'),
-                        external=data.get('external', False)
+                        external_name=data.get('external_name')
                     )
                 )
         return project

+ 2 - 7
compose/volume.py

@@ -6,18 +6,13 @@ from docker.errors import NotFound
 
 class Volume(object):
     def __init__(self, client, project, name, driver=None, driver_opts=None,
-                 external=False):
+                 external_name=None):
         self.client = client
         self.project = project
         self.name = name
         self.driver = driver
         self.driver_opts = driver_opts
-        self.external_name = None
-        if external:
-            if isinstance(external, dict):
-                self.external_name = external.get('name')
-            else:
-                self.external_name = self.name
+        self.external_name = external_name
 
     def create(self):
         return self.client.create_volume(

+ 6 - 2
tests/integration/project_test.py

@@ -687,7 +687,9 @@ class ProjectTest(DockerClientTestCase):
                 'name': 'web',
                 'image': 'busybox:latest',
                 'command': 'top'
-            }], volumes={vol_name: {'external': True}}
+            }], volumes={
+                vol_name: {'external': True, 'external_name': vol_name}
+            }
         )
         project = Project.from_config(
             name='composetest',
@@ -706,7 +708,9 @@ class ProjectTest(DockerClientTestCase):
                 'name': 'web',
                 'image': 'busybox:latest',
                 'command': 'top'
-            }], volumes={vol_name: {'external': True}}
+            }], volumes={
+                vol_name: {'external': True, 'external_name': vol_name}
+            }
         )
         project = Project.from_config(
             name='composetest',

+ 6 - 4
tests/integration/volume_test.py

@@ -18,10 +18,12 @@ class VolumeTest(DockerClientTestCase):
             except DockerException:
                 pass
 
-    def create_volume(self, name, driver=None, opts=None, external=False):
+    def create_volume(self, name, driver=None, opts=None, external=None):
+        if external and isinstance(external, bool):
+            external = name
         vol = Volume(
             self.client, 'composetest', name, driver=driver, driver_opts=opts,
-            external=external
+            external_name=external
         )
         self.tmp_volumes.append(vol)
         return vol
@@ -66,7 +68,7 @@ class VolumeTest(DockerClientTestCase):
 
     def test_external_aliased_volume(self):
         alias_name = 'composetest_alias01'
-        vol = self.create_volume('volume01', external={'name': alias_name})
+        vol = self.create_volume('volume01', external=alias_name)
         assert vol.external is True
         assert vol.full_name == alias_name
         vol.create()
@@ -86,7 +88,7 @@ class VolumeTest(DockerClientTestCase):
         assert vol.exists() is True
 
     def test_exists_external_aliased(self):
-        vol = self.create_volume('volume01', external={'name': 'composetest_alias01'})
+        vol = self.create_volume('volume01', external='composetest_alias01')
         assert vol.exists() is False
         vol.create()
         assert vol.exists() is True