Skip to content

Commit 0d9edc4

Browse files
committed
Add compute-endpoint flag to pdcsi driver
git status
1 parent 5405cd0 commit 0d9edc4

File tree

5 files changed

+92
-21
lines changed

5 files changed

+92
-21
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
var (
3737
cloudConfigFilePath = flag.String("cloud-config", "", "Path to GCE cloud provider config")
3838
endpoint = flag.String("endpoint", "unix:/tmp/csi.sock", "CSI endpoint")
39+
computeEndpoint = flag.String("compute-endpoint", "", "If set, used as the endpoint for the GCE API.")
3940
runControllerService = flag.Bool("run-controller-service", true, "If set to false then the CSI driver does not activate its controller service (default: true)")
4041
runNodeService = flag.Bool("run-node-service", true, "If set to false then the CSI driver does not activate its node service (default: true)")
4142
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.")
@@ -117,7 +118,7 @@ func handle() {
117118
//Initialize requirements for the controller service
118119
var controllerServer *driver.GCEControllerServer
119120
if *runControllerService {
120-
cloudProvider, err := gce.CreateCloudProvider(ctx, version, *cloudConfigFilePath)
121+
cloudProvider, err := gce.CreateCloudProvider(ctx, version, *cloudConfigFilePath, *computeEndpoint)
121122
if err != nil {
122123
klog.Fatalf("Failed to get cloud provider: %v", err)
123124
}

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

+19-13
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@ const (
4444

4545
regionURITemplate = "projects/%s/regions/%s"
4646

47-
GCEComputeAPIEndpoint = "https://www.googleapis.com/compute/v1/"
48-
GCEComputeBetaAPIEndpoint = "https://www.googleapis.com/compute/beta/"
49-
GCEComputeAlphaAPIEndpoint = "https://www.googleapis.com/compute/alpha/"
50-
5147
replicaZoneURITemplateSingleZone = "projects/%s/zones/%s" // {gce.projectID}/zones/{disk.Zone}
5248
)
5349

@@ -73,7 +69,7 @@ type ConfigGlobal struct {
7369
Zone string `gcfg:"zone"`
7470
}
7571

76-
func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath string) (*CloudProvider, error) {
72+
func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath string, computeEndpoint string) (*CloudProvider, error) {
7773
configFile, err := readConfig(configPath)
7874
if err != nil {
7975
return nil, err
@@ -88,12 +84,12 @@ func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath s
8884
return nil, err
8985
}
9086

91-
svc, err := createCloudService(ctx, vendorVersion, tokenSource)
87+
svc, err := createCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
9288
if err != nil {
9389
return nil, err
9490
}
9591

96-
betasvc, err := createBetaCloudService(ctx, vendorVersion, tokenSource)
92+
betasvc, err := createBetaCloudService(ctx, vendorVersion, tokenSource, computeEndpoint)
9793
if err != nil {
9894
return nil, err
9995
}
@@ -159,30 +155,40 @@ func readConfig(configPath string) (*ConfigFile, error) {
159155
return cfg, nil
160156
}
161157

162-
func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource) (*computebeta.Service, error) {
158+
func createBetaCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*computebeta.Service, error) {
163159
client, err := newOauthClient(ctx, tokenSource)
164160
if err != nil {
165161
return nil, err
166162
}
167-
service, err := computebeta.NewService(ctx, option.WithHTTPClient(client))
163+
164+
computeOpts := []option.ClientOption{option.WithHTTPClient(client)}
165+
if computeEndpoint != "" {
166+
computeOpts = append(computeOpts, option.WithEndpoint(computeEndpoint))
167+
}
168+
service, err := computebeta.NewService(ctx, computeOpts...)
168169
if err != nil {
169170
return nil, err
170171
}
171172
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
172173
return service, nil
173174
}
174175

175-
func createCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource) (*compute.Service, error) {
176-
svc, err := createCloudServiceWithDefaultServiceAccount(ctx, vendorVersion, tokenSource)
176+
func createCloudService(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*compute.Service, error) {
177+
svc, err := createCloudServiceWithDefaultServiceAccount(ctx, vendorVersion, tokenSource, computeEndpoint)
177178
return svc, err
178179
}
179180

180-
func createCloudServiceWithDefaultServiceAccount(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource) (*compute.Service, error) {
181+
func createCloudServiceWithDefaultServiceAccount(ctx context.Context, vendorVersion string, tokenSource oauth2.TokenSource, computeEndpoint string) (*compute.Service, error) {
181182
client, err := newOauthClient(ctx, tokenSource)
182183
if err != nil {
183184
return nil, err
184185
}
185-
service, err := compute.New(client)
186+
187+
computeOpts := []option.ClientOption{option.WithHTTPClient(client)}
188+
if computeEndpoint != "" {
189+
computeOpts = append(computeOpts, option.WithEndpoint(computeEndpoint))
190+
}
191+
service, err := compute.NewService(ctx, computeOpts...)
186192
if err != nil {
187193
return nil, err
188194
}

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

+3-4
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import (
1818
"context"
1919
"fmt"
2020
"math/rand"
21+
"regexp"
2122
"sort"
22-
"strings"
2323
"time"
2424

2525
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
@@ -1526,9 +1526,8 @@ func generateCreateVolumeResponse(disk *gce.CloudDisk, zones []string) *csi.Crea
15261526
}
15271527

15281528
func cleanSelfLink(selfLink string) string {
1529-
temp := strings.TrimPrefix(selfLink, gce.GCEComputeAPIEndpoint)
1530-
temp = strings.TrimPrefix(temp, gce.GCEComputeBetaAPIEndpoint)
1531-
return strings.TrimPrefix(temp, gce.GCEComputeAlphaAPIEndpoint)
1529+
r, _ := regexp.Compile("https:\\/\\/www.*apis.com\\/.*(v1|beta|alpha)\\/")
1530+
return r.ReplaceAllString(selfLink, "")
15321531
}
15331532

15341533
func createRegionalDisk(ctx context.Context, cloudProvider gce.GCECompute, name string, zones []string, params common.DiskParameters, capacityRange *csi.CapacityRange, capBytes int64, snapshotID string, volumeContentSourceVolumeID string, multiWriter bool) (*gce.CloudDisk, error) {

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

+65
Original file line numberDiff line numberDiff line change
@@ -2294,6 +2294,71 @@ func TestControllerPublishBackoffMissingInstance(t *testing.T) {
22942294
})
22952295
}
22962296

2297+
func TestCleanSelfLink(t *testing.T){
2298+
testCases := []struct {
2299+
name string
2300+
in string
2301+
want string
2302+
}{
2303+
{
2304+
name: "v1 full standard w/ endpoint prefix",
2305+
in: "https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/disk",
2306+
want: "projects/project/zones/zone/disks/disk",
2307+
},
2308+
{
2309+
name: "beta full standard w/ endpoint prefix",
2310+
in: "https://www.googleapis.com/compute/beta/projects/project/zones/zone/disks/disk",
2311+
want: "projects/project/zones/zone/disks/disk",
2312+
},
2313+
{
2314+
name: "alpha full standard w/ endpoint prefix",
2315+
in: "https://www.googleapis.com/compute/alpha/projects/project/zones/zone/disks/disk",
2316+
want: "projects/project/zones/zone/disks/disk",
2317+
},
2318+
{
2319+
name: "no prefix",
2320+
in: "projects/project/zones/zone/disks/disk",
2321+
want: "projects/project/zones/zone/disks/disk",
2322+
},
2323+
2324+
{
2325+
name: "no prefix + project omitted",
2326+
in: "zones/zone/disks/disk",
2327+
want: "zones/zone/disks/disk",
2328+
},
2329+
{
2330+
name: "Compute prefix, google api",
2331+
in: "https://www.compute.googleapis.com/compute/v1/projects/project/zones/zone/disks/disk",
2332+
want: "projects/project/zones/zone/disks/disk",
2333+
},
2334+
{
2335+
name: "Compute prefix, partner api",
2336+
in: "https://www.compute.PARTNERapis.com/compute/v1/projects/project/zones/zone/disks/disk",
2337+
want: "projects/project/zones/zone/disks/disk",
2338+
},
2339+
{
2340+
name: "Partner beta api",
2341+
in: "https://www.PARTNERapis.com/compute/beta/projects/project/zones/zone/disks/disk",
2342+
want: "projects/project/zones/zone/disks/disk",
2343+
},
2344+
{
2345+
name: "Partner alpha api",
2346+
in: "https://www.partnerapis.com/compute/alpha/projects/project/zones/zone/disks/disk",
2347+
want: "projects/project/zones/zone/disks/disk",
2348+
},
2349+
}
2350+
2351+
// Run test cases
2352+
for _, tc := range testCases {
2353+
t.Run(tc.name, func(t *testing.T) {
2354+
got := cleanSelfLink(tc.in)
2355+
if got != tc.want {
2356+
t.Errorf("Expected cleaned self link: %v, got: %v", tc.want, got)
2357+
}
2358+
})
2359+
}
2360+
}
2361+
22972362
func backoffTesterForPublish(t *testing.T, config *backoffTesterConfig) {
22982363
readyToExecute := make(chan chan gce.Signal)
22992364
cloudDisks := []*gce.CloudDisk{

test/e2e/tests/single_zone_e2e_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"context"
1919
"fmt"
2020
"path/filepath"
21+
"regexp"
2122
"strings"
2223
"time"
2324

@@ -1204,7 +1205,6 @@ func createAndValidateUniqueZonalMultiWriterDisk(client *remote.CsiClient, proje
12041205
}
12051206

12061207
func cleanSelfLink(selfLink string) string {
1207-
temp := strings.TrimPrefix(selfLink, gce.GCEComputeAPIEndpoint)
1208-
temp = strings.TrimPrefix(temp, gce.GCEComputeBetaAPIEndpoint)
1209-
return strings.TrimPrefix(temp, gce.GCEComputeAlphaAPIEndpoint)
1208+
r, _ := regexp.Compile("https:\\/\\/www.*apis.com\\/.*(v1|beta|alpha)\\/")
1209+
return r.ReplaceAllString(selfLink, "")
12101210
}

0 commit comments

Comments
 (0)