コード例 #1
0
ファイル: test_tagging.py プロジェクト: markuman/amazon.aws
 def test_compare_aws_tags_equal(self):
     new_dict = dict(self.tag_example_dict)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict)
     self.assertEqual({}, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=False)
     self.assertEqual({}, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=True)
     self.assertEqual({}, keys_to_set)
     self.assertEqual([], keys_to_unset)
コード例 #2
0
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
コード例 #3
0
ファイル: test_tagging.py プロジェクト: markuman/amazon.aws
 def test_compare_aws_tags_added(self):
     new_dict = dict(self.tag_example_dict)
     new_keys = {'add_me': 'lower case', 'Me too!': 'Contributing'}
     new_dict.update(new_keys)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=False)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=True)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual([], keys_to_unset)
コード例 #4
0
ファイル: test_tagging.py プロジェクト: markuman/amazon.aws
 def test_compare_aws_tags_removed(self):
     new_dict = dict(self.tag_example_dict)
     del new_dict['lowerCamel']
     del new_dict['Normal case']
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict)
     self.assertEqual({}, keys_to_set)
     self.assertEqual(set(['lowerCamel', 'Normal case']),
                      set(keys_to_unset))
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=False)
     self.assertEqual({}, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=True)
     self.assertEqual({}, keys_to_set)
     self.assertEqual(set(['lowerCamel', 'Normal case']),
                      set(keys_to_unset))
コード例 #5
0
ファイル: test_tagging.py プロジェクト: markuman/amazon.aws
 def test_compare_aws_tags_changed(self):
     new_dict = dict(self.tag_example_dict)
     new_keys = {
         'UpperCamel': 'anotherCamelValue',
         'Normal case': 'normal value'
     }
     new_dict.update(new_keys)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=False)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=True)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual([], keys_to_unset)
コード例 #6
0
ファイル: test_tagging.py プロジェクト: markuman/amazon.aws
 def test_compare_aws_tags_complex_update(self):
     # Adds 'Me too!', Changes 'UpperCamel' and removes 'Normal case'
     new_dict = dict(self.tag_example_dict)
     new_keys = {
         'UpperCamel': 'anotherCamelValue',
         'Me too!': 'Contributing'
     }
     new_dict.update(new_keys)
     del new_dict['Normal case']
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual(['Normal case'], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=False)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual([], keys_to_unset)
     keys_to_set, keys_to_unset = compare_aws_tags(self.tag_example_dict,
                                                   new_dict,
                                                   purge_tags=True)
     self.assertEqual(new_keys, keys_to_set)
     self.assertEqual(['Normal case'], keys_to_unset)
コード例 #7
0
    def set_tags(self, tags, purge_tags):

        if tags is None:
            return False
        changed = False

        # Tags are returned as a part of the metadata, but have to be updated
        # via dedicated tagging methods
        current_tags = boto3_tag_list_to_ansible_dict(
            self._preupdate_metadata.get('Tags', []))

        # So that diff works in check mode we need to know the full target state
        if purge_tags:
            desired_tags = deepcopy(tags)
        else:
            desired_tags = deepcopy(current_tags)
            desired_tags.update(tags)

        tags_to_add, tags_to_remove = compare_aws_tags(current_tags, tags,
                                                       purge_tags)

        if tags_to_add:
            self._tagging_updates['add'] = tags_to_add
            changed = True
        if tags_to_remove:
            self._tagging_updates['remove'] = tags_to_remove
            changed = True

        if changed:
            # Tags are a stored as a list, but treated like a list, the
            # simplisic '==' in _set_metadata_value doesn't do the comparison
            # properly
            return self._set_metadata_value(
                'Tags', ansible_dict_to_boto3_tag_list(desired_tags))

        return False