1# Copyright The Cloud Custodian Authors.
2# SPDX-License-Identifier: Apache-2.0
3import re
4
5from c7n_gcp.actions import MethodAction
6from c7n_gcp.provider import resources
7from c7n_gcp.query import QueryResourceManager, TypeInfo
8
9from c7n.utils import type_schema
10
11
12@resources.register('dm-deployment')
13class DMDeployment(QueryResourceManager):
14 """GCP resource: https://cloud.google.com/deployment-manager/docs/reference/latest/deployments
15 """
16 class resource_type(TypeInfo):
17 service = 'deploymentmanager'
18 version = 'v2'
19 component = 'deployments'
20 enum_spec = ('list', 'deployments[]', None)
21 name = id = 'name'
22
23 default_report_fields = ['name', 'description', 'insertTime', 'updateTime']
24 urn_component = "deployment"
25
26 @staticmethod
27 def get(client, resource_info):
28 return client.execute_command(
29 'get', {'project': resource_info['project_id'],
30 'deployment': resource_info['name']})
31
32 def augment(self, resources):
33 # normalize labels from array to mapping like other gcp resources.
34 for r in resources:
35 if isinstance(r.get('labels'), list):
36 r['labels'] = {l['key']: l['value'] for l in r['labels']}
37 return resources
38
39 def get_resource(self, resource_info):
40 resource = self.resource_type.get(self.get_client(), resource_info)
41 if resource:
42 self.augment((resource,))
43 return resource
44
45
46@DMDeployment.action_registry.register('delete')
47class DeleteInstanceGroupManager(MethodAction):
48 """Deletes a deployment
49
50 :Example:
51
52 .. code-block:: yaml
53
54 policies:
55 - name: delete-deployments
56 description: Delete all deployments
57 resource: gcp.dm-deployment
58 filters:
59 - type: value
60 key: name
61 op: eq
62 value: test-deployment
63 actions:
64 - delete
65
66 https://cloud.google.com/deployment-manager/docs/reference/latest/deployments/delete
67 """
68
69 schema = type_schema('delete')
70 method_spec = {'op': 'delete'}
71 path_param_re = re.compile('.*?/projects/(.*?)/global/deployments/(.*)')
72
73 def get_resource_params(self, m, r):
74 project, name = self.path_param_re.match(r['selfLink']).groups()
75 return {'project': project, 'deployment': name}