Refactored config module

Change-Id: I7ba626e2ef2a108bf79cacd8d6ee0735b8a0bdeb
This commit is contained in:
Jakob Meng 2022-11-03 12:47:20 +01:00
parent a8f6dbd904
commit d07778c24a
5 changed files with 61 additions and 38 deletions

View File

@ -66,8 +66,8 @@
address_scope
auth
catalog_service
client_config
compute_flavor
config
dns
dns_zone_info
endpoint

View File

@ -1,7 +0,0 @@
---
- name: List all profiles
openstack.cloud.config:
register: list
# WARNING: This will output sensitive authentication information!!!!
- debug: var=list

View File

@ -0,0 +1,10 @@
---
- name: List all cloud profiles
openstack.cloud.config:
register: config
# WARNING: This will output sensitive authentication information!!!!
- name: Assert config module
assert:
that:
- cloud in (config.clouds | map(attribute='name') | list)

View File

@ -7,8 +7,8 @@
- { role: address_scope, tags: address_scope }
- { role: auth, tags: auth }
- { role: catalog_service, tags: catalog_service }
- { role: client_config, tags: client_config }
- { role: compute_flavor, tags: compute_flavor }
- { role: config, tags: config }
- { role: dns_zone_info, tags: dns_zone_info }
- role: object_container
tags: object_container

View File

@ -4,43 +4,65 @@
# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
DOCUMENTATION = '''
DOCUMENTATION = r'''
---
module: config
short_description: Get OpenStack Client config
author: OpenStack Ansible SIG
description:
- Get I(openstack) client config data from clouds.yaml or environment
notes:
- Facts are placed in the C(openstack.clouds) variable.
- Get OpenStack cloud credentials and configuration,
e.g. from clouds.yaml and environment variables.
options:
clouds:
description:
- List of clouds to limit the return list to. No value means return
information on all configured clouds
required: false
- List of clouds to limit the return list to.
- When I(clouds) is not defined, then data
is returned for all configured clouds.
default: []
type: list
elements: str
requirements:
- "python >= 3.6"
- "openstacksdk"
author: OpenStack Ansible SIG
'''
EXAMPLES = '''
- name: Get list of clouds that do not support security groups
RETURN = r'''
clouds:
description: List of OpenStack cloud configurations.
returned: always
type: list
elements: dict
contains:
name:
description: Name of the cloud.
type: str
config:
description: A dict of configuration values for the CloudRegion and
its services. The key for a ${config_option} for a
specific ${service} should be ${service}_${config_option}.
type: dict
'''
EXAMPLES = r'''
- name: Read configuration of all defined clouds
openstack.cloud.config:
register: config
- debug:
var: "{{ item }}"
with_items: "{{ openstack.clouds | rejectattr('secgroup_source', 'none') | list }}"
- name: Print clouds which do not support security groups
loop: "{{ config.clouds }}"
when: item.config.secgroup_source|default(None) != None
debug:
var: item
- name: Get the information back just about the mordred cloud
- name: Read configuration of a two specific clouds
openstack.cloud.config:
clouds:
- devstack
- mordred
'''
from ansible.module_utils.basic import AnsibleModule
try:
import openstack.config
from openstack import exceptions
@ -48,28 +70,26 @@ try:
except ImportError:
HAS_OPENSTACKSDK = False
from ansible.module_utils.basic import AnsibleModule
def main():
module = AnsibleModule(argument_spec=dict(
clouds=dict(type='list', default=[], elements='str'),
))
module = AnsibleModule(
argument_spec=dict(
clouds=dict(type='list', default=[], elements='str'),
)
)
if not HAS_OPENSTACKSDK:
module.fail_json(msg='openstacksdk is required for this module')
p = module.params
try:
config = openstack.config.OpenStackConfig()
clouds = []
for cloud in config.get_all_clouds():
if not p['clouds'] or cloud.name in p['clouds']:
cloud.config['name'] = cloud.name
clouds.append(cloud.config)
module.exit_json(ansible_facts=dict(openstack=dict(clouds=clouds)))
except exceptions.ConfigException as e:
clouds = [dict(name=cloud.name, config=cloud.config)
for cloud in openstack.config.OpenStackConfig().get_all()
if not module.params['clouds']
or cloud.name in module.params['clouds']]
module.exit_json(changed=False, clouds=clouds)
except exceptions.SDKException as e:
module.fail_json(msg=str(e))