Browse Source

Merged in aznashwan/coriolis/ephemeral-cinder-disks (pull request #36)

Added 'delete_disks_on_vm_termination' option in OpenStack Import Provider.
Nashwan Azhari 9 years ago
parent
commit
01a3e3e973

+ 14 - 3
coriolis/providers/openstack/imp.py

@@ -39,6 +39,10 @@ opts = [
                default=True,
                default=True,
                help='Set to "True" to boot from volume by default instead of '
                help='Set to "True" to boot from volume by default instead of '
                'using local storage.'),
                'using local storage.'),
+    cfg.StrOpt('delete_disks_on_vm_termination',
+               default=False,
+               help='Configure Cinder volumes to be deleted on an eventual '
+                    'termination of the migrated/replicated instance.'),
     cfg.StrOpt('glance_upload',
     cfg.StrOpt('glance_upload',
                default=True,
                default=True,
                help='Set to "True" to use Glance to upload images.'),
                help='Set to "True" to use Glance to upload images.'),
@@ -357,6 +361,7 @@ class ImportProvider(base.BaseImportProvider, base.BaseReplicaImportProvider):
              "target_disk_format",
              "target_disk_format",
              "container_format",
              "container_format",
              "hypervisor_type",
              "hypervisor_type",
+             "delete_disks_on_vm_termination",
              "fip_pool_name",
              "fip_pool_name",
              "network_map",
              "network_map",
              "keypair_name",
              "keypair_name",
@@ -378,6 +383,9 @@ class ImportProvider(base.BaseImportProvider, base.BaseReplicaImportProvider):
             CONF.openstack_migration_provider.hypervisor_type)
             CONF.openstack_migration_provider.hypervisor_type)
         config.fip_pool_name = target_environment.get(
         config.fip_pool_name = target_environment.get(
             "fip_pool_name", CONF.openstack_migration_provider.fip_pool_name)
             "fip_pool_name", CONF.openstack_migration_provider.fip_pool_name)
+        config.delete_disks_on_vm_termination = target_environment.get(
+            "delete_disks_on_vm_termination",
+            CONF.openstack_migration_provider.delete_disks_on_vm_termination)
         config.network_map = target_environment.get("network_map", {})
         config.network_map = target_environment.get("network_map", {})
         config.keypair_name = target_environment.get("keypair_name")
         config.keypair_name = target_environment.get("keypair_name")
 
 
@@ -633,7 +641,8 @@ class ImportProvider(base.BaseImportProvider, base.BaseReplicaImportProvider):
                 "Creating migrated instance")
                 "Creating migrated instance")
             self._create_target_instance(
             self._create_target_instance(
                 nova, config.flavor_name, instance_name,
                 nova, config.flavor_name, instance_name,
-                config.keypair_name, ports, volumes)
+                config.keypair_name, ports, volumes,
+                ephemeral_volumes=config.delete_disks_on_vm_termination)
         except:
         except:
             if not volumes_info or clone_disks:
             if not volumes_info or clone_disks:
                 # Don't remove replica volumes
                 # Don't remove replica volumes
@@ -676,14 +685,16 @@ class ImportProvider(base.BaseImportProvider, base.BaseReplicaImportProvider):
     @utils.retry_on_error(max_attempts=10, sleep_seconds=30,
     @utils.retry_on_error(max_attempts=10, sleep_seconds=30,
                           terminal_exceptions=[exception.NotFound])
                           terminal_exceptions=[exception.NotFound])
     def _create_target_instance(self, nova, flavor_name, instance_name,
     def _create_target_instance(self, nova, flavor_name, instance_name,
-                                keypair_name, ports, volumes):
+                                keypair_name, ports, volumes,
+                                ephemeral_volumes=False):
         flavor = common.get_flavor(nova, flavor_name)
         flavor = common.get_flavor(nova, flavor_name)
 
 
         block_device_mapping = {}
         block_device_mapping = {}
         for i, volume in enumerate(volumes):
         for i, volume in enumerate(volumes):
             # Delete volume on termination
             # Delete volume on termination
             block_device_mapping[
             block_device_mapping[
-                'vd%s' % chr(ord('a') + i)] = "%s:volume::True" % volume.id
+                'vd%s' % chr(ord('a') + i)] = "%s:volume::%s" % (
+                    volume.id, ephemeral_volumes)
 
 
         nics = [{'port-id': p['id']} for p in ports]
         nics = [{'port-id': p['id']} for p in ports]
 
 

+ 3 - 0
coriolis/providers/openstack/schemas/target_environment_schema.json

@@ -13,6 +13,9 @@
         "disk_format": {
         "disk_format": {
           "type": "string"
           "type": "string"
         },
         },
+        "delete_disks_on_vm_termination": {
+            "type": "boolean"
+        },
         "container_format": {
         "container_format": {
           "type": "string"
           "type": "string"
         },
         },