ansible-collections-openstack/plugins/modules/floating_ip_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

203 lines
5.7 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2021 by Open Telekom Cloud, operated by T-Systems International GmbH
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
DOCUMENTATION = '''
---
module: floating_ip_info
short_description: Get information about floating ips
author: OpenStack Ansible SIG
description:
- Get a generator of floating ips.
options:
description:
description:
- The description of a floating IP.
type: str
fixed_ip_address:
description:
- The fixed IP address associated with a floating IP address.
type: str
floating_ip_address:
description:
- The IP address of a floating IP.
type: str
floating_network:
description:
- The name or id of the network associated with a floating IP.
type: str
port:
description:
- The name or id of the port to which a floating IP is associated.
type: str
project:
description:
- The name or ID of the project a floating IP is associated with.
type: str
aliases: ['project_id']
router:
description:
- The name or id of an associated router.
type: str
status:
description:
- The status of a floating IP.
choices: ['active', 'down']
type: str
extends_documentation_fragment:
- openstack.cloud.openstack
'''
RETURN = '''
floating_ips:
description: The floating ip objects list.
type: list
elements: dict
returned: success
contains:
created_at:
description: Timestamp at which the floating IP was assigned.
type: str
description:
description: The description of a floating IP.
type: str
dns_domain:
description: The DNS domain.
type: str
dns_name:
description: The DNS name.
type: str
fixed_ip_address:
description: The fixed IP address associated with a floating IP address.
type: str
floating_ip_address:
description: The IP address of a floating IP.
type: str
floating_network_id:
description: The id of the network associated with a floating IP.
type: str
id:
description: Id of the floating ip.
type: str
name:
description: Name of the floating ip.
type: str
port_details:
description: |
The details of the port that this floating IP associates
with. Present if C(fip-port-details) extension is loaded.
type: dict
port_id:
description: The port ID floating ip associated with.
type: str
project_id:
description: The ID of the project this floating IP is associated with.
type: str
qos_policy_id:
description: The ID of the QoS policy attached to the floating IP.
type: str
revision_number:
description: Revision number.
type: str
router_id:
description: The id of the router floating ip associated with.
type: str
status:
description: |
The status of a floating IP, which can be 'ACTIVE' or 'DOWN'.
type: str
subnet_id:
description: The id of the subnet the floating ip associated with.
type: str
tags:
description: List of tags.
type: list
elements: str
updated_at:
description: Timestamp at which the floating IP was last updated.
type: str
'''
EXAMPLES = '''
# Getting all floating ips
- openstack.cloud.floating_ip_info:
register: fips
# Getting fip by associated fixed IP address.
- openstack.cloud.floating_ip_info:
fixed_ip_address: 192.168.10.8
register: fip
# Getting fip by associated router.
- openstack.cloud.floating_ip_info:
router: my-router
register: fip
'''
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
class FloatingIPInfoModule(OpenStackModule):
argument_spec = dict(
description=dict(),
fixed_ip_address=dict(),
floating_ip_address=dict(),
floating_network=dict(),
port=dict(),
project=dict(aliases=['project_id']),
router=dict(),
status=dict(choices=['active', 'down']),
)
module_kwargs = dict(
supports_check_mode=True
)
def run(self):
query = dict((k, self.params[k])
for k in ['description', 'fixed_ip_address',
'floating_ip_address']
if self.params[k] is not None)
for k in ['port', 'router']:
if self.params[k]:
k_id = '{0}_id'.format(k)
find_name = 'find_{0}'.format(k)
query[k_id] = getattr(self.conn.network, find_name)(
name_or_id=self.params[k], ignore_missing=False)['id']
floating_network_name_or_id = self.params['floating_network']
if floating_network_name_or_id:
query['floating_network_id'] = self.conn.network.find_network(
name_or_id=floating_network_name_or_id,
ignore_missing=False)['id']
project_name_or_id = self.params['project']
if project_name_or_id:
project = self.conn.identity.find_project(project_name_or_id)
if project:
query['project_id'] = project['id']
else:
# caller might not have permission to query projects
# so assume she gave a project id
query['project_id'] = project_name_or_id
status = self.params['status']
if status:
query['status'] = status.upper()
self.exit_json(
changed=False,
floating_ips=[ip.to_dict(computed=False)
for ip in self.conn.network.ips(**query)])
def main():
module = FloatingIPInfoModule()
module()
if __name__ == '__main__':
main()