diff options
author | Mark Chappell <mchappel@redhat.com> | 2020-01-31 15:55:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-31 09:55:10 -0500 |
commit | 813091cf94f5bf943dd052204734c12e9e73a9d4 (patch) | |
tree | d9893f31c526eed54f0ab021ef144294632abfef | |
parent | 79682715594a736dd864ac4d4e880d47bfd20d21 (diff) | |
download | ansible-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.yaml | 2 | ||||
-rw-r--r-- | lib/ansible/modules/cloud/amazon/ec2_vol_info.py | 43 | ||||
-rw-r--r-- | test/integration/targets/ec2_vol_info/aliases | 2 |
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 |