Skip to content

Commit c9b2963

Browse files
authored
Merge branch 'release-1.13' into automated-cherry-pick-of-#1593-upstream-release-1.13
2 parents 498f889 + c60d05b commit c9b2963

File tree

6 files changed

+50
-158
lines changed

6 files changed

+50
-158
lines changed

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

+2-33
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,8 @@ package main
1717

1818
import (
1919
"context"
20-
"errors"
2120
"flag"
22-
"fmt"
2321
"math/rand"
24-
"net/url"
2522
"os"
2623
"runtime"
2724
"strings"
@@ -41,6 +38,7 @@ import (
4138
var (
4239
cloudConfigFilePath = flag.String("cloud-config", "", "Path to GCE cloud provider config")
4340
endpoint = flag.String("endpoint", "unix:/tmp/csi.sock", "CSI endpoint")
41+
computeEndpoint = flag.String("compute-endpoint", "", "If set, used as the endpoint for the GCE API.")
4442
runControllerService = flag.Bool("run-controller-service", true, "If set to false then the CSI driver does not activate its controller service (default: true)")
4543
runNodeService = flag.Bool("run-node-service", true, "If set to false then the CSI driver does not activate its node service (default: true)")
4644
httpEndpoint = flag.String("http-endpoint", "", "The TCP network address where the prometheus metrics endpoint will listen (example: `:8080`). The default is empty string, which means metrics endpoint is disabled.")
@@ -92,16 +90,13 @@ func init() {
9290
// Use V(4) for general debug information logging
9391
// Use V(5) for GCE Cloud Provider Call informational logging
9492
// Use V(6) for extra repeated/polling information
95-
enumFlag(&computeEnvironment, "compute-environment", allowedComputeEnvironment, "Operating compute environment")
96-
urlFlag(&computeEndpoint, "compute-endpoint", "Compute endpoint")
9793
klog.InitFlags(flag.CommandLine)
9894
flag.Set("logtostderr", "true")
9995
}
10096

10197
func main() {
10298
flag.Parse()
10399
rand.Seed(time.Now().UnixNano())
104-
klog.Infof("Operating compute environment set to: %s and computeEndpoint is set to: %v", computeEnvironment, computeEndpoint)
105100
handle()
106101
os.Exit(0)
107102
}
@@ -173,7 +168,7 @@ func handle() {
173168
// Initialize requirements for the controller service
174169
var controllerServer *driver.GCEControllerServer
175170
if *runControllerService {
176-
cloudProvider, err := gce.CreateCloudProvider(ctx, version, *cloudConfigFilePath, computeEndpoint, computeEnvironment)
171+
cloudProvider, err := gce.CreateCloudProvider(ctx, version, *cloudConfigFilePath, *computeEndpoint)
177172
if err != nil {
178173
klog.Fatalf("Failed to get cloud provider: %v", err.Error())
179174
}
@@ -222,29 +217,3 @@ func handle() {
222217

223218
gceDriver.Run(*endpoint, *grpcLogCharCap, *enableOtelTracing)
224219
}
225-
226-
func enumFlag(target *gce.Environment, name string, allowedComputeEnvironment []gce.Environment, usage string) {
227-
flag.Func(name, usage, func(flagValue string) error {
228-
for _, allowedValue := range allowedComputeEnvironment {
229-
if gce.Environment(flagValue) == allowedValue {
230-
*target = gce.Environment(flagValue)
231-
return nil
232-
}
233-
}
234-
errMsg := fmt.Sprintf(`must be one of %v`, allowedComputeEnvironment)
235-
return errors.New(errMsg)
236-
})
237-
238-
}
239-
240-
func urlFlag(target **url.URL, name string, usage string) {
241-
flag.Func(name, usage, func(flagValue string) error {
242-
computeURL, err := url.ParseRequestURI(flagValue)
243-
if err == nil {
244-
*target = computeURL
245-
return nil
246-
}
247-
klog.Infof("Error parsing endpoint compute endpoint %v", err)
248-
return err
249-
})
250-
}

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

+36-49
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"errors"
2020
"fmt"
2121
"net/http"
22-
"net/url"
2322
"os"
2423
"runtime"
2524
"time"
@@ -38,9 +37,6 @@ import (
3837
"k8s.io/klog/v2"
3938
)
4039

41-
type Environment string
42-
type Version string
43-
4440
const (
4541
TokenURL = "https://accounts.google.com/o/oauth2/token"
4642
diskSourceURITemplateSingleZone = "projects/%s/zones/%s/disks/%s" // {gce.projectID}/zones/{disk.Zone}/disks/{disk.Name}"
@@ -50,12 +46,7 @@ const (
5046

5147
regionURITemplate = "projects/%s/regions/%s"
5248

53-
replicaZoneURITemplateSingleZone = "projects/%s/zones/%s" // {gce.projectID}/zones/{disk.Zone}
54-
versionV1 Version = "v1"
55-
versionBeta Version = "beta"
56-
versionAlpha Version = "alpha"
57-
EnvironmentStaging Environment = "staging"
58-
EnvironmentProduction Environment = "production"
49+
replicaZoneURITemplateSingleZone = "projects/%s/zones/%s" // {gce.projectID}/zones/{disk.Zone}
5950
)
6051

6152
type CloudProvider struct {
@@ -81,7 +72,7 @@ type ConfigGlobal struct {
8172
Zone string `gcfg:"zone"`
8273
}
8374

84-
func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath string, computeEndpoint *url.URL, computeEnvironment Environment) (*CloudProvider, error) {
75+
func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath string, computeEndpoint string) (*CloudProvider, error) {
8576
configFile, err := readConfig(configPath)
8677
if err != nil {
8778
return nil, err
@@ -96,23 +87,20 @@ func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath s
9687
return nil, err
9788
}
9889

99-
svc, err := createCloudService(ctx, vendorVersion, tokenSource, computeEndpoint, computeEnvironment)
90+
svc, err := createCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
10091
if err != nil {
10192
return nil, err
10293
}
103-
klog.Infof("Compute endpoint for V1 version: %s", svc.BasePath)
10494

105-
betasvc, err := createBetaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint, computeEnvironment)
95+
betasvc, err := createBetaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
10696
if err != nil {
10797
return nil, err
10898
}
109-
klog.Infof("Compute endpoint for Beta version: %s", betasvc.BasePath)
11099

111-
alphasvc, err := createAlphaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint, computeEnvironment)
100+
alphasvc, err := createAlphaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
112101
if err != nil {
113102
return nil, err
114103
}
115-
klog.Infof("Compute endpoint for Alpha version: %s", alphasvc.BasePath)
116104

117105
project, zone, err := getProjectAndZone(configFile)
118106
if err != nil {
@@ -176,23 +164,16 @@ func readConfig(configPath string) (*ConfigFile, error) {
176164
return cfg, nil
177165
}
178166

179-
func createAlphaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint *url.URL, computeEnvironment Environment) (*computealpha.Service, error) {
180-
computeOpts, err := getComputeVersion(ctx, tokenSource, computeEndpoint, computeEnvironment, versionAlpha)
181-
if err != nil {
182-
klog.Errorf("Failed to get compute endpoint: %s", err)
183-
}
184-
service, err := computealpha.NewService(ctx, computeOpts...)
167+
func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*computebeta.Service, error) {
168+
client, err := newOauthClient(ctx, tokenSource)
185169
if err != nil {
186170
return nil, err
187171
}
188-
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
189-
return service, nil
190-
}
191172

192-
func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint *url.URL, computeEnvironment Environment) (*computebeta.Service, error) {
193-
computeOpts, err := getComputeVersion(ctx, tokenSource, computeEndpoint, computeEnvironment, versionBeta)
194-
if err != nil {
195-
klog.Errorf("Failed to get compute endpoint: %s", err)
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))
196177
}
197178
service, err := computebeta.NewService(ctx, computeOpts...)
198179
if err != nil {
@@ -202,41 +183,47 @@ func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSour
202183
return service, nil
203184
}
204185

205-
func createCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint *url.URL, computeEnvironment Environment) (*compute.Service, error) {
206-
computeOpts, err := getComputeVersion(ctx, tokenSource, computeEndpoint, computeEnvironment, versionV1)
186+
func createAlphaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*computealpha.Service, error) {
187+
client, err := newOauthClient(ctx, tokenSource)
207188
if err != nil {
208-
klog.Errorf("Failed to get compute endpoint: %s", err)
189+
return nil, err
209190
}
210-
service, err := compute.NewService(ctx, computeOpts...)
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))
196+
}
197+
service, err := computealpha.NewService(ctx, computeOpts...)
211198
if err != nil {
212199
return nil, err
213200
}
214201
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
215202
return service, nil
216203
}
217204

