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