Merge "Pass target_raid_config field to ironic variable"

This commit is contained in:
Zuul 2019-08-23 13:28:52 +00:00 committed by Gerrit Code Review
commit 46c142fe08
3 changed files with 25 additions and 3 deletions
doc/source/admin/drivers
ironic/drivers/modules/ansible
releasenotes/notes

@ -362,6 +362,7 @@ Those values are then accessible in your plays as well
preserve_ephemeral: "<bool>" preserve_ephemeral: "<bool>"
ephemeral_format: "<FILESYSTEM TO CREATE ON EPHEMERAL PARTITION>" ephemeral_format: "<FILESYSTEM TO CREATE ON EPHEMERAL PARTITION>"
partitions: "<LIST OF PARTITIONS IN FORMAT EXPECTED BY PARTED MODULE>" partitions: "<LIST OF PARTITIONS IN FORMAT EXPECTED BY PARTED MODULE>"
raid_config: "<COPY OF NODE's TARGET_RAID_CONFIG FIELD>"
``ironic.nodes`` ``ironic.nodes``
@ -434,6 +435,10 @@ Those values are then accessible in your plays as well
Optional. Taken from the ``instance_info``, it specifies if the ephemeral Optional. Taken from the ``instance_info``, it specifies if the ephemeral
partition must be preserved or rebuilt. Defaults to ``no``. partition must be preserved or rebuilt. Defaults to ``no``.
``ironic.raid_config``
Taken from the ``target_raid_config`` if not empty, it specifies the RAID
configuration to apply.
As usual for Ansible playbooks, you also have access to standard As usual for Ansible playbooks, you also have access to standard
Ansible facts discovered by ``setup`` module. Ansible facts discovered by ``setup`` module.

@ -428,8 +428,10 @@ class AnsibleDeploy(agent_base.HeartbeatMixin, base.DeployInterface):
{'node': node.uuid, 'ip': node_address}) {'node': node.uuid, 'ip': node_address})
variables = _prepare_variables(task) variables = _prepare_variables(task)
if not node.driver_internal_info.get('is_whole_disk_image'): if not node.driver_internal_info.get('is_whole_disk_image'):
variables.update(_parse_partitioning_info(task.node)) variables.update(_parse_partitioning_info(node))
playbook, user, key = _parse_ansible_driver_info(task.node) if node.target_raid_config:
variables.update({'raid_config': node.target_raid_config})
playbook, user, key = _parse_ansible_driver_info(node)
node_list = [(node.uuid, node_address, user, node.extra)] node_list = [(node.uuid, node_address, user, node.extra)]
extra_vars = _prepare_extra_vars(node_list, variables=variables) extra_vars = _prepare_extra_vars(node_list, variables=variables)
@ -535,11 +537,18 @@ class AnsibleDeploy(agent_base.HeartbeatMixin, base.DeployInterface):
node_address = _get_node_ip(task) node_address = _get_node_ip(task)
node_list = [(node.uuid, node_address, user, node.extra)] node_list = [(node.uuid, node_address, user, node.extra)]
extra_vars = _prepare_extra_vars(node_list)
if node.target_raid_config:
variables = {'raid_config': node.target_raid_config}
extra_vars = _prepare_extra_vars(node_list, variables=variables)
else:
extra_vars = _prepare_extra_vars(node_list)
LOG.debug('Starting cleaning step %(step)s on node %(node)s', LOG.debug('Starting cleaning step %(step)s on node %(node)s',
{'node': node.uuid, 'step': stepname}) {'node': node.uuid, 'step': stepname})
step_tags = step['args'].get('tags', []) step_tags = step['args'].get('tags', [])
LOG.debug("Detected tags from cleaning step: %(tags)s",
{'tags': step_tags})
_run_playbook(node, playbook, extra_vars, key, tags=step_tags) _run_playbook(node, playbook, extra_vars, key, tags=step_tags)
LOG.info('Ansible completed cleaning step %(step)s ' LOG.info('Ansible completed cleaning step %(step)s '
'on node %(node)s.', 'on node %(node)s.',

@ -0,0 +1,8 @@
---
features:
- |
Add ``target_raid_config`` data to ``ironic`` variable under
``raid_config`` top-level key which will expose the RAID configuration
to the ``ansible`` driver.
See `story 2006417
<https://storyboard.openstack.org/#!/story/2006417>`__ for details.