Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/c7n_gcp/resources/bigtable.py: 94%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

78 statements  

1# Copyright The Cloud Custodian Authors. 

2# SPDX-License-Identifier: Apache-2.0 

3from c7n_gcp.filters.iampolicy import IamPolicyFilter 

4from c7n_gcp.provider import resources 

5from c7n_gcp.query import ( 

6 QueryResourceManager, TypeInfo, ChildResourceManager, ChildTypeInfo 

7) 

8from c7n.utils import local_session 

9from c7n_gcp.filters.timerange import TimeRangeFilter 

10 

11 

12@resources.register('bigtable-instance') 

13class BigTableInstance(QueryResourceManager): 

14 """GC resource: 

15 https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances""" 

16 class resource_type(TypeInfo): 

17 service = 'bigtableadmin' 

18 version = 'v2' 

19 component = 'projects.instances' 

20 enum_spec = ('list', 'instances[]', None) 

21 scope_key = 'parent' 

22 name = id = 'id' 

23 scope_template = "projects/{}" 

24 permissions = ('bigtable.instances.list',) 

25 perm_service = 'bigtable' 

26 asset_type = "bigtableadmin.googleapis.com/Instance" 

27 default_report_fields = ['displayName', 'expireTime'] 

28 labels = True 

29 labels_op = 'partialUpdateInstance' 

30 

31 @staticmethod 

32 def get_label_params(resource, all_labels): 

33 return { 

34 'name': resource['name'], 

35 'updateMask': 'labels', 

36 'body': {'labels': all_labels}, 

37 } 

38 

39 

40@resources.register('bigtable-instance-cluster') 

41class BigTableInstanceCluster(ChildResourceManager): 

42 """GC resource: 

43 https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters""" 

44 class resource_type(ChildTypeInfo): 

45 service = 'bigtableadmin' 

46 version = 'v2' 

47 component = 'projects.instances.clusters' 

48 enum_spec = ('list', 'clusters[]', None) 

49 scope = 'parent' 

50 name = id = 'clusters' 

51 parent_spec = { 

52 'resource': 'bigtable-instance', 

53 'child_enum_params': { 

54 ('displayName', 'parent')}, 

55 'use_child_query': True, 

56 } 

57 default_report_fields = ['name', 'expireTime'] 

58 permissions = ('bigtable.clusters.list',) 

59 asset_type = "bigtableadmin.googleapis.com/Cluster" 

60 

61 def _get_child_enum_args(self, parent_instance): 

62 return { 

63 'parent': 'projects/{}/instances/{}'.format( 

64 local_session(self.session_factory).get_default_project(), 

65 parent_instance['displayName'], 

66 ) 

67 } 

68 

69 

70@resources.register('bigtable-instance-cluster-backup') 

71class BigTableInstanceClusterBackup(ChildResourceManager): 

72 """GC resource: 

73 https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters.backups 

74 """ 

75 class resource_type(ChildTypeInfo): 

76 service = 'bigtableadmin' 

77 version = 'v2' 

78 component = 'projects.instances.clusters.backups' 

79 enum_spec = ('list', 'backups[]', None) 

80 scope = 'parent' 

81 name = id = 'backups' 

82 parent_spec = { 

83 'resource': 'bigtable-instance-cluster', 

84 'child_enum_params': { 

85 ('name', 'parent')}, 

86 'use_child_query': True, 

87 } 

88 default_report_fields = ['name', 'expireTime'] 

89 permissions = ('bigtable.backups.list',) 

90 asset_type = "bigtableadmin.googleapis.com/Backup" 

91 

92 def _get_child_enum_args(self, parent_instance): 

93 return { 

94 'parent': '{}'.format( 

95 parent_instance['name'], 

96 ) 

97 } 

98 

99 

100@BigTableInstanceClusterBackup.filter_registry.register('time-range') 

101class TimeRange(TimeRangeFilter): 

102 """Filters bigtable instance clusters backups based on a time range 

103 

104 .. code-block:: yaml 

105 

106 policies: 

107 - name: bigtable_backup_expiration_time_30_days 

108 description: | 

109 Cloud Bigtable backup expiration time is 29 days or less 

110 resource: gcp.bigtable-instance-cluster-backup 

111 filters: 

112 - type: time-range 

113 value: 29 

114 """ 

115 create_time_field_name = 'startTime' 

116 expire_time_field_name = 'expireTime' 

117 permissions = ('bigtable.backups.list',) 

118 

119 

120@resources.register('bigtable-instance-table') 

121class BigTableInstanceTable(ChildResourceManager): 

122 """ GC resource: 

123 https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.tables""" 

124 class resource_type(ChildTypeInfo): 

125 service = 'bigtableadmin' 

126 version = 'v2' 

127 component = 'projects.instances.tables' 

128 enum_spec = ('list', 'tables[]', None) 

129 scope = 'parent' 

130 name = id = 'name' 

131 parent_spec = { 

132 'resource': 'bigtable-instance', 

133 'child_enum_params': { 

134 ('name', 'parent')}, 

135 'use_child_query': True, 

136 } 

137 default_report_fields = ['name'] 

138 permissions = ('bigtable.tables.list',) 

139 asset_type = "bigtableadmin.googleapis.com/Table" 

140 

141 def _get_child_enum_args(self, parent_instance): 

142 return { 

143 'parent': 'projects/{}/instances/{}'.format( 

144 local_session(self.session_factory).get_default_project(), 

145 parent_instance['displayName'], 

146 ) 

147 } 

148 

149 

150@BigTableInstanceTable.filter_registry.register('iam-policy') 

151class BigTableInstanceTableIamPolicyFilter(IamPolicyFilter): 

152 permissions = ('resourcemanager.projects.getIamPolicy',)