def _add_driver_fields(self, node, instance, image_meta, flavor, preserve_ephemeral=None): patch = patcher.create(node).get_deploy_patch(instance, image_meta, flavor, preserve_ephemeral) # Associate the node with an instance patch.append({ 'path': '/instance_uuid', 'op': 'add', 'value': instance.uuid }) try: self.ironicclient.call('node.update', node.uuid, patch) except ironic.exc.BadRequest: msg = (_("Failed to add deploy parameters on node %(node)s " "when provisioning the instance %(instance)s") % { 'node': node.uuid, 'instance': instance.uuid }) LOG.error(msg) raise exception.InstanceDeployFailure(msg)
def _cleanup_deploy(self, context, node, instance, network_info, flavor=None): if flavor is None: flavor = instance.flavor patch = patcher.create(node).get_cleanup_patch(instance, network_info, flavor) # Unassociate the node patch.append({'op': 'remove', 'path': '/instance_uuid'}) try: self.ironicclient.call('node.update', node.uuid, patch) except ironic.exc.BadRequest: LOG.error( _LE("Failed to clean up the parameters on node %(node)s " "when unprovisioning the instance %(instance)s"), { 'node': node.uuid, 'instance': instance.uuid }) reason = (_("Fail to clean up node %s parameters") % node.uuid) raise exception.InstanceTerminationFailure(reason=reason) self._unplug_vifs(node, instance, network_info) self._stop_firewall(instance, network_info)
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)
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_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_generic_get_deploy_patch_preserve_ephemeral(self): node = ironic_utils.get_test_node(driver='fake') for preserve in [True, False]: patch = patcher.create(node).get_deploy_patch( self.instance, self.image_meta, self.flavor, preserve_ephemeral=preserve) expected = [{'path': '/instance_info/preserve_ephemeral', 'value': str(preserve), 'op': 'add', }] expected += self._expected_deploy_patch self.assertEqual(sorted(expected), sorted(patch))
def test_generic_get_deploy_patch_capabilities_nested_key(self): node = ironic_utils.get_test_node(driver='fake') self.flavor['extra_specs']['capabilities:key1:key2'] = '<in> bios' expected = [{'path': '/instance_info/capabilities', 'value': '{"key1:key2": "<in> bios"}', '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_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_generic_get_deploy_patch_capabilities_nested_key(self): node = ironic_utils.get_test_node(driver='fake') self.flavor['extra_specs']['capabilities:key1:key2'] = '<in> bios' expected = [{ 'path': '/instance_info/capabilities', 'value': '{"key1:key2": "<in> bios"}', '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(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_generic_get_deploy_patch_preserve_ephemeral(self): node = ironic_utils.get_test_node(driver='fake') for preserve in [True, False]: patch = patcher.create(node).get_deploy_patch( self.instance, self.image_meta, self.flavor, preserve_ephemeral=preserve) expected = [{ 'path': '/instance_info/preserve_ephemeral', 'value': str(preserve), 'op': 'add', }] expected += self._expected_deploy_patch self.assertEqual(sorted(expected), sorted(patch))
def test_generic_get_deploy_patch_ephemeral(self): CONF.set_override('default_ephemeral_format', 'testfmt') node = ironic_utils.get_test_node(driver='fake') instance = fake_instance.fake_instance_obj(self.ctx, ephemeral_gb=10) patch = patcher.create(node).get_deploy_patch( instance, self.image_meta, self.flavor) expected = [{'path': '/instance_info/ephemeral_gb', 'value': str(instance.ephemeral_gb), 'op': 'add'}, {'path': '/instance_info/ephemeral_format', 'value': 'testfmt', 'op': 'add'}] expected += self._expected_deploy_patch self.assertEqual(sorted(expected), sorted(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_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 _add_driver_fields(self, node, instance, image_meta, flavor, preserve_ephemeral=None): patch = patcher.create(node).get_deploy_patch(instance, image_meta, flavor, preserve_ephemeral) # Associate the node with an instance patch.append({'path': '/instance_uuid', 'op': 'add', 'value': instance.uuid}) try: self.ironicclient.call('node.update', node.uuid, patch) except ironic.exc.BadRequest: msg = (_("Failed to add deploy parameters on node %(node)s " "when provisioning the instance %(instance)s") % {'node': node.uuid, 'instance': instance.uuid}) LOG.error(msg) raise exception.InstanceDeployFailure(msg)
def test_generic_get_deploy_patch_ephemeral(self): CONF.set_override('default_ephemeral_format', 'testfmt') node = ironic_utils.get_test_node(driver='fake') instance = fake_instance.fake_instance_obj(self.ctx, ephemeral_gb=10) patch = patcher.create(node).get_deploy_patch(instance, self.image_meta, self.flavor) expected = [{ 'path': '/instance_info/ephemeral_gb', 'value': str(instance.ephemeral_gb), 'op': 'add' }, { 'path': '/instance_info/ephemeral_format', 'value': 'testfmt', 'op': 'add' }] expected += self._expected_deploy_patch self.assertEqual(sorted(expected), sorted(patch))
def _cleanup_deploy(self, context, node, instance, network_info, flavor=None): if flavor is None: flavor = instance.flavor patch = patcher.create(node).get_cleanup_patch(instance, network_info, flavor) # Unassociate the node patch.append({'op': 'remove', 'path': '/instance_uuid'}) try: self.ironicclient.call('node.update', node.uuid, patch) except ironic.exc.BadRequest: LOG.error(_LE("Failed to clean up the parameters on node %(node)s " "when unprovisioning the instance %(instance)s"), {'node': node.uuid, 'instance': instance.uuid}) reason = (_("Fail to clean up node %s parameters") % node.uuid) raise exception.InstanceTerminationFailure(reason=reason) self._unplug_vifs(node, instance, network_info) self._stop_firewall(instance, network_info)
def test_generic_get_cleanup_patch(self): node = ironic_utils.get_test_node(driver='fake') patch = patcher.create(node).get_cleanup_patch(self.instance, None, self.flavor) self.assertEqual(self._expected_cleanup_patch, 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)
def test_generic_get_deploy_patch(self): node = ironic_utils.get_test_node(driver='fake') patch = patcher.create(node).get_deploy_patch( self.instance, self.image_meta, self.flavor) self.assertEqual(sorted(self._expected_deploy_patch), sorted(patch))
def test_generic_get_deploy_patch(self): node = ironic_utils.get_test_node(driver='fake') patch = patcher.create(node).get_deploy_patch(self.instance, self.image_meta, self.flavor) self.assertEqual(sorted(self._expected_deploy_patch), sorted(patch))