HEX
Server: LiteSpeed
System: Linux kapuas.iixcp.rumahweb.net 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 1 14:58:02 EDT 2024 x86_64
User: mirz4654 (1666)
PHP: 8.1.33
Disabled: system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
Upload Files
File: //usr/lib/python3.9/site-packages/ansible_collections/amazon/aws/plugins/module_utils/route53.py
# This file is part of Ansible
# 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

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

from ansible_collections.amazon.aws.plugins.module_utils.core import is_boto3_error_code
from ansible_collections.amazon.aws.plugins.module_utils.tagging import ansible_dict_to_boto3_tag_list
from ansible_collections.amazon.aws.plugins.module_utils.tagging import boto3_tag_list_to_ansible_dict
from ansible_collections.amazon.aws.plugins.module_utils.tagging import compare_aws_tags


def manage_tags(module, client, resource_type, resource_id, new_tags, purge_tags):
    if new_tags is None:
        return False

    old_tags = get_tags(module, client, resource_type, resource_id)
    tags_to_set, tags_to_delete = compare_aws_tags(old_tags, new_tags, purge_tags=purge_tags)

    change_params = dict()
    if tags_to_set:
        change_params['AddTags'] = ansible_dict_to_boto3_tag_list(tags_to_set)
    if tags_to_delete:
        change_params['RemoveTagKeys'] = tags_to_delete

    if not change_params:
        return False

    if module.check_mode:
        return True

    try:
        client.change_tags_for_resource(
            ResourceType=resource_type,
            ResourceId=resource_id,
            **change_params
        )
    except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e:
        module.fail_json_aws(e, msg='Failed to update tags on {0}'.format(resource_type),
                             resource_id=resource_id, change_params=change_params)
    return True


def get_tags(module, client, resource_type, resource_id):
    try:
        tagset = client.list_tags_for_resource(
            ResourceType=resource_type,
            ResourceId=resource_id,
        )
    except is_boto3_error_code('NoSuchHealthCheck'):
        return {}
    except is_boto3_error_code('NoSuchHostedZone'):   # pylint: disable=duplicate-except
        return {}
    except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e:  # pylint: disable=duplicate-except
        module.fail_json_aws(e, msg='Failed to fetch tags on {0}'.format(resource_type),
                             resource_id=resource_id)

    tags = boto3_tag_list_to_ansible_dict(tagset['ResourceTagSet']['Tags'])
    return tags