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

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 

8 

9 

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" 

27 

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

33 

34 

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" 

51 

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

57 

58 

59@DnsManagedZone.filter_registry.register('records-sets') 

60class DNSZoneRecordsSetsFilter(ListItemFilter): 

61 

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

68 

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 

76 

77 

78@DnsManagedZone.action_registry.register('delete') 

79class Delete(MethodAction): 

80 """Action to delete DNS managed zones 

81 

82 It is recommended to use a filter to avoid unwanted deletion of DNS managed zones 

83 

84 :example: 

85 

86 .. code-block:: yaml 

87 

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

99 

100 schema = type_schema('delete') 

101 method_spec = {'op': 'delete'} 

102 

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