@@ -40,6 +40,8 @@ const (
4040 cryptoKeyVerDelimiter = "/cryptoKeyVersions"
4141)
4242
43+ var hyperdiskTypes = []string {"hyperdisk-extreme" , "hyperdisk-throughput" }
44+
4345type GCEAPIVersion string
4446
4547const (
@@ -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
409416func (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+ }
0 commit comments