Build configdrives on ironic side
Change-Id: Ia058a410d1b1277497fbb645fc102c8b0a7aba4f
This commit is contained in:
parent
1afa4ac4ed
commit
0161effc3a
@ -5,7 +5,7 @@ fixtures==3.0.0
|
||||
flake8-import-order==0.13
|
||||
hacking==1.0.0
|
||||
mock==2.0
|
||||
openstacksdk==0.25.0
|
||||
openstacksdk==0.28.0
|
||||
pbr==2.0.0
|
||||
Pygments==2.2.0
|
||||
requests==2.18.4
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
import json
|
||||
import logging
|
||||
import warnings
|
||||
|
||||
from openstack.baremetal import configdrive
|
||||
|
||||
@ -60,11 +61,16 @@ class InstanceConfig(object):
|
||||
kwargs.setdefault('ssh_authorized_keys', self.ssh_keys)
|
||||
self.users.append(kwargs)
|
||||
|
||||
def build_configdrive(self, node):
|
||||
"""Make the config drive.
|
||||
def generate(self, node):
|
||||
"""Generate the config drive information.
|
||||
|
||||
:param node: `Node` object.
|
||||
:return: configdrive contents as a base64-encoded string.
|
||||
:return: configdrive contents as a dictionary with keys:
|
||||
|
||||
``meta_data``
|
||||
meta data dictionary
|
||||
``user_data``
|
||||
user data as a string
|
||||
"""
|
||||
hostname = node.instance_info.get(_utils.HOSTNAME_FIELD)
|
||||
|
||||
@ -83,16 +89,36 @@ class InstanceConfig(object):
|
||||
'files': [],
|
||||
'meta': {}}
|
||||
user_data = {}
|
||||
user_data_bin = None
|
||||
user_data_str = None
|
||||
|
||||
if self.users:
|
||||
user_data['users'] = self.users
|
||||
|
||||
if user_data:
|
||||
user_data_bin = ("#cloud-config\n" + json.dumps(user_data)).encode(
|
||||
'utf-8')
|
||||
user_data_str = "#cloud-config\n" + json.dumps(user_data)
|
||||
|
||||
return {'meta_data': metadata,
|
||||
'user_data': user_data_str}
|
||||
|
||||
def build_configdrive(self, node):
|
||||
"""Make the config drive ISO.
|
||||
|
||||
Deprecated, use :py:meth:`generate` with openstacksdk's
|
||||
``openstack.baremetal.configdrive.build`` instead.
|
||||
|
||||
:param node: `Node` object.
|
||||
:return: configdrive contents as a base64-encoded string.
|
||||
"""
|
||||
warnings.warn("build_configdrive is deprecated, use generate with "
|
||||
"openstacksdk's openstack.baremetal.configdrive.build "
|
||||
"instead", DeprecationWarning)
|
||||
cd = self.generate(node)
|
||||
metadata = cd.pop('meta_data')
|
||||
user_data = cd.pop('user_data')
|
||||
if user_data:
|
||||
user_data = user_data.encode('utf-8')
|
||||
|
||||
LOG.debug('Generating configdrive tree for node %(node)s with '
|
||||
'metadata %(meta)s', {'node': _utils.log_res(node),
|
||||
'meta': metadata})
|
||||
return configdrive.build(metadata, user_data_bin)
|
||||
return configdrive.build(metadata, user_data=user_data, **cd)
|
||||
|
@ -305,10 +305,9 @@ class Provisioner(_utils.GetNodeMixin):
|
||||
|
||||
LOG.debug('Generating a configdrive for node %s',
|
||||
_utils.log_res(node))
|
||||
cd = config.build_configdrive(node)
|
||||
LOG.debug('Starting provisioning of node %s', _utils.log_res(node))
|
||||
self.connection.baremetal.set_node_provision_state(
|
||||
node, 'active', config_drive=cd)
|
||||
node, 'active', config_drive=config.generate(node))
|
||||
except Exception:
|
||||
exc_info = sys.exc_info()
|
||||
|
||||
|
@ -46,7 +46,7 @@ class TestInstanceConfig(testtools.TestCase):
|
||||
result = config.build_configdrive(self.node)
|
||||
mb.assert_called_once_with(expected_m, mock.ANY)
|
||||
self.assertIs(result, mb.return_value)
|
||||
user_data = mb.call_args[0][1]
|
||||
user_data = mb.call_args[1].get('user_data')
|
||||
|
||||
if expected_userdata:
|
||||
self.assertIsNotNone(user_data)
|
||||
|
@ -308,7 +308,7 @@ class TestProvisionNode(Base):
|
||||
}
|
||||
self.configdrive_mock = self.useFixture(
|
||||
fixtures.MockPatchObject(_config.InstanceConfig,
|
||||
'build_configdrive', autospec=True)
|
||||
'generate', autospec=True)
|
||||
).mock
|
||||
|
||||
def test_ok(self):
|
||||
@ -379,7 +379,7 @@ class TestProvisionNode(Base):
|
||||
self.assertEqual(inst.uuid, self.node.id)
|
||||
self.assertEqual(inst.node, self.node)
|
||||
|
||||
config.build_configdrive.assert_called_once_with(self.node)
|
||||
config.generate.assert_called_once_with(self.node)
|
||||
self.api.network.create_port.assert_called_once_with(
|
||||
network_id=self.api.network.find_network.return_value.id)
|
||||
self.api.baremetal.attach_vif_to_node.assert_called_once_with(
|
||||
|
9
releasenotes/notes/api-stein-8e5d165aa6d115cf.yaml
Normal file
9
releasenotes/notes/api-stein-8e5d165aa6d115cf.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
upgrade:
|
||||
- |
|
||||
Bare Metal API version 1.56 (Stein) or newer is now required. Use the 0.11
|
||||
release series for older versions.
|
||||
deprecations:
|
||||
- |
|
||||
``InstanceConfig.build_configdrive`` is deprecated, use ``generate`` with
|
||||
openstacksdk's ``openstack.baremetal.configdrive.build`` instead.
|
@ -2,7 +2,7 @@
|
||||
# of appearance. Changing the order has an impact on the overall integration
|
||||
# process, which may cause wedges in the gate later.
|
||||
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
||||
openstacksdk>=0.25.0 # Apache-2.0
|
||||
openstacksdk>=0.28.0 # Apache-2.0
|
||||
requests>=2.18.4 # Apache-2.0
|
||||
six>=1.10.0 # MIT
|
||||
enum34>=1.0.4;python_version=='2.7' or python_version=='2.6' or python_version=='3.3' # BSD
|
||||
|
Loading…
x
Reference in New Issue
Block a user