diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js index 2b11847..02e4ed0 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js @@ -184,7 +184,8 @@ // REQUIRED for JS logic vol_create: false, // May be null - vol_device_name: 'vda', + // Not set by default to let nova choose automatically + vol_device_name: 'NOTSET', vol_delete_on_instance_delete: false, vol_size: 1 }; @@ -675,33 +676,66 @@ // Specify null to get Autoselection (not empty string) var deviceName = finalSpec.vol_device_name ? finalSpec.vol_device_name : null; finalSpec.block_device_mapping_v2 = []; - finalSpec.block_device_mapping_v2.push( - { + if (finalSpec.vol_device_name==='NOTSET'){ + finalSpec.block_device_mapping_v2.push({ + 'source_type': bootSourceTypes.IMAGE, + 'destination_type': bootSourceTypes.VOLUME, + 'delete_on_termination': finalSpec.vol_delete_on_instance_delete, + 'uuid': finalSpec.source_id, + 'boot_index': '0', + 'volume_size': finalSpec.vol_size + }); + } + else { + finalSpec.block_device_mapping_v2.push({ + 'device_name': deviceName, + 'source_type': bootSourceTypes.IMAGE, + 'destination_type': bootSourceTypes.VOLUME, + 'delete_on_termination': finalSpec.vol_delete_on_instance_delete, + 'uuid': finalSpec.source_id, + 'boot_index': '0', + 'volume_size': finalSpec.vol_size + }); + } + + finalSpec.source_id = null; + } + } + + function setFinalSpecBootFromVolumeDevice(finalSpec, sourceType) { + finalSpec.block_device_mapping_v2 = []; + if (sourceType==="snap"){ + // source_type. should be one of ['volume', 'image', 'snapshot', 'blank'] + source = 'snapshot'; + } + else { + var source = bootSourceTypes.VOLUME; + } + var deviceName = finalSpec.vol_device_name ? finalSpec.vol_device_name: null; + if (finalSpec.vol_device_name==='NOTSET'){ + finalSpec.block_device_mapping_v2.push({ + 'source_type': source, + 'destination_type': bootSourceTypes.VOLUME, + 'delete_on_termination': finalSpec.vol_delete_on_instance_delete, + 'uuid': finalSpec.source_id, + 'boot_index': '0', + 'volume_size': finalSpec.vol_size + }); + } + else { + finalSpec.block_device_mapping_v2.push({ 'device_name': deviceName, - 'source_type': bootSourceTypes.IMAGE, + 'source_type': source, 'destination_type': bootSourceTypes.VOLUME, 'delete_on_termination': finalSpec.vol_delete_on_instance_delete, 'uuid': finalSpec.source_id, 'boot_index': '0', 'volume_size': finalSpec.vol_size - } - ); - finalSpec.source_id = null; + }); } - } - function setFinalSpecBootFromVolumeDevice(finalSpec, sourceType) { - finalSpec.block_device_mapping = {}; - finalSpec.block_device_mapping[finalSpec.vol_device_name] = [ - finalSpec.source_id, - ':', - sourceType, - '::', - finalSpec.vol_delete_on_instance_delete - ].join(''); - - // Source ID must be empty for API - finalSpec.source_id = ''; + finalSpec.source_id = null; + } // Nova Limits