Skip to content

Commit dc56fbf

Browse files
Merge pull request #1328 from vr4manta/SPLAT-2000
SPLAT-2000: Added vSphere provisioning mode to data disks
2 parents f86d206 + 2501df3 commit dc56fbf

22 files changed

+263
-53
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/google/uuid v1.6.0
1212
github.com/onsi/ginkgo/v2 v2.22.2
1313
github.com/onsi/gomega v1.36.2
14-
github.com/openshift/api v0.0.0-20250130171037-7bb8a0201a56
14+
github.com/openshift/api v0.0.0-20250218131406-8b82294c5e3a
1515
github.com/openshift/client-go v0.0.0-20250125113824-8e1f0b8fa9a7
1616
github.com/openshift/cluster-api-actuator-pkg/testutils v0.0.0-20250122171707-86066d47a264
1717
github.com/openshift/cluster-control-plane-machine-set-operator v0.0.0-20250128131205-c7b3d7b57a8e

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -357,8 +357,8 @@ github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU
357357
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
358358
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
359359
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
360-
github.com/openshift/api v0.0.0-20250130171037-7bb8a0201a56 h1:fWNA66LNXugnaxTaRVHZLdW+vbwyk5vwTT9/x2YYiG8=
361-
github.com/openshift/api v0.0.0-20250130171037-7bb8a0201a56/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
360+
github.com/openshift/api v0.0.0-20250218131406-8b82294c5e3a h1:G26rXyn/CoUWkZW/nQS8dhOG9061GxeshAtuJDlwv7Q=
361+
github.com/openshift/api v0.0.0-20250218131406-8b82294c5e3a/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
362362
github.com/openshift/client-go v0.0.0-20250125113824-8e1f0b8fa9a7 h1:4iliLcvr1P9EUMZgIaSNEKNQQzBn+L6PSequlFOuB6Q=
363363
github.com/openshift/client-go v0.0.0-20250125113824-8e1f0b8fa9a7/go.mod h1:2tcufBE4Cu6RNgDCxcUJepa530kGo5GFVfR9BSnndhI=
364364
github.com/openshift/cluster-api-actuator-pkg/testutils v0.0.0-20250122171707-86066d47a264 h1:KoJiId8Ynajf/ZFodvmayFkDODIL7Vow3LmgR5+oVRg=

pkg/controller/vsphere/reconciler.go

