@@ -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