Пример #1
0
def snapshot_import_ansible_module():
    argument_spec = dict(
        description=dict(default=''),
        wait=dict(type='bool', default=True),
        wait_timeout=dict(type='int', default=900),
        format=dict(required=True),
        url=dict(),
        s3_bucket=dict(),
        s3_key=dict(),
        encrypted=dict(type='bool', default=False),
        kms_key_id=dict(),
        role_name=dict(),
        tags=dict(type='dict')
    )
    return AnsibleAWSModule(
        argument_spec=argument_spec,
        supports_check_mode=True,
        mutually_exclusive=[['s3_bucket', 'url']],
        required_one_of=[['s3_bucket', 'url']],
        required_together=[['s3_bucket', 's3_key']]
    )
Пример #2
0
def main():

    argument_spec = dict(name=dict(required=True),
                         managed_policy=dict(default=[], type='list'),
                         users=dict(default=[], type='list'),
                         state=dict(choices=['present', 'absent'],
                                    required=True),
                         purge_users=dict(default=False, type='bool'),
                         purge_policy=dict(default=False, type='bool'))

    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)

    connection = module.client('iam')

    state = module.params.get("state")

    if state == 'present':
        create_or_update_group(connection, module)
    else:
        destroy_group(connection, module)
Пример #3
0
def main():
    argument_spec = ec2_argument_spec()
    argument_spec.update(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)

    module.exit_json(
        elasticache_clusters=get_elasticache_clusters(client, module, region))
Пример #4
0
def main():
    """
     Module action handler
    """
    argument_spec = ec2_argument_spec()
    argument_spec.update(dict(
        name=dict(aliases=['role_name']),
        path_prefix=dict(),
    ))

    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True,
                              mutually_exclusive=[['name', 'path_prefix']])
    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)

    module.exit_json(changed=False, iam_roles=describe_iam_roles(module, client))
Пример #5
0
def setup_module_object():
    argument_spec = dict(
        state=dict(default='present', choices=['present', 'absent']),
        function_name=dict(required=True, aliases=['lambda_function_arn', 'function_arn']),
        statement_id=dict(required=True, aliases=['sid']),
        alias=dict(),
        version=dict(type='int'),
        action=dict(required=True, ),
        principal=dict(required=True, ),
        source_arn=dict(),
        source_account=dict(),
        event_source_token=dict(),
    )

    return AnsibleAWSModule(
        argument_spec=argument_spec,
        supports_check_mode=True,
        mutually_exclusive=[['alias', 'version'],
                            ['event_source_token', 'source_arn'],
                            ['event_source_token', 'source_account']],
    )
Пример #6
0
def main():

    argument_spec = dict(image_ids=dict(default=[],
                                        type='list',
                                        aliases=['image_id']),
                         filters=dict(default={}, type='dict'),
                         owners=dict(default=[],
                                     type='list',
                                     aliases=['owner']),
                         executable_users=dict(default=[],
                                               type='list',
                                               aliases=['executable_user']),
                         describe_image_attributes=dict(default=False,
                                                        type='bool'))

    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)

    ec2_client = module.client('ec2')

    list_ec2_images(ec2_client, module)
Пример #7
0
def main():
    module = AnsibleAWSModule(
        argument_spec=argument_spec,
        supports_check_mode=True,
        mutually_exclusive=[[
            'db_snapshot_identifier', 'db_instance_identifier'
        ]],
    )

    region, ec2_url, aws_connect_params = get_aws_connection_info(module,
                                                                  boto3=True)
    if not region:
        module.fail_json(
            msg=
            "Region not specified. Unable to determine region from configuration."
        )

    # connect to the rds endpoint
    conn = boto3_conn(module, 'client', 'rds', region, **aws_connect_params)

    module.exit_json(**snapshot_facts(module, conn))
Пример #8
0
def main():
    argument_spec = ec2_argument_spec()
    argument_spec.update(
        dict(
            name=dict(required=False),
        )
    )
    module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)

    region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True)
    client = boto3_conn(module, conn_type='client', resource='waf', region=region, endpoint=ec2_url, **aws_connect_kwargs)

    web_acls = list_web_acls(client, module)
    name = module.params['name']
    if name:
        web_acls = [web_acl for web_acl in web_acls if
                    web_acl['Name'] == name]
        if not web_acls:
            module.fail_json(msg="WAF named %s not found" % name)
    module.exit_json(wafs=[get_web_acl(client, module, web_acl['WebACLId'])
                           for web_acl in web_acls])
