forked from openshift/hive
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient.go
76 lines (61 loc) · 2.23 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package gcpclient
import (
"context"
"time"
"golang.org/x/oauth2/google"
cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
dns "google.golang.org/api/dns/v1"
"google.golang.org/api/option"
serviceusage "google.golang.org/api/serviceusage/v1"
)
//go:generate mockgen -source=./client.go -destination=./mock/client_generated.go -package=mock
// Client is a wrapper object for actual GCP libraries to allow for easier mocking/testing.
type Client interface {
ListManagedZones() (*dns.ManagedZonesListResponse, error)
}
type gcpClient struct {
projectName string
creds *google.Credentials
cloudResourceManagerClient *cloudresourcemanager.Service
serviceUsageClient *serviceusage.Service
dnsClient *dns.Service
}
const (
defaultCallTimeout = 2 * time.Minute
)
func contextWithTimeout(ctx context.Context) (context.Context, context.CancelFunc) {
return context.WithTimeout(ctx, defaultCallTimeout)
}
func (c *gcpClient) ListManagedZones() (*dns.ManagedZonesListResponse, error) {
ctx, cancel := contextWithTimeout(context.TODO())
defer cancel()
return c.dnsClient.ManagedZones.List(c.projectName).Context(ctx).Do()
}
// NewClient creates our client wrapper object for interacting with GCP.
func NewClient(projectName string, authJSON []byte) (Client, error) {
ctx := context.TODO()
// since we're using a single creds var, we should specify all the required scopes when initializing
creds, err := google.CredentialsFromJSON(context.TODO(), authJSON, "https://www.googleapis.com/auth/cloud-platform")
if err != nil {
return nil, err
}
cloudResourceManagerClient, err := cloudresourcemanager.NewService(ctx, option.WithCredentials(creds))
if err != nil {
return nil, err
}
serviceUsageClient, err := serviceusage.NewService(ctx, option.WithCredentials(creds))
if err != nil {
return nil, err
}
dnsClient, err := dns.NewService(ctx, option.WithCredentials(creds))
if err != nil {
return nil, err
}
return &gcpClient{
projectName: projectName,
creds: creds,
cloudResourceManagerClient: cloudResourceManagerClient,
serviceUsageClient: serviceUsageClient,
dnsClient: dnsClient,
}, nil
}