Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/c7n/resources/mq.py: 77%
87 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:51 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:51 +0000
1# Copyright The Cloud Custodian Authors.
2# SPDX-License-Identifier: Apache-2.0
3from c7n.actions import Action
4from c7n.filters.metrics import MetricsFilter
5from c7n.filters.vpc import SecurityGroupFilter, SubnetFilter
6from c7n.filters.kms import KmsRelatedFilter
7from c7n.manager import resources
8from c7n.query import QueryResourceManager, TypeInfo, DescribeSource, ConfigSource
9from c7n.utils import local_session, type_schema
10from c7n.tags import RemoveTag, Tag, TagDelayedAction, TagActionFilter, universal_augment
14class DescribeMessageBroker(DescribeSource):
16 def augment(self, resources):
17 super().augment(resources)
18 for r in resources:
19 r['Tags'] = [{'Key': k, 'Value': v} for k, v in r.get('Tags', {}).items()]
20 return resources
23@resources.register('message-broker')
24class MessageBroker(QueryResourceManager):
26 class resource_type(TypeInfo):
27 service = 'mq'
28 enum_spec = ('list_brokers', 'BrokerSummaries', None)
29 detail_spec = (
30 'describe_broker', 'BrokerId', 'BrokerId', None)
31 config_type = cfn_type = 'AWS::AmazonMQ::Broker'
32 id = 'BrokerId'
33 arn = 'BrokerArn'
34 name = 'BrokerName'
35 dimension = 'Broker'
36 metrics_namespace = 'AWS/AmazonMQ'
38 permissions = ('mq:ListTags',)
40 source_mapping = {'describe': DescribeMessageBroker, 'config': ConfigSource}
44@MessageBroker.filter_registry.register('kms-key')
45class KmsFilter(KmsRelatedFilter):
47 RelatedIdsExpression = 'EncryptionOptions.KmsKeyId'
50@MessageBroker.filter_registry.register('marked-for-op')
51class MarkedForOp(TagActionFilter):
53 permissions = ('mq:ListBrokers',)
56@MessageBroker.filter_registry.register('subnet')
57class MQSubnetFilter(SubnetFilter):
59 RelatedIdsExpression = 'SubnetIds[]'
62@MessageBroker.filter_registry.register('security-group')
63class MQSGFilter(SecurityGroupFilter):
65 RelatedIdsExpression = 'SecurityGroups[]'
68@MessageBroker.filter_registry.register('metrics')
69class MQMetrics(MetricsFilter):
71 def get_dimensions(self, resource):
72 # Fetching for Active broker instance only, https://amzn.to/2tLBhEB
73 return [{'Name': self.model.dimension,
74 'Value': "{}-1".format(resource['BrokerName'])}]
77@MessageBroker.action_registry.register('delete')
78class Delete(Action):
79 """Delete a set of message brokers
80 """
82 schema = type_schema('delete')
83 permissions = ("mq:DeleteBroker",)
85 def process(self, resources):
86 client = local_session(self.manager.session_factory).client('mq')
87 for r in resources:
88 try:
89 client.delete_broker(BrokerId=r['BrokerId'])
90 except client.exceptions.NotFoundException:
91 continue
94@MessageBroker.action_registry.register('tag')
95class TagMessageBroker(Tag):
96 """Action to create tag(s) on a mq
98 :example:
100 .. code-block:: yaml
102 policies:
103 - name: tag-mq
104 resource: message-broker
105 filters:
106 - "tag:target-tag": absent
107 actions:
108 - type: tag
109 key: target-tag
110 value: target-tag-value
111 """
113 permissions = ('mq:CreateTags',)
115 def process_resource_set(self, client, mq, new_tags):
116 for r in mq:
117 try:
118 client.create_tags(
119 ResourceArn=r['BrokerArn'],
120 Tags={t['Key']: t['Value'] for t in new_tags})
121 except client.exceptions.ResourceNotFound:
122 continue
125@MessageBroker.action_registry.register('remove-tag')
126class UntagMessageBroker(RemoveTag):
127 """Action to remove tag(s) on mq
129 :example:
131 .. code-block:: yaml
133 policies:
134 - name: mq-remove-tag
135 resource: message-broker
136 filters:
137 - "tag:OutdatedTag": present
138 actions:
139 - type: remove-tag
140 tags: ["OutdatedTag"]
141 """
143 permissions = ('mq:DeleteTags',)
145 def process_resource_set(self, client, mq, tags):
146 for r in mq:
147 try:
148 client.delete_tags(ResourceArn=r['BrokerArn'], TagKeys=tags)
149 except client.exceptions.ResourceNotFound:
150 continue
153@MessageBroker.action_registry.register('mark-for-op')
154class MarkForOpMessageBroker(TagDelayedAction):
155 """Action to specify an action to occur at a later date
157 :example:
159 .. code-block:: yaml
161 policies:
162 - name: mq-delete-unused
163 resource: message-broker
164 filters:
165 - "tag:custodian_cleanup": absent
166 actions:
167 - type: mark-for-op
168 tag: custodian_cleanup
169 msg: "Unused mq"
170 op: delete
171 days: 7
172 """
175@resources.register('message-config')
176class MessageConfig(QueryResourceManager):
178 class resource_type(TypeInfo):
179 service = 'mq'
180 enum_spec = ('list_configurations', 'Configurations', None)
181 cfn_type = 'AWS::AmazonMQ::Configuration'
182 id = 'Id'
183 arn = 'Arn'
184 arn_type = 'configuration'
185 name = 'Name'
186 universal_taggable = object()
188 augment = universal_augment