Skip to content

Commit deee156

Browse files
committed
migrate hyperdisk/chd/storagepools to GCE v1 disk API
1 parent d81bfcc commit deee156

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ func (cloud *FakeCloudProvider) InsertDisk(ctx context.Context, project string,
249249
}
250250

251251
if containsBetaDiskType(hyperdiskTypes, params.DiskType) {
252-
betaDisk := convertV1DiskToBetaDisk(computeDisk, params.ProvisionedThroughputOnCreate)
252+
betaDisk := convertV1DiskToBetaDisk(computeDisk)
253253
betaDisk.EnableConfidentialCompute = params.EnableConfidentialCompute
254254
cloud.disks[volKey.Name] = CloudDiskFromBeta(betaDisk)
255255
} else {

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

+24-12
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ func convertV1CustomerEncryptionKeyToBeta(v1Key *computev1.CustomerEncryptionKey
419419
}
420420
}
421421

422-
func convertV1DiskToBetaDisk(v1Disk *computev1.Disk, provisionedThroughputOnCreate int64) *computebeta.Disk {
422+
func convertV1DiskToBetaDisk(v1Disk *computev1.Disk) *computebeta.Disk {
423423
var dek *computebeta.CustomerEncryptionKey = nil
424424

425425
if v1Disk.DiskEncryptionKey != nil {
@@ -444,12 +444,17 @@ func convertV1DiskToBetaDisk(v1Disk *computev1.Disk, provisionedThroughputOnCrea
444444
Status: v1Disk.Status,
445445
SelfLink: v1Disk.SelfLink,
446446
}
447+
448+
// Hyperdisk doesn't currently support multiWriter (https://cloud.google.com/compute/docs/disks/hyperdisks#limitations),
449+
// but if multiWriter + hyperdisk is supported in the future, we want the PDCSI driver to support this feature without
450+
// any additional code change.
447451
if v1Disk.ProvisionedIops > 0 {
448452
betaDisk.ProvisionedIops = v1Disk.ProvisionedIops
449453
}
450-
if provisionedThroughputOnCreate > 0 {
451-
betaDisk.ProvisionedThroughput = provisionedThroughputOnCreate
454+
if v1Disk.ProvisionedThroughput > 0 {
455+
betaDisk.ProvisionedThroughput = v1Disk.ProvisionedThroughput
452456
}
457+
betaDisk.StoragePool = v1Disk.StoragePool
453458

454459
return betaDisk
455460
}
@@ -543,7 +548,7 @@ func (cloud *CloudProvider) insertRegionalDisk(
543548

544549
if gceAPIVersion == GCEAPIVersionBeta {
545550
var insertOp *computebeta.Operation
546-
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate, 0)
551+
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate)
547552
betaDiskToCreate.MultiWriter = multiWriter
548553
insertOp, err = cloud.betaService.RegionDisks.Insert(project, volKey.Region, betaDiskToCreate).Context(ctx).Do()
549554
if insertOp != nil {
@@ -619,13 +624,9 @@ func (cloud *CloudProvider) insertZonalDisk(
619624
opName string
620625
gceAPIVersion = GCEAPIVersionV1
621626
)
622-
if multiWriter || containsBetaDiskType(hyperdiskTypes, params.DiskType) {
627+
if multiWriter {
623628
gceAPIVersion = GCEAPIVersionBeta
624629
}
625-
storagePoolsEnabled := params.StoragePools != nil
626-
if storagePoolsEnabled {
627-
gceAPIVersion = GCEAPIVersionAlpha
628-
}
629630

630631
diskToCreate := &computev1.Disk{
631632
Name: volKey.Name,
@@ -638,6 +639,17 @@ func (cloud *CloudProvider) insertZonalDisk(
638639
if params.ProvisionedIOPSOnCreate > 0 {
639640
diskToCreate.ProvisionedIops = params.ProvisionedIOPSOnCreate
640641
}
642+
if params.ProvisionedThroughputOnCreate > 0 {
643+
diskToCreate.ProvisionedThroughput = params.ProvisionedThroughputOnCreate
644+
}
645+
646+
if params.StoragePools != nil {
647+
sp := common.StoragePoolInZone(params.StoragePools, volKey.Zone)
648+
if sp == nil {
649+
return status.Errorf(codes.InvalidArgument, "cannot create disk in zone %q: no Storage Pools exist in zone", volKey.Zone)
650+
}
651+
diskToCreate.StoragePool = sp.ResourceName
652+
}
641653

642654
if snapshotID != "" {
643655
_, snapshotType, _, err := common.SnapshotIDToProjectKey(snapshotID)
@@ -662,20 +674,20 @@ func (cloud *CloudProvider) insertZonalDisk(
662674
KmsKeyName: params.DiskEncryptionKMSKey,
663675
}
664676
}
677+
diskToCreate.EnableConfidentialCompute = params.EnableConfidentialCompute
665678

666679
if gceAPIVersion == GCEAPIVersionBeta {
667680
var insertOp *computebeta.Operation
668-
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate, params.ProvisionedThroughputOnCreate)
681+
betaDiskToCreate := convertV1DiskToBetaDisk(diskToCreate)
669682
betaDiskToCreate.MultiWriter = multiWriter
670-
betaDiskToCreate.EnableConfidentialCompute = params.EnableConfidentialCompute
671683
insertOp, err = cloud.betaService.Disks.Insert(project, volKey.Zone, betaDiskToCreate).Context(ctx).Do()
672684
if insertOp != nil {
673685
opName = insertOp.Name
674686
}
675687
} else if gceAPIVersion == GCEAPIVersionAlpha {
676688
var insertOp *computealpha.Operation
677689
var storagePool *common.StoragePool
678-
if storagePoolsEnabled {
690+
if params.StoragePools != nil {
679691
storagePool = common.StoragePoolInZone(params.StoragePools, volKey.Zone)
680692
if storagePool == nil {
681693
return status.Errorf(codes.InvalidArgument, "cannot create disk in zone %q: no Storage Pools exist in zone", volKey.Zone)

0 commit comments

Comments
 (0)