def main():
    argument_spec = dict(state=dict(required=True,
                                    choices=['present', 'absent']),
                         id_to_associate=dict(required=True,
                                              aliases=[
                                                  'link_aggregation_group_id',
                                                  'connection_id'
                                              ]),
                         public=dict(type='bool'),
                         name=dict(),
                         vlan=dict(type='int', default=100),
                         bgp_asn=dict(type='int', default=65000),
                         authentication_key=dict(),
                         amazon_address=dict(),
                         customer_address=dict(),
                         address_type=dict(),
                         cidr=dict(type='list'),
                         virtual_gateway_id=dict(),
                         virtual_interface_id=dict())

    module = AnsibleAWSModule(
        argument_spec=argument_spec,
        required_one_of=[['virtual_interface_id', 'name']],
        required_if=[['state', 'present', ['public']],
                     ['public', False, ['virtual_gateway_id']],
                     ['public', True, ['amazon_address']],
                     ['public', True, ['customer_address']],
                     ['public', True, ['cidr']]])

    connection = module.client('directconnect')

    try:
        changed, latest_state = ensure_state(connection, module)
    except DirectConnectError as e:
        if e.exception:
            module.fail_json_aws(exception=e.exception, msg=e.msg)
        else:
            module.fail_json(msg=e.msg)

    module.exit_json(changed=changed, **camel_dict_to_snake_dict(latest_state))
def main():
    """
    Main entry point.

    :return dict: changed, batch_compute_environment_action, response
    """

    argument_spec = dict(
        state=dict(default='present', choices=['present', 'absent']),
        compute_environment_name=dict(required=True),
        type=dict(required=True, choices=['MANAGED', 'UNMANAGED']),
        compute_environment_state=dict(required=False,
                                       default='ENABLED',
                                       choices=['ENABLED', 'DISABLED']),
        service_role=dict(required=True),
        compute_resource_type=dict(required=True, choices=['EC2', 'SPOT']),
        minv_cpus=dict(type='int', required=True),
        maxv_cpus=dict(type='int', required=True),
        desiredv_cpus=dict(type='int'),
        instance_types=dict(type='list', required=True),
        image_id=dict(),
        subnets=dict(type='list', required=True),
        security_group_ids=dict(type='list', required=True),
        ec2_key_pair=dict(),
        instance_role=dict(required=True),
        tags=dict(type='dict'),
        bid_percentage=dict(type='int'),
        spot_iam_fleet_role=dict(),
    )

    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)

    client = module.client('batch')

    validate_params(module)

    results = manage_state(module, client)

    module.exit_json(**camel_dict_to_snake_dict(results, ignore_list=['Tags']))
Пример #11
0
    def test_botocore_exception_reports_nicely_via_fail_json_aws(self):

        basic._ANSIBLE_ARGS = to_bytes(json.dumps({'ANSIBLE_MODULE_ARGS': {}}))
        module = AnsibleAWSModule(argument_spec=dict(
            fail_mode=dict(type='list', default=['success'])))

        fail_json_double = Mock()
        err_msg = {'Error': {'Code': 'FakeClass.FakeError'}}
        with patch.object(basic.AnsibleModule, 'fail_json', fail_json_double):
            try:
                raise botocore.exceptions.ClientError(err_msg,
                                                      'Could not find you')
            except Exception as e:
                print("exception is " + str(e))
                module.fail_json_aws(
                    e, msg="Fake failure for testing boto exception messages")

        assert (len(fail_json_double.mock_calls) >
                0), "failed to call fail_json when should have"
        assert (len(fail_json_double.mock_calls) <
                2), "called fail_json multiple times when once would do"
        assert("test_botocore_exception_reports_nicely"
               in fail_json_double.mock_calls[0][2]["exception"]), \
            "exception traceback doesn't include correct function, fail call was actually: " \
            + str(fail_json_double.mock_calls[0])

        assert("Fake failure for testing boto exception messages:"
               in fail_json_double.mock_calls[0][2]["msg"]), \
            "error message doesn't include the local message; was: " \
            + str(fail_json_double.mock_calls[0])
        assert("Could not find you" in fail_json_double.mock_calls[0][2]["msg"]), \
            "error message doesn't include the botocore exception message; was: " \
            + str(fail_json_double.mock_calls[0])
        try:
            fail_json_double.mock_calls[0][2]["error"]
        except KeyError:
            raise Exception("error was missing; call was: " +
                            str(fail_json_double.mock_calls[0]))
        assert("FakeClass.FakeError" == fail_json_double.mock_calls[0][2]["error"]["code"]), \
            "Failed to find error/code; was: " + str(fail_json_double.mock_calls[0])
