diff options
author | Mark Chappell <mchappel@redhat.com> | 2020-01-24 21:39:01 +0100 |
---|---|---|
committer | Jill R <4121322+jillr@users.noreply.github.com> | 2020-01-24 13:39:01 -0700 |
commit | 0ceac57bc6fe8c8cae43e0a3cec1a29020a1d36e (patch) | |
tree | c96204eb728e7861193be0cd9d040085efd6576e | |
parent | 70017e26798ce288a81084e8cb8c1a1994c177d7 (diff) | |
download | ansible-0ceac57bc6fe8c8cae43e0a3cec1a29020a1d36e.tar.gz |
AnsibleAWSModule related cleanup (batch 2) (#65987)
* Remove redundant use of ec2_argument_spec where we're using AnsibleAWSModule
* Use module.client() instead of the get_aws_connection_info/boto3_conn combo.
* AnsibleAWSModule handles 'HAS_BOTO3'
* Remove unused imports
* Update error message that lambda_policy integration test is looking for when the region's missing
* Revert redshift and s3_bucket
40 files changed, 212 insertions, 390 deletions
diff --git a/lib/ansible/modules/cloud/amazon/_lambda_facts.py b/lib/ansible/modules/cloud/amazon/_lambda_facts.py index 68339a8f28..f332c2d9be 100644 --- a/lib/ansible/modules/cloud/amazon/_lambda_facts.py +++ b/lib/ansible/modules/cloud/amazon/_lambda_facts.py @@ -90,7 +90,7 @@ lambda_facts.function.TheName: ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import camel_dict_to_snake_dict, get_aws_connection_info, boto3_conn +from ansible.module_utils.ec2 import camel_dict_to_snake_dict import json import datetime import sys @@ -100,7 +100,7 @@ import re try: from botocore.exceptions import ClientError except ImportError: - pass # protected by AnsibleAWSModule + pass # caught by AnsibleAWSModule def fix_return(node): @@ -361,16 +361,7 @@ def main(): if len(function_name) > 64: module.fail_json(msg='Function name "{0}" exceeds 64 character limit'.format(function_name)) - try: - region, endpoint, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - aws_connect_kwargs.update(dict(region=region, - endpoint=endpoint, - conn_type='client', - resource='lambda' - )) - client = boto3_conn(module, **aws_connect_kwargs) - except ClientError as e: - module.fail_json_aws(e, "trying to set up boto connection") + client = module.client('lambda') this_module = sys.modules[__name__] diff --git a/lib/ansible/modules/cloud/amazon/aws_caller_info.py b/lib/ansible/modules/cloud/amazon/aws_caller_info.py index 01d5d71086..b3e145d0c1 100644 --- a/lib/ansible/modules/cloud/amazon/aws_caller_info.py +++ b/lib/ansible/modules/cloud/amazon/aws_caller_info.py @@ -70,7 +70,7 @@ from ansible.module_utils.ec2 import camel_dict_to_snake_dict try: from botocore.exceptions import BotoCoreError, ClientError except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule def main(): diff --git a/lib/ansible/modules/cloud/amazon/aws_codepipeline.py b/lib/ansible/modules/cloud/amazon/aws_codepipeline.py index a692a713ef..3d3d683445 100644 --- a/lib/ansible/modules/cloud/amazon/aws_codepipeline.py +++ b/lib/ansible/modules/cloud/amazon/aws_codepipeline.py @@ -207,7 +207,7 @@ from ansible.module_utils.ec2 import camel_dict_to_snake_dict, compare_policies try: import botocore except ImportError: - pass # will be detected by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule def create_pipeline(client, name, role_arn, artifact_store, stages, version, module): diff --git a/lib/ansible/modules/cloud/amazon/aws_inspector_target.py b/lib/ansible/modules/cloud/amazon/aws_inspector_target.py index d990a16d99..a5607b765b 100644 --- a/lib/ansible/modules/cloud/amazon/aws_inspector_target.py +++ b/lib/ansible/modules/cloud/amazon/aws_inspector_target.py @@ -104,7 +104,6 @@ updated_at: from ansible.module_utils.aws.core import AnsibleAWSModule from ansible.module_utils.ec2 import AWSRetry from ansible.module_utils.ec2 import ( - HAS_BOTO3, ansible_dict_to_boto3_tag_list, boto3_tag_list_to_ansible_dict, camel_dict_to_snake_dict, @@ -114,7 +113,7 @@ from ansible.module_utils.ec2 import ( try: import botocore except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule @AWSRetry.backoff(tries=5, delay=5, backoff=2.0) @@ -133,9 +132,6 @@ def main(): required_if=required_if, ) - if not HAS_BOTO3: - module.fail_json(msg='boto3 and botocore are required for this module') - name = module.params.get('name') state = module.params.get('state').lower() tags = module.params.get('tags') diff --git a/lib/ansible/modules/cloud/amazon/aws_ses_identity.py b/lib/ansible/modules/cloud/amazon/aws_ses_identity.py index 1381f29a33..50ffef74de 100644 --- a/lib/ansible/modules/cloud/amazon/aws_ses_identity.py +++ b/lib/ansible/modules/cloud/amazon/aws_ses_identity.py @@ -230,7 +230,7 @@ import time try: from botocore.exceptions import BotoCoreError, ClientError except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule def get_verification_attributes(connection, module, identity, retries=0, retryDelay=10): diff --git a/lib/ansible/modules/cloud/amazon/aws_ses_identity_policy.py b/lib/ansible/modules/cloud/amazon/aws_ses_identity_policy.py index ea5df8c28c..49e950e71c 100644 --- a/lib/ansible/modules/cloud/amazon/aws_ses_identity_policy.py +++ b/lib/ansible/modules/cloud/amazon/aws_ses_identity_policy.py @@ -94,7 +94,7 @@ import json try: from botocore.exceptions import BotoCoreError, ClientError except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule def get_identity_policy(connection, module, identity, policy_name): diff --git a/lib/ansible/modules/cloud/amazon/aws_sgw_info.py b/lib/ansible/modules/cloud/amazon/aws_sgw_info.py index db1deef854..fdb0a6dede 100644 --- a/lib/ansible/modules/cloud/amazon/aws_sgw_info.py +++ b/lib/ansible/modules/cloud/amazon/aws_sgw_info.py @@ -181,7 +181,7 @@ from ansible.module_utils.ec2 import camel_dict_to_snake_dict try: from botocore.exceptions import BotoCoreError, ClientError except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule class SGWInformationManager(object): diff --git a/lib/ansible/modules/cloud/amazon/ec2_eip.py b/lib/ansible/modules/cloud/amazon/ec2_eip.py index 8be6b65e37..7f7cd18c5b 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_eip.py +++ b/lib/ansible/modules/cloud/amazon/ec2_eip.py @@ -233,10 +233,10 @@ public_ip: try: import botocore.exceptions except ImportError: - pass # Taken care of by ec2.HAS_BOTO3 + pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule, is_boto3_error_code -from ansible.module_utils.ec2 import AWSRetry, ansible_dict_to_boto3_filter_list, ec2_argument_spec +from ansible.module_utils.ec2 import AWSRetry, ansible_dict_to_boto3_filter_list def associate_ip_and_device(ec2, module, address, private_ip_address, device_id, allow_reassociation, check_mode, is_instance=True): @@ -529,8 +529,7 @@ def generate_tag_dict(module, tag_name, tag_value): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( device_id=dict(required=False, aliases=['instance_id']), public_ip=dict(required=False, aliases=['ip']), state=dict(required=False, default='present', @@ -545,7 +544,7 @@ def main(): tag_name=dict(), tag_value=dict(), public_ipv4_pool=dict() - )) + ) module = AnsibleAWSModule( argument_spec=argument_spec, diff --git a/lib/ansible/modules/cloud/amazon/ec2_instance.py b/lib/ansible/modules/cloud/amazon/ec2_instance.py index b46a69e71a..7a587fb941 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_instance.py +++ b/lib/ansible/modules/cloud/amazon/ec2_instance.py @@ -808,16 +808,13 @@ try: import boto3 import botocore.exceptions except ImportError: - pass + pass # caught by AnsibleAWSModule from ansible.module_utils.six import text_type, string_types from ansible.module_utils.six.moves.urllib import parse as urlparse from ansible.module_utils._text import to_bytes, to_native import ansible.module_utils.ec2 as ec2_utils -from ansible.module_utils.ec2 import (boto3_conn, - ec2_argument_spec, - get_aws_connection_info, - AWSRetry, +from ansible.module_utils.ec2 import (AWSRetry, ansible_dict_to_boto3_filter_list, compare_aws_tags, boto3_tag_list_to_ansible_dict, @@ -1675,8 +1672,7 @@ def run_instances(ec2, **instance_spec): def main(): global module - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( state=dict(default='present', choices=['present', 'started', 'running', 'stopped', 'restarted', 'rebooted', 'terminated', 'absent']), wait=dict(default=True, type='bool'), wait_timeout=dict(default=600, type='int'), @@ -1711,7 +1707,7 @@ def main(): instance_ids=dict(default=[], type='list'), network=dict(default=None, type='dict'), volumes=dict(default=None, type='list'), - )) + ) # running/present are synonyms # as are terminated/absent module = AnsibleAWSModule( diff --git a/lib/ansible/modules/cloud/amazon/ec2_key.py b/lib/ansible/modules/cloud/amazon/ec2_key.py index 1a8c873c2f..85392d3915 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_key.py +++ b/lib/ansible/modules/cloud/amazon/ec2_key.py @@ -134,13 +134,12 @@ key: import uuid from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import ec2_argument_spec, get_aws_connection_info, boto3_conn from ansible.module_utils._text import to_bytes try: from botocore.exceptions import ClientError except ImportError: - pass + pass # caught by AnsibleAWSModule def extract_key_data(key): @@ -242,23 +241,18 @@ def delete_key_pair(module, ec2_client, name, finish_task=True): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - name=dict(required=True), - key_material=dict(), - force=dict(type='bool', default=True), - state=dict(default='present', choices=['present', 'absent']), - wait=dict(type='bool', removed_in_version='2.14'), - wait_timeout=dict(type='int', removed_in_version='2.14') - ) + argument_spec = dict( + name=dict(required=True), + key_material=dict(), + force=dict(type='bool', default=True), + state=dict(default='present', choices=['present', 'absent']), + wait=dict(type='bool', removed_in_version='2.14'), + wait_timeout=dict(type='int', removed_in_version='2.14') ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True) - region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True) - - ec2_client = boto3_conn(module, conn_type='client', resource='ec2', region=region, endpoint=ec2_url, **aws_connect_params) + ec2_client = module.client('ec2') name = module.params['name'] state = module.params.get('state') diff --git a/lib/ansible/modules/cloud/amazon/ec2_placement_group.py b/lib/ansible/modules/cloud/amazon/ec2_placement_group.py index 1fb04e47a6..e59c02171a 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_placement_group.py +++ b/lib/ansible/modules/cloud/amazon/ec2_placement_group.py @@ -91,10 +91,7 @@ placement_group: ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import (AWSRetry, - boto3_conn, - ec2_argument_spec, - get_aws_connection_info) +from ansible.module_utils.ec2 import AWSRetry try: from botocore.exceptions import (BotoCoreError, ClientError) except ImportError: @@ -167,13 +164,10 @@ def delete_placement_group(connection, module): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - name=dict(required=True, type='str'), - state=dict(default='present', choices=['present', 'absent']), - strategy=dict(default='cluster', choices=['cluster', 'spread']) - ) + argument_spec = dict( + name=dict(required=True, type='str'), + state=dict(default='present', choices=['present', 'absent']), + strategy=dict(default='cluster', choices=['cluster', 'spread']) ) module = AnsibleAWSModule( @@ -181,12 +175,7 @@ def main(): supports_check_mode=True ) - 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) + connection = module.client('ec2') state = module.params.get("state") diff --git a/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py b/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py index eee1912a8f..84cf784a71 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py +++ b/lib/ansible/modules/cloud/amazon/ec2_placement_group_info.py @@ -75,14 +75,10 @@ placement_groups: ''' 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 + pass # caught by AnsibleAWSModule def get_placement_groups_details(connection, module): @@ -112,11 +108,8 @@ def get_placement_groups_details(connection, module): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - names=dict(type='list', default=[]) - ) + argument_spec = dict( + names=dict(type='list', default=[]) ) module = AnsibleAWSModule( @@ -126,12 +119,7 @@ def main(): 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) + connection = module.client('ec2') placement_groups = get_placement_groups_details(connection, module) module.exit_json(changed=False, placement_groups=placement_groups) diff --git a/lib/ansible/modules/cloud/amazon/ec2_vpc_egress_igw.py b/lib/ansible/modules/cloud/amazon/ec2_vpc_egress_igw.py index 3224cc8f65..5e9d587a7c 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_vpc_egress_igw.py +++ b/lib/ansible/modules/cloud/amazon/ec2_vpc_egress_igw.py @@ -62,17 +62,12 @@ vpc_id: from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import ( - boto3_conn, - ec2_argument_spec, - get_aws_connection_info, - camel_dict_to_snake_dict -) +from ansible.module_utils.ec2 import camel_dict_to_snake_dict try: import botocore except ImportError: - pass # will be picked up by HAS_BOTO3 in AnsibleAWSModule + pass # caught by AnsibleAWSModule def delete_eigw(module, conn, eigw_id): @@ -167,16 +162,14 @@ def describe_eigws(module, conn, vpc_id): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( vpc_id=dict(required=True), state=dict(default='present', choices=['present', 'absent']) - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True) - 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') vpc_id = module.params.get('vpc_id') state = module.params.get('state') diff --git a/lib/ansible/modules/cloud/amazon/ec2_vpc_igw.py b/lib/ansible/modules/cloud/amazon/ec2_vpc_igw.py index a7145b0646..7d34fb965c 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_vpc_igw.py +++ b/lib/ansible/modules/cloud/amazon/ec2_vpc_igw.py @@ -88,14 +88,11 @@ vpc_id: try: import botocore except ImportError: - pass # Handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule from ansible.module_utils.ec2 import ( AWSRetry, - boto3_conn, - ec2_argument_spec, - get_aws_connection_info, camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict, ansible_dict_to_boto3_filter_list, @@ -257,13 +254,10 @@ class AnsibleEc2Igw(object): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - vpc_id=dict(required=True), - state=dict(default='present', choices=['present', 'absent']), - tags=dict(default=dict(), required=False, type='dict', aliases=['resource_tags']) - ) + argument_spec = dict( + vpc_id=dict(required=True), + state=dict(default='present', choices=['present', 'absent']), + tags=dict(default=dict(), required=False, type='dict', aliases=['resource_tags']) ) module = AnsibleAWSModule( diff --git a/lib/ansible/modules/cloud/amazon/ec2_vpc_nacl_info.py b/lib/ansible/modules/cloud/amazon/ec2_vpc_nacl_info.py index 04920d1f24..d95623774c 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_vpc_nacl_info.py +++ b/lib/ansible/modules/cloud/amazon/ec2_vpc_nacl_info.py @@ -107,12 +107,10 @@ nacls: sample: [[100, 'all', 'allow', '0.0.0.0/0', null, null, null, null]] ''' -import traceback - try: from botocore.exceptions import ClientError, BotoCoreError except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule from ansible.module_utils._text import to_native diff --git a/lib/ansible/modules/cloud/amazon/ec2_vpc_route_table.py b/lib/ansible/modules/cloud/amazon/ec2_vpc_route_table.py index ecd884cf68..96c9b2d04d 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_vpc_route_table.py +++ b/lib/ansible/modules/cloud/amazon/ec2_vpc_route_table.py @@ -234,7 +234,6 @@ import re from time import sleep from ansible.module_utils.aws.core import AnsibleAWSModule from ansible.module_utils.aws.waiters import get_waiter -from ansible.module_utils.ec2 import ec2_argument_spec, boto3_conn, get_aws_connection_info from ansible.module_utils.ec2 import ansible_dict_to_boto3_filter_list from ansible.module_utils.ec2 import camel_dict_to_snake_dict, snake_dict_to_camel_dict from ansible.module_utils.ec2 import ansible_dict_to_boto3_tag_list, boto3_tag_list_to_ansible_dict @@ -244,7 +243,7 @@ from ansible.module_utils.ec2 import compare_aws_tags, AWSRetry try: import botocore except ImportError: - pass # handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule CIDR_RE = re.compile(r'^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$') @@ -715,21 +714,18 @@ def ensure_route_table_present(connection, module): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - lookup=dict(default='tag', choices=['tag', 'id']), - propagating_vgw_ids=dict(type='list'), - purge_routes=dict(default=True, type='bool'), - purge_subnets=dict(default=True, type='bool'), - purge_tags=dict(default=False, type='bool'), - route_table_id=dict(), - routes=dict(default=[], type='list'), - state=dict(default='present', choices=['present', 'absent']), - subnets=dict(type='list'), - tags=dict(type='dict', aliases=['resource_tags']), - vpc_id=dict() - ) + argument_spec = dict( + lookup=dict(default='tag', choices=['tag', 'id']), + propagating_vgw_ids=dict(type='list'), + purge_routes=dict(default=True, type='bool'), + purge_subnets=dict(default=True, type='bool'), + purge_tags=dict(default=False, type='bool'), + route_table_id=dict(), + routes=dict(default=[], type='list'), + state=dict(default='present', choices=['present', 'absent']), + subnets=dict(type='list'), + tags=dict(type='dict', aliases=['resource_tags']), + vpc_id=dict() ) module = AnsibleAWSModule(argument_spec=argument_spec, @@ -738,10 +734,7 @@ def main(): ['state', 'present', ['vpc_id']]], supports_check_mode=True) - 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') state = module.params.get('state') diff --git a/lib/ansible/modules/cloud/amazon/ec2_vpc_subnet.py b/lib/ansible/modules/cloud/amazon/ec2_vpc_subnet.py index 9fcbaad6cc..5085e99b79 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_vpc_subnet.py +++ b/lib/ansible/modules/cloud/amazon/ec2_vpc_subnet.py @@ -214,7 +214,6 @@ subnet: import time -import traceback try: import botocore @@ -225,8 +224,7 @@ from ansible.module_utils._text import to_text from ansible.module_utils.aws.core import AnsibleAWSModule from ansible.module_utils.aws.waiters import get_waiter from ansible.module_utils.ec2 import (ansible_dict_to_boto3_filter_list, ansible_dict_to_boto3_tag_list, - ec2_argument_spec, camel_dict_to_snake_dict, get_aws_connection_info, - boto3_conn, boto3_tag_list_to_ansible_dict, compare_aws_tags, AWSRetry) + camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict, compare_aws_tags, AWSRetry) def get_subnet_info(subnet): @@ -563,21 +561,18 @@ def ensure_subnet_absent(conn, module): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - az=dict(default=None, required=False), - cidr=dict(required=True), - ipv6_cidr=dict(default='', required=False), - state=dict(default='present', choices=['present', 'absent']), - tags=dict(default={}, required=False, type='dict', aliases=['resource_tags']), - vpc_id=dict(required=True), - map_public=dict(default=False, required=False, type='bool'), - assign_instances_ipv6=dict(default=False, required=False, type='bool'), - wait=dict(type='bool', default=True), - wait_timeout=dict(type='int', default=300, required=False), - purge_tags=dict(default=True, type='bool') - ) + argument_spec = dict( + az=dict(default=None, required=False), + cidr=dict(required=True), + ipv6_cidr=dict(default='', required=False), + state=dict(default='present', choices=['present', 'absent']), + tags=dict(default={}, required=False, type='dict', aliases=['resource_tags']), + vpc_id=dict(required=True), + map_public=dict(default=False, required=False, type='bool'), + assign_instances_ipv6=dict(default=False, required=False, type='bool'), + wait=dict(type='bool', default=True), + wait_timeout=dict(type='int', default=300, required=False), + purge_tags=dict(default=True, type='bool') ) required_if = [('assign_instances_ipv6', True, ['ipv6_cidr'])] @@ -590,8 +585,7 @@ def main(): if not module.botocore_at_least("1.7.0"): module.warn("botocore >= 1.7.0 is required to use wait_timeout for custom wait times") - 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') state = module.params.get('state') diff --git a/lib/ansible/modules/cloud/amazon/ec2_vpc_vpn_info.py b/lib/ansible/modules/cloud/amazon/ec2_vpc_vpn_info.py index 862b07ecc8..dbc706fc55 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_vpc_vpn_info.py +++ b/lib/ansible/modules/cloud/amazon/ec2_vpc_vpn_info.py @@ -170,8 +170,7 @@ except ImportError: pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import (ansible_dict_to_boto3_filter_list, ec2_argument_spec, - boto3_conn, boto3_tag_list_to_ansible_dict, camel_dict_to_snake_dict) +from ansible.module_utils.ec2 import ansible_dict_to_boto3_filter_list, boto3_tag_list_to_ansible_dict, camel_dict_to_snake_dict def date_handler(obj): @@ -199,12 +198,9 @@ def list_vpn_connections(connection, module): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - vpn_connection_ids=dict(default=[], type='list'), - filters=dict(default={}, type='dict') - ) + argument_spec = dict( + vpn_connection_ids=dict(default=[], type='list'), + filters=dict(default={}, type='dict') ) module = AnsibleAWSModule(argument_spec=argument_spec, diff --git a/lib/ansible/modules/cloud/amazon/ecs_service.py b/lib/ansible/modules/cloud/amazon/ecs_service.py index 49045650a7..11e5bb3f38 100644 --- a/lib/ansible/modules/cloud/amazon/ecs_service.py +++ b/lib/ansible/modules/cloud/amazon/ecs_service.py @@ -485,13 +485,12 @@ DEPLOYMENT_CONFIGURATION_TYPE_MAP = { } from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import ec2_argument_spec from ansible.module_utils.ec2 import snake_dict_to_camel_dict, map_complex_type, get_ec2_security_group_ids_from_names try: import botocore except ImportError: - pass # handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule class EcsServiceManager: @@ -652,8 +651,7 @@ class EcsServiceManager: def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( state=dict(required=True, choices=['present', 'absent', 'deleting']), name=dict(required=True, type='str'), cluster=dict(required=False, type='str'), @@ -677,7 +675,7 @@ def main(): launch_type=dict(required=False, choices=['EC2', 'FARGATE']), service_registries=dict(required=False, type='list', default=[]), scheduling_strategy=dict(required=False, choices=['DAEMON', 'REPLICA']) - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True, diff --git a/lib/ansible/modules/cloud/amazon/ecs_service_info.py b/lib/ansible/modules/cloud/amazon/ecs_service_info.py index b7cfe17a4b..4a7b99c690 100644 --- a/lib/ansible/modules/cloud/amazon/ecs_service_info.py +++ b/lib/ansible/modules/cloud/amazon/ecs_service_info.py @@ -139,10 +139,10 @@ services: try: import botocore except ImportError: - pass # handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import ec2_argument_spec, AWSRetry +from ansible.module_utils.ec2 import AWSRetry class EcsServiceManager: @@ -219,13 +219,12 @@ def chunks(l, n): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( details=dict(type='bool', default=False), events=dict(type='bool', default=True), cluster=dict(), service=dict(type='list') - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True) is_old_facts = module._name == 'ecs_service_facts' diff --git a/lib/ansible/modules/cloud/amazon/ecs_task.py b/lib/ansible/modules/cloud/amazon/ecs_task.py index e1e41252ba..a0060ce9d3 100644 --- a/lib/ansible/modules/cloud/amazon/ecs_task.py +++ b/lib/ansible/modules/cloud/amazon/ecs_task.py @@ -221,12 +221,12 @@ task: from ansible.module_utils.aws.core import AnsibleAWSModule from ansible.module_utils.basic import missing_required_lib -from ansible.module_utils.ec2 import ec2_argument_spec, get_ec2_security_group_ids_from_names, ansible_dict_to_boto3_tag_list +from ansible.module_utils.ec2 import get_ec2_security_group_ids_from_names, ansible_dict_to_boto3_tag_list try: import botocore except ImportError: - pass # handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule class EcsExecManager: @@ -340,8 +340,7 @@ class EcsExecManager: def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( operation=dict(required=True, choices=['run', 'start', 'stop']), cluster=dict(required=False, type='str'), # R S P task_definition=dict(required=False, type='str'), # R* S* @@ -353,7 +352,7 @@ def main(): network_configuration=dict(required=False, type='dict'), launch_type=dict(required=False, choices=['EC2', 'FARGATE']), tags=dict(required=False, type='dict') - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True, required_if=[('launch_type', 'FARGATE', ['network_configuration'])]) diff --git a/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py b/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py index 85bb39ca3e..a0571b5d81 100644 --- a/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py +++ b/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py @@ -218,12 +218,11 @@ taskdefinition: try: import botocore - HAS_BOTO3 = True except ImportError: - HAS_BOTO3 = False + pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import boto3_conn, camel_dict_to_snake_dict, ec2_argument_spec, get_aws_connection_info +from ansible.module_utils.ec2 import camel_dict_to_snake_dict from ansible.module_utils._text import to_text @@ -233,8 +232,7 @@ class EcsTaskManager: def __init__(self, module): self.module = module - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - self.ecs = boto3_conn(module, conn_type='client', resource='ecs', region=region, endpoint=ec2_url, **aws_connect_kwargs) + self.ecs = module.client('ecs') def describe_task(self, task_name): try: @@ -325,8 +323,7 @@ class EcsTaskManager: def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( state=dict(required=True, choices=['present', 'absent']), arn=dict(required=False, type='str'), family=dict(required=False, type='str'), @@ -340,16 +337,13 @@ def main(): launch_type=dict(required=False, choices=['EC2', 'FARGATE']), cpu=dict(), memory=dict(required=False, type='str') - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True, required_if=[('launch_type', 'FARGATE', ['cpu', 'memory'])] ) - if not HAS_BOTO3: - module.fail_json(msg='boto3 is required.') - task_to_describe = None task_mgr = EcsTaskManager(module) results = dict(changed=False) diff --git a/lib/ansible/modules/cloud/amazon/ecs_taskdefinition_info.py b/lib/ansible/modules/cloud/amazon/ecs_taskdefinition_info.py index be0cd39745..815339fa07 100644 --- a/lib/ansible/modules/cloud/amazon/ecs_taskdefinition_info.py +++ b/lib/ansible/modules/cloud/amazon/ecs_taskdefinition_info.py @@ -303,27 +303,24 @@ placement_constraints: ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import camel_dict_to_snake_dict, boto3_conn, ec2_argument_spec, get_aws_connection_info +from ansible.module_utils.ec2 import camel_dict_to_snake_dict try: import botocore except ImportError: - pass # will be detected by imported AnsibleAWSModule + pass # caught by AnsibleAWSModule def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( task_definition=dict(required=True, type='str') - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True) if module._name == 'ecs_taskdefinition_facts': module.deprecate("The 'ecs_taskdefinition_facts' module has been renamed to 'ecs_taskdefinition_info'", version='2.13') - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - ecs = boto3_conn(module, conn_type='client', resource='ecs', - region=region, endpoint=ec2_url, **aws_connect_kwargs) + ecs = module.client('ecs') try: ecs_td = ecs.describe_task_definition(taskDefinition=module.params['task_definition'])['taskDefinition'] diff --git a/lib/ansible/modules/cloud/amazon/efs_info.py b/lib/ansible/modules/cloud/amazon/efs_info.py index 617b6ef902..5238f041e0 100644 --- a/lib/ansible/modules/cloud/amazon/efs_info.py +++ b/lib/ansible/modules/cloud/amazon/efs_info.py @@ -182,7 +182,7 @@ except ImportError: pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import boto3_conn, get_aws_connection_info, ec2_argument_spec, AWSRetry +from ansible.module_utils.ec2 import get_aws_connection_info, AWSRetry from ansible.module_utils.ec2 import camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict from ansible.module_utils._text import to_native @@ -193,16 +193,14 @@ class EFSConnection(object): STATE_DELETING = 'deleting' STATE_DELETED = 'deleted' - def __init__(self, module, region, **aws_connect_params): + def __init__(self, module): try: - self.connection = boto3_conn(module, conn_type='client', - resource='efs', region=region, - **aws_connect_params) + self.connection = module.client('efs') self.module = module except Exception as e: module.fail_json(msg="Failed to connect to AWS: %s" % to_native(e)) - self.region = region + self.region = get_aws_connection_info(module, boto3=True)[0] @AWSRetry.exponential_backoff(catch_extra_error_codes=['ThrottlingException']) def list_file_systems(self, **kwargs): @@ -360,13 +358,12 @@ def main(): """ Module action handler """ - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( id=dict(), name=dict(aliases=['creation_token']), tags=dict(type="dict", default={}), targets=dict(type="list", default=[]) - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True) @@ -375,8 +372,7 @@ def main(): module.deprecate("The 'efs_facts' module has been renamed to 'efs_info', " "and the renamed one no longer returns ansible_facts", version='2.13') - region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True) - connection = EFSConnection(module, region, **aws_connect_params) + connection = EFSConnection(module) name = module.params.get('name') fs_id = module.params.get('id') diff --git a/lib/ansible/modules/cloud/amazon/elasticache_info.py b/lib/ansible/modules/cloud/amazon/elasticache_info.py index dddd9b00b8..cd4a243810 100644 --- a/lib/ansible/modules/cloud/amazon/elasticache_info.py +++ b/lib/ansible/modules/cloud/amazon/elasticache_info.py @@ -227,15 +227,13 @@ elasticache_clusters: ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import boto3_conn, ec2_argument_spec, get_aws_connection_info -from ansible.module_utils.ec2 import camel_dict_to_snake_dict, AWSRetry -from ansible.module_utils.ec2 import boto3_tag_list_to_ansible_dict +from ansible.module_utils.ec2 import get_aws_connection_info, camel_dict_to_snake_dict, AWSRetry, boto3_tag_list_to_ansible_dict try: import botocore except ImportError: - pass # handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule @AWSRetry.exponential_backoff() @@ -262,9 +260,7 @@ def get_elasticache_tags_with_backoff(client, cluster_id): def get_aws_account_id(module): try: - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - client = boto3_conn(module, conn_type='client', resource='sts', - region=region, endpoint=ec2_url, **aws_connect_kwargs) + client = module.client('sts') except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: module.fail_json_aws(e, msg="Can't authorize connection") @@ -274,7 +270,8 @@ def get_aws_account_id(module): module.fail_json_aws(e, msg="Couldn't obtain AWS account id") -def get_elasticache_clusters(client, module, region): +def get_elasticache_clusters(client, module): + region = get_aws_connection_info(module, boto3=True)[0] try: clusters = describe_cache_clusters_with_backoff(client, cluster_id=module.params.get('name')) except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: @@ -297,21 +294,16 @@ def get_elasticache_clusters(client, module, region): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - name=dict(required=False), - ) + argument_spec = dict( + name=dict(required=False), ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True) if module._name == 'elasticache_facts': module.deprecate("The 'elasticache_facts' module has been renamed to 'elasticache_info'", version='2.13') - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - client = boto3_conn(module, conn_type='client', resource='elasticache', - region=region, endpoint=ec2_url, **aws_connect_kwargs) + client = module.client('elasticache') - module.exit_json(elasticache_clusters=get_elasticache_clusters(client, module, region)) + module.exit_json(elasticache_clusters=get_elasticache_clusters(client, module)) if __name__ == '__main__': diff --git a/lib/ansible/modules/cloud/amazon/elb_application_lb.py b/lib/ansible/modules/cloud/amazon/elb_application_lb.py index b748c3ab29..a14e4f70f1 100644 --- a/lib/ansible/modules/cloud/amazon/elb_application_lb.py +++ b/lib/ansible/modules/cloud/amazon/elb_application_lb.py @@ -462,8 +462,7 @@ vpc_id: ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import boto3_conn, get_aws_connection_info, camel_dict_to_snake_dict, ec2_argument_spec, \ - boto3_tag_list_to_ansible_dict, compare_aws_tags, HAS_BOTO3 +from ansible.module_utils.ec2 import camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict, compare_aws_tags from ansible.module_utils.aws.elbv2 import ApplicationLoadBalancer, ELBListeners, ELBListener, ELBListenerRules, ELBListenerRule from ansible.module_utils.aws.elb_utils import get_elb_listener_rules @@ -591,38 +590,35 @@ def delete_elb(elb_obj): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - access_logs_enabled=dict(type='bool'), - access_logs_s3_bucket=dict(type='str'), - access_logs_s3_prefix=dict(type='str'), - deletion_protection=dict(type='bool'), - http2=dict(type='bool'), - idle_timeout=dict(type='int'), - listeners=dict(type='list', - elements='dict', - options=dict( - Protocol=dict(type='str', required=True), - Port=dict(type='int', required=True), - SslPolicy=dict(type='str'), - Certificates=dict(type='list'), - DefaultActions=dict(type='list', required=True), - Rules=dict(type='list') - ) - ), - name=dict(required=True, type='str'), - purge_listeners=dict(default=True, type='bool'), - purge_tags=dict(default=True, type='bool'), - subnets=dict(type='list'), - security_groups=dict(type='list'), - scheme=dict(default='internet-facing', choices=['internet-facing', 'internal']), - state=dict(choices=['present', 'absent'], default='present'), - tags=dict(type='dict'), - wait_timeout=dict(type='int'), - wait=dict(default=False, type='bool'), - purge_rules=dict(default=True, type='bool') - ) + argument_spec = dict( + access_logs_enabled=dict(type='bool'), + access_logs_s3_bucket=dict(type='str'), + access_logs_s3_prefix=dict(type='str'), + deletion_protection=dict(type='bool'), + http2=dict(type='bool'), + idle_timeout=dict(type='int'), + listeners=dict(type='list', + elements='dict', + options=dict( + Protocol=dict(type='str', required=True), + Port=dict(type='int', required=True), + SslPolicy=dict(type='str'), + Certificates=dict(type='list'), + DefaultActions=dict(type='list', required=True), + Rules=dict(type='list') + ) + ), + name=dict(required=True, type='str'), + purge_listeners=dict(default=True, type='bool'), + purge_tags=dict(default=True, type='bool'), + subnets=dict(type='list'), + security_groups=dict(type='list'), + scheme=dict(default='internet-facing', choices=['internet-facing', 'internal']), + state=dict(choices=['present', 'absent'], default='present'), + tags=dict(type='dict'), + wait_timeout=dict(type='int'), + wait=dict(default=False, type='bool'), + purge_rules=dict(default=True, type='bool') ) module = AnsibleAWSModule(argument_spec=argument_spec, diff --git a/lib/ansible/modules/cloud/amazon/elb_classic_lb_info.py b/lib/ansible/modules/cloud/amazon/elb_classic_lb_info.py index 3d2e2f785e..c32bf452ca 100644 --- a/lib/ansible/modules/cloud/amazon/elb_classic_lb_info.py +++ b/lib/ansible/modules/cloud/amazon/elb_classic_lb_info.py @@ -144,14 +144,9 @@ elbs: vpc_id: vpc-c248fda4 ''' -import traceback - from ansible.module_utils.aws.core import AnsibleAWSModule from ansible.module_utils.ec2 import ( AWSRetry, - boto3_conn, - ec2_argument_spec, - get_aws_connection_info, camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict ) @@ -159,7 +154,7 @@ from ansible.module_utils.ec2 import ( try: import botocore except ImportError: - pass + pass # caught by AnsibleAWSModule @AWSRetry.backoff(tries=5, delay=5, backoff=2.0) @@ -200,18 +195,15 @@ def lb_instance_health(connection, load_balancer_name, instances, state): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( names={'default': [], 'type': 'list'} ) - ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True) if module._name == 'elb_classic_lb_facts': module.deprecate("The 'elb_classic_lb_facts' module has been renamed to 'elb_classic_lb_info'", version='2.13') - region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True) - connection = boto3_conn(module, conn_type='client', resource='elb', region=region, endpoint=ec2_url, **aws_connect_params) + connection = module.client('elb') try: elbs = list_elbs(connection, module.params.get('names')) diff --git a/lib/ansible/modules/cloud/amazon/elb_target_group.py b/lib/ansible/modules/cloud/amazon/elb_target_group.py index a9192bd73b..0ca6b7f8f4 100644 --- a/lib/ansible/modules/cloud/amazon/elb_target_group.py +++ b/lib/ansible/modules/cloud/amazon/elb_target_group.py @@ -373,10 +373,10 @@ import time try: import botocore except ImportError: - pass # handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import (camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict, ec2_argument_spec, +from ansible.module_utils.ec2 import (camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict, compare_aws_tags, ansible_dict_to_boto3_tag_list) from distutils.version import LooseVersion @@ -802,34 +802,31 @@ def delete_target_group(connection, module): def main(): protocols_list = ['http', 'https', 'tcp', 'tls', 'udp', 'tcp_udp', 'HTTP', 'HTTPS', 'TCP', 'TLS', 'UDP', 'TCP_UDP'] - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - deregistration_delay_timeout=dict(type='int'), - health_check_protocol=dict(choices=protocols_list), - health_check_port=dict(), - health_check_path=dict(), - health_check_interval=dict(type='int'), - health_check_timeout=dict(type='int'), - healthy_threshold_count=dict(type='int'), - modify_targets=dict(default=True, type='bool'), - name=dict(required=True), - port=dict(type='int'), - protocol=dict(choices=protocols_list), - purge_tags=dict(default=True, type='bool'), - stickiness_enabled=dict(type='bool'), - stickiness_type=dict(default='lb_cookie'), - stickiness_lb_cookie_duration=dict(type='int'), - state=dict(required=True, choices=['present', 'absent']), - successful_response_codes=dict(), - tags=dict(default={}, type='dict'), - target_type=dict(default='instance', choices=['instance', 'ip', 'lambda']), - targets=dict(type='list'), - unhealthy_threshold_count=dict(type='int'), - vpc_id=dict(), - wait_timeout=dict(type='int', default=200), - wait=dict(type='bool', default=False) - ) + argument_spec = dict( + deregistration_delay_timeout=dict(type='int'), + health_check_protocol=dict(choices=protocols_list), + health_check_port=dict(), + health_check_path=dict(), + health_check_interval=dict(type='int'), + health_check_timeout=dict(type='int'), + healthy_threshold_count=dict(type='int'), + modify_targets=dict(default=True, type='bool'), + name=dict(required=True), + port=dict(type='int'), + protocol=dict(choices=protocols_list), + purge_tags=dict(default=True, type='bool'), + stickiness_enabled=dict(type='bool'), + stickiness_type=dict(default='lb_cookie'), + stickiness_lb_cookie_duration=dict(type='int'), + state=dict(required=True, choices=['present', 'absent']), + successful_response_codes=dict(), + tags=dict(default={}, type='dict'), + target_type=dict(default='instance', choices=['instance', 'ip', 'lambda']), + targets=dict(type='list'), + unhealthy_threshold_count=dict(type='int'), + vpc_id=dict(), + wait_timeout=dict(type='int', default=200), + wait=dict(type='bool', default=False) ) module = AnsibleAWSModule(argument_spec=argument_spec, required_if=[ diff --git a/lib/ansible/modules/cloud/amazon/elb_target_info.py b/lib/ansible/modules/cloud/amazon/elb_target_info.py index bc89507279..c400789420 100644 --- a/lib/ansible/modules/cloud/amazon/elb_target_info.py +++ b/lib/ansible/modules/cloud/amazon/elb_target_info.py @@ -220,8 +220,7 @@ except ImportError: pass from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import (HAS_BOTO3, camel_dict_to_snake_dict, - AWSRetry) +from ansible.module_utils.ec2 import camel_dict_to_snake_dict, AWSRetry class Target(object): diff --git a/lib/ansible/modules/cloud/amazon/iam_group.py b/lib/ansible/modules/cloud/amazon/iam_group.py index 4a9ae593b2..68327e68fb 100644 --- a/lib/ansible/modules/cloud/amazon/iam_group.py +++ b/lib/ansible/modules/cloud/amazon/iam_group.py @@ -185,9 +185,9 @@ from ansible.module_utils.ec2 import camel_dict_to_snake_dict from ansible.module_utils.ec2 import AWSRetry try: - from botocore.exceptions import BotoCoreError, ClientError, ParamValidationError + from botocore.exceptions import BotoCoreError, ClientError except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule def compare_attached_group_policies(current_attached_policies, new_attached_policies): diff --git a/lib/ansible/modules/cloud/amazon/iam_password_policy.py b/lib/ansible/modules/cloud/amazon/iam_password_policy.py index 2d78ee27f2..08334992fc 100644 --- a/lib/ansible/modules/cloud/amazon/iam_password_policy.py +++ b/lib/ansible/modules/cloud/amazon/iam_password_policy.py @@ -108,8 +108,7 @@ except ImportError: pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import boto3_conn, get_aws_connection_info, AWSRetry -from ansible.module_utils.ec2 import camel_dict_to_snake_dict, boto3_tag_list_to_ansible_dict +from ansible.module_utils.ec2 import camel_dict_to_snake_dict class IAMConnection(object): diff --git a/lib/ansible/modules/cloud/amazon/iam_role_info.py b/lib/ansible/modules/cloud/amazon/iam_role_info.py index 2ea513d4fa..802870d756 100644 --- a/lib/ansible/modules/cloud/amazon/iam_role_info.py +++ b/lib/ansible/modules/cloud/amazon/iam_role_info.py @@ -157,8 +157,7 @@ except ImportError: pass # caught by AnsibleAWSModule from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import boto3_conn, get_aws_connection_info, ec2_argument_spec, AWSRetry -from ansible.module_utils.ec2 import boto3_tag_list_to_ansible_dict, camel_dict_to_snake_dict +from ansible.module_utils.ec2 import boto3_tag_list_to_ansible_dict, camel_dict_to_snake_dict, AWSRetry @AWSRetry.exponential_backoff() @@ -239,11 +238,10 @@ def main(): """ Module action handler """ - argument_spec = ec2_argument_spec() - argument_spec.update(dict( + argument_spec = dict( name=dict(aliases=['role_name']), path_prefix=dict(), - )) + ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True, @@ -251,9 +249,7 @@ def main(): if module._name == 'iam_role_facts': module.deprecate("The 'iam_role_facts' module has been renamed to 'iam_role_info'", version='2.13') - region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True) - client = boto3_conn(module, conn_type='client', resource='iam', - region=region, endpoint=ec2_url, **aws_connect_params) + client = module.client('iam') module.exit_json(changed=False, iam_roles=describe_iam_roles(module, client)) diff --git a/lib/ansible/modules/cloud/amazon/iam_user.py b/lib/ansible/modules/cloud/amazon/iam_user.py index ea56ef07bb..a85cd94c98 100644 --- a/lib/ansible/modules/cloud/amazon/iam_user.py +++ b/lib/ansible/modules/cloud/amazon/iam_user.py @@ -109,15 +109,14 @@ user: from ansible.module_utils._text import to_native from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import camel_dict_to_snake_dict, ec2_argument_spec, get_aws_connection_info, boto3_conn -from ansible.module_utils.ec2 import HAS_BOTO3 +from ansible.module_utils.ec2 import camel_dict_to_snake_dict import traceback try: from botocore.exceptions import ClientError, ParamValidationError, BotoCoreError except ImportError: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule def compare_attached_policies(current_attached_policies, new_attached_policies): diff --git a/lib/ansible/modules/cloud/amazon/lambda_info.py b/lib/ansible/modules/cloud/amazon/lambda_info.py index fce33453c2..d7203c2f95 100644 --- a/lib/ansible/modules/cloud/amazon/lambda_info.py +++ b/lib/ansible/modules/cloud/amazon/lambda_info.py @@ -84,7 +84,7 @@ function.TheName: ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import camel_dict_to_snake_dict, get_aws_connection_info, boto3_conn +from ansible.module_utils.ec2 import camel_dict_to_snake_dict import json import datetime import re @@ -93,7 +93,7 @@ import re try: from botocore.exceptions import ClientError except ImportError: - pass # protected by AnsibleAWSModule + pass # caught by AnsibleAWSModule def fix_return(node): @@ -354,16 +354,7 @@ def main(): if len(function_name) > 64: module.fail_json(msg='Function name "{0}" exceeds 64 character limit'.format(function_name)) - try: - region, endpoint, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - aws_connect_kwargs.update(dict(region=region, - endpoint=endpoint, - conn_type='client', - resource='lambda' - )) - client = boto3_conn(module, **aws_connect_kwargs) - except ClientError as e: - module.fail_json_aws(e, "trying to set up boto connection") + client = module.client('lambda') invocations = dict( aliases='alias_details', diff --git a/lib/ansible/modules/cloud/amazon/lambda_policy.py b/lib/ansible/modules/cloud/amazon/lambda_policy.py index 229abb81e2..2c7342411b 100644 --- a/lib/ansible/modules/cloud/amazon/lambda_policy.py +++ b/lib/ansible/modules/cloud/amazon/lambda_policy.py @@ -144,12 +144,11 @@ import json import re from ansible.module_utils._text import to_native from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import get_aws_connection_info, boto3_conn try: from botocore.exceptions import ClientError except Exception: - pass # will be protected by AnsibleAWSModule + pass # caught by AnsibleAWSModule def pc(key): @@ -398,15 +397,6 @@ def manage_state(module, lambda_client): return dict(changed=changed, ansible_facts=dict(lambda_policy_action=action_taken)) -def setup_client(module): - region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True) - if region: - connection = boto3_conn(module, conn_type='client', resource='lambda', region=region, endpoint=ec2_url, **aws_connect_params) - else: - module.fail_json(msg="region must be specified") - return connection - - def setup_module_object(): argument_spec = dict( state=dict(default='present', choices=['present', 'absent']), @@ -438,7 +428,7 @@ def main(): """ module = setup_module_object() - client = setup_client(module) + client = module.client('lambda') validate_params(module) results = manage_state(module, client) diff --git a/lib/ansible/modules/cloud/amazon/rds_snapshot_info.py b/lib/ansible/modules/cloud/amazon/rds_snapshot_info.py index d47c91ab76..94ad28284d 100644 --- a/lib/ansible/modules/cloud/amazon/rds_snapshot_info.py +++ b/lib/ansible/modules/cloud/amazon/rds_snapshot_info.py @@ -302,7 +302,7 @@ from ansible.module_utils.ec2 import AWSRetry, boto3_tag_list_to_ansible_dict, c try: import botocore except Exception: - pass # caught by imported HAS_BOTO3 + pass # caught by AnsibleAWSModule def common_snapshot_info(module, conn, method, prefix, params): diff --git a/lib/ansible/modules/cloud/amazon/redshift_cross_region_snapshots.py b/lib/ansible/modules/cloud/amazon/redshift_cross_region_snapshots.py index 4b04b6a9dd..42d93228e6 100644 --- a/lib/ansible/modules/cloud/amazon/redshift_cross_region_snapshots.py +++ b/lib/ansible/modules/cloud/amazon/redshift_cross_region_snapshots.py @@ -92,7 +92,6 @@ EXAMPLES = ''' RETURN = ''' # ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import ec2_argument_spec class SnapshotController(object): @@ -148,16 +147,13 @@ def needs_update(actual, requested): def run_module(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - cluster_name=dict(type='str', required=True, aliases=['cluster']), - state=dict(type='str', choices=['present', 'absent'], default='present'), - region=dict(type='str', required=True, aliases=['source']), - destination_region=dict(type='str', required=True, aliases=['destination']), - snapshot_copy_grant=dict(type='str', aliases=['copy_grant']), - snapshot_retention_period=dict(type='int', required=True, aliases=['retention_period']), - ) + argument_spec = dict( + cluster_name=dict(type='str', required=True, aliases=['cluster']), + state=dict(type='str', choices=['present', 'absent'], default='present'), + region=dict(type='str', required=True, aliases=['source']), + destination_region=dict(type='str', required=True, aliases=['destination']), + snapshot_copy_grant=dict(type='str', aliases=['copy_grant']), + snapshot_retention_period=dict(type='int', required=True, aliases=['retention_period']), ) module = AnsibleAWSModule( diff --git a/lib/ansible/modules/cloud/amazon/route53_zone.py b/lib/ansible/modules/cloud/amazon/route53_zone.py index 8a1f9705cf..f3285da2c5 100644 --- a/lib/ansible/modules/cloud/amazon/route53_zone.py +++ b/lib/ansible/modules/cloud/amazon/route53_zone.py @@ -126,12 +126,11 @@ delegation_set_id: import time from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import boto3_conn, ec2_argument_spec, get_aws_connection_info try: from botocore.exceptions import BotoCoreError, ClientError except ImportError: - pass # handled by AnsibleAWSModule + pass # caught by AnsibleAWSModule def find_zones(module, client, zone_in, private_zone): diff --git a/lib/ansible/modules/cloud/amazon/sts_assume_role.py b/lib/ansible/modules/cloud/amazon/sts_assume_role.py index 8bc89c83e9..cd82a549cb 100644 --- a/lib/ansible/modules/cloud/amazon/sts_assume_role.py +++ b/lib/ansible/modules/cloud/amazon/sts_assume_role.py @@ -111,13 +111,12 @@ EXAMPLES = ''' ''' from ansible.module_utils.aws.core import AnsibleAWSModule -from ansible.module_utils.ec2 import (boto3_conn, get_aws_connection_info, - ec2_argument_spec, camel_dict_to_snake_dict) +from ansible.module_utils.ec2 import camel_dict_to_snake_dict try: from botocore.exceptions import ClientError, ParamValidationError except ImportError: - pass # caught by imported AnsibleAWSModule + pass # caught by AnsibleAWSModule def _parse_response(response): @@ -160,29 +159,19 @@ def assume_role_policy(connection, module): def main(): - argument_spec = ec2_argument_spec() - argument_spec.update( - dict( - role_arn=dict(required=True), - role_session_name=dict(required=True), - duration_seconds=dict(required=False, default=None, type='int'), - external_id=dict(required=False, default=None), - policy=dict(required=False, default=None), - mfa_serial_number=dict(required=False, default=None), - mfa_token=dict(required=False, default=None) - ) + argument_spec = dict( + role_arn=dict(required=True), + role_session_name=dict(required=True), + duration_seconds=dict(required=False, default=None, type='int'), + external_id=dict(required=False, default=None), + policy=dict(required=False, default=None), + mfa_serial_number=dict(required=False, default=None), + mfa_token=dict(required=False, default=None) ) module = AnsibleAWSModule(argument_spec=argument_spec) - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - - if region: - connection = boto3_conn(module, conn_type='client', resource='sts', - region=region, endpoint=ec2_url, **aws_connect_kwargs) - - else: - module.fail_json(msg="region must be specified") + connection = module.client('sts') assume_role_policy(connection, module) diff --git a/test/integration/targets/lambda_policy/tasks/main.yml b/test/integration/targets/lambda_policy/tasks/main.yml index df525351e5..5ea0f2012f 100644 --- a/test/integration/targets/lambda_policy/tasks/main.yml +++ b/test/integration/targets/lambda_policy/tasks/main.yml @@ -40,24 +40,7 @@ assert: that: - 'result.failed' - - '"region must be specified" in result.msg' - - # ============================================================ - - name: test with all required dummy parameters but no region - lambda_policy: - statement_id: dummy - principal: api_fakeway - action: fake:do_something_fake - function_name: dummy_fake_function - region: null - ignore_errors: true - register: result - - - name: assert failure and appropriate message when called false region region - assert: - that: - - 'result.failed' - - '"region must be specified" in result.msg' + - '"requires a region and none was found" in result.msg' # ============================================================ - name: test exceptions generated by forcing bad ec2 url |