Skip to content

Commit 67e7aa8

Browse files
committed
Add version channelGroup for Rosa Machine Pool
1 parent f3ba287 commit 67e7aa8

File tree

4 files changed

+26
-12
lines changed

4 files changed

+26
-12
lines changed

controlplane/rosa/api/v1beta2/rosacontrolplane_types.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,20 @@ const (
5252
AlwaysAcknowledge VersionGateAckType = "AlwaysAcknowledge"
5353
)
5454

55+
// ChannelGroupType specifies the OpenShift version channel group.
56+
type ChannelGroupType string
57+
58+
const (
59+
// Stable channel group is the default channel group for stable releases.
60+
Stable ChannelGroupType = "stable"
61+
62+
// Candidate channel group is for testing candidate builds.
63+
Candidate ChannelGroupType = "candidate"
64+
65+
// Nightly channel group is for testing nigtly builds.
66+
Nightly ChannelGroupType = "nightly"
67+
)
68+
5569
// RosaControlPlaneSpec defines the desired state of ROSAControlPlane.
5670
type RosaControlPlaneSpec struct { //nolint: maligned
5771
// Cluster name must be valid DNS-1035 label, so it must consist of lower case alphanumeric
@@ -95,7 +109,7 @@ type RosaControlPlaneSpec struct { //nolint: maligned
95109
//
96110
// +kubebuilder:validation:Enum=stable;candidate;nightly
97111
// +kubebuilder:default=stable
98-
ChannelGroup string `json:"channelGroup"`
112+
ChannelGroup ChannelGroupType `json:"channelGroup"`
99113

100114
// VersionGate requires acknowledgment when upgrading ROSA-HCP y-stream versions (e.g., from 4.15 to 4.16).
101115
// Default is WaitForAcknowledge.

controlplane/rosa/controllers/rosacontrolplane_controller.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ func (r *ROSAControlPlaneReconciler) reconcileClusterAdminPassword(ctx context.C
891891

892892
func validateControlPlaneSpec(ocmClient rosa.OCMClient, rosaScope *scope.ROSAControlPlaneScope) (string, error) {
893893
version := rosaScope.ControlPlane.Spec.Version
894-
channelGroup := rosaScope.ControlPlane.Spec.ChannelGroup
894+
channelGroup := string(rosaScope.ControlPlane.Spec.ChannelGroup)
895895
valid, err := ocmClient.ValidateHypershiftVersion(version, channelGroup)
896896
if err != nil {
897897
return "", fmt.Errorf("failed to check if version is valid: %w", err)
@@ -916,8 +916,8 @@ func buildOCMClusterSpec(controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpe
916916
DomainPrefix: controlPlaneSpec.DomainPrefix,
917917
Region: controlPlaneSpec.Region,
918918
MultiAZ: true,
919-
Version: ocm.CreateVersionID(controlPlaneSpec.Version, controlPlaneSpec.ChannelGroup),
920-
ChannelGroup: controlPlaneSpec.ChannelGroup,
919+
Version: ocm.CreateVersionID(controlPlaneSpec.Version, string(controlPlaneSpec.ChannelGroup)),
920+
ChannelGroup: string(controlPlaneSpec.ChannelGroup),
921921
DisableWorkloadMonitoring: ptr.To(true),
922922
DefaultIngress: ocm.NewDefaultIngressSpec(), // n.b. this is a no-op when it's set to the default value
923923
ComputeMachineType: controlPlaneSpec.DefaultMachinePoolSpec.InstanceType,

exp/controllers/rosamachinepool_controller.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ func (r *ROSAMachinePoolReconciler) reconcileNormal(ctx context.Context,
281281
return ctrl.Result{RequeueAfter: time.Second * 60}, nil
282282
}
283283

284-
npBuilder := nodePoolBuilder(rosaMachinePool.Spec, machinePool.Spec)
284+
npBuilder := nodePoolBuilder(rosaMachinePool.Spec, machinePool.Spec, machinePoolScope.ControlPlane.Spec.ChannelGroup)
285285
nodePoolSpec, err := npBuilder.Build()
286286
if err != nil {
287287
return ctrl.Result{}, fmt.Errorf("failed to build rosa nodepool: %w", err)
@@ -385,7 +385,7 @@ func (r *ROSAMachinePoolReconciler) updateNodePool(machinePoolScope *scope.RosaM
385385
desiredSpec.AdditionalSecurityGroups = nil
386386
desiredSpec.AdditionalTags = nil
387387

388-
npBuilder := nodePoolBuilder(desiredSpec, machinePoolScope.MachinePool.Spec)
388+
npBuilder := nodePoolBuilder(desiredSpec, machinePoolScope.MachinePool.Spec, machinePoolScope.ControlPlane.Spec.ChannelGroup)
389389
nodePoolSpec, err := npBuilder.Build()
390390
if err != nil {
391391
return nil, fmt.Errorf("failed to build nodePool spec: %w", err)
@@ -442,7 +442,7 @@ func validateMachinePoolSpec(machinePoolScope *scope.RosaMachinePoolScope) (*str
442442
return nil, nil
443443
}
444444

445-
func nodePoolBuilder(rosaMachinePoolSpec expinfrav1.RosaMachinePoolSpec, machinePoolSpec expclusterv1.MachinePoolSpec) *cmv1.NodePoolBuilder {
445+
func nodePoolBuilder(rosaMachinePoolSpec expinfrav1.RosaMachinePoolSpec, machinePoolSpec expclusterv1.MachinePoolSpec, controlPlaneChannelGroup rosacontrolplanev1.ChannelGroupType) *cmv1.NodePoolBuilder {
446446
npBuilder := cmv1.NewNodePool().ID(rosaMachinePoolSpec.NodePoolName).
447447
Labels(rosaMachinePoolSpec.Labels).
448448
AutoRepair(rosaMachinePoolSpec.AutoRepair)
@@ -490,7 +490,7 @@ func nodePoolBuilder(rosaMachinePoolSpec expinfrav1.RosaMachinePoolSpec, machine
490490
npBuilder.AWSNodePool(awsNodePool)
491491

492492
if rosaMachinePoolSpec.Version != "" {
493-
npBuilder.Version(cmv1.NewVersion().ID(ocm.CreateVersionID(rosaMachinePoolSpec.Version, ocm.DefaultChannelGroup)))
493+
npBuilder.Version(cmv1.NewVersion().ID(ocm.CreateVersionID(rosaMachinePoolSpec.Version, string(controlPlaneChannelGroup))))
494494
}
495495

496496
if rosaMachinePoolSpec.NodeDrainGracePeriod != nil {

exp/controllers/rosamachinepool_controller_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func TestNodePoolToRosaMachinePoolSpec(t *testing.T) {
7676
Replicas: ptr.To[int32](2),
7777
}
7878

79-
nodePoolBuilder := nodePoolBuilder(rosaMachinePoolSpec, machinePoolSpec)
79+
nodePoolBuilder := nodePoolBuilder(rosaMachinePoolSpec, machinePoolSpec, rosacontrolplanev1.Stable)
8080
nodePoolSpec, err := nodePoolBuilder.Build()
8181
g.Expect(err).ToNot(HaveOccurred())
8282

@@ -285,7 +285,7 @@ func TestRosaMachinePoolReconcile(t *testing.T) {
285285
result: ctrl.Result{RequeueAfter: time.Second * 60},
286286
expect: func(m *mocks.MockOCMClientMockRecorder) {
287287
m.GetNodePool(gomock.Any(), gomock.Any()).DoAndReturn(func(clusterId string, nodePoolID string) (*cmv1.NodePool, bool, error) {
288-
nodePoolBuilder := nodePoolBuilder(rosaMachinePool(1).Spec, ownerMachinePool(1).Spec)
288+
nodePoolBuilder := nodePoolBuilder(rosaMachinePool(1).Spec, ownerMachinePool(1).Spec, rosacontrolplanev1.Stable)
289289
nodePool, err := nodePoolBuilder.ID("node-pool-1").Build()
290290
g.Expect(err).To(BeNil())
291291
return nodePool, true, nil
@@ -323,7 +323,7 @@ func TestRosaMachinePoolReconcile(t *testing.T) {
323323
result: ctrl.Result{},
324324
expect: func(m *mocks.MockOCMClientMockRecorder) {
325325
m.GetNodePool(gomock.Any(), gomock.Any()).DoAndReturn(func(clusterId string, nodePoolID string) (*cmv1.NodePool, bool, error) {
326-
nodePoolBuilder := nodePoolBuilder(rosaMachinePool(2).Spec, ownerMachinePool(2).Spec)
326+
nodePoolBuilder := nodePoolBuilder(rosaMachinePool(2).Spec, ownerMachinePool(2).Spec, rosacontrolplanev1.Stable)
327327
statusBuilder := (&cmv1.NodePoolStatusBuilder{}).CurrentReplicas(1)
328328
autoscalingBuilder := (&cmv1.NodePoolAutoscalingBuilder{}).MinReplica(1).MaxReplica(1)
329329
nodePool, err := nodePoolBuilder.ID("node-pool-1").Autoscaling(autoscalingBuilder).Replicas(1).Status(statusBuilder).Build()
@@ -463,7 +463,7 @@ func TestRosaMachinePoolReconcile(t *testing.T) {
463463
nodePoolName := "node-pool-1"
464464
expect := func(m *mocks.MockOCMClientMockRecorder) {
465465
m.GetNodePool(gomock.Any(), gomock.Any()).DoAndReturn(func(clusterId string, nodePoolID string) (*cmv1.NodePool, bool, error) {
466-
nodePoolBuilder := nodePoolBuilder(mp.Spec, omp.Spec)
466+
nodePoolBuilder := nodePoolBuilder(mp.Spec, omp.Spec, rosacontrolplanev1.Stable)
467467
nodePool, err := nodePoolBuilder.ID(nodePoolName).Build()
468468
g.Expect(err).NotTo(HaveOccurred())
469469
return nodePool, true, nil

0 commit comments

Comments
 (0)