Skip to content

Commit f5071fa

Browse files
committed
update driver to support staging compute
1 parent e75b9a3 commit f5071fa

File tree

3 files changed

+60
-37
lines changed

3 files changed

+60
-37
lines changed

cmd/gce-pd-csi-driver/main.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ var (
6767

6868
maxConcurrentFormatAndMount = flag.Int("max-concurrent-format-and-mount", 1, "If set then format and mount operations are serialized on each node. This is stronger than max-concurrent-format as it includes fsck and other mount operations")
6969
formatAndMountTimeout = flag.Duration("format-and-mount-timeout", 1*time.Minute, "The maximum duration of a format and mount operation before another such operation will be started. Used only if --serialize-format-and-mount")
70+
computeEnvironment = flag.String("compute-environment", "prod", "Sets the compute environment")
7071

7172
fallbackRequisiteZonesFlag = flag.String("fallback-requisite-zones", "", "Comma separated list of requisite zones that will be used if there are not sufficient zones present in requisite topologies when provisioning a disk")
7273

@@ -156,7 +157,7 @@ func handle() {
156157
// Initialize requirements for the controller service
157158
var controllerServer *driver.GCEControllerServer
158159
if *runControllerService {
159-
cloudProvider, err := gce.CreateCloudProvider(ctx, version, *cloudConfigFilePath, *computeEndpoint)
160+
cloudProvider, err := gce.CreateCloudProvider(ctx, version, *cloudConfigFilePath, *computeEndpoint, *computeEnvironment)
160161
if err != nil {
161162
klog.Fatalf("Failed to get cloud provider: %v", err.Error())
162163
}

pkg/gce-cloud-provider/compute/gce.go

+57-35
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"errors"
2020
"fmt"
2121
"net/http"
22+
"net/url"
2223
"os"
2324
"runtime"
2425
"time"
@@ -47,8 +48,27 @@ const (
4748
regionURITemplate = "projects/%s/regions/%s"
4849

4950
replicaZoneURITemplateSingleZone = "projects/%s/zones/%s" // {gce.projectID}/zones/{disk.Zone}
51+
versionV1 = "v1"
52+
versionBeta = "beta"
53+
versionAlpha = "alpha"
54+
googleEnv = "googleapis"
5055
)
5156

57+
var computeVersionMap = map[string]map[string]map[string]string{
58+
googleEnv: {
59+
"prod": {
60+
versionV1: "compute/v1/",
61+
versionBeta: "compute/beta/",
62+
versionAlpha: "compute/alpha/",
63+
},
64+
"staging": {
65+
versionV1: "compute/staging_v1/",
66+
versionBeta: "compute/staging_beta/",
67+
versionAlpha: "compute/staging_alpha/",
68+
},
69+
},
70+
}
71+
5272
type CloudProvider struct {
5373
service *compute.Service
5474
betaService *computebeta.Service
@@ -72,7 +92,7 @@ type ConfigGlobal struct {
7292
Zone string `gcfg:"zone"`
7393
}
7494

75-
func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath string, computeEndpoint string) (*CloudProvider, error) {
95+
func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath string, computeEndpoint string, computeEnvironment string) (*CloudProvider, error) {
7696
configFile, err := readConfig(configPath)
7797
if err != nil {
7898
return nil, err
@@ -87,20 +107,23 @@ func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath s
87107
return nil, err
88108
}
89109

90-
svc, err := createCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
110+
svc, err := createCloudService(ctx, vendorVersion, tokenSource, computeEndpoint, computeEnvironment)
91111
if err != nil {
92112
return nil, err
93113
}
114+
klog.Infof("Compute endpoint for V1 version: %s", svc.BasePath)
94115

95-
betasvc, err := createBetaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
116+
betasvc, err := createBetaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint, computeEnvironment)
96117
if err != nil {
97118
return nil, err
98119
}
120+
klog.Infof("Compute endpoint for Beta version: %s", betasvc.BasePath)
99121

100-
alphasvc, err := createAlphaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
122+
alphasvc, err := createAlphaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint, computeEnvironment)
101123
if err != nil {
102124
return nil, err
103125
}
126+
klog.Infof("Compute endpoint for Alpha version: %s", alphasvc.BasePath)
104127

105128
project, zone, err := getProjectAndZone(configFile)
106129
if err != nil {
@@ -164,16 +187,23 @@ func readConfig(configPath string) (*ConfigFile, error) {
164187
return cfg, nil
165188
}
166189

167-
func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*computebeta.Service, error) {
168-
client, err := newOauthClient(ctx, tokenSource)
190+
func createAlphaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string, computeEnvironment string) (*computealpha.Service, error) {
191+
computeOpts, err := getComputeVersion(ctx, tokenSource, computeEndpoint, computeEnvironment, versionAlpha)
192+
if err != nil {
193+
klog.Errorf("Failed to get compute endpoint: %s", err)
194+
}
195+
service, err := computealpha.NewService(ctx, computeOpts...)
169196
if err != nil {
170197
return nil, err
171198
}
199+
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
200+
return service, nil
201+
}
172202

173-
computeOpts := []option.ClientOption{option.WithHTTPClient(client)}
174-
if computeEndpoint != "" {
175-
betaEndpoint := fmt.Sprintf("%s/compute/beta/", computeEndpoint)
176-
computeOpts = append(computeOpts, option.WithEndpoint(betaEndpoint))
203+
func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string, computeEnvironment string) (*computebeta.Service, error) {
204+
computeOpts, err := getComputeVersion(ctx, tokenSource, computeEndpoint, computeEnvironment, versionBeta)
205+
if err != nil {
206+
klog.Errorf("Failed to get compute endpoint: %s", err)
177207
}
178208
service, err := computebeta.NewService(ctx, computeOpts...)
179209
if err != nil {
@@ -183,47 +213,39 @@ func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSour
183213
return service, nil
184214
}
185215

186-
func createAlphaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*computealpha.Service, error) {
187-
client, err := newOauthClient(ctx, tokenSource)
216+
func createCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string, computeEnvironment string) (*compute.Service, error) {
217+
computeOpts, err := getComputeVersion(ctx, tokenSource, computeEndpoint, computeEnvironment, versionV1)
188218
if err != nil {
189-
return nil, err
190-
}
191-
192-
computeOpts := []option.ClientOption{option.WithHTTPClient(client)}
193-
if computeEndpoint != "" {
194-
alphaEndpoint := fmt.Sprintf("%s/compute/alpha/", computeEndpoint)
195-
computeOpts = append(computeOpts, option.WithEndpoint(alphaEndpoint))
219+
klog.Errorf("Failed to get compute endpoint: %s", err)
196220
}
197-
service, err := computealpha.NewService(ctx, computeOpts...)
221+
service, err := compute.NewService(ctx, computeOpts...)
198222
if err != nil {
199223
return nil, err
200224
}
201225
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
202226
return service, nil
203227
}
204228

205-
func createCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*compute.Service, error) {
206-
svc, err := createCloudServiceWithDefaultServiceAccount(ctx, vendorVersion, tokenSource, computeEndpoint)
207-
return svc, err
208-
}
209-
210-
func createCloudServiceWithDefaultServiceAccount(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*compute.Service, error) {
229+
func getComputeVersion(ctx context.Context, tokenSource oauth2.TokenSource, computeEndpoint string, computeEnvironment string, computeVersion string) ([]option.ClientOption, error) {
211230
client, err := newOauthClient(ctx, tokenSource)
212231
if err != nil {
213232
return nil, err
214233
}
215-
234+
computeEnvironmentSuffix, ok := computeVersionMap[googleEnv][computeEnvironment][computeVersion]
235+
if !ok {
236+
return nil, errors.New("Unable to fetch compute endpoint")
237+
}
216238
computeOpts := []option.ClientOption{option.WithHTTPClient(client)}
217239
if computeEndpoint != "" {
218-
v1Endpoint := fmt.Sprintf("%s/compute/v1/", computeEndpoint)
219-
computeOpts = append(computeOpts, option.WithEndpoint(v1Endpoint))
220-
}
221-
service, err := compute.NewService(ctx, computeOpts...)
222-
if err != nil {
223-
return nil, err
240+
endpoint := fmt.Sprintf("%s%s", computeEndpoint, computeEnvironmentSuffix)
241+
klog.Infof("Got compute endpoint %s", endpoint)
242+
_, err := url.ParseRequestURI(endpoint)
243+
if err != nil {
244+
klog.Fatalf("Error parsing compute endpoint %s", endpoint)
245+
}
246+
computeOpts = append(computeOpts, option.WithEndpoint(endpoint))
224247
}
225-
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
226-
return service, nil
248+
return computeOpts, nil
227249
}
228250

229251
func newOauthClient(ctx context.Context, tokenSource oauth2.TokenSource) (*http.Client, error) {

pkg/gce-pd-csi-driver/controller.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ const (
159159
)
160160

161161
var (
162-
validResourceApiVersions = map[string]bool{"v1": true, "alpha": true, "beta": true}
162+
validResourceApiVersions = map[string]bool{"v1": true, "alpha": true, "beta": true, "staging_v1": true, "staging_beta": true, "staging_alpha": true}
163163
)
164164

165165
func isDiskReady(disk *gce.CloudDisk) (bool, error) {

0 commit comments

Comments
 (0)