Пример #12
0
def main():
    argument_spec = ec2_argument_spec()
    argument_spec.update(
        dict(deregistration_delay_timeout=dict(type='int'),
             health_check_protocol=dict(
                 choices=['http', 'https', 'tcp', 'HTTP', 'HTTPS', 'TCP']),
             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=['http', 'https', 'tcp', 'HTTP', 'HTTPS', 'TCP']),
             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']),
             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=[['state', 'present', ['protocol', 'port', 'vpc_id']]])

    connection = module.client('elbv2')

    if module.params.get('state') == 'present':
        create_or_update_target_group(connection, module)
    else:
        delete_target_group(connection, module)
Пример #13
0
def main():
    """
    Module action handler
    """
    argument_spec = ec2_argument_spec()
    argument_spec.update(
        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)

    region, _, aws_connect_params = get_aws_connection_info(module, boto3=True)
    connection = EFSConnection(module, region, **aws_connect_params)

    name = module.params.get('name')
    fs_id = module.params.get('id')
    tags = module.params.get('tags')
    targets = module.params.get('targets')

    file_systems_info = connection.get_file_systems(fs_id, name)

    if tags:
        file_systems_info = [
            item for item in file_systems_info if has_tags(item['tags'], tags)
        ]

    file_systems_info = connection.get_mount_targets_data(file_systems_info)
    file_systems_info = connection.get_security_groups_data(file_systems_info)

    if targets:
        targets = [(item, prefix_to_attr(item)) for item in targets]
        file_systems_info = [
            item for item in file_systems_info
            if has_targets(item['mount_targets'], targets)
        ]

    module.exit_json(changed=False, ansible_facts={'efs': file_systems_info})
Пример #14
0
def main():
    argument_spec = dict(
        state=dict(type='str',
                   default='present',
                   choices=['present', 'absent']),
        filters=dict(type='dict', default={}),
        vpn_gateway_id=dict(type='str'),
        tags=dict(default={}, type='dict'),
        connection_type=dict(default='ipsec.1', type='str'),
        tunnel_options=dict(no_log=True, type='list', default=[]),
        static_only=dict(default=False, type='bool'),
        customer_gateway_id=dict(type='str'),
        vpn_connection_id=dict(type='str'),
        purge_tags=dict(type='bool', default=False),
        routes=dict(type='list', default=[]),
        purge_routes=dict(type='bool', default=False),
        wait_timeout=dict(type='int', default=600),
        delay=dict(type='int', default=15),
    )
    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)
    connection = module.client('ec2')

    state = module.params.get('state')
    parameters = dict(module.params)

    try:
        if state == 'present':
            changed, response = ensure_present(connection, parameters,
                                               module.check_mode)
        elif state == 'absent':
            changed, response = ensure_absent(connection, parameters,
                                              module.check_mode)
    except VPNConnectionException as e:
        if e.exception:
            module.fail_json_aws(e.exception, msg=e.msg)
        else:
            module.fail_json(msg=e.msg)

    module.exit_json(changed=changed, **camel_dict_to_snake_dict(response))
