Merge "Run instance root device determination fix."

This commit is contained in:
Jenkins
2014-07-11 18:21:34 +00:00
committed by Gerrit Code Review
4 changed files with 23 additions and 6 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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}