Skip to content

Commit e9054ac

Browse files
Switch to use compute v0.beta
1 parent af3994a commit e9054ac

File tree

4 files changed

+73
-22
lines changed

4 files changed

+73
-22
lines changed

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

+8-9
Original file line numberDiff line numberDiff line change
@@ -196,15 +196,14 @@ func (cloud *FakeCloudProvider) InsertDisk(ctx context.Context, project string,
196196
}
197197

198198
computeDisk := &computev1.Disk{
199-
Name: volKey.Name,
200-
SizeGb: common.BytesToGbRoundUp(capBytes),
201-
Description: "Disk created by GCE-PD CSI Driver",
202-
Type: cloud.GetDiskTypeURI(project, volKey, params.DiskType),
203-
SourceDiskId: volumeContentSourceVolumeID,
204-
Status: cloud.mockDiskStatus,
205-
Labels: params.Labels,
206-
ProvisionedIops: params.ProvisionedIOPSOnCreate,
207-
ProvisionedThroughput: params.ProvisionedThroughputOnCreate,
199+
Name: volKey.Name,
200+
SizeGb: common.BytesToGbRoundUp(capBytes),
201+
Description: "Disk created by GCE-PD CSI Driver",
202+
Type: cloud.GetDiskTypeURI(project, volKey, params.DiskType),
203+
SourceDiskId: volumeContentSourceVolumeID,
204+
Status: cloud.mockDiskStatus,
205+
Labels: params.Labels,
206+
ProvisionedIops: params.ProvisionedIOPSOnCreate,
208207
}
209208

