Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/c7n_gcp/resources/dns.py: 84%
58 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_gcp.provider import resources
4from c7n_gcp.query import QueryResourceManager, TypeInfo
5from c7n_gcp.actions import MethodAction
6from c7n.utils import type_schema, local_session
7from c7n.filters.core import ListItemFilter
10@resources.register('dns-managed-zone')
11class DnsManagedZone(QueryResourceManager):
12 """GCP resource: https://cloud.google.com/dns/docs/reference/v1beta2/managedZones
13 """
14 class resource_type(TypeInfo):
15 service = 'dns'
16 version = 'v1beta2'
17 component = 'managedZones'
18 enum_spec = ('list', 'managedZones[]', None)
19 scope = 'project'
20 id = 'id'
21 name = 'name'
22 default_report_fields = ['id', 'name', 'dnsName', 'creationTime', 'visibility']
23 asset_type = "dns.googleapis.com/ManagedZone"
24 scc_type = "google.cloud.dns.ManagedZone"
25 urn_component = "managed-zone"
26 urn_id_path = "name"
28 @staticmethod
29 def get(client, resource_info):
30 return client.execute_query(
31 'get', {'project': resource_info['project_id'],
32 'managedZone': resource_info['zone_name']})
35@resources.register('dns-policy')
36class DnsPolicy(QueryResourceManager):
37 """GCP resource: https://cloud.google.com/dns/docs/reference/v1beta2/policies
38 """
39 class resource_type(TypeInfo):
40 service = 'dns'
41 version = 'v1beta2'
42 component = 'policies'
43 enum_spec = ('list', 'policies[]', None)
44 scope = 'project'
45 id = 'id'
46 name = 'name'
47 default_report_fields = ['id', 'name', 'description', 'enableLogging']
48 asset_type = "dns.googleapis.com/Policy"
49 urn_component = "policy"
50 urn_id_path = "name"
52 @staticmethod
53 def get(client, resource_info):
54 return client.execute_query(
55 'get', {'project': resource_info['project_id'],
56 'policy': resource_info['policy_name']})
59@DnsManagedZone.filter_registry.register('records-sets')
60class DNSZoneRecordsSetsFilter(ListItemFilter):
62 schema = type_schema(
63 'records-sets',
64 attrs={'$ref': '#/definitions/filters_common/list_item_attrs'}
65 )
66 annotate_items = True
67 permissions = ("dns.managedZones.list",)
69 def get_item_values(self, resource):
70 session = local_session(self.manager.session_factory)
71 client = session.client(service_name='dns', version='v1', component='resourceRecordSets')
72 project = session.get_default_project()
73 result = client.execute_query(
74 'list', {'project': project, 'managedZone': resource['name']}).get('rrsets')
75 return result
78@DnsManagedZone.action_registry.register('delete')
79class Delete(MethodAction):
80 """Action to delete DNS managed zones
82 It is recommended to use a filter to avoid unwanted deletion of DNS managed zones
84 :example:
86 .. code-block:: yaml
88 policies:
89 - name: gcp-delete-testing-dns-managed-zones
90 resource: gcp.dns-managed-zone
91 filters:
92 - type: value
93 key: name
94 op: eq
95 value: 'test-custodian.com'
96 actions:
97 - type: delete
98 """
100 schema = type_schema('delete')
101 method_spec = {'op': 'delete'}
103 def get_resource_params(self, model, resource):
104 project = local_session(self.manager.source.query.session_factory).get_default_project()
105 return {
106 'project': project,
107 'managedZone': resource['name']}