Пример #15
0
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()))

    module = AnsibleAWSModule(
        argument_spec=argument_spec,
        required_if=[['lookup', 'id', ['route_table_id']],
                     ['lookup', 'tag', ['vpc_id']],
                     ['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)

    state = module.params.get('state')

    if state == 'present':
        result = ensure_route_table_present(connection, module)
    elif state == 'absent':
        result = ensure_route_table_absent(connection, module)

    module.exit_json(**result)
Пример #16
0
def main():

    argument_spec = ec2_argument_spec()
    argument_spec.update(
        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'
    if is_old_facts:
        module.deprecate(
            "The 'ecs_service_facts' module has been renamed to 'ecs_service_info', "
            "and the renamed one no longer returns ansible_facts",
            version='2.13')

    show_details = module.params.get('details')

    task_mgr = EcsServiceManager(module)
    if show_details:
        if module.params['service']:
            services = module.params['service']
        else:
            services = task_mgr.list_services(
                module.params['cluster'])['services']
        ecs_info = dict(services=[], services_not_running=[])
        for chunk in chunks(services, 10):
            running_services, services_not_running = task_mgr.describe_services(
                module.params['cluster'], chunk)
            ecs_info['services'].extend(running_services)
            ecs_info['services_not_running'].extend(services_not_running)
    else:
        ecs_info = task_mgr.list_services(module.params['cluster'])

    if is_old_facts:
        module.exit_json(changed=False, ansible_facts=ecs_info, **ecs_info)
    else:
        module.exit_json(changed=False, **ecs_info)
Пример #17
0
def main():
    argument_spec = ec2_argument_spec()
    argument_spec.update(
        dict(
            az=dict(default=None, required=False),
            cidr=dict(default=None, 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(default=None, 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'])]

    module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True, required_if=required_if)

    if module.params.get('assign_instances_ipv6') and not module.params.get('ipv6_cidr'):
        module.fail_json(msg="assign_instances_ipv6 is True but ipv6_cidr is None or an empty string")

    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)

    state = module.params.get('state')

    try:
        if state == 'present':
            result = ensure_subnet_present(connection, module)
        elif state == 'absent':
            result = ensure_subnet_absent(connection, module)
    except botocore.exceptions.ClientError as e:
        module.fail_json_aws(e)

    module.exit_json(**result)
Пример #18
0
def main():
    argument_spec = ec2_argument_spec()
    argument_spec.update(dict(names={'default': [], 'type': 'list'}))
    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='elb',
                            region=region,
                            endpoint=ec2_url,
                            **aws_connect_params)

    try:
        elbs = list_elbs(connection, module.params.get('names'))
    except (botocore.exceptions.ClientError,
            botocore.exceptions.BotoCoreError) as e:
        module.fail_json_aws(e, msg="Failed to get load balancer facts.")

    module.exit_json(elbs=elbs)
def main():
    module = AnsibleAWSModule(
        argument_spec=argument_spec,
        supports_check_mode=True,
    )

    region, ec2_url, aws_connect_params = get_aws_connection_info(module,
                                                                  boto3=True)
    if not region:
        module.fail_json(
            msg=
            "Region not specified. Unable to determine region from configuration."
        )

    # connect to the rds endpoint
    try:
        conn = boto3_conn(module, 'client', 'rds', region,
                          **aws_connect_params)
    except Exception as e:
        module.fail_json_aws(e, msg="trying to connect to AWS")

    module.exit_json(**instance_facts(module, conn))
Пример #20
0
def main():

    argument_spec = ec2_argument_spec()
    argument_spec.update(
        dict(
            image_ids=dict(default=[], type='list', aliases=['image_id']),
            filters=dict(default={}, type='dict'),
            owners=dict(default=[], type='list', aliases=['owner']),
            executable_users=dict(default=[], type='list', aliases=['executable_user'])
        )
    )

    module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)

    region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True)

    if region:
        ec2_client = boto3_conn(module, conn_type='client', resource='ec2', region=region, endpoint=ec2_url, **aws_connect_params)
    else:
        module.fail_json(msg="region must be specified")

    list_ec2_images(ec2_client, module)
Пример #21
0
def main():
    argument_spec = dict(
        name=dict(type='str', required=True),
        state=dict(type='str', default='present', choices=['present', 'absent']),
        active=dict(type='bool'),
        force=dict(type='bool', default=False),
    )

    module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)

    state = module.params.get('state')

    # SES APIs seem to have a much lower throttling threshold than most of the rest of the AWS APIs.
    # Docs say 1 call per second. This shouldn't actually be a big problem for normal usage, but
    # the ansible build runs multiple instances of the test in parallel that's caused throttling
    # failures so apply a jittered backoff to call SES calls.
    client = module.client('ses', retry_decorator=AWSRetry.jittered_backoff())

    if state == 'absent':
        remove_rule_set(client, module)
    else:
        create_or_update_rule_set(client, module)
Пример #22
0
def main():
    argument_spec = ec2_argument_spec()
    argument_spec.update(dict(
        state=dict(required=True, choices=['present', 'absent'], type='str'),
        policy_name=dict(required=True, type='str'),
        service_namespace=dict(required=True, choices=['ecs', 'elasticmapreduce', 'ec2', 'appstream', 'dynamodb'], type='str'),
        resource_id=dict(required=True, type='str'),
        scalable_dimension=dict(required=True, choices=['ecs:service:DesiredCount',
                                                        'ec2:spot-fleet-request:TargetCapacity',
                                                        'elasticmapreduce:instancegroup:InstanceCount',
                                                        'appstream:fleet:DesiredCapacity',
                                                        'dynamodb:table:ReadCapacityUnits',
                                                        'dynamodb:table:WriteCapacityUnits',
                                                        'dynamodb:index:ReadCapacityUnits',
                                                        'dynamodb:index:WriteCapacityUnits'
                                                        ], type='str'),
        policy_type=dict(required=True, choices=['StepScaling', 'TargetTrackingScaling'], type='str'),
        step_scaling_policy_configuration=dict(required=False, type='dict'),
        target_tracking_scaling_policy_configuration=dict(required=False, type='dict'),
        minimum_tasks=dict(required=False, type='int'),
        maximum_tasks=dict(required=False, type='int'),
        override_task_capacity=dict(required=False, type=bool)
    ))

    module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)

    connection = module.client('application-autoscaling')

    if module.params.get("state") == 'present':
        # A scalable target must be registered prior to creating a scaling policy
        scalable_target_result = create_scalable_target(connection, module)
        policy_result = create_scaling_policy(connection, module)
        # Merge the results of the scalable target creation and policy deletion/creation
        # There's no risk in overriding values since mutual keys have the same values in our case
        merged_result = merge_results(scalable_target_result, policy_result)
        module.exit_json(**merged_result)
    else:
        policy_result = delete_scaling_policy(connection, module)
        module.exit_json(**policy_result)
Пример #23
0
def main():

    argument_spec = dict(cluster_identifier=dict(
        type='str', aliases=['identifier', 'name']),
                         tags=dict(type='dict'))
    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)
    if module._name == 'redshift_facts':
        module.deprecate(
            "The 'redshift_facts' module has been renamed to 'redshift_info'",
            version='2.13')

    cluster_identifier = module.params.get('cluster_identifier')
    cluster_tags = module.params.get('tags')

    redshift = module.client('redshift')

    results = find_clusters(redshift,
                            module,
                            identifier=cluster_identifier,
                            tags=cluster_tags)
    module.exit_json(results=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
    )

    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)