+24-8
Original file line numberDiff line numberDiff line change
@@ -1245,18 +1245,34 @@ func createDataDisks(s *machineScope, devices object.VirtualDeviceList) ([]types
12451245
for i, dataDisk := range s.providerSpec.DataDisks {
12461246
klog.V(2).InfoS("Adding disk", "name", dataDisk.Name, "spec", dataDisk)
12471247

1248+
backing := &types.VirtualDiskFlatVer2BackingInfo{
1249+
DiskMode: string(types.VirtualDiskModePersistent),
1250+
VirtualDeviceFileBackingInfo: types.VirtualDeviceFileBackingInfo{
1251+
FileName: "",
1252+
},
1253+
}
1254+
1255+
// Set provisioning type for the new data disk.
1256+
// Currently, if ThinProvisioned is not set, GOVC will set default to false. We may want to change this behavior
1257+
// to match what template image OS disk has configured to make them match if not set.
1258+
switch dataDisk.ProvisioningMode {
1259+
case machinev1.ProvisioningModeThin:
1260+
backing.ThinProvisioned = types.NewBool(true)
1261+
case machinev1.ProvisioningModeThick:
1262+
backing.ThinProvisioned = types.NewBool(false)
1263+
case machinev1.ProvisioningModeEagerlyZeroed:
1264+
backing.ThinProvisioned = types.NewBool(false)
1265+
backing.EagerlyScrub = types.NewBool(true)
1266+
default:
1267+
klog.V(2).Infof("No provisioning type detected. Leaving configuration empty.")
1268+
}
1269+
12481270
dev := &types.VirtualDisk{
12491271
VirtualDevice: types.VirtualDevice{
12501272
// Key needs to be unique and cannot match another new disk being added. So we'll use the index as an
12511273
// input to NewKey. NewKey() will always return same value since our new devices are not part of devices yet.
1252-
Key: devices.NewKey() - int32(i),
1253-
Backing: &types.VirtualDiskFlatVer2BackingInfo{
1254-
DiskMode: string(types.VirtualDiskModePersistent),
1255-
ThinProvisioned: types.NewBool(true),
1256-
VirtualDeviceFileBackingInfo: types.VirtualDeviceFileBackingInfo{
1257-
FileName: "",
1258-
},
1259-
},
1274+
Key: devices.NewKey() - int32(i),
1275+
Backing: backing,
12601276
ControllerKey: controller.GetVirtualController().Key,
12611277
},
12621278
CapacityInKB: int64(dataDisk.SizeGiB) * 1024 * 1024,

pkg/webhooks/machine_webhook.go

+18
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ var (
131131

132132
// vSphereDataDiskNamePattern is used to validate the name of a data disk
133133
vSphereDataDiskNamePattern = regexp.MustCompile(`^[a-zA-Z0-9]([-_a-zA-Z0-9]*[a-zA-Z0-9])?$`)
134+
135+
// validProvisioningModes lists all valid data disk provisioning modes
136+
validProvisioningModes = []machinev1beta1.ProvisioningMode{
137+
machinev1beta1.ProvisioningModeThin,
138+
machinev1beta1.ProvisioningModeThick,
139+
machinev1beta1.ProvisioningModeEagerlyZeroed,
140+
}
134141
)
135142

136143
const (
@@ -1571,6 +1578,17 @@ func validateVSphereDataDisks(dataDisks []machinev1beta1.VSphereDisk) field.Erro
15711578
if disk.SizeGiB > maxVSphereDataDiskSize {
15721579
errs = append(errs, field.Invalid(diskPath.Child("sizeGiB"), disk.SizeGiB, fmt.Sprintf("data disk size (GiB) must not exceed %d", maxVSphereDataDiskSize)))
15731580
}
1581+
1582+
// Validate provisioning modes
1583+
if len(disk.ProvisioningMode) > 0 {
1584+
validModesSet := sets.NewString()
1585+
for _, m := range validProvisioningModes {
1586+
validModesSet.Insert(string(m))
1587+
}
1588+
if !validModesSet.Has(string(disk.ProvisioningMode)) {
1589+
errs = append(errs, field.NotSupported(diskPath, disk.ProvisioningMode, validModesSet.List()))
1590+
}
1591+
}
15741592
}
15751593

15761594
return errs

pkg/webhooks/machine_webhook_test.go

+37
Original file line numberDiff line numberDiff line change
@@ -4484,6 +4484,43 @@ func TestValidateVSphereProviderSpec(t *testing.T) {
44844484
}(),
44854485
expectedError: "providerSpec.disks[0].name: Invalid value: \"Bad #Name\": data disk name must consist only of alphanumeric characters, hyphens and underscores, and must start and end with an alphanumeric character.",
44864486
},
4487+
{
4488+
testCase: "with data disk configured with provisioning mode",
4489+
modifySpec: func(p *machinev1beta1.VSphereMachineProviderSpec) {
4490+
p.DataDisks = []machinev1beta1.VSphereDisk{
4491+
{
4492+
Name: "Disk1",
4493+
SizeGiB: 10,
4494+
ProvisioningMode: machinev1beta1.ProvisioningModeThin,
4495+
},
4496+
}
4497+
},
4498+
expectedOk: true,
4499+
featureGatesEnabled: func() map[string]bool {
4500+
fg := make(map[string]bool)
4501+
fg[string(features.FeatureGateVSphereMultiDisk)] = true
4502+
return fg
4503+
}(),
4504+
},
4505+
{
4506+
testCase: "with data disk configured with invalid provisioning mode",
4507+
modifySpec: func(p *machinev1beta1.VSphereMachineProviderSpec) {
4508+
p.DataDisks = []machinev1beta1.VSphereDisk{
4509+
{
4510+
Name: "Disk1",
4511+
SizeGiB: 10,
4512+
ProvisioningMode: "Fat",
4513+
},
4514+
}
4515+
},
4516+
expectedOk: false,
4517+
featureGatesEnabled: func() map[string]bool {
4518+
fg := make(map[string]bool)
4519+
fg[string(features.FeatureGateVSphereMultiDisk)] = true
4520+
return fg
4521+
}(),
4522+
expectedError: "providerSpec.disks[0]: Unsupported value: \"Fat\": supported values: \"EagerlyZeroed\", \"Thick\", \"Thin\"",
4523+
},
44874524
}
44884525

44894526
secret := &corev1.Secret{

vendor/github.com/openshift/api/config/v1/types_cluster_operator.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/types_infrastructure.go

+8-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusteroperators.crd.yaml

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml

+19-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml

+19-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml

+19-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml

+19-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)