Skip to content

Commit 7df2b98

Browse files
OCPBUGS-25462: Validate control plane replicas
The number of control plane replicas defined in install-config.yaml (or agent-cluster-install.yaml) are validated to check if they are set to 3, or 1 in the case of SNO. If set to another value the "create image" command fails. Signed-off-by: Pawan Pinjarkar <[email protected]>
1 parent 1c54fa1 commit 7df2b98

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
! exec openshift-install agent create image --dir $WORK
2+
3+
stderr 'ControlPlane.Replicas can only be set to 3 or 1. Found 2'
4+
5+
! exists $WORK/agent.x86_64.iso
6+
! exists $WORK/auth/kubeconfig
7+
! exists $WORK/auth/kubeadmin-password
8+
9+
-- install-config.yaml --
10+
apiVersion: v1
11+
baseDomain: test.metalkube.org
12+
controlPlane:
13+
name: master
14+
replicas: 2
15+
compute:
16+
- name: worker
17+
replicas: 0
18+
metadata:
19+
namespace: cluster0
20+
name: ostest
21+
networking:
22+
clusterNetwork:
23+
- cidr: 10.128.0.0/14
24+
hostPrefix: 23
25+
networkType: OVNKubernetes
26+
machineNetwork:
27+
- cidr: 192.168.111.0/24
28+
serviceNetwork:
29+
- 172.30.0.0/16
30+
platform:
31+
external:
32+
platformName: oci
33+
cloudControllerManager: External
34+
sshKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDK6UTEydcEKzuNdPaofn8Z2DwgHqdcionLZBiPf/zIRNco++etLsat7Avv7yt04DINQd5zjxIFgG8jblaUB5E5C9ClUcMwb52GO0ay2Y9v1uBv1a4WhI3peKktAzYNk0EBMQlJtXPjRMrC9ylBPh+DsBHMu+KmDnfk7PIwyN4efC8k5kSRuPWoNdme1rz2+umU8FSmaWTHIajrbspf4GQbsntA5kuKEtDbfoNCU97o2KrRnUbeg3a8hwSjfh3u6MhlnGcg5K2Ij+zivEsWGCLKYUtE1ErqwfIzwWmJ6jnV66XCQGHf4Q1iIxqF7s2a1q24cgG2Z/iDXfqXrCIfy4P7b/Ztak3bdT9jfAdVZtdO5/r7I+O5hYhF86ayFlDWzZWP/ByiSb+q4CQbfVgK3BMmiAv2MqLHdhesmD/SmIcoOWUF6rFmRKZVFFpKpt5ATNTgUJ3JRowoXrrDruVXClUGRiCS6Zabd1rZ3VmTchaPJwtzQMdfIWISXj+Ig+C4UK0=
35+
pullSecret: '{"auths": {"quay.io": {"auth": "c3VwZXItc2VjcmV0Cg=="}}}'
36+
37+
-- agent-config.yaml --
38+
apiVersion: v1alpha1
39+
metadata:
40+
name: ostest
41+
namespace: cluster0
42+
rendezvousIP: 192.168.111.20

pkg/asset/agent/installconfig.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ func (a *OptionalInstallConfig) validateInstallConfig(installConfig *types.Insta
8989
numMasters, numWorkers := GetReplicaCount(installConfig)
9090
logrus.Infof(fmt.Sprintf("Configuration has %d master replicas and %d worker replicas", numMasters, numWorkers))
9191

92+
if err := a.validateControlPlaneConfiguration(installConfig); err != nil {
93+
allErrs = append(allErrs, err...)
94+
}
95+
9296
if err := a.validateSNOConfiguration(installConfig); err != nil {
9397
allErrs = append(allErrs, err...)
9498
}
@@ -159,6 +163,19 @@ func (a *OptionalInstallConfig) validateSupportedArchs(installConfig *types.Inst
159163
return allErrs
160164
}
161165

166+
func (a *OptionalInstallConfig) validateControlPlaneConfiguration(installConfig *types.InstallConfig) field.ErrorList {
167+
var allErrs field.ErrorList
168+
var fieldPath *field.Path
169+
170+
if installConfig.ControlPlane != nil {
171+
if *installConfig.ControlPlane.Replicas != 1 && *installConfig.ControlPlane.Replicas != 3 {
172+
fieldPath = field.NewPath("ControlPlane", "Replicas")
173+
allErrs = append(allErrs, field.Invalid(fieldPath, installConfig.ControlPlane.Replicas, fmt.Sprintf("ControlPlane.Replicas can only be set to 3 or 1. Found %v", *installConfig.ControlPlane.Replicas)))
174+
}
175+
}
176+
return allErrs
177+
}
178+
162179
func (a *OptionalInstallConfig) validateSNOConfiguration(installConfig *types.InstallConfig) field.ErrorList {
163180
var allErrs field.ErrorList
164181
var fieldPath *field.Path

pkg/asset/agent/installconfig_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,30 @@ pullSecret: "{\"auths\":{\"example.com\":{\"auth\":\"authorization value\"}}}"
269269
expectedFound: false,
270270
expectedError: "invalid install-config configuration: Compute.Replicas: Required value: Total number of Compute.Replicas must be 0 when ControlPlane.Replicas is 1 for platform none or external. Found 3",
271271
},
272+
{
273+
name: "incorrect compute.replicas set",
274+
data: `
275+
apiVersion: v1
276+
metadata:
277+
name: test-cluster
278+
baseDomain: test-domain
279+
networking:
280+
networkType: OVNKubernetes
281+
controlPlane:
282+
architecture: amd64
283+
hyperthreading: Enabled
284+
name: master
285+
platform: {}
286+
replicas: 2
287+
platform:
288+
external:
289+
platformName: oci
290+
cloudControllerManager: External
291+
pullSecret: "{\"auths\":{\"example.com\":{\"auth\":\"authorization value\"}}}"
292+
`,
293+
expectedFound: false,
294+
expectedError: "invalid install-config configuration: ControlPlane.Replicas: Invalid value: 2: ControlPlane.Replicas can only be set to 3 or 1. Found 2",
295+
},
272296
{
273297
name: "invalid platform for SNO cluster",
274298
data: `

0 commit comments

Comments
 (0)