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
« 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
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']
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"
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 }
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"
81 def _get_child_enum_args(self, parent_instance):
82 return {
83 'parent': '{}'.format(
84 parent_instance['name'],
85 )
86 }
89@BigTableInstanceClusterBackup.filter_registry.register('time-range')
90class TimeRange(TimeRangeFilter):
91 """Filters bigtable instance clusters backups based on a time range
93 .. code-block:: yaml
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',)
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"
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 }
139@BigTableInstanceTable.filter_registry.register('iam-policy')
140class BigTableInstanceTableIamPolicyFilter(IamPolicyFilter):
141 permissions = ('resourcemanager.projects.getIamPolicy',)