Просмотр исходного кода

Create declarations for named volumes

Signed-off-by: Aanand Prasad <[email protected]>
Aanand Prasad 9 лет назад
Родитель
Сommit
be66779fe9
1 измененных файлов с 31 добавлено и 0 удалено
  1. 31 0
      contrib/migration/migrate-compose-file-v1-to-v2.py

+ 31 - 0
contrib/migration/migrate-compose-file-v1-to-v2.py

@@ -12,6 +12,8 @@ import sys
 
 import ruamel.yaml
 
+from compose.config.types import VolumeSpec
+
 
 log = logging.getLogger('migrate')
 
@@ -82,10 +84,39 @@ def migrate(content):
 
     data['version'] = 2
     data['services'] = services
+    create_volumes_section(data)
 
     return data
 
 
+def create_volumes_section(data):
+    named_volumes = get_named_volumes(data['services'])
+    if named_volumes:
+        log.warn(
+            "Named volumes ({names}) must be explicitly declared. Creating a "
+            "'volumes' section with declarations.\n\n"
+            "For backwards-compatibility, they've been declared as external. "
+            "If you don't mind the volume names being prefixed with the "
+            "project name, you can remove the 'external' option from each one."
+            .format(names=', '.join(list(named_volumes))))
+
+        data['volumes'] = named_volumes
+
+
+def get_named_volumes(services):
+    volume_specs = [
+        VolumeSpec.parse(volume)
+        for service in services.values()
+        for volume in service.get('volumes', [])
+    ]
+    names = {
+        spec.external
+        for spec in volume_specs
+        if spec.is_named_volume
+    }
+    return {name: {'external': True} for name in names}
+
+
 def write(stream, new_format, indent, width):
     ruamel.yaml.dump(
         new_format,