ansible-collections-openstack/plugins/modules/subnets_info.py
Jakob Meng 1b38b7c500 Properly documented openstacksdk version requirements
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
2023-01-16 13:51:01 +01:00

202 lines
6.0 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 = '''
---
module: subnets_info
short_description: Retrieve information about one or more OpenStack subnets.
author: OpenStack Ansible SIG
description:
- Retrieve information about one or more subnets from OpenStack.
options:
name:
description:
- Name or ID of the subnet.
- Alias 'subnet' added in version 2.8.
required: false
aliases: ['subnet']
type: str
filters:
description:
- A dictionary of meta data to use for further filtering. Elements of
this dictionary may be additional dictionaries.
required: false
type: dict
extends_documentation_fragment:
- openstack.cloud.openstack
'''
EXAMPLES = '''
- name: Gather information about previously created subnets
openstack.cloud.subnets_info:
auth:
auth_url: https://identity.example.com
username: user
password: password
project_name: someproject
register: result
- name: Show openstack subnets
debug:
msg: "{{ result.subnets }}"
- name: Gather information about a previously created subnet by name
openstack.cloud.subnets_info:
auth:
auth_url: https://identity.example.com
username: user
password: password
project_name: someproject
name: subnet1
register: result
- name: Show openstack subnets
debug:
msg: "{{ result.subnets }}"
- name: Gather information about a previously created subnet with filter
# Note: name and filters parameters are not mutually exclusive
openstack.cloud.subnets_info:
auth:
auth_url: https://identity.example.com
username: user
password: password
project_name: someproject
filters:
project_id: 55e2ce24b2a245b09f181bf025724cbe
register: result
- name: Show openstack subnets
debug:
msg: "{{ result.subnets }}"
'''
RETURN = '''
subnets:
description: has all the openstack information about the subnets
returned: always, but can be empty list
type: list
elements: dict
contains:
id:
description: The ID of the subnet.
type: str
name:
description: Name given to the subnet.
type: str
description:
description: Description of the subnet.
type: str
network_id:
description: Network ID this subnet belongs in.
type: str
cidr:
description: Subnet's CIDR.
type: str
gateway_ip:
description: Subnet's gateway ip.
type: str
is_dhcp_enabled:
description: Is DHCP enabled.
type: bool
ip_version:
description: IP version for this subnet.
type: int
dns_nameservers:
description: DNS name servers for this subnet.
type: list
elements: str
allocation_pools:
description: Allocation pools associated with this subnet.
type: list
elements: dict
created_at:
description: Date and time when the resource was created.
type: str
updated_at:
description: Date and time when the resource was updated.
type: str
dns_publish_fixed_ip:
description: Whether to publish DNS records for IPs from this subnet.
type: str
host_routes:
description: Additional routes for the subnet.
type: list
elements: dict
ipv6_address_mode:
description: The IPv6 address modes specifies mechanisms for assigning IP addresses.
type: str
ipv6_ra_mode:
description: The IPv6 router advertisement specifies whether the networking service should transmit ICMPv6 packets, for a subnet.
type: str
project_id:
description: The ID of the project.
type: str
revision_number:
description: The revision number of the resource.
type: str
segment_id:
description: The ID of a network segment the subnet is associated with.
type: str
service_types:
description: The service types associated with the subnet.
type: list
elements: str
subnet_pool_id:
description: The ID of the subnet pool associated with the subnet.
type: str
tags:
description: The list of tags on the resource.
type: list
elements: str
prefix_length:
description: The prefix length to use for subnet allocation from a subnet pool.
type: str
use_default_subnet_pool:
description: Whether to use the default subnet pool to obtain a CIDR.
type: bool
'''
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
class SubnetInfoModule(OpenStackModule):
argument_spec = dict(
name=dict(aliases=['subnet']),
filters=dict(type='dict')
)
module_kwargs = dict(
supports_check_mode=True
)
def run(self):
kwargs = {}
subnets = []
if self.params['name']:
kwargs['name'] = self.params['name']
# Try to get subnet by ID
try:
raw = self.conn.network.get_subnet(self.params['name'])
raw = raw.to_dict(computed=False)
subnets.append(raw)
self.exit(changed=False, subnets=subnets)
except self.sdk.exceptions.ResourceNotFound:
pass
if self.params['filters']:
kwargs.update(self.params['filters'])
subnets = self.conn.network.subnets(**kwargs)
subnets = [i.to_dict(computed=False) for i in subnets]
self.exit(changed=False, subnets=subnets)
def main():
module = SubnetInfoModule()
module()
if __name__ == '__main__':
main()