From a50163be49922013652047823e5922eda998d68c Mon Sep 17 00:00:00 2001 From: Lucas Alvares Gomes Date: Tue, 24 Mar 2015 17:35:04 +0000 Subject: [PATCH] Ironic: Remove passing Flavor's deploy_{kernel, ramdisk} On old versions of Ironic one would set the deploy kernel and deploy ramdisk in the Flavor as extra_specs and the driver would populate the Ironic Node with that information. But, since a deploy ramdisk is driver dependent (the DIB ramdisk doesn't work with agent_* drivers for example) Ironic moved to a model where these parameters are specified when enrolling the Node (Just like the driver). We kept it working with the Flavor's extra_specs for backward compability reasons for more than one cycle. Now this patch is removing the Flavor's extra_spec way of setting the deploy ramdisk and kernel from the Ironic Nova driver. Change-Id: I0727126770e6c79c898560a34e91a10686696d82 --- nova/tests/unit/virt/ironic/test_patcher.py | 52 +------------ nova/virt/ironic/patcher.py | 83 +-------------------- 2 files changed, 3 insertions(+), 132 deletions(-) diff --git a/nova/tests/unit/virt/ironic/test_patcher.py b/nova/tests/unit/virt/ironic/test_patcher.py index 80e953f119e2..f4b6433fd7fd 100644 --- a/nova/tests/unit/virt/ironic/test_patcher.py +++ b/nova/tests/unit/virt/ironic/test_patcher.py @@ -45,14 +45,9 @@ class IronicDriverFieldsTestCase(test.NoDBTestCase): self._expected_cleanup_patch = [] def test_create_generic(self): - node = ironic_utils.get_test_node(driver='fake') - patcher_obj = patcher.create(node) - self.assertIsInstance(patcher_obj, patcher.GenericDriverFields) - - def test_create_pxe(self): node = ironic_utils.get_test_node(driver='pxe_fake') patcher_obj = patcher.create(node) - self.assertIsInstance(patcher_obj, patcher.PXEDriverFields) + self.assertIsInstance(patcher_obj, patcher.GenericDriverFields) def test_generic_get_deploy_patch(self): node = ironic_utils.get_test_node(driver='fake') @@ -125,48 +120,3 @@ class IronicDriverFieldsTestCase(test.NoDBTestCase): patch = patcher.create(node).get_cleanup_patch(self.instance, None, self.flavor) self.assertEqual(self._expected_cleanup_patch, patch) - - def test_pxe_get_deploy_patch(self): - node = ironic_utils.get_test_node(driver='pxe_fake') - extra_specs = self.flavor['extra_specs'] - expected = [{'path': '/driver_info/pxe_deploy_kernel', - 'value': extra_specs['baremetal:deploy_kernel_id'], - 'op': 'add'}, - {'path': '/driver_info/pxe_deploy_ramdisk', - 'value': extra_specs['baremetal:deploy_ramdisk_id'], - 'op': 'add'}] - expected += self._expected_deploy_patch - patch = patcher.create(node).get_deploy_patch( - self.instance, self.image_meta, self.flavor) - self.assertEqual(sorted(expected), sorted(patch)) - - def test_pxe_get_deploy_patch_no_flavor_kernel_ramdisk_ids(self): - flavor = ironic_utils.get_test_flavor(extra_specs={}) - node = ironic_utils.get_test_node(driver='pxe_fake') - patch = patcher.create(node).get_deploy_patch( - self.instance, self.image_meta, flavor) - # If there's no extra_specs patch should be exactly like a - # generic patch - self.assertEqual(sorted(self._expected_deploy_patch), sorted(patch)) - - def test_pxe_get_cleanup_patch(self): - driver_info = {'pxe_deploy_kernel': 'fake-kernel-id', - 'pxe_deploy_ramdisk': 'fake-ramdisk-id'} - node = ironic_utils.get_test_node(driver='pxe_fake', - driver_info=driver_info) - patch = patcher.create(node).get_cleanup_patch(self.instance, None, - self.flavor) - expected = [{'path': '/driver_info/pxe_deploy_kernel', - 'op': 'remove'}, - {'path': '/driver_info/pxe_deploy_ramdisk', - 'op': 'remove'}] - self.assertEqual(sorted(expected), sorted(patch)) - - def test_pxe_get_cleanup_patch_no_flavor_kernel_ramdisk_ids(self): - self.flavor = ironic_utils.get_test_flavor(extra_specs={}) - node = ironic_utils.get_test_node(driver='pxe_fake') - patch = patcher.create(node).get_cleanup_patch(self.instance, None, - self.flavor) - # If there's no extra_specs patch should be exactly like a - # generic patch - self.assertEqual(self._expected_cleanup_patch, patch) diff --git a/nova/virt/ironic/patcher.py b/nova/virt/ironic/patcher.py index 6bedb1855d1e..11f6dbdbf5a2 100644 --- a/nova/virt/ironic/patcher.py +++ b/nova/virt/ironic/patcher.py @@ -32,13 +32,9 @@ def create(node): """Create an instance of the appropriate DriverFields class. :param node: a node object returned from ironicclient - :returns: GenericDriverFields or a subclass thereof, as appropriate - for the supplied node. + :returns: A GenericDriverFields instance. """ - if 'pxe' in node.driver: - return PXEDriverFields(node) - else: - return GenericDriverFields(node) + return GenericDriverFields(node) class GenericDriverFields(object): @@ -114,78 +110,3 @@ class GenericDriverFields(object): """ return [] - - -class PXEDriverFields(GenericDriverFields): - - def _get_kernel_ramdisk_dict(self, flavor): - """Get the deploy ramdisk and kernel IDs from the flavor. - - :param flavor: the flavor object. - :returns: a dict with the pxe options for the deploy ramdisk and - kernel if the IDs were found in the flavor, otherwise an empty - dict is returned. - - """ - extra_specs = flavor['extra_specs'] - deploy_kernel = extra_specs.get('baremetal:deploy_kernel_id') - deploy_ramdisk = extra_specs.get('baremetal:deploy_ramdisk_id') - deploy_ids = {} - if deploy_kernel and deploy_ramdisk: - deploy_ids['pxe_deploy_kernel'] = deploy_kernel - deploy_ids['pxe_deploy_ramdisk'] = deploy_ramdisk - return deploy_ids - - def get_deploy_patch(self, instance, image_meta, flavor, - preserve_ephemeral=None): - """Build a patch to add the required fields to deploy a node. - - Build a json-patch to add the required fields to deploy a node - using the PXE driver. - - :param instance: the instance object. - :param image_meta: the metadata associated with the instance - image. - :param flavor: the flavor object. - :param preserve_ephemeral: preserve_ephemeral status (bool) to be - specified during rebuild. - :returns: a json-patch with the fields that needs to be updated. - - """ - patch = super(PXEDriverFields, self).get_deploy_patch( - instance, image_meta, flavor, preserve_ephemeral) - - # TODO(lucasagomes): Remove it in Kilo. This is for backwards - # compatibility with Icehouse. If flavor contains both ramdisk - # and kernel ids, use them. - for key, value in self._get_kernel_ramdisk_dict(flavor).items(): - patch.append({'path': '/driver_info/%s' % key, - 'op': 'add', 'value': value}) - - return patch - - def get_cleanup_patch(self, instance, network_info, flavor): - """Build a patch to clean up the fields. - - Build a json-patch to remove the fields used to deploy a node - using the PXE driver. Note that the fields added to the Node's - instance_info don't need to be removed because they are purged - during the Node's tear down. - - :param instance: the instance object. - :param network_info: the instance network information. - :param flavor: the flavor object. - :returns: a json-patch with the fields that needs to be updated. - - """ - patch = super(PXEDriverFields, self).get_cleanup_patch( - instance, network_info, flavor) - - # TODO(lucasagomes): Remove it in Kilo. This is for backwards - # compatibility with Icehouse. If flavor contains a ramdisk and - # kernel id remove it from nodes as part of the tear down process - for key in self._get_kernel_ramdisk_dict(flavor): - if key in self.node.driver_info: - patch.append({'op': 'remove', - 'path': '/driver_info/%s' % key}) - return patch