summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py')
-rw-r--r--lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py136
1 files changed, 136 insertions, 0 deletions
diff --git a/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py b/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py
new file mode 100644
index 0000000000..950e7c5cad
--- /dev/null
+++ b/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py
@@ -0,0 +1,136 @@
+#!/usr/bin/python
+# Copyright (c) 2017 Ansible Project
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+ANSIBLE_METADATA = {'metadata_version': '1.1',
+ 'status': ['preview'],
+ 'supported_by': 'community'}
+
+
+DOCUMENTATION = '''
+---
+module: ec2_placement_group_info
+short_description: List EC2 Placement Group(s) details
+description:
+ - List details of EC2 Placement Group(s).
+ - This module was called C(ec2_placement_group_facts) before Ansible 2.9. The usage did not change.
+version_added: "2.5"
+author: "Brad Macpherson (@iiibrad)"
+options:
+ names:
+ description:
+ - A list of names to filter on. If a listed group does not exist, there
+ will be no corresponding entry in the result; no error will be raised.
+ required: false
+ default: []
+extends_documentation_fragment:
+ - aws
+ - ec2
+'''
+
+EXAMPLES = '''
+# Note: These examples do not set authentication details or the AWS region,
+# see the AWS Guide for details.
+
+# List all placement groups.
+- ec2_placement_group_info:
+ register: all_ec2_placement_groups
+
+# List two placement groups.
+- ec2_placement_group_info:
+ names:
+ - my-cluster
+ - my-other-cluster
+ register: specific_ec2_placement_groups
+
+- debug: msg="{{ specific_ec2_placement_groups | json_query(\"[?name=='my-cluster']\") }}"
+
+'''
+
+
+RETURN = '''
+placement_groups:
+ description: Placement group attributes
+ returned: always
+ type: complex
+ contains:
+ name:
+ description: PG name
+ type: str
+ sample: my-cluster
+ state:
+ description: PG state
+ type: str
+ sample: "available"
+ strategy:
+ description: PG strategy
+ type: str
+ sample: "cluster"
+
+'''
+
+from ansible.module_utils.aws.core import AnsibleAWSModule
+from ansible.module_utils.ec2 import (connect_to_aws,
+ boto3_conn,
+ ec2_argument_spec,
+ get_aws_connection_info)
+try:
+ from botocore.exceptions import (BotoCoreError, ClientError)
+except ImportError:
+ pass # caught by imported HAS_BOTO3
+
+
+def get_placement_groups_details(connection, module):
+ names = module.params.get("names")
+ try:
+ if len(names) > 0:
+ response = connection.describe_placement_groups(
+ Filters=[{
+ "Name": "group-name",
+ "Values": names
+ }])
+ else:
+ response = connection.describe_placement_groups()
+ except (BotoCoreError, ClientError) as e:
+ module.fail_json_aws(
+ e,
+ msg="Couldn't find placement groups named [%s]" % names)
+
+ results = []
+ for placement_group in response['PlacementGroups']:
+ results.append({
+ "name": placement_group['GroupName'],
+ "state": placement_group['State'],
+ "strategy": placement_group['Strategy'],
+ })
+ return results
+
+
+def main():
+ argument_spec = ec2_argument_spec()
+ argument_spec.update(
+ dict(
+ names=dict(type='list', default=[])
+ )
+ )
+
+ module = AnsibleAWSModule(
+ argument_spec=argument_spec,
+ supports_check_mode=True
+ )
+ if module._module._name == 'ec2_placement_group_facts':
+ module._module.deprecate("The 'ec2_placement_group_facts' module has been renamed to 'ec2_placement_group_info'", version='2.13')
+
+ region, ec2_url, aws_connect_params = get_aws_connection_info(
+ module, boto3=True)
+
+ connection = boto3_conn(module,
+ resource='ec2', conn_type='client',
+ region=region, endpoint=ec2_url, **aws_connect_params)
+
+ placement_groups = get_placement_groups_details(connection, module)
+ module.exit_json(changed=False, placement_groups=placement_groups)
+
+
+if __name__ == '__main__':
+ main()