Skip to content

Commit

Permalink
New module ec2_vpc_egress_igw_info (ansible-collections#2334)
Browse files Browse the repository at this point in the history
SUMMARY

Create new module ec2_vpc_egress_igw_info

ISSUE TYPE


New Module Pull Request

Reviewed-by: Alina Buzachis
  • Loading branch information
abikouo authored Oct 15, 2024
1 parent ab49a3f commit 3add45e
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 0 deletions.
1 change: 1 addition & 0 deletions meta/runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ action_groups:
- ec2_vol_info
- ec2_vpc_dhcp_option
- ec2_vpc_dhcp_option_info
- ec2_vpc_egress_igw_info
- ec2_vpc_endpoint
- ec2_vpc_endpoint_info
- ec2_vpc_endpoint_service_info
Expand Down
139 changes: 139 additions & 0 deletions plugins/modules/ec2_vpc_egress_igw_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-

# Copyright: Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

DOCUMENTATION = r"""
---
module: ec2_vpc_egress_igw_info
version_added: 9.0.0
short_description: Gather information about AWS VPC Egress Only Internet gateway
description:
- Gather information about AWS VPC Egress Only Internet gateway.
author: "Aubin Bikouo (@abikouo)"
options:
filters:
description:
- A dict of filters to apply. Each dict item consists of a filter key and a filter value.
See U(https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeEgressOnlyInternetGateways.html) for possible filters.
type: dict
default: {}
egress_only_internet_gateway_ids:
description:
- Get details of specific VPC Egress Internet Gateway ID.
type: list
elements: str
extends_documentation_fragment:
- amazon.aws.common.modules
- amazon.aws.region.modules
- amazon.aws.boto3
"""

EXAMPLES = r"""
# # Note: These examples do not set authentication details, see the AWS Guide for details.
- name: Gather information about all VPC Egress only Internet Gateways for an account or profile
amazon.aws.ec2_vpc_igw_info:
region: ap-southeast-2
profile: production
- name: Gather information about a filtered list of VPC Egress only Internet Gateways
amazon.aws.ec2_vpc_igw_info:
region: ap-southeast-2
profile: production
filters:
"tag:Name": "igw-123"
- name: Gather information about a specific VPC egress only internet gateway by EgressOnlyInternetGatewayId
amazon.aws.ec2_vpc_igw_info:
region: ap-southeast-2
profile: production
egress_only_internet_gateway_ids: igw-c1231234
"""

RETURN = r"""
egress_only_internet_gateways:
description: The AWS Egress only internet gateways.
returned: always
type: list
contains:
attachments:
description: Information about the attachment of the egress-only internet gateway.
returned: always
type: list
contains:
state:
description: The current state of the attachment.
returned: always
type: str
sample: "available"
vpc_id:
description: The ID of the VPC.
returned: always
type: str
sample: "vpc-02123b67"
egress_only_internet_gateway_id:
description: The ID of the egress-only internet gateway.
returned: always
type: str
sample: "eigw-0123456789abcdef"
tags:
description: Any tags assigned to the egress-only internet gateway.
returned: always
type: dict
"""

from typing import Any
from typing import Dict
from typing import List

from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict

from ansible_collections.amazon.aws.plugins.module_utils.ec2 import AnsibleEC2Error
from ansible_collections.amazon.aws.plugins.module_utils.ec2 import describe_egress_only_internet_gateways
from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule
from ansible_collections.amazon.aws.plugins.module_utils.tagging import boto3_tag_list_to_ansible_dict
from ansible_collections.amazon.aws.plugins.module_utils.transformation import ansible_dict_to_boto3_filter_list


def format_egress_only_internet_gateway(internet_gateway: Dict[str, Any]) -> Dict[str, Any]:
tags = boto3_tag_list_to_ansible_dict(internet_gateway.get("Tags", []))
egress_only_igw = {
"EgressOnlyInternetGatewayId": internet_gateway["EgressOnlyInternetGatewayId"],
"Attachments": internet_gateway["Attachments"],
"Tags": tags,
}
return camel_dict_to_snake_dict(egress_only_igw, ignore_list=["Tags"])


def list_egress_only_internet_gateways(connection, module: AnsibleAWSModule) -> List[Dict[str, Any]]:
params = dict()

params["Filters"] = ansible_dict_to_boto3_filter_list(module.params.get("filters"))

if module.params.get("egress_only_internet_gateway_ids"):
params["EgressOnlyInternetGatewayIds"] = module.params.get("egress_only_internet_gateway_ids")

try:
egress_only_igws = describe_egress_only_internet_gateways(connection, **params)
return [format_egress_only_internet_gateway(igw) for igw in egress_only_igws]
except AnsibleEC2Error as e:
module.fail_json_aws(e, "Unable to describe egress only internet gateways")


def main() -> None:
argument_spec = dict(
filters=dict(type="dict", default=dict()),
egress_only_internet_gateway_ids=dict(type="list", elements="str"),
)

module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)
client = module.client("ec2")

results = list_egress_only_internet_gateways(client, module)
module.exit_json(egress_only_internet_gateways=results)


if __name__ == "__main__":
main()

0 comments on commit 3add45e

Please sign in to comment.