218-
func getComputeVersion(ctx context.Context, tokenSource oauth2.TokenSource, computeEndpoint *url.URL, computeEnvironment Environment, computeVersion Version) ([]option.ClientOption, error) {
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) {
219211
client, err := newOauthClient(ctx, tokenSource)
220212
if err != nil {
221213
return nil, err
222214
}
223-
computeOpts := []option.ClientOption{option.WithHTTPClient(client)}
224215

225-
if computeEndpoint != nil {
226-
computeEnvironmentSuffix := constructComputeEndpointPath(computeEnvironment, computeVersion)
227-
computeEndpoint.Path = computeEnvironmentSuffix
228-
endpoint := computeEndpoint.String()
229-
computeOpts = append(computeOpts, option.WithEndpoint(endpoint))
216+
computeOpts := []option.ClientOption{option.WithHTTPClient(client)}
217+
if computeEndpoint != "" {
218+
v1Endpoint := fmt.Sprintf("%s/compute/v1/", computeEndpoint)
219+
computeOpts = append(computeOpts, option.WithEndpoint(v1Endpoint))
230220
}
231-
return computeOpts, nil
232-
}
233-
234-
func constructComputeEndpointPath(env Environment, version Version) string {
235-
prefix := ""
236-
if env == EnvironmentStaging {
237-
prefix = fmt.Sprintf("%s_", env)
221+
service, err := compute.NewService(ctx, computeOpts...)
222+
if err != nil {
223+
return nil, err
238224
}
239-
return fmt.Sprintf("compute/%s%s/", prefix, version)
225+
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
226+
return service, nil
240227
}
241228

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

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

-74
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,14 @@ limitations under the License.
1818
package gcecloudprovider
1919

2020
import (
21-
"context"
2221
"errors"
2322
"fmt"
2423
"net/http"
25-
"net/url"
2624
"testing"
27-
"time"
2825

29-
"golang.org/x/oauth2"
30-
31-
"google.golang.org/api/compute/v1"
3226
"google.golang.org/api/googleapi"
3327
)
3428

35-
type mockTokenSource struct{}
36-
37-
func (*mockTokenSource) Token() (*oauth2.Token, error) {
38-
return &oauth2.Token{
39-
AccessToken: "access",
40-
TokenType: "Bearer",
41-
RefreshToken: "refresh",
42-
Expiry: time.Now().Add(1 * time.Hour),
43-
}, nil
44-
}
4529
func TestIsGCEError(t *testing.T) {
4630
testCases := []struct {
4731
name string
@@ -100,61 +84,3 @@ func TestIsGCEError(t *testing.T) {
10084
}
10185
}
10286
}
103-
104-
func TestGetComputeVersion(t *testing.T) {
105-
testCases := []struct {
106-
name string
107-
computeEndpoint *url.URL
108-
computeEnvironment Environment
109-
computeVersion Version
110-
expectedEndpoint string
111-
expectError bool
112-
}{
113-
114-
{
115-
name: "check for production environment",
116-
computeEndpoint: convertStringToURL("https://compute.googleapis.com"),
117-
computeEnvironment: EnvironmentProduction,
118-
computeVersion: versionBeta,
119-
expectedEndpoint: "https://compute.googleapis.com/compute/beta/",
120-
expectError: false,
121-
},
122-
{
123-
name: "check for staging environment",
124-
computeEndpoint: convertStringToURL("https://compute.googleapis.com"),
125-
computeEnvironment: EnvironmentStaging,
126-
computeVersion: versionV1,
127-
expectedEndpoint: "https://compute.googleapis.com/compute/staging_v1/",
128-
expectError: false,
129-
},
130-
{
131-
name: "check for random string as endpoint",
132-
computeEndpoint: convertStringToURL(""),
133-
computeEnvironment: "prod",
134-
computeVersion: "v1",
135-
expectedEndpoint: "compute/v1/",
136-
expectError: true,
137-
},
138-
}
139-
for _, tc := range testCases {
140-
ctx := context.Background()
141-
computeOpts, err := getComputeVersion(ctx, &mockTokenSource{}, tc.computeEndpoint, tc.computeEnvironment, tc.computeVersion)
142-
service, _ := compute.NewService(ctx, computeOpts...)
143-
gotEndpoint := service.BasePath
144-
if err != nil && !tc.expectError {
145-
t.Fatalf("Got error %v", err)
146-
}
147-
if gotEndpoint != tc.expectedEndpoint && !tc.expectError {
148-
t.Fatalf("expected endpoint %s, got endpoint %s", tc.expectedEndpoint, gotEndpoint)
149-
}
150-
}
151-
152-
}
153-
154-
func convertStringToURL(urlString string) *url.URL {
155-
parsedURL, err := url.ParseRequestURI(urlString)
156-
if err != nil {
157-
return nil
158-
}
159-
return parsedURL
160-
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ const (
178178
)
179179

180180
var (
181-
validResourceApiVersions = map[string]bool{"v1": true, "alpha": true, "beta": true, "staging_v1": true, "staging_beta": true, "staging_alpha": true}
181+
validResourceApiVersions = map[string]bool{"v1": true, "alpha": true, "beta": true}
182182
)
183183

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

test/e2e/tests/single_zone_e2e_test.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -1280,7 +1280,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
12801280
}()
12811281
})
12821282

