Skip to content

Commit 26bbb2a

Browse files
committed
Added vSphere check for max networks
1 parent b657d8b commit 26bbb2a

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

pkg/webhooks/machine_webhook.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ const (
186186
maxVSphereDataDiskNameLength = 80
187187
// Max size of any data disk in vSphere is 62 TiB. We are currently limiting to 16TiB (16384 GiB) as a starting point.
188188
maxVSphereDataDiskSize = 16384
189+
// Max number of networks allowed per machine
190+
maxVSphereNetworkCount = 10
189191

190192
// Nutanix Defaults
191193
// Minimum Nutanix values taken from Nutanix reconciler
@@ -1611,6 +1613,11 @@ func validateVSphereNetwork(network machinev1beta1.NetworkSpec, parentPath *fiel
16111613
return field.ErrorList{field.Required(parentPath.Child("devices"), "at least 1 network device must be provided")}
16121614
}
16131615

1616+
// We currently only support a max of 10 adapters in vSphere based on vSphere limitations
1617+
if len(network.Devices) > maxVSphereNetworkCount {
1618+
return field.ErrorList{field.TooMany(parentPath.Child("devices"), len(network.Devices), maxVSphereNetworkCount)}
1619+
}
1620+
16141621
var errs field.ErrorList
16151622
for i, spec := range network.Devices {
16161623
fldPath := parentPath.Child("devices").Index(i)

pkg/webhooks/machine_webhook_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1890,6 +1890,58 @@ func TestMachineUpdate(t *testing.T) {
18901890
},
18911891
expectedError: "providerSpec.network.devices: Required value: at least 1 network device must be provided",
18921892
},
1893+
{
1894+
name: "with an VSphere ProviderSpec, having more than 10 network devices",
1895+
platformType: osconfigv1.VSpherePlatformType,
1896+
clusterID: vsphereClusterID,
1897+
baseProviderSpecValue: &kruntime.RawExtension{
1898+
Object: defaultVSphereProviderSpec.DeepCopy(),
1899+
},
1900+
updatedProviderSpecValue: func() *kruntime.RawExtension {
1901+
object := defaultVSphereProviderSpec.DeepCopy()
1902+
object.Network = machinev1beta1.NetworkSpec{
1903+
Devices: []machinev1beta1.NetworkDeviceSpec{
1904+
{
1905+
NetworkName: "networkName1",
1906+
},
1907+
{
1908+
NetworkName: "networkName2",
1909+
},
1910+
{
1911+
NetworkName: "networkName3",
1912+
},
1913+
{
1914+
NetworkName: "networkName4",
1915+
},
1916+
{
1917+
NetworkName: "networkName5",
1918+
},
1919+
{
1920+
NetworkName: "networkName6",
1921+
},
1922+
{
1923+
NetworkName: "networkName7",
1924+
},
1925+
{
1926+
NetworkName: "networkName8",
1927+
},
1928+
{
1929+
NetworkName: "networkName9",
1930+
},
1931+
{
1932+
NetworkName: "networkName10",
1933+
},
1934+
{
1935+
NetworkName: "networkName11",
1936+
},
1937+
},
1938+
}
1939+
return &kruntime.RawExtension{
1940+
Object: object,
1941+
}
1942+
},
1943+
expectedError: "providerSpec.network.devices: Too many: 11: must have at most 10 items",
1944+
},
18931945
{
18941946
name: "when adding a lifecycle hook",
18951947
platformType: osconfigv1.AWSPlatformType,

0 commit comments

Comments
 (0)