def _setup_block_device_mapping(self, context, instance, bdms): """setup volumes for block device mapping.""" block_device_mapping = [] swap = None ephemerals = [] for bdm in bdms: LOG.debug(_('Setting up bdm %s'), bdm, instance=instance) if bdm['no_device']: continue if bdm['virtual_name']: virtual_name = bdm['virtual_name'] device_name = bdm['device_name'] assert block_device.is_swap_or_ephemeral(virtual_name) if virtual_name == 'swap': swap = {'device_name': device_name, 'swap_size': bdm['volume_size']} elif block_device.is_ephemeral(virtual_name): eph = {'num': block_device.ephemeral_num(virtual_name), 'virtual_name': virtual_name, 'device_name': device_name, 'size': bdm['volume_size']} ephemerals.append(eph) continue if ((bdm['snapshot_id'] is not None) and (bdm['volume_id'] is None)): # TODO(yamahata): default name and description snapshot = self.volume_api.get_snapshot(context, bdm['snapshot_id']) vol = self.volume_api.create(context, bdm['volume_size'], '', '', snapshot) self._await_block_device_map_created(context, vol['id']) self.conductor_api.block_device_mapping_update( context, bdm['id'], {'volume_id': vol['id']}) bdm['volume_id'] = vol['id'] block_device_mapping.append(bdm) block_device_info = { 'root_device_name': instance['root_device_name'], 'swap': swap, 'ephemerals': ephemerals, 'block_device_mapping': block_device_mapping } return block_device_info
def _volume_size(instance_type, virtual_name): size = 0 if virtual_name == 'swap': size = instance_type.get('swap', 0) elif block_device.is_ephemeral(virtual_name): num = block_device.ephemeral_num(virtual_name) # TODO(yamahata): ephemeralN where N > 0 # Only ephemeral0 is allowed for now because InstanceTypes # table only allows single local disk, ephemeral_gb. # In order to enhance it, we need to add a new columns to # instance_types table. if num > 0: return 0 size = instance_type.get('ephemeral_gb') return size
def test_ephemeral(self): self.assertFalse(block_device.is_ephemeral('ephemeral')) self.assertTrue(block_device.is_ephemeral('ephemeral0')) self.assertTrue(block_device.is_ephemeral('ephemeral1')) self.assertTrue(block_device.is_ephemeral('ephemeral11')) self.assertFalse(block_device.is_ephemeral('root')) self.assertFalse(block_device.is_ephemeral('swap')) self.assertFalse(block_device.is_ephemeral('/dev/sda1')) self.assertEqual(block_device.ephemeral_num('ephemeral0'), 0) self.assertEqual(block_device.ephemeral_num('ephemeral1'), 1) self.assertEqual(block_device.ephemeral_num('ephemeral11'), 11) self.assertFalse(block_device.is_swap_or_ephemeral('ephemeral')) self.assertTrue(block_device.is_swap_or_ephemeral('ephemeral0')) self.assertTrue(block_device.is_swap_or_ephemeral('ephemeral1')) self.assertTrue(block_device.is_swap_or_ephemeral('swap')) self.assertFalse(block_device.is_swap_or_ephemeral('root')) self.assertFalse(block_device.is_swap_or_ephemeral('/dev/sda1'))
def test_ephemeral(self): self.assertFalse(block_device.is_ephemeral("ephemeral")) self.assertTrue(block_device.is_ephemeral("ephemeral0")) self.assertTrue(block_device.is_ephemeral("ephemeral1")) self.assertTrue(block_device.is_ephemeral("ephemeral11")) self.assertFalse(block_device.is_ephemeral("root")) self.assertFalse(block_device.is_ephemeral("swap")) self.assertFalse(block_device.is_ephemeral("/dev/sda1")) self.assertEqual(block_device.ephemeral_num("ephemeral0"), 0) self.assertEqual(block_device.ephemeral_num("ephemeral1"), 1) self.assertEqual(block_device.ephemeral_num("ephemeral11"), 11) self.assertFalse(block_device.is_swap_or_ephemeral("ephemeral")) self.assertTrue(block_device.is_swap_or_ephemeral("ephemeral0")) self.assertTrue(block_device.is_swap_or_ephemeral("ephemeral1")) self.assertTrue(block_device.is_swap_or_ephemeral("swap")) self.assertFalse(block_device.is_swap_or_ephemeral("root")) self.assertFalse(block_device.is_swap_or_ephemeral("/dev/sda1"))