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

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 

11 

12 

13 

14class DescribeMessageBroker(DescribeSource): 

15 

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 

21 

22 

23@resources.register('message-broker') 

24class MessageBroker(QueryResourceManager): 

25 

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' 

37 

38 permissions = ('mq:ListTags',) 

39 

40 source_mapping = {'describe': DescribeMessageBroker, 'config': ConfigSource} 

41 

42 

43 

44@MessageBroker.filter_registry.register('kms-key') 

45class KmsFilter(KmsRelatedFilter): 

46 

47 RelatedIdsExpression = 'EncryptionOptions.KmsKeyId' 

48 

49 

50@MessageBroker.filter_registry.register('marked-for-op') 

51class MarkedForOp(TagActionFilter): 

52 

53 permissions = ('mq:ListBrokers',) 

54 

55 

56@MessageBroker.filter_registry.register('subnet') 

57class MQSubnetFilter(SubnetFilter): 

58 

59 RelatedIdsExpression = 'SubnetIds[]' 

60 

61 

62@MessageBroker.filter_registry.register('security-group') 

63class MQSGFilter(SecurityGroupFilter): 

64 

65 RelatedIdsExpression = 'SecurityGroups[]' 

66 

67 

68@MessageBroker.filter_registry.register('metrics') 

69class MQMetrics(MetricsFilter): 

70 

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'])}] 

75 

76 

77@MessageBroker.action_registry.register('delete') 

78class Delete(Action): 

79 """Delete a set of message brokers 

80 """ 

81 

82 schema = type_schema('delete') 

83 permissions = ("mq:DeleteBroker",) 

84 

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 

92 

93 

94@MessageBroker.action_registry.register('tag') 

95class TagMessageBroker(Tag): 

96 """Action to create tag(s) on a mq 

97 

98 :example: 

99 

100 .. code-block:: yaml 

101 

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 """ 

112 

113 permissions = ('mq:CreateTags',) 

114 

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 

123 

124 

125@MessageBroker.action_registry.register('remove-tag') 

126class UntagMessageBroker(RemoveTag): 

127 """Action to remove tag(s) on mq 

128 

129 :example: 

130 

131 .. code-block:: yaml 

132 

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 """ 

142 

143 permissions = ('mq:DeleteTags',) 

144 

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 

151 

152 

153@MessageBroker.action_registry.register('mark-for-op') 

154class MarkForOpMessageBroker(TagDelayedAction): 

155 """Action to specify an action to occur at a later date 

156 

157 :example: 

158 

159 .. code-block:: yaml 

160 

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 """ 

173 

174 

175@resources.register('message-config') 

176class MessageConfig(QueryResourceManager): 

177 

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() 

187 

188 augment = universal_augment