1b38b7c500
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
198 lines
5.9 KiB
Python
198 lines
5.9 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright (c) 2020 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 = r'''
|
|
---
|
|
module: security_group_info
|
|
short_description: Lists security groups
|
|
author: OpenStack Ansible SIG
|
|
description:
|
|
- List security groups
|
|
options:
|
|
any_tags:
|
|
description:
|
|
- A list of tags to filter the list result by.
|
|
- Resources that match any tag in this list will be returned.
|
|
type: list
|
|
elements: str
|
|
description:
|
|
description:
|
|
- Description of the security group.
|
|
type: str
|
|
name:
|
|
description:
|
|
- Name or id of the security group.
|
|
type: str
|
|
not_any_tags:
|
|
description:
|
|
- A list of tags to filter the list result by.
|
|
- Resources that match any tag in this list will be excluded.
|
|
type: list
|
|
elements: str
|
|
not_tags:
|
|
description:
|
|
- A list of tags to filter the list result by.
|
|
- Resources that match all tags in this list will be excluded.
|
|
type: list
|
|
elements: str
|
|
project_id:
|
|
description:
|
|
- Specifies the project id as filter criteria.
|
|
type: str
|
|
revision_number:
|
|
description:
|
|
- Filter the list result by the revision number of the resource.
|
|
type: int
|
|
tags:
|
|
description:
|
|
- A list of tags to filter the list result by.
|
|
- Resources that match all tags in this list will be returned.
|
|
type: list
|
|
elements: str
|
|
extends_documentation_fragment:
|
|
- openstack.cloud.openstack
|
|
'''
|
|
|
|
RETURN = r'''
|
|
security_groups:
|
|
description: List of dictionaries describing security groups.
|
|
type: list
|
|
elements: dict
|
|
returned: always
|
|
contains:
|
|
created_at:
|
|
description: Creation time of the security group
|
|
type: str
|
|
sample: "yyyy-mm-dd hh:mm:ss"
|
|
description:
|
|
description: Description of the security group
|
|
type: str
|
|
sample: "My security group"
|
|
id:
|
|
description: ID of the security group
|
|
type: str
|
|
sample: "d90e55ba-23bd-4d97-b722-8cb6fb485d69"
|
|
name:
|
|
description: Name of the security group.
|
|
type: str
|
|
sample: "my-sg"
|
|
project_id:
|
|
description: Project ID where the security group is located in.
|
|
type: str
|
|
sample: "25d24fc8-d019-4a34-9fff-0a09fde6a567"
|
|
revision_number:
|
|
description: The revision number of the resource.
|
|
type: int
|
|
tenant_id:
|
|
description: Tenant ID where the security group is located in. Deprecated
|
|
type: str
|
|
sample: "25d24fc8-d019-4a34-9fff-0a09fde6a567"
|
|
security_group_rules:
|
|
description: Specifies the security group rule list
|
|
type: list
|
|
sample: [
|
|
{
|
|
"id": "d90e55ba-23bd-4d97-b722-8cb6fb485d69",
|
|
"direction": "ingress",
|
|
"protocol": null,
|
|
"ethertype": "IPv4",
|
|
"description": null,
|
|
"remote_group_id": "0431c9c5-1660-42e0-8a00-134bec7f03e2",
|
|
"remote_ip_prefix": null,
|
|
"tenant_id": "bbfe8c41dd034a07bebd592bf03b4b0c",
|
|
"port_range_max": null,
|
|
"port_range_min": null,
|
|
"security_group_id": "0431c9c5-1660-42e0-8a00-134bec7f03e2"
|
|
},
|
|
{
|
|
"id": "aecff4d4-9ce9-489c-86a3-803aedec65f7",
|
|
"direction": "egress",
|
|
"protocol": null,
|
|
"ethertype": "IPv4",
|
|
"description": null,
|
|
"remote_group_id": null,
|
|
"remote_ip_prefix": null,
|
|
"tenant_id": "bbfe8c41dd034a07bebd592bf03b4b0c",
|
|
"port_range_max": null,
|
|
"port_range_min": null,
|
|
"security_group_id": "0431c9c5-1660-42e0-8a00-134bec7f03e2"
|
|
}
|
|
]
|
|
stateful:
|
|
description: Indicates if the security group is stateful or stateless.
|
|
type: bool
|
|
tags:
|
|
description: The list of tags on the resource.
|
|
type: list
|
|
updated_at:
|
|
description: Update time of the security group
|
|
type: str
|
|
sample: "yyyy-mm-dd hh:mm:ss"
|
|
'''
|
|
|
|
EXAMPLES = r'''
|
|
- name: Get all security groups
|
|
openstack.cloud.security_group_info:
|
|
cloud: devstack
|
|
|
|
- name: Get specific security group
|
|
openstack.cloud.security_group_info:
|
|
cloud: devstack
|
|
name: my_sg
|
|
'''
|
|
|
|
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
|
|
|
|
|
|
class SecurityGroupInfoModule(OpenStackModule):
|
|
argument_spec = dict(
|
|
any_tags=dict(type='list', elements='str'),
|
|
description=dict(),
|
|
name=dict(),
|
|
not_any_tags=dict(type='list', elements='str'),
|
|
not_tags=dict(type='list', elements='str'),
|
|
project_id=dict(),
|
|
revision_number=dict(type='int'),
|
|
tags=dict(type='list', elements='str'),
|
|
)
|
|
module_kwargs = dict(
|
|
supports_check_mode=True
|
|
)
|
|
|
|
def run(self):
|
|
name = self.params['name']
|
|
args = {k: self.params[k]
|
|
for k in ['description', 'project_id', 'revision_number']
|
|
if self.params[k]}
|
|
|
|
args.update({k: ','.join(self.params[k])
|
|
for k in ['tags', 'any_tags', 'not_tags', 'not_any_tags']
|
|
if self.params[k]})
|
|
|
|
# self.conn.search_security_groups() cannot be used here,
|
|
# refer to git blame for rationale.
|
|
security_groups = self.conn.network.security_groups(**args)
|
|
|
|
if name:
|
|
# TODO: Upgrade name_or_id code to match openstacksdk [1]?
|
|
# [1] https://opendev.org/openstack/openstacksdk/src/commit/
|
|
# 0898398415ae7b0e2447d61226acf50f01567cdd/openstack/cloud/_utils.py#L89
|
|
security_groups = [item for item in security_groups
|
|
if name in (item['id'], item['name'])]
|
|
|
|
self.exit(changed=False,
|
|
security_groups=[sg.to_dict(computed=False)
|
|
for sg in security_groups])
|
|
|
|
|
|
def main():
|
|
module = SecurityGroupInfoModule()
|
|
module()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|