210209
if snapshotID != "" {

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

+28-12
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ const (
4040
cryptoKeyVerDelimiter = "/cryptoKeyVersions"
4141
)
4242

43+
var hyperdiskTypes = []string{"hyperdisk-extreme", "hyperdisk-throughput"}
44+
4345
type GCEAPIVersion string
4446

4547
const (
@@ -387,15 +389,15 @@ func convertV1CustomerEncryptionKeyToBeta(v1Key *computev1.CustomerEncryptionKey
387389
}
388390
}
389391

390-
func convertV1DiskToBetaDisk(v1Disk *computev1.Disk) *computebeta.Disk {
392+
func convertV1DiskToBetaDisk(v1Disk *computev1.Disk, provisionedThroughputOnCreate int64) *computebeta.Disk {
391393
var dek *computebeta.CustomerEncryptionKey = nil
392394

393395
if v1Disk.DiskEncryptionKey != nil {
394396
dek = convertV1CustomerEncryptionKeyToBeta(v1Disk.DiskEncryptionKey)
395397
}
396398

397399
// Note: this is an incomplete list. It only includes the fields we use for disk creation.
398-
return &computebeta.Disk{
400+
betaDisk := &computebeta.Disk{
399401
Name: v1Disk.Name,
400402
SizeGb: v1Disk.SizeGb,
401403
Description: v1Disk.Description,
@@ -404,6 +406,11 @@ func convertV1DiskToBetaDisk(v1Disk *computev1.Disk) *computebeta.Disk {
404406
ReplicaZones: v1Disk.ReplicaZones,
405407
DiskEncryptionKey: dek,
406408
}
409+
if provisionedThroughputOnCreate > 0 {
410+
betaDisk.ProvisionedThroughput = provisionedThroughputOnCreate
411+
}
412+
413+
return betaDisk
407414
}
408415

409416
func (cloud *CloudProvider) insertRegionalDisk(
@@ -429,13 +436,12 @@ func (cloud *CloudProvider) insertRegionalDisk(
429436
}
430437

431438
diskToCreate := &computev1.Disk{
432-
Name: volKey.Name,
433-
SizeGb: common.BytesToGbRoundUp(capBytes),
434-
Description: description,
435-
Type: cloud.GetDiskTypeURI(cloud.project, volKey, params.DiskType),
436-
Labels: params.Labels,
437-
ProvisionedIops: params.ProvisionedIOPSOnCreate,
438-
ProvisionedThroughput: params.ProvisionedThroughputOnCreate,
439+
Name: volKey.Name,
440+
SizeGb: common.BytesToGbRoundUp(capBytes),
441+
Description: description,
442+
Type: cloud.GetDiskTypeURI(cloud.project, volKey, params.DiskType),
443+
Labels: params.Labels,
444+
ProvisionedIops: params.ProvisionedIOPSOnCreate,
439445
}
440446
if snapshotID != "" {
441447
_, snapshotType, _, err := common.SnapshotIDToProjectKey(snapshotID)
@@ -466,7 +472,7 @@ func (cloud *CloudProvider) insertRegionalDisk(
466472

467473
if gceAPIVersion == GCEAPIVersionBeta {
468474
var insertOp *computebeta.Operation
469-
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate)
475+
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate, 0)
470476
betaDiskToCreate.MultiWriter = multiWriter
471477
insertOp, err = cloud.betaService.RegionDisks.Insert(project, volKey.Region, betaDiskToCreate).Context(ctx).Do()
472478
if insertOp != nil {
@@ -538,7 +544,7 @@ func (cloud *CloudProvider) insertZonalDisk(
538544
gceAPIVersion = GCEAPIVersionV1
539545
)
540546

541-
if multiWriter {
547+
if multiWriter || containsBetaDiskType(hyperdiskTypes, params.DiskType) {
542548
gceAPIVersion = GCEAPIVersionBeta
543549
}
544550

@@ -576,7 +582,7 @@ func (cloud *CloudProvider) insertZonalDisk(
576582

577583
if gceAPIVersion == GCEAPIVersionBeta {
578584
var insertOp *computebeta.Operation
579-
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate)
585+
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate, params.ProvisionedThroughputOnCreate)
580586
betaDiskToCreate.MultiWriter = multiWriter
581587
insertOp, err = cloud.betaService.Disks.Insert(project, volKey.Zone, betaDiskToCreate).Context(ctx).Do()
582588
if insertOp != nil {
@@ -1168,3 +1174,13 @@ func encodeTags(tags map[string]string) (string, error) {
11681174
}
11691175
return string(enc), nil
11701176
}
1177+
1178+
func containsBetaDiskType(betaDiskTypes []string, diskType string) bool {
1179+
for _, betaDiskType := range betaDiskTypes {
1180+
if betaDiskType == diskType {
1181+
return true
1182+
}
1183+
}
1184+
1185+
return false
1186+
}

test/e2e/tests/setup_e2e_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
. "github.com/onsi/ginkgo"
2828
. "github.com/onsi/gomega"
2929
computealpha "google.golang.org/api/compute/v0.alpha"
30+
computebeta "google.golang.org/api/compute/v0.beta"
3031
compute "google.golang.org/api/compute/v1"
3132
"k8s.io/klog/v2"
3233
testutils "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/e2e/utils"
@@ -46,6 +47,7 @@ var (
4647
testContexts = []*remote.TestContext{}
4748
computeService *compute.Service
4849
computeAlphaService *computealpha.Service
50+
computeBetaService *computebeta.Service
4951
kmsClient *cloudkms.KeyManagementClient
5052
)
5153

@@ -75,6 +77,9 @@ var _ = BeforeSuite(func() {
7577
computeAlphaService, err = remote.GetComputeAlphaClient()
7678
Expect(err).To(BeNil())
7779

80+
computeBetaService, err = remote.GetComputeBetaClient()
81+
Expect(err).To(BeNil())
82+
7883
// Create the KMS client.
7984
kmsClient, err = cloudkms.NewKeyManagementClient(context.Background())
8085
Expect(err).To(BeNil())

test/remote/instance.go

+32-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import (
2828

2929
"golang.org/x/oauth2/google"
3030
computealpha "google.golang.org/api/compute/v0.alpha"
31-
compute "google.golang.org/api/compute/v1"
31+
compute "google.golang.org/api/compute/v0.beta"
32+
computebeta "google.golang.org/api/compute/v0.beta"
3233
"google.golang.org/api/googleapi"
3334
"k8s.io/apimachinery/pkg/util/uuid"
3435
"k8s.io/apimachinery/pkg/util/wait"
@@ -330,6 +331,36 @@ func GetComputeAlphaClient() (*computealpha.Service, error) {
330331
return nil, err
331332
}
332333

334+
func GetComputeBetaClient() (*computebeta.Service, error) {
335+
const retries = 10
336+
const backoff = time.Second * 6
337+
338+
klog.V(4).Infof("Getting compute client...")
339+
340+
// Setup the gce client for provisioning instances
341+
// Getting credentials on gce jenkins is flaky, so try a couple times
342+
var err error
343+
var cs *computebeta.Service
344+
for i := 0; i < retries; i++ {
345+
if i > 0 {
346+
time.Sleep(backoff)
347+
}
348+
349+
var client *http.Client
350+
client, err = google.DefaultClient(context.Background(), computebeta.ComputeScope)
351+
if err != nil {
352+
continue
353+
}
354+
355+
cs, err = computebeta.New(client)
356+
if err != nil {
357+
continue
358+
}
359+
return cs, nil
360+
}
361+
return nil, err
362+
}
363+
333364
func generateMetadataWithPublicKey(pubKeyFile string) (*compute.Metadata, error) {
334365
publicKeyByte, err := ioutil.ReadFile(pubKeyFile)
335366
if err != nil {

0 commit comments

Comments
 (0)