Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/c7n/resources/batch.py: 83%

82 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 BaseAction 

4from c7n.filters.vpc import SecurityGroupFilter, SubnetFilter 

5from c7n.manager import resources 

6from c7n.query import QueryResourceManager, TypeInfo 

7 

8from c7n.utils import local_session, type_schema 

9 

10 

11@resources.register('batch-compute') 

12class ComputeEnvironment(QueryResourceManager): 

13 

14 class resource_type(TypeInfo): 

15 service = 'batch' 

16 filter_name = 'computeEnvironments' 

17 filter_type = 'list' 

18 id = name = "computeEnvironmentName" 

19 arn = "computeEnvironmentArn" 

20 arn_type = "compute-environment" 

21 enum_spec = ( 

22 'describe_compute_environments', 'computeEnvironments', None) 

23 cfn_type = config_type = 'AWS::Batch::ComputeEnvironment' 

24 

25 

26@ComputeEnvironment.filter_registry.register('security-group') 

27class ComputeSGFilter(SecurityGroupFilter): 

28 

29 RelatedIdsExpression = "computeResources.securityGroupIds[]" 

30 

31 

32@ComputeEnvironment.filter_registry.register('subnet') 

33class ComputeSubnetFilter(SubnetFilter): 

34 

35 RelatedIdsExpression = "computeResources.subnets[]" 

36 

37 

38@resources.register('batch-definition') 

39class JobDefinition(QueryResourceManager): 

40 

41 class resource_type(TypeInfo): 

42 service = 'batch' 

43 filter_name = 'jobDefinitions' 

44 filter_type = 'list' 

45 arn = "jobDefinitionArn" 

46 arn_type = 'job-definition' 

47 id = name = "jobDefinitionName" 

48 enum_spec = ( 

49 'describe_job_definitions', 'jobDefinitions', None) 

50 cfn_type = 'AWS::Batch::JobDefinition' 

51 

52 

53@ComputeEnvironment.action_registry.register('update-environment') 

54class UpdateComputeEnvironment(BaseAction): 

55 """Updates an AWS batch compute environment 

56 

57 :example: 

58 

59 .. code-block:: yaml 

60 

61 policies: 

62 - name: update-environments 

63 resource: batch-compute 

64 filters: 

65 - computeResources.desiredvCpus: 0 

66 - state: ENABLED 

67 actions: 

68 - type: update-environment 

69 state: DISABLED 

70 """ 

71 schema = { 

72 'type': 'object', 

73 'additionalProperties': False, 

74 'properties': { 

75 'type': {'enum': ['update-environment']}, 

76 'computeEnvironment': {'type': 'string'}, 

77 'state': {'type': 'string', 'enum': ['ENABLED', 'DISABLED']}, 

78 'computeResources': { 

79 'type': 'object', 

80 'additionalProperties': False, 

81 'properties': { 

82 'minvCpus': {'type': 'integer'}, 

83 'maxvCpus': {'type': 'integer'}, 

84 'desiredvCpus': {'type': 'integer'} 

85 } 

86 }, 

87 'serviceRole': {'type': 'string'} 

88 } 

89 } 

90 permissions = ('batch:UpdateComputeEnvironment',) 

91 valid_origin_status = ('VALID', 'INVALID') 

92 

93 def process(self, resources): 

94 resources = self.filter_resources(resources, 'status', self.valid_origin_status) 

95 client = local_session(self.manager.session_factory).client('batch') 

96 params = dict(self.data) 

97 params.pop('type') 

98 for r in resources: 

99 params['computeEnvironment'] = r['computeEnvironmentName'] 

100 client.update_compute_environment(**params) 

101 

102 

103@ComputeEnvironment.action_registry.register('delete') 

104class DeleteComputeEnvironment(BaseAction): 

105 """Delete an AWS batch compute environment 

106 

107 :example: 

108 

109 .. code-block:: yaml 

110 

111 policies: 

112 - name: delete-environments 

113 resource: batch-compute 

114 filters: 

115 - computeResources.desiredvCpus: 0 

116 actions: 

117 - type: delete 

118 """ 

119 schema = type_schema('delete') 

120 permissions = ('batch:DeleteComputeEnvironment',) 

121 valid_origin_states = ('DISABLED',) 

122 valid_origin_status = ('VALID', 'INVALID') 

123 

124 def delete_environment(self, client, r): 

125 client.delete_compute_environment( 

126 computeEnvironment=r['computeEnvironmentName']) 

127 

128 def process(self, resources): 

129 resources = self.filter_resources( 

130 self.filter_resources( 

131 resources, 'state', self.valid_origin_states), 

132 'status', self.valid_origin_status) 

133 client = local_session(self.manager.session_factory).client('batch') 

134 for e in resources: 

135 self.delete_environment(client, e) 

136 

137 

138@JobDefinition.action_registry.register('deregister') 

139class DefinitionDeregister(BaseAction): 

140 """Deregisters a batch definition 

141 

142 :example: 

143 

144 .. code-block:: yaml 

145 

146 policies: 

147 - name: deregister-definition 

148 resource: batch-definition 

149 filters: 

150 - containerProperties.image: amazonlinux 

151 actions: 

152 - type: deregister 

153 """ 

154 schema = type_schema('deregister') 

155 permissions = ('batch:DeregisterJobDefinition',) 

156 valid_origin_states = ('ACTIVE',) 

157 

158 def deregister_definition(self, r): 

159 self.client.deregister_job_definition( 

160 jobDefinition='%s:%s' % (r['jobDefinitionName'], 

161 r['revision'])) 

162 

163 def process(self, resources): 

164 resources = self.filter_resources(resources, 'status', self.valid_origin_states) 

165 self.client = local_session( 

166 self.manager.session_factory).client('batch') 

167 with self.executor_factory(max_workers=2) as w: 

168 list(w.map(self.deregister_definition, resources)) 

169 

170 

171@resources.register('batch-queue') 

172class BatchJobQueue(QueryResourceManager): 

173 

174 class resource_type(TypeInfo): 

175 service = 'batch' 

176 filter_name = 'jobQueues' 

177 filter_type = 'list' 

178 id = name = 'jobQueueName' 

179 arn = 'jobQueueArn' 

180 arn_type = 'job-queue' 

181 enum_spec = ( 

182 'describe_job_queues', 'jobQueues', None) 

183 cfn_type = config_type = 'AWS::Batch::JobQueue'