
With "extends_documentation_fragment: ['openstack.cloud.openstack']" it is not necessary to list required Python libraries in section 'requirements' of DOCUMENTATION docstring in modules. Ansible will merge requirements from doc fragments and DOCUMENTATION docstring which previously resulted in duplicates such as in server module [0]: * openstacksdk * openstacksdk >= 0.36, < 0.99.0 * python >= 3.6 When removing the 'requirements' section from server module, then Ansible will list openstacksdk once only: * openstacksdk >= 0.36, < 0.99.0 * python >= 3.6 To see what documentation Ansible will produce for server module run: ansible-doc --type module openstack.cloud.server [0] https://docs.ansible.com/ansible/latest/collections/openstack/\ cloud/server_module.html Change-Id: I727ed95ee480bb644b5a533f6a9526973677064c
98 lines
2.4 KiB
Python
98 lines
2.4 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# 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 = r'''
|
|
---
|
|
module: config
|
|
short_description: Get OpenStack Client config
|
|
author: OpenStack Ansible SIG
|
|
description:
|
|
- 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.
|
|
- When I(clouds) is not defined, then data
|
|
is returned for all configured clouds.
|
|
default: []
|
|
type: list
|
|
elements: str
|
|
requirements:
|
|
- "python >= 3.6"
|
|
- "openstacksdk >= 0.103.0"
|
|
'''
|
|
|
|
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
|
|
|
|
- name: Print clouds which do not support security groups
|
|
loop: "{{ config.clouds }}"
|
|
when: item.config.secgroup_source|default(None) != None
|
|
debug:
|
|
var: item
|
|
|
|
- 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
|
|
HAS_OPENSTACKSDK = True
|
|
except ImportError:
|
|
HAS_OPENSTACKSDK = False
|
|
|
|
|
|
def main():
|
|
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')
|
|
|
|
try:
|
|
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))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|