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)
|
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):
|
def instance_block_mapping(instance, bdms):
|
||||||
root_device_name = instance['root_device_name']
|
root_device_name = instance['root_device_name']
|
||||||
# NOTE(clayg): remove this when xenapi is setting default_root_device
|
# NOTE(clayg): remove this when xenapi is setting default_root_device
|
||||||
|
|||||||
@@ -851,7 +851,9 @@ class API(base.Base):
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
for bdm in block_device_mapping:
|
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
|
continue
|
||||||
elif not legacy_bdm and bdm.get('boot_index') != 0:
|
elif not legacy_bdm and bdm.get('boot_index') != 0:
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
"""Compute-related Utilities and helpers."""
|
"""Compute-related Utilities and helpers."""
|
||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
import re
|
|
||||||
import string
|
import string
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
@@ -163,10 +162,7 @@ def get_next_device_name(instance, device_name_list,
|
|||||||
|
|
||||||
used_letters = set()
|
used_letters = set()
|
||||||
for device_path in device_name_list:
|
for device_path in device_name_list:
|
||||||
letter = block_device.strip_prefix(device_path)
|
letter = block_device.get_device_letter(device_path)
|
||||||
# NOTE(vish): delete numbers in case we have something like
|
|
||||||
# /dev/sda1
|
|
||||||
letter = re.sub("\d+", "", letter)
|
|
||||||
used_letters.add(letter)
|
used_letters.add(letter)
|
||||||
|
|
||||||
# NOTE(vish): remove this when xenapi is properly setting
|
# 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('xvda'), 'a')
|
||||||
self.assertEqual(block_device.strip_prefix('vda'), '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):
|
def test_volume_in_mapping(self):
|
||||||
swap = {'device_name': '/dev/sdb',
|
swap = {'device_name': '/dev/sdb',
|
||||||
'swap_size': 1}
|
'swap_size': 1}
|
||||||
|
|||||||
Reference in New Issue
Block a user