Skip to content

Commit 3fedb35

Browse files
authored
feat(gcp-resources): Add Bigtable admin resources (#6250)
#### Summary Relevant API https://cloud.google.com/bigtable/docs/reference/admin/rest ### Notes 1. Does not include [`HotTables`](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters.hotTablets/list) which is missing from the Cloud GoLang API 2. Resolvers and mocks manually generated since the API is not consistent (some paginated, some not, client options are different) 3. Manually tested on real resources ✅ 4. This API is not the same as the Bigtable **data API**, see https://cloud.google.com/bigtable/docs/reference/data/rpc, hence it's not name-spaced as `bigtable` and uses `bigtableadmin` <!--
1 parent 8327d51 commit 3fedb35

22 files changed

+782
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package recipes
2+
3+
import (
4+
bigtable "cloud.google.com/go/bigtable"
5+
btapb "google.golang.org/genproto/googleapis/bigtable/admin/v2"
6+
)
7+
8+
func init() {
9+
resources := []*Resource{
10+
{
11+
SubService: "instances",
12+
Struct: &bigtable.InstanceInfo{},
13+
PrimaryKeys: []string{ProjectIdColumn.Name, "name"},
14+
Description: "https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances#Instance",
15+
NewFunction: bigtable.NewInstanceAdminClient,
16+
SkipMock: true,
17+
SkipFetch: true,
18+
Relations: []string{"AppProfiles(), Clusters(), Tables()"},
19+
},
20+
{
21+
SubService: "app_profiles",
22+
Struct: &btapb.AppProfile{},
23+
PrimaryKeys: []string{ProjectIdColumn.Name, "name"},
24+
Description: "https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.appProfiles#AppProfile",
25+
ChildTable: true,
26+
SkipMock: true,
27+
SkipFetch: true,
28+
},
29+
{
30+
SubService: "clusters",
31+
Struct: &bigtable.ClusterInfo{},
32+
PrimaryKeys: []string{ProjectIdColumn.Name, "name"},
33+
Description: "https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters#Cluster",
34+
ChildTable: true,
35+
SkipMock: true,
36+
SkipFetch: true,
37+
Relations: []string{"Backups()"},
38+
},
39+
{
40+
SubService: "tables",
41+
Struct: &bigtable.TableInfo{},
42+
PrimaryKeys: []string{ProjectIdColumn.Name, "name"},
43+
Description: "https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.tables#Table",
44+
ChildTable: true,
45+
SkipMock: true,
46+
SkipFetch: true,
47+
PreResourceResolver: "getTableInfo",
48+
},
49+
{
50+
SubService: "backups",
51+
Struct: &bigtable.BackupInfo{},
52+
PrimaryKeys: []string{ProjectIdColumn.Name, "name"},
53+
Description: "https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters.backups#Backup",
54+
ChildTable: true,
55+
SkipMock: true,
56+
SkipFetch: true,
57+
},
58+
}
59+
60+
for _, resource := range resources {
61+
resource.Service = "bigtableadmin"
62+
resource.Template = "newapi_list"
63+
resource.MockTemplate = "newapi_list_grpc_mock"
64+
}
65+
66+
Resources = append(Resources, resources...)
67+
}

plugins/source/gcp/docs/tables/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@
6565
- [gcp_beyondcorp_client_gateways](gcp_beyondcorp_client_gateways.md)
6666
- [gcp_bigquery_datasets](gcp_bigquery_datasets.md)
6767
- [gcp_bigquery_tables](gcp_bigquery_tables.md)
68+
- [gcp_bigtableadmin_instances](gcp_bigtableadmin_instances.md)
69+
- [gcp_bigtableadmin_app_profiles](gcp_bigtableadmin_app_profiles.md)
70+
- [gcp_bigtableadmin_clusters](gcp_bigtableadmin_clusters.md)
71+
- [gcp_bigtableadmin_backups](gcp_bigtableadmin_backups.md)
72+
- [gcp_bigtableadmin_tables](gcp_bigtableadmin_tables.md)
6873
- [gcp_billing_billing_accounts](gcp_billing_billing_accounts.md)
6974
- [gcp_billing_budgets](gcp_billing_budgets.md)
7075
- [gcp_billing_services](gcp_billing_services.md)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Table: gcp_bigtableadmin_app_profiles
2+
3+
https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.appProfiles#AppProfile
4+
5+
The composite primary key for this table is (**project_id**, **name**).
6+
7+
## Relations
8+
9+
This table depends on [gcp_bigtableadmin_instances](gcp_bigtableadmin_instances.md).
10+
11+
## Columns
12+
13+
| Name | Type |
14+
| ------------- | ------------- |
15+
|_cq_source_name|String|
16+
|_cq_sync_time|Timestamp|
17+
|_cq_id|UUID|
18+
|_cq_parent_id|UUID|
19+
|project_id (PK)|String|
20+
|name (PK)|String|
21+
|etag|String|
22+
|description|String|
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Table: gcp_bigtableadmin_backups
2+
3+
https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters.backups#Backup
4+
5+
The composite primary key for this table is (**project_id**, **name**).
6+
7+
## Relations
8+
9+
This table depends on [gcp_bigtableadmin_clusters](gcp_bigtableadmin_clusters.md).
10+
11+
## Columns
12+
13+
| Name | Type |
14+
| ------------- | ------------- |
15+
|_cq_source_name|String|
16+
|_cq_sync_time|Timestamp|
17+
|_cq_id|UUID|
18+
|_cq_parent_id|UUID|
19+
|project_id (PK)|String|
20+
|name (PK)|String|
21+
|source_table|String|
22+
|size_bytes|Int|
23+
|start_time|Timestamp|
24+
|end_time|Timestamp|
25+
|expire_time|Timestamp|
26+
|state|String|
27+
|encryption_info|JSON|
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Table: gcp_bigtableadmin_clusters
2+
3+
https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters#Cluster
4+
5+
The composite primary key for this table is (**project_id**, **name**).
6+
7+
## Relations
8+
9+
This table depends on [gcp_bigtableadmin_instances](gcp_bigtableadmin_instances.md).
10+
11+
The following tables depend on gcp_bigtableadmin_clusters:
12+
- [gcp_bigtableadmin_backups](gcp_bigtableadmin_backups.md)
13+
14+
## Columns
15+
16+
| Name | Type |
17+
| ------------- | ------------- |
18+
|_cq_source_name|String|
19+
|_cq_sync_time|Timestamp|
20+
|_cq_id|UUID|
21+
|_cq_parent_id|UUID|
22+
|project_id (PK)|String|
23+
|name (PK)|String|
24+
|zone|String|
25+
|serve_nodes|Int|
26+
|state|String|
27+
|storage_type|Int|
28+
|kms_key_name|String|
29+
|autoscaling_config|JSON|
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Table: gcp_bigtableadmin_instances
2+
3+
https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances#Instance
4+
5+
The composite primary key for this table is (**project_id**, **name**).
6+
7+
## Relations
8+
9+
The following tables depend on gcp_bigtableadmin_instances:
10+
- [gcp_bigtableadmin_app_profiles](gcp_bigtableadmin_app_profiles.md)
11+
- [gcp_bigtableadmin_clusters](gcp_bigtableadmin_clusters.md)
12+
- [gcp_bigtableadmin_tables](gcp_bigtableadmin_tables.md)
13+
14+
## Columns
15+
16+
| Name | Type |
17+
| ------------- | ------------- |
18+
|_cq_source_name|String|
19+
|_cq_sync_time|Timestamp|
20+
|_cq_id|UUID|
21+
|_cq_parent_id|UUID|
22+
|project_id (PK)|String|
23+
|name (PK)|String|
24+
|display_name|String|
25+
|instance_state|Int|
26+
|instance_type|Int|
27+
|labels|JSON|
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Table: gcp_bigtableadmin_tables
2+
3+
https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.tables#Table
4+
5+
The primary key for this table is **project_id**.
6+
7+
## Relations
8+
9+
This table depends on [gcp_bigtableadmin_instances](gcp_bigtableadmin_instances.md).
10+
11+
## Columns
12+
13+
| Name | Type |
14+
| ------------- | ------------- |
15+
|_cq_source_name|String|
16+
|_cq_sync_time|Timestamp|
17+
|_cq_id|UUID|
18+
|_cq_parent_id|UUID|
19+
|project_id (PK)|String|
20+
|families|StringArray|
21+
|family_infos|JSON|
22+
|deletion_protection|Int|

plugins/source/gcp/go.mod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
cloud.google.com/go/baremetalsolution v0.4.0
1212
cloud.google.com/go/batch v0.4.0
1313
cloud.google.com/go/beyondcorp v0.3.1
14+
cloud.google.com/go/bigtable v1.18.1
1415
cloud.google.com/go/billing v1.7.0
1516
cloud.google.com/go/compute v1.14.0
1617
cloud.google.com/go/container v1.8.0
@@ -51,7 +52,13 @@ require (
5152
require (
5253
cloud.google.com/go v0.107.0 // indirect
5354
cloud.google.com/go/compute/metadata v0.2.2 // indirect
55+
github.com/census-instrumentation/opencensus-proto v0.2.1 // indirect
56+
github.com/cespare/xxhash/v2 v2.1.1 // indirect
57+
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 // indirect
58+
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 // indirect
5459
github.com/davecgh/go-spew v1.1.1 // indirect
60+
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 // indirect
61+
github.com/envoyproxy/protoc-gen-validate v0.1.0 // indirect
5562
github.com/getsentry/sentry-go v0.16.0 // indirect
5663
github.com/ghodss/yaml v1.0.0 // indirect
5764
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect

0 commit comments

Comments
 (0)