Пример #25
0
def main():
    argument_spec = dict(name=dict(required=False),
                         waf_regional=dict(type='bool', default=False))
    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)
    if module._name == 'aws_waf_facts':
        module.deprecate(
            "The 'aws_waf_facts' module has been renamed to 'aws_waf_info'",
            version='2.13')

    resource = 'waf' if not module.params['waf_regional'] else 'waf-regional'
    client = module.client(resource)
    web_acls = list_web_acls(client, module)
    name = module.params['name']
    if name:
        web_acls = [web_acl for web_acl in web_acls if web_acl['Name'] == name]
        if not web_acls:
            module.fail_json(msg="WAF named %s not found" % name)
    module.exit_json(wafs=[
        get_web_acl(client, module, web_acl['WebACLId'])
        for web_acl in web_acls
    ])
Пример #26
0
def main():
    """
    Main entry point.

    :return dict: ansible facts
    """

    argument_spec = dict(state=dict(required=False,
                                    default='present',
                                    choices=['present', 'absent']),
                         job_definition_name=dict(required=True),
                         job_definition_arn=dict(),
                         type=dict(required=True),
                         parameters=dict(type='dict'),
                         image=dict(required=True),
                         vcpus=dict(type='int', required=True),
                         memory=dict(type='int', required=True),
                         command=dict(type='list', default=[]),
                         job_role_arn=dict(),
                         volumes=dict(type='list', default=[]),
                         environment=dict(type='list', default=[]),
                         mount_points=dict(type='list', default=[]),
                         readonly_root_filesystem=dict(),
                         privileged=dict(),
                         ulimits=dict(type='list', default=[]),
                         user=dict(),
                         attempts=dict(type='int'))

    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)

    batch_client = module.client('batch')

    validate_params(module, batch_client)

    results = manage_state(module, batch_client)

    module.exit_json(**camel_dict_to_snake_dict(results))
