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
« 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
8from c7n.utils import local_session, type_schema
11@resources.register('batch-compute')
12class ComputeEnvironment(QueryResourceManager):
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'
26@ComputeEnvironment.filter_registry.register('security-group')
27class ComputeSGFilter(SecurityGroupFilter):
29 RelatedIdsExpression = "computeResources.securityGroupIds[]"
32@ComputeEnvironment.filter_registry.register('subnet')
33class ComputeSubnetFilter(SubnetFilter):
35 RelatedIdsExpression = "computeResources.subnets[]"
38@resources.register('batch-definition')
39class JobDefinition(QueryResourceManager):
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'
53@ComputeEnvironment.action_registry.register('update-environment')
54class UpdateComputeEnvironment(BaseAction):
55 """Updates an AWS batch compute environment
57 :example:
59 .. code-block:: yaml
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')
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)
103@ComputeEnvironment.action_registry.register('delete')
104class DeleteComputeEnvironment(BaseAction):
105 """Delete an AWS batch compute environment
107 :example:
109 .. code-block:: yaml
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')
124 def delete_environment(self, client, r):
125 client.delete_compute_environment(
126 computeEnvironment=r['computeEnvironmentName'])
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)
138@JobDefinition.action_registry.register('deregister')
139class DefinitionDeregister(BaseAction):
140 """Deregisters a batch definition
142 :example:
144 .. code-block:: yaml
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',)
158 def deregister_definition(self, r):
159 self.client.deregister_job_definition(
160 jobDefinition='%s:%s' % (r['jobDefinitionName'],
161 r['revision']))
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))
171@resources.register('batch-queue')
172class BatchJobQueue(QueryResourceManager):
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'