Not implicitly set vol_device_name to vda

Using a scsi decorated image with:
hw_disk_bus='scsi'
hw_scsi_model='virtio-scsi'

This solve the case where an instance is
launched with 'image' selected as boot
source with a new volume. This will result
in /dev/vda instead of /dev/sda as it
should.

Not specifying device name in
setFinalSpecBootImageToVolume() leaves the
decision to nova to determine it.

Example:
-------
VM boot volume without scsi meta data decoration:
Attached To
0a0cd660-7ce3-4033-9983-2e1099edc5f0 on /dev/vda

VM boot volume with scsi meta data decoration:
Attached To
91f50dbc-8bdf-4293-84ea-fc5df27b5ee4 on /dev/sda
--------

Note: This commit doesn't address cases for
where instances are launched using existing
volume and snapshot, this will involve more
work to migrate the code from BDMv1 to BDMv2.

Closes-Bug #1560965

Change-Id: I9d114c2c2e6736a8f1a8092afa568f930b656f09
(cherry picked from commit 79a4c3bd1a)
This commit is contained in:
Eric Desrochers 2019-03-20 14:56:02 -04:00
parent 30c65437a2
commit 0df60f4dba
2 changed files with 0 additions and 19 deletions

View File

@ -735,11 +735,9 @@
function setFinalSpecBootImageToVolume(finalSpec) { function setFinalSpecBootImageToVolume(finalSpec) {
if (finalSpec.vol_create) { if (finalSpec.vol_create) {
// Specify null to get Autoselection (not empty string) // 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 = [];
finalSpec.block_device_mapping_v2.push( finalSpec.block_device_mapping_v2.push(
{ {
'device_name': deviceName,
'source_type': bootSourceTypes.IMAGE, 'source_type': bootSourceTypes.IMAGE,
'destination_type': bootSourceTypes.VOLUME, 'destination_type': bootSourceTypes.VOLUME,
'delete_on_termination': finalSpec.vol_delete_on_instance_delete, 'delete_on_termination': finalSpec.vol_delete_on_instance_delete,

View File

@ -895,7 +895,6 @@
it('sets volume options appropriately', function() { it('sets volume options appropriately', function() {
expect(model.newInstanceSpec.vol_create).toBe(false); expect(model.newInstanceSpec.vol_create).toBe(false);
expect(model.newInstanceSpec.vol_device_name).toBe('vda');
expect(model.newInstanceSpec.vol_delete_on_instance_delete).toBe(false); expect(model.newInstanceSpec.vol_delete_on_instance_delete).toBe(false);
expect(model.newInstanceSpec.vol_size).toBe(1); expect(model.newInstanceSpec.vol_size).toBe(1);
}); });
@ -918,7 +917,6 @@
model.newInstanceSpec.scheduler_hints = {}; model.newInstanceSpec.scheduler_hints = {};
model.newInstanceSpec.vol_create = true; model.newInstanceSpec.vol_create = true;
model.newInstanceSpec.vol_delete_on_instance_delete = true; model.newInstanceSpec.vol_delete_on_instance_delete = true;
model.newInstanceSpec.vol_device_name = "volTestName";
model.newInstanceSpec.vol_size = 10; model.newInstanceSpec.vol_size = 10;
model.newInstanceSpec.server_groups = []; model.newInstanceSpec.server_groups = [];
@ -954,7 +952,6 @@
it('should set final spec in format required for Block Device Mapping v2', function() { it('should set final spec in format required for Block Device Mapping v2', function() {
var finalSpec = model.createInstance(); var finalSpec = model.createInstance();
var expectedBlockDevice = [{ var expectedBlockDevice = [{
device_name: 'volTestName',
source_type: 'image', source_type: 'image',
destination_type: 'volume', destination_type: 'volume',
delete_on_termination: true, delete_on_termination: true,
@ -986,8 +983,6 @@
model.newInstanceSpec.vol_delete_on_instance_delete = 'yep'; model.newInstanceSpec.vol_delete_on_instance_delete = 'yep';
var finalSpec = model.createInstance(); var finalSpec = model.createInstance();
expect(finalSpec.block_device_mapping.volTestName)
.toBe('imAnID:vol::yep');
expect(finalSpec.source_id).toBe(''); expect(finalSpec.source_id).toBe('');
}); });
@ -997,7 +992,6 @@
var finalSpec = model.createInstance(); var finalSpec = model.createInstance();
var expectedBlockDevice = [{ var expectedBlockDevice = [{
device_name: 'volTestName',
source_type: 'image', source_type: 'image',
destination_type: 'volume', destination_type: 'volume',
delete_on_termination: true, delete_on_termination: true,
@ -1015,8 +1009,6 @@
model.newInstanceSpec.vol_delete_on_instance_delete = 'yep'; model.newInstanceSpec.vol_delete_on_instance_delete = 'yep';
var finalSpec = model.createInstance(); var finalSpec = model.createInstance();
expect(finalSpec.block_device_mapping.volTestName)
.toBe('imAnID:snap::yep');
expect(finalSpec.source_id).toBe(''); expect(finalSpec.source_id).toBe('');
}); });
@ -1073,15 +1065,6 @@
expect(finalSpec.nics).toEqual(finalNetworks); expect(finalSpec.nics).toEqual(finalNetworks);
}); });
it('provides null for device_name when falsy', function() {
model.newInstanceSpec.source_type.type = 'image';
model.newInstanceSpec.vol_device_name = false;
model.newInstanceSpec.vol_create = true;
var finalSpec = model.createInstance();
expect(finalSpec.block_device_mapping_v2[0].device_name).toBeNull();
});
it('should not have meta property if no metadata specified', function() { it('should not have meta property if no metadata specified', function() {
metadata = {}; metadata = {};