1283-
It("Should pass if valid compute endpoint is passed in", func() {
1283+
It("Should pass/fail if valid/invalid compute endpoint is passed in", func() {
12841284
// gets instance set up w/o compute-endpoint set from test setup
12851285
_, err := getRandomTestContext().Client.ListVolumes()
12861286
Expect(err).To(BeNil(), "no error expected when passed valid compute url")
@@ -1295,6 +1295,15 @@ var _ = Describe("GCE PD CSI Driver", func() {
12951295

12961296
klog.Infof("Creating new driver and client for node %s\n", i.GetName())
12971297

1298+
// Create new driver and client w/ invalid endpoint
1299+
tcInvalid, err := testutils.GCEClientAndDriverSetup(i, "invalid-string")
1300+
if err != nil {
1301+
klog.Fatalf("Failed to set up Test Context for instance %v: %w", i.GetName(), err)
1302+
}
1303+
1304+
_, err = tcInvalid.Client.ListVolumes()
1305+
Expect(err.Error()).To(ContainSubstring("no such host"), "expected error when passed invalid compute url")
1306+
12981307
// Create new driver and client w/ valid, passed-in endpoint
12991308
tcValid, err := testutils.GCEClientAndDriverSetup(i, "https://compute.googleapis.com")
13001309
if err != nil {

test/e2e/utils/utils.go

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ func GCEClientAndDriverSetup(instance *remote.InstanceInfo, computeEndpoint stri
6565
// useful to see what's happening when debugging tests.
6666
driverRunCmd := fmt.Sprintf("sh -c '/usr/bin/nohup %s/gce-pd-csi-driver -v=6 --endpoint=%s --multi-zone-volume-handle-enable --multi-zone-volume-handle-disk-types=pd-standard %s 2> %s/prog.out < /dev/null > /dev/null &'",
6767
workspace, endpoint, strings.Join(extra_flags, " "), workspace)
68+
6869
config := &remote.ClientConfig{
6970
PkgPath: pkgPath,
7071
BinPath: binPath,

0 commit comments

Comments
 (0)