Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
 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)
Пример #4
0
 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))
Пример #5
0
 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)
Пример #6
0
 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))
Пример #7
0
 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))
Пример #8
0
 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))
Пример #9
0
 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))
Пример #10
0
 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))
Пример #11
0
 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))
Пример #12
0
 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))
Пример #13
0
 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))
Пример #14
0
 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))
Пример #15
0
 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))
Пример #16
0
    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)
Пример #17
0
 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))
Пример #18
0
    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)
Пример #19
0
 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)
Пример #20
0
 def test_create_generic(self):
     node = ironic_utils.get_test_node(driver='fake')
     patcher_obj = patcher.create(node)
     self.assertIsInstance(patcher_obj, patcher.GenericDriverFields)
Пример #21
0
 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)
Пример #22
0
 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))
Пример #23
0
 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)
Пример #24
0
 def test_create_generic(self):
     node = ironic_utils.get_test_node(driver='fake')
     patcher_obj = patcher.create(node)
     self.assertIsInstance(patcher_obj, patcher.GenericDriverFields)
Пример #25
0
 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))
Пример #26
0
 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)