55 "encoding/json"
66 "fmt"
77
8- resourcemanagerv3 "cloud.google.com/go/resourcemanager/apiv3"
8+ resourcemanager "cloud.google.com/go/resourcemanager/apiv3"
99 "cloud.google.com/go/resourcemanager/apiv3/resourcemanagerpb"
1010 "github.com/cloudquery/plugin-sdk/schema"
1111 "github.com/cloudquery/plugin-sdk/specs"
@@ -18,10 +18,8 @@ import (
1818const maxProjectIdsToLog int = 100
1919
2020type Client struct {
21- // plugin *plugins.SourcePlugin
22- projects []string
23- // All gcp services initialized by client
24- Services * Services
21+ projects []string
22+ ClientOptions []option.ClientOption
2523 // this is set by table client multiplexer
2624 ProjectId string
2725 // Logger
@@ -83,15 +81,19 @@ func New(ctx context.Context, logger zerolog.Logger, s specs.Source) (schema.Cli
8381 options = append (options , option .WithCredentialsJSON (serviceAccountKeyJSON ))
8482 }
8583
86- c .Services , err = initServices (context .Background (), options )
87- if err != nil {
88- return nil , err
89- }
90-
9184 if len (gcpSpec .ProjectFilter ) > 0 && len (gcpSpec .FolderIDs ) > 0 {
9285 return nil , fmt .Errorf ("project_filter and folder_ids are mutually exclusive" )
9386 }
9487
88+ projectsClient , err := resourcemanager .NewProjectsClient (ctx , options ... )
89+ if err != nil {
90+ return nil , fmt .Errorf ("failed to create projects client: %w" , err )
91+ }
92+ foldersClient , err := resourcemanager .NewFoldersClient (ctx , options ... )
93+ if err != nil {
94+ return nil , fmt .Errorf ("failed to create folders client: %w" , err )
95+ }
96+
9597 switch {
9698 case len (projects ) == 0 && len (gcpSpec .FolderIDs ) == 0 && len (gcpSpec .ProjectFilter ) == 0 :
9799 c .logger .Info ().Msg ("No project_ids, folder_ids, or project_filter specified - assuming all active projects" )
@@ -105,7 +107,7 @@ func New(ctx context.Context, logger zerolog.Logger, s specs.Source) (schema.Cli
105107
106108 for _ , parentFolder := range gcpSpec .FolderIDs {
107109 c .logger .Info ().Msg ("Listing folders..." )
108- childFolders , err := listFolders (ctx , c . Services . ResourcemanagerFoldersClient , parentFolder , * gcpSpec .FolderRecursionDepth )
110+ childFolders , err := listFolders (ctx , foldersClient , parentFolder , * gcpSpec .FolderRecursionDepth )
109111 if err != nil {
110112 return nil , fmt .Errorf ("failed to list folders: %w" , err )
111113 }
@@ -115,7 +117,7 @@ func New(ctx context.Context, logger zerolog.Logger, s specs.Source) (schema.Cli
115117 logFolderIds (& c .logger , folderIds )
116118
117119 c .logger .Info ().Msg ("listing folder projects..." )
118- folderProjects , err := listProjectsInFolders (ctx , c . Services . ResourcemanagerProjectsClient , folderIds )
120+ folderProjects , err := listProjectsInFolders (ctx , projectsClient , folderIds )
119121 projects = setUnion (projects , folderProjects )
120122 if err != nil {
121123 return nil , fmt .Errorf ("failed to list projects: %w" , err )
@@ -228,7 +230,7 @@ func getProjectsV1WithFilter(ctx context.Context, filter string, options ...opti
228230
229231// listFolders recursively lists the folders in the 'parent' folder. Includes the 'parent' folder itself.
230232// recursionDepth is the depth of folders to recurse - where 0 means not to recurse any folders.
231- func listFolders (ctx context.Context , folderClient * resourcemanagerv3 .FoldersClient , parent string , recursionDepth int ) ([]string , error ) {
233+ func listFolders (ctx context.Context , folderClient * resourcemanager .FoldersClient , parent string , recursionDepth int ) ([]string , error ) {
232234 folders := []string {
233235 parent ,
234236 }
@@ -262,7 +264,7 @@ func listFolders(ctx context.Context, folderClient *resourcemanagerv3.FoldersCli
262264 return folders , nil
263265}
264266
265- func listProjectsInFolders (ctx context.Context , projectClient * resourcemanagerv3 .ProjectsClient , folders []string ) ([]string , error ) {
267+ func listProjectsInFolders (ctx context.Context , projectClient * resourcemanager .ProjectsClient , folders []string ) ([]string , error ) {
266268 var projects []string
267269 for _ , folder := range folders {
268270 it := projectClient .ListProjects (ctx , & resourcemanagerpb.ListProjectsRequest {
0 commit comments