Skip to content

Commit 7aefc2b

Browse files
authored
feat(gcp-resources): Add Cloud Support (#6771)
#### Summary API https://cloud.google.com/support/docs/reference/rest. We need the old Go library for this. Only added the single top level table for now <!--
1 parent e12e0f8 commit 7aefc2b

File tree

7 files changed

+138
-0
lines changed

7 files changed

+138
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
- [gcp_cloudiot_device_states](gcp_cloudiot_device_states.md)
9393
- [gcp_cloudscheduler_locations](gcp_cloudscheduler_locations.md)
9494
- [gcp_cloudscheduler_jobs](gcp_cloudscheduler_jobs.md)
95+
- [gcp_cloudsupport_cases](gcp_cloudsupport_cases.md)
9596
- [gcp_compute_addresses](gcp_compute_addresses.md)
9697
- [gcp_compute_autoscalers](gcp_compute_autoscalers.md)
9798
- [gcp_compute_backend_services](gcp_compute_backend_services.md)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Table: gcp_cloudsupport_cases
2+
3+
https://cloud.google.com/support/docs/reference/rest/v2beta/cases#Case
4+
5+
The composite primary key for this table is (**project_id**, **name**).
6+
7+
## Columns
8+
9+
| Name | Type |
10+
| ------------- | ------------- |
11+
|_cq_source_name|String|
12+
|_cq_sync_time|Timestamp|
13+
|_cq_id|UUID|
14+
|_cq_parent_id|UUID|
15+
|project_id (PK)|String|
16+
|name (PK)|String|
17+
|classification|JSON|
18+
|create_time|String|
19+
|creator|JSON|
20+
|description|String|
21+
|display_name|String|
22+
|escalated|Bool|
23+
|language_code|String|
24+
|priority|String|
25+
|severity|String|
26+
|state|String|
27+
|subscriber_email_addresses|StringArray|
28+
|test_case|Bool|
29+
|time_zone|String|
30+
|update_time|String|

plugins/source/gcp/resources/plugin/tables.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/cloudquery/plugins/source/gcp/resources/services/clouderrorreporting"
2020
"github.com/cloudquery/plugins/source/gcp/resources/services/cloudiot"
2121
"github.com/cloudquery/plugins/source/gcp/resources/services/cloudscheduler"
22+
"github.com/cloudquery/plugins/source/gcp/resources/services/cloudsupport"
2223
"github.com/cloudquery/plugins/source/gcp/resources/services/compute"
2324
"github.com/cloudquery/plugins/source/gcp/resources/services/container"
2425
"github.com/cloudquery/plugins/source/gcp/resources/services/containeranalysis"
@@ -95,6 +96,7 @@ func PluginAutoGeneratedTables() []*schema.Table {
9596
clouderrorreporting.ErrorGroupStats(),
9697
cloudiot.DeviceRegistries(),
9798
cloudscheduler.Locations(),
99+
cloudsupport.Cases(),
98100
compute.Addresses(),
99101
compute.Autoscalers(),
100102
compute.BackendServices(),
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cloudsupport
2+
3+
import (
4+
"github.com/cloudquery/plugin-sdk/schema"
5+
"github.com/cloudquery/plugin-sdk/transformers"
6+
"github.com/cloudquery/plugins/source/gcp/client"
7+
pb "google.golang.org/api/cloudsupport/v2beta"
8+
)
9+
10+
func Cases() *schema.Table {
11+
return &schema.Table{
12+
Name: "gcp_cloudsupport_cases",
13+
Description: `https://cloud.google.com/support/docs/reference/rest/v2beta/cases#Case`,
14+
Resolver: fetchCases,
15+
Multiplex: client.ProjectMultiplexEnabledServices("cloudsupport.googleapis.com"),
16+
Transform: transformers.TransformWithStruct(&pb.Case{}, client.Options()...),
17+
Columns: []schema.Column{
18+
{
19+
Name: "project_id",
20+
Type: schema.TypeString,
21+
Resolver: client.ResolveProject,
22+
CreationOptions: schema.ColumnCreationOptions{
23+
PrimaryKey: true,
24+
},
25+
},
26+
{
27+
Name: "name",
28+
Type: schema.TypeString,
29+
Resolver: schema.PathResolver("Name"),
30+
CreationOptions: schema.ColumnCreationOptions{
31+
PrimaryKey: true,
32+
},
33+
},
34+
},
35+
}
36+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package cloudsupport
2+
3+
import (
4+
"context"
5+
6+
"github.com/cloudquery/plugin-sdk/schema"
7+
"github.com/cloudquery/plugins/source/gcp/client"
8+
9+
cloudsupport "google.golang.org/api/cloudsupport/v2beta"
10+
)
11+
12+
func fetchCases(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error {
13+
c := meta.(*client.Client)
14+
nextPageToken := ""
15+
gcpClient, err := cloudsupport.NewService(ctx, c.ClientOptions...)
16+
if err != nil {
17+
return err
18+
}
19+
20+
for {
21+
output, err := gcpClient.Cases.List("projects/" + c.ProjectId).PageSize(1000).PageToken(nextPageToken).Context(ctx).Do()
22+
if err != nil {
23+
return err
24+
}
25+
res <- output.Cases
26+
if output.NextPageToken == "" {
27+
break
28+
}
29+
nextPageToken = output.NextPageToken
30+
}
31+
return nil
32+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cloudsupport
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"testing"
7+
8+
"github.com/cloudquery/plugin-sdk/faker"
9+
"github.com/cloudquery/plugins/source/gcp/client"
10+
"github.com/julienschmidt/httprouter"
11+
pb "google.golang.org/api/cloudsupport/v2beta"
12+
)
13+
14+
func createCases(mux *httprouter.Router) error {
15+
var item pb.ListCasesResponse
16+
if err := faker.FakeObject(&item); err != nil {
17+
return err
18+
}
19+
item.NextPageToken = ""
20+
mux.GET("/v2beta/projects/testProject/cases", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
21+
b, err := json.Marshal(&item)
22+
if err != nil {
23+
http.Error(w, "unable to marshal request: "+err.Error(), http.StatusBadRequest)
24+
return
25+
}
26+
if _, err := w.Write(b); err != nil {
27+
http.Error(w, "failed to write", http.StatusBadRequest)
28+
return
29+
}
30+
})
31+
return nil
32+
}
33+
34+
func TestCases(t *testing.T) {
35+
client.MockTestRestHelper(t, Cases(), createCases, client.TestOptions{})
36+
}

website/pages/docs/plugins/sources/gcp/tables.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
- [gcp_cloudiot_device_states](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/gcp/docs/tables/gcp_cloudiot_device_states.md)
9393
- [gcp_cloudscheduler_locations](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/gcp/docs/tables/gcp_cloudscheduler_locations.md)
9494
- [gcp_cloudscheduler_jobs](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/gcp/docs/tables/gcp_cloudscheduler_jobs.md)
95+
- [gcp_cloudsupport_cases](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/gcp/docs/tables/gcp_cloudsupport_cases.md)
9596
- [gcp_compute_addresses](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/gcp/docs/tables/gcp_compute_addresses.md)
9697
- [gcp_compute_autoscalers](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/gcp/docs/tables/gcp_compute_autoscalers.md)
9798
- [gcp_compute_backend_services](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/gcp/docs/tables/gcp_compute_backend_services.md)

0 commit comments

Comments
 (0)