Merge "Run instance root device determination fix."
This commit is contained in:
@@ -453,6 +453,16 @@ def strip_prefix(device_name):
|
||||
return _pref.sub('', device_name)
|
||||
|
||||
|
||||
_nums = re.compile('\d+')
|
||||
|
||||
|
||||
def get_device_letter(device_name):
|
||||
letter = strip_prefix(device_name)
|
||||
# NOTE(vish): delete numbers in case we have something like
|
||||
# /dev/sda1
|
||||
return _nums.sub('', letter)
|
||||
|
||||
|
||||
def instance_block_mapping(instance, bdms):
|
||||
root_device_name = instance['root_device_name']
|
||||
# NOTE(clayg): remove this when xenapi is setting default_root_device
|
||||
|
||||
@@ -851,7 +851,9 @@ class API(base.Base):
|
||||
return {}
|
||||
|
||||
for bdm in block_device_mapping:
|
||||
if legacy_bdm and bdm.get('device_name') != 'vda':
|
||||
if (legacy_bdm and
|
||||
block_device.get_device_letter(
|
||||
bdm.get('device_name', '')) != 'a'):
|
||||
continue
|
||||
elif not legacy_bdm and bdm.get('boot_index') != 0:
|
||||
continue
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
"""Compute-related Utilities and helpers."""
|
||||
|
||||
import itertools
|
||||
import re
|
||||
import string
|
||||
import traceback
|
||||
|
||||
@@ -163,10 +162,7 @@ def get_next_device_name(instance, device_name_list,
|
||||
|
||||
used_letters = set()
|
||||
for device_path in device_name_list:
|
||||
letter = block_device.strip_prefix(device_path)
|
||||
# NOTE(vish): delete numbers in case we have something like
|
||||
# /dev/sda1
|
||||
letter = re.sub("\d+", "", letter)
|
||||
letter = block_device.get_device_letter(device_path)
|
||||
used_letters.add(letter)
|
||||
|
||||
# NOTE(vish): remove this when xenapi is properly setting
|
||||
|
||||
@@ -134,6 +134,15 @@ class BlockDeviceTestCase(test.NoDBTestCase):
|
||||
self.assertEqual(block_device.strip_prefix('xvda'), 'a')
|
||||
self.assertEqual(block_device.strip_prefix('vda'), 'a')
|
||||
|
||||
def test_get_device_letter(self):
|
||||
self.assertEqual(block_device.get_device_letter(''), '')
|
||||
self.assertEqual(block_device.get_device_letter('/dev/sda1'), 'a')
|
||||
self.assertEqual(block_device.get_device_letter('/dev/xvdb'), 'b')
|
||||
self.assertEqual(block_device.get_device_letter('/dev/d'), 'd')
|
||||
self.assertEqual(block_device.get_device_letter('a'), 'a')
|
||||
self.assertEqual(block_device.get_device_letter('sdb2'), 'b')
|
||||
self.assertEqual(block_device.get_device_letter('vdc'), 'c')
|
||||
|
||||
def test_volume_in_mapping(self):
|
||||
swap = {'device_name': '/dev/sdb',
|
||||
'swap_size': 1}
|
||||
|
||||
Reference in New Issue
Block a user