@@ -44,6 +44,7 @@ const (
44
44
)
45
45
46
46
var pdDiskTypeUnsupportedRegex = regexp .MustCompile (pdDiskTypeUnsupportedPattern )
47
+ var hyperdiskTypes = []string {"hyperdisk-extreme" , "hyperdisk-throughput" }
47
48
48
49
type GCEAPIVersion string
49
50
@@ -401,15 +402,15 @@ func convertV1CustomerEncryptionKeyToBeta(v1Key *computev1.CustomerEncryptionKey
401
402
}
402
403
}
403
404
404
- func convertV1DiskToBetaDisk (v1Disk * computev1.Disk ) * computebeta.Disk {
405
+ func convertV1DiskToBetaDisk (v1Disk * computev1.Disk , provisionedThroughputOnCreate int64 ) * computebeta.Disk {
405
406
var dek * computebeta.CustomerEncryptionKey = nil
406
407
407
408
if v1Disk .DiskEncryptionKey != nil {
408
409
dek = convertV1CustomerEncryptionKeyToBeta (v1Disk .DiskEncryptionKey )
409
410
}
410
411
411
412
// Note: this is an incomplete list. It only includes the fields we use for disk creation.
412
- return & computebeta.Disk {
413
+ betaDisk := & computebeta.Disk {
413
414
Name : v1Disk .Name ,
414
415
SizeGb : v1Disk .SizeGb ,
415
416
Description : v1Disk .Description ,
@@ -418,6 +419,11 @@ func convertV1DiskToBetaDisk(v1Disk *computev1.Disk) *computebeta.Disk {
418
419
ReplicaZones : v1Disk .ReplicaZones ,
419
420
DiskEncryptionKey : dek ,
420
421
}
422
+ if provisionedThroughputOnCreate > 0 {
423
+ betaDisk .ProvisionedThroughput = provisionedThroughputOnCreate
424
+ }
425
+
426
+ return betaDisk
421
427
}
422
428
423
429
func (cloud * CloudProvider ) insertRegionalDisk (
@@ -443,13 +449,12 @@ func (cloud *CloudProvider) insertRegionalDisk(
443
449
}
444
450
445
451
diskToCreate := & computev1.Disk {
446
- Name : volKey .Name ,
447
- SizeGb : common .BytesToGbRoundUp (capBytes ),
448
- Description : description ,
449
- Type : cloud .GetDiskTypeURI (cloud .project , volKey , params .DiskType ),
450
- Labels : params .Labels ,
451
- ProvisionedIops : params .ProvisionedIOPSOnCreate ,
452
- ProvisionedThroughput : params .ProvisionedThroughputOnCreate ,
452
+ Name : volKey .Name ,
453
+ SizeGb : common .BytesToGbRoundUp (capBytes ),
454
+ Description : description ,
455
+ Type : cloud .GetDiskTypeURI (cloud .project , volKey , params .DiskType ),
456
+ Labels : params .Labels ,
457
+ ProvisionedIops : params .ProvisionedIOPSOnCreate ,
453
458
}
454
459
if snapshotID != "" {
455
460
_ , snapshotType , _ , err := common .SnapshotIDToProjectKey (snapshotID )
@@ -480,7 +485,7 @@ func (cloud *CloudProvider) insertRegionalDisk(
480
485
481
486
if gceAPIVersion == GCEAPIVersionBeta {
482
487
var insertOp * computebeta.Operation
483
- betaDiskToCreate := convertV1DiskToBetaDisk (diskToCreate )
488
+ betaDiskToCreate := convertV1DiskToBetaDisk (diskToCreate , 0 )
484
489
betaDiskToCreate .MultiWriter = multiWriter
485
490
insertOp , err = cloud .betaService .RegionDisks .Insert (project , volKey .Region , betaDiskToCreate ).Context (ctx ).Do ()
486
491
if insertOp != nil {
@@ -552,7 +557,7 @@ func (cloud *CloudProvider) insertZonalDisk(
552
557
gceAPIVersion = GCEAPIVersionV1
553
558
)
554
559
555
- if multiWriter {
560
+ if multiWriter || containsBetaDiskType ( hyperdiskTypes , params . DiskType ) {
556
561
gceAPIVersion = GCEAPIVersionBeta
557
562
}
558
563
@@ -590,7 +595,7 @@ func (cloud *CloudProvider) insertZonalDisk(
590
595
591
596
if gceAPIVersion == GCEAPIVersionBeta {
592
597
var insertOp * computebeta.Operation
593
- betaDiskToCreate := convertV1DiskToBetaDisk (diskToCreate )
598
+ betaDiskToCreate := convertV1DiskToBetaDisk (diskToCreate , params . ProvisionedThroughputOnCreate )
594
599
betaDiskToCreate .MultiWriter = multiWriter
595
600
insertOp , err = cloud .betaService .Disks .Insert (project , volKey .Zone , betaDiskToCreate ).Context (ctx ).Do ()
596
601
if insertOp != nil {
@@ -1190,3 +1195,13 @@ func encodeTags(tags map[string]string) (string, error) {
1190
1195
}
1191
1196
return string (enc ), nil
1192
1197
}
1198
+
1199
+ func containsBetaDiskType (betaDiskTypes []string , diskType string ) bool {
1200
+ for _ , betaDiskType := range betaDiskTypes {
1201
+ if betaDiskType == diskType {
1202
+ return true
1203
+ }
1204
+ }
1205
+
1206
+ return false
1207
+ }
0 commit comments