Пример #27
0
def main():

    argument_spec = ec2_argument_spec()
    argument_spec.update(
        dict(force=dict(required=False, default='no', type='bool'),
             name=dict(required=True, type='str'),
             state=dict(default='present',
                        type='str',
                        choices=['present', 'absent'])))

    module = AnsibleAWSModule(argument_spec=argument_spec)

    region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module,
                                                                  boto3=True)

    if region in ('us-east-1', '', None):
        # default to US Standard region
        location = 'us-east-1'
    else:
        # Boto uses symbolic names for locations but region strings will
        # actually work fine for everything except us-east-1 (US Standard)
        location = region

    s3_client = get_s3_client(module, aws_connect_kwargs, location)

    if s3_client is None:  # this should never happen
        module.fail_json(
            msg=
            'Unknown error, failed to create s3 connection, no information from boto.'
        )

    state = module.params.get("state")
    name = module.params.get("name")

    # if state == 'present':
    #     create_or_update_bucket(s3_client, module, location)
    if state == 'absent':
        destroy_bucket(s3_client, module, name)
Пример #28
0
def main():
    argument_spec = dict(
        name=dict(required=True),
        state=dict(default='present', choices=['present', 'absent']),
        display_name=dict(),
        policy=dict(type='dict'),
        delivery_policy=dict(type='dict'),
        subscriptions=dict(default=[], type='list'),
        purge_subscriptions=dict(type='bool', default=True),
    )

    module = AnsibleAWSModule(argument_spec=argument_spec,
                              supports_check_mode=True)

    name = module.params.get('name')
    state = module.params.get('state')
    display_name = module.params.get('display_name')
    policy = module.params.get('policy')
    delivery_policy = module.params.get('delivery_policy')
    subscriptions = module.params.get('subscriptions')
    purge_subscriptions = module.params.get('purge_subscriptions')
    check_mode = module.check_mode

    sns_topic = SnsTopicManager(module, name, state, display_name, policy,
                                delivery_policy, subscriptions,
                                purge_subscriptions, check_mode)

    if state == 'present':
        changed = sns_topic.ensure_ok()

    elif state == 'absent':
        changed = sns_topic.ensure_gone()

    sns_facts = dict(changed=changed,
                     sns_arn=sns_topic.topic_arn,
                     sns_topic=sns_topic.get_info())

    module.exit_json(**sns_facts)
Пример #29
0
def main():
    argument_spec = dict(
        name=dict(required=True),
        default_action=dict(choices=['block', 'allow', 'count']),
        metric_name=dict(),
        state=dict(default='present', choices=['present', 'absent']),
        rules=dict(type='list'),
        purge_rules=dict(type='bool', default=False),
        waf_regional=dict(type='bool', default=False))
    module = AnsibleAWSModule(
        argument_spec=argument_spec,
        required_if=[['state', 'present', ['default_action', 'rules']]])
    state = module.params.get('state')

    resource = 'waf' if not module.params['waf_regional'] else 'waf-regional'
    client = module.client(resource)
    if state == 'present':
        (changed, results) = ensure_web_acl_present(client, module)
    else:
        (changed, results) = ensure_web_acl_absent(client, module)

    module.exit_json(changed=changed,
                     web_acl=camel_dict_to_snake_dict(results))
Пример #30
0
def main():
    module = AnsibleAWSModule(argument_spec=argument_spec)

    region, ec2_url, aws_connect_params = get_aws_connection_info(module,
                                                                  boto3=True)
    if not region:
        module.fail_json(
            msg=
            "Region not specified. Unable to determine region from EC2_REGION."
        )

    # connect to the rds endpoint
    try:
        conn = boto3_conn(module, 'client', 'rds', region,
                          **aws_connect_params)
    except Exception as e:
        module.fail_json_aws(e, msg="trying to create db snapshot")

    if module.params['state'] == 'absent':
        ret_dict = delete_snapshot(module, conn)
    else:
        ret_dict = create_snapshot(module, conn)
    module.exit_json(**ret_dict)