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

71 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.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 asset_type = "bigtableadmin.googleapis.com/Instance" 

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

27 

28 

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

30class BigTableInstanceCluster(ChildResourceManager): 

31 """GC resource: 

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

33 class resource_type(ChildTypeInfo): 

34 service = 'bigtableadmin' 

35 version = 'v2' 

36 component = 'projects.instances.clusters' 

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

38 scope = 'parent' 

39 name = id = 'clusters' 

40 parent_spec = { 

41 'resource': 'bigtable-instance', 

42 'child_enum_params': { 

43 ('displayName', 'parent')}, 

44 'use_child_query': True, 

45 } 

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

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

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

49 

50 def _get_child_enum_args(self, parent_instance): 

51 return { 

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

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

54 parent_instance['displayName'], 

55 ) 

56 } 

57 

58 

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

60class BigTableInstanceClusterBackup(ChildResourceManager): 

61 """GC resource: 

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

63 """ 

64 class resource_type(ChildTypeInfo): 

65 service = 'bigtableadmin' 

66 version = 'v2' 

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

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

69 scope = 'parent' 

70 name = id = 'backups' 

71 parent_spec = { 

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

73 'child_enum_params': { 

74 ('name', 'parent')}, 

75 'use_child_query': True, 

76 } 

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

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

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

80 

81 def _get_child_enum_args(self, parent_instance): 

82 return { 

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

84 parent_instance['name'], 

85 ) 

86 } 

87 

88 

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

90class TimeRange(TimeRangeFilter): 

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

92 

93 .. code-block:: yaml 

94 

95 policies: 

96 - name: bigtable_backup_expiration_time_30_days 

97 description: | 

98 Cloud Bigtable backup expiration time is 29 days or less 

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

100 filters: 

101 - type: time-range 

102 value: 29 

103 """ 

104 create_time_field_name = 'startTime' 

105 expire_time_field_name = 'expireTime' 

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

107 

108 

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

110class BigTableInstanceTable(ChildResourceManager): 

111 """ GC resource: 

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

113 class resource_type(ChildTypeInfo): 

114 service = 'bigtableadmin' 

115 version = 'v2' 

116 component = 'projects.instances.tables' 

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

118 scope = 'parent' 

119 name = id = 'name' 

120 parent_spec = { 

121 'resource': 'bigtable-instance', 

122 'child_enum_params': { 

123 ('name', 'parent')}, 

124 'use_child_query': True, 

125 } 

126 default_report_fields = ['name'] 

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

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

129 

130 def _get_child_enum_args(self, parent_instance): 

131 return { 

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

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

134 parent_instance['displayName'], 

135 ) 

136 } 

137 

138 

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

140class BigTableInstanceTableIamPolicyFilter(IamPolicyFilter): 

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