os_ironic_node_info: fix TLS and potentially other issues

The current implementation does not respect ca_cert and potentially
other parameters that are commonly used in OpenStack modules.
This change makes it use the existing utilities from the collection.

Change-Id: I865142d1679bbc9459a460e0d7351e5c6158e5b8
This commit is contained in:
Dmitry Tantsur 2021-08-25 15:51:25 +02:00
parent ffaf7a3baa
commit 6cf3c7beb6
3 changed files with 19 additions and 36 deletions

View File

@ -1,6 +1,4 @@
#!/usr/bin/env python
# coding: utf-8 -*-
# (c) 2015, Hewlett-Packard Development Company, L.P.
#
# This module is free software: you can redistribute it and/or modify
@ -16,6 +14,14 @@
# You should have received a copy of the GNU General Public License
# along with this software. If not, see <http://www.gnu.org/licenses/>.
from ansible_collections.openstack.cloud.plugins.module_utils.ironic import (
IronicModule,
ironic_argument_spec,
)
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import ( # noqa: E501
openstack_module_kwargs,
openstack_cloud_from_module
)
try:
import openstack
HAS_SDK = True
@ -76,16 +82,14 @@ def _choose_id_value(module):
def main():
argument_spec = openstack_full_argument_spec( # noqa: F405
auth_type=dict(required=False),
argument_spec = ironic_argument_spec( # noqa: F405
uuid=dict(required=False),
name=dict(required=False),
mac=dict(required=False),
ironic_url=dict(required=False),
skip_items=dict(required=False, type='list'),
)
module_kwargs = openstack_module_kwargs() # noqa: F405
module = AnsibleModule(argument_spec, **module_kwargs) # noqa: F405
module = IronicModule(argument_spec, **module_kwargs)
compat = module._name == 'os_ironic_facts'
if compat:
module.deprecate('Using os_ironic_node_info via os_ironic_facts is '
@ -94,33 +98,8 @@ def main():
if not HAS_SDK:
module.fail_json(msg='openstacksdk is required for this module')
if (module.params['ironic_url'] and
module.params['auth_type'] in [None, 'None', 'none']):
module.params['auth'] = dict(
endpoint=module.params['ironic_url']
)
# NOTE(dtantsur): the following part is copied more or less verbatim from
# ansible-collections-openstack.
cloud_config = module.params.pop('cloud', None)
try:
if isinstance(cloud_config, dict):
fail_message = (
"A cloud config dict was provided to the cloud parameter"
" but also a value was provided for {param}. If a cloud"
" config dict is provided, {param} should be"
" excluded.")
for param in ('auth', 'auth_type'):
if module.params[param] is not None:
module.fail_json(msg=fail_message.format(param=param))
cloud = openstack.connect(**cloud_config)
else:
cloud = openstack.connect(
cloud=cloud_config,
auth_type=module.params['auth_type'],
auth=module.params['auth'],
)
sdk, cloud = openstack_cloud_from_module(module)
if module.params['name'] or module.params['uuid']:
server = cloud.get_machine(_choose_id_value(module))
elif module.params['mac']:
@ -172,7 +151,4 @@ def main():
module.fail_json(msg=e.message)
# this is magic, see lib/ansible/module_common.py
from ansible.module_utils.basic import * # noqa: E402
from ansible.module_utils.openstack import * # noqa: E402
main()

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Fixes support for TLS ``ca_cert`` and other current authentication
parameters in the ``os_ironic_node_info`` module. The implementation uses
utilities from the OpenStack Ansible collection.

View File

@ -67,7 +67,8 @@ commands = oslo_debug_helper -t bifrost/tests {posargs}
[flake8]
show-source = True
ignore = F403,H102,H303,W504
# [H301] one import per line (commonly violated in ansible modules)
ignore = F403,H102,H301,H303,W504
# [H106] Don't put vim configuration in source files.
enable-extensions=H106
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,os_ironic.py,os_ironic_node.py,os_ironic_inspect.py,os_keystone_service.py