summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Chappell <mchappel@redhat.com>2020-01-31 15:55:10 +0100
committerGitHub <noreply@github.com>2020-01-31 09:55:10 -0500
commit813091cf94f5bf943dd052204734c12e9e73a9d4 (patch)
treed9893f31c526eed54f0ab021ef144294632abfef
parent79682715594a736dd864ac4d4e880d47bfd20d21 (diff)
downloadansible-813091cf94f5bf943dd052204734c12e9e73a9d4.tar.gz
Migrate ec2_vol_info to AnsibleAWSModule (#66979)
* Migrate ec2_vol_info to AnsibleAWSModule * Enable ec2_vol_info tests * Add changelog * Update lib/ansible/modules/cloud/amazon/ec2_vol_info.py Co-Authored-By: Sloane Hertel <shertel@redhat.com>
-rw-r--r--changelogs/fragments/66979-ec2_vol_info-ansibleawsmodule.yaml2
-rw-r--r--lib/ansible/modules/cloud/amazon/ec2_vol_info.py43
-rw-r--r--test/integration/targets/ec2_vol_info/aliases2
3 files changed, 18 insertions, 29 deletions
diff --git a/changelogs/fragments/66979-ec2_vol_info-ansibleawsmodule.yaml b/changelogs/fragments/66979-ec2_vol_info-ansibleawsmodule.yaml
new file mode 100644
index 0000000000..dbfb83c213
--- /dev/null
+++ b/changelogs/fragments/66979-ec2_vol_info-ansibleawsmodule.yaml
@@ -0,0 +1,2 @@
+minor_changes:
+- 'ec2_vol_info: Code cleanup and use of the AWSRetry decorator to improve stability'
diff --git a/lib/ansible/modules/cloud/amazon/ec2_vol_info.py b/lib/ansible/modules/cloud/amazon/ec2_vol_info.py
index 91c989e6bf..47c2eb7db2 100644
--- a/lib/ansible/modules/cloud/amazon/ec2_vol_info.py
+++ b/lib/ansible/modules/cloud/amazon/ec2_vol_info.py
@@ -64,11 +64,11 @@ import traceback
try:
from botocore.exceptions import ClientError
except ImportError:
- pass # caught by imported HAS_BOTO3
+ pass # caught by AnsibleAWSModule
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.ec2 import ec2_argument_spec, get_aws_connection_info, boto3_conn, HAS_BOTO3, boto3_tag_list_to_ansible_dict
-from ansible.module_utils.ec2 import ansible_dict_to_boto3_filter_list, camel_dict_to_snake_dict
+from ansible.module_utils.aws.core import AnsibleAWSModule
+from ansible.module_utils.ec2 import AWSRetry, get_aws_connection_info
+from ansible.module_utils.ec2 import boto3_tag_list_to_ansible_dict, ansible_dict_to_boto3_filter_list, camel_dict_to_snake_dict
def get_volume_info(volume, region):
@@ -99,12 +99,13 @@ def get_volume_info(volume, region):
return volume_info
+@AWSRetry.jittered_backoff()
def describe_volumes_with_backoff(connection, filters):
paginator = connection.get_paginator('describe_volumes')
return paginator.paginate(Filters=filters).build_full_result()
-def list_ec2_volumes(connection, module, region):
+def list_ec2_volumes(connection, module):
# Replace filter key underscores with dashes, for compatibility, except if we're dealing with tags
sanitized_filters = module.params.get("filters")
@@ -116,7 +117,10 @@ def list_ec2_volumes(connection, module, region):
try:
all_volumes = describe_volumes_with_backoff(connection, ansible_dict_to_boto3_filter_list(sanitized_filters))
except ClientError as e:
- module.fail_json(msg=e.response, exception=traceback.format_exc())
+ module.fail_json_aws(e, msg="Failed to describe volumes.")
+
+ # We add region to the volume info so we need it here
+ region = get_aws_connection_info(module, boto3=True)[0]
for volume in all_volumes["Volumes"]:
volume = camel_dict_to_snake_dict(volume, ignore_list=['Tags'])
@@ -125,32 +129,15 @@ def list_ec2_volumes(connection, module, region):
def main():
- argument_spec = ec2_argument_spec()
- argument_spec.update(
- dict(
- filters=dict(default={}, type='dict')
- )
- )
-
- module = AnsibleModule(argument_spec=argument_spec)
+ argument_spec = dict(filters=dict(default={}, type='dict'))
+
+ module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)
if module._name == 'ec2_vol_facts':
module.deprecate("The 'ec2_vol_facts' module has been renamed to 'ec2_vol_info'", version='2.13')
- if not HAS_BOTO3:
- module.fail_json(msg='boto3 required for this module')
-
- region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True)
-
- connection = boto3_conn(
- module,
- conn_type='client',
- resource='ec2',
- region=region,
- endpoint=ec2_url,
- **aws_connect_params
- )
+ connection = module.client('ec2')
- list_ec2_volumes(connection, module, region)
+ list_ec2_volumes(connection, module)
if __name__ == '__main__':
diff --git a/test/integration/targets/ec2_vol_info/aliases b/test/integration/targets/ec2_vol_info/aliases
index 5692719518..6e3860bee2 100644
--- a/test/integration/targets/ec2_vol_info/aliases
+++ b/test/integration/targets/ec2_vol_info/aliases
@@ -1,2 +1,2 @@
cloud/aws
-unsupported
+shippable/aws/group2