Skip to content

Commit de41026

Browse files
authored
Merge pull request #812 from anmazzotti/implement_rke2controlplanetemplateresourcespec
feat: implement RKE2ControlPlaneTemplateResourceSpec
2 parents 5d54746 + 1667e77 commit de41026

8 files changed

+128
-19
lines changed

controlplane/api/v1beta1/conversion.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package v1beta1
1919
import (
2020
"fmt"
2121
"reflect"
22+
unsafe "unsafe"
2223

2324
corev1 "k8s.io/api/core/v1"
2425
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -187,6 +188,44 @@ func (dst *RKE2ControlPlaneTemplateList) ConvertFrom(srcRaw conversion.Hub) erro
187188
return Convert_v1beta2_RKE2ControlPlaneTemplateList_To_v1beta1_RKE2ControlPlaneTemplateList(src, dst, nil)
188189
}
189190

191+
// Convert_v1beta1_RKE2ControlPlaneSpec_To_v1beta2_RKE2ControlPlaneTemplateResourceSpec handles manual conversion of template spec fields.
192+
func Convert_v1beta1_RKE2ControlPlaneSpec_To_v1beta2_RKE2ControlPlaneTemplateResourceSpec(in *RKE2ControlPlaneSpec, out *controlplanev1.RKE2ControlPlaneTemplateResourceSpec, s apimachineryconversion.Scope) error {
193+
if err := Convert_v1beta1_RKE2ConfigSpec_To_v1beta2_RKE2ConfigSpec(&in.RKE2ConfigSpec, &out.RKE2ConfigSpec, s); err != nil {
194+
return err
195+
}
196+
if err := Convert_v1beta1_RKE2ControlPlaneMachineTemplate_To_v1beta2_RKE2ControlPlaneMachineTemplate(&in.MachineTemplate, &out.MachineTemplate, s); err != nil {
197+
return err
198+
}
199+
if err := Convert_v1beta1_RKE2ServerConfig_To_v1beta2_RKE2ServerConfig(&in.ServerConfig, &out.ServerConfig, s); err != nil {
200+
return err
201+
}
202+
out.ManifestsConfigMapReference = in.ManifestsConfigMapReference
203+
out.RegistrationMethod = controlplanev1.RegistrationMethod(in.RegistrationMethod)
204+
out.RegistrationAddress = in.RegistrationAddress
205+
out.RolloutStrategy = (*controlplanev1.RolloutStrategy)(unsafe.Pointer(in.RolloutStrategy))
206+
out.RemediationStrategy = (*controlplanev1.RemediationStrategy)(unsafe.Pointer(in.RemediationStrategy))
207+
return nil
208+
}
209+
210+
// Convert_v1beta2_RKE2ControlPlaneTemplateResourceSpec_To_v1beta1_RKE2ControlPlaneSpec handles manual conversion of template spec fields.
211+
func Convert_v1beta2_RKE2ControlPlaneTemplateResourceSpec_To_v1beta1_RKE2ControlPlaneSpec(in *controlplanev1.RKE2ControlPlaneTemplateResourceSpec, out *RKE2ControlPlaneSpec, s apimachineryconversion.Scope) error {
212+
if err := Convert_v1beta2_RKE2ConfigSpec_To_v1beta1_RKE2ConfigSpec(&in.RKE2ConfigSpec, &out.RKE2ConfigSpec, s); err != nil {
213+
return err
214+
}
215+
if err := Convert_v1beta2_RKE2ControlPlaneMachineTemplate_To_v1beta1_RKE2ControlPlaneMachineTemplate(&in.MachineTemplate, &out.MachineTemplate, s); err != nil {
216+
return err
217+
}
218+
if err := Convert_v1beta2_RKE2ServerConfig_To_v1beta1_RKE2ServerConfig(&in.ServerConfig, &out.ServerConfig, s); err != nil {
219+
return err
220+
}
221+
out.ManifestsConfigMapReference = in.ManifestsConfigMapReference
222+
out.RegistrationMethod = RegistrationMethod(in.RegistrationMethod)
223+
out.RegistrationAddress = in.RegistrationAddress
224+
out.RolloutStrategy = (*RolloutStrategy)(unsafe.Pointer(in.RolloutStrategy))
225+
out.RemediationStrategy = (*RemediationStrategy)(unsafe.Pointer(in.RemediationStrategy))
226+
return nil
227+
}
228+
190229
// Convert_v1beta1_RKE2ControlPlaneStatus_To_v1beta2_RKE2ControlPlaneStatus handles manual conversion of status fields.
191230
func Convert_v1beta1_RKE2ControlPlaneStatus_To_v1beta2_RKE2ControlPlaneStatus(in *RKE2ControlPlaneStatus, out *controlplanev1.RKE2ControlPlaneStatus, s apimachineryconversion.Scope) error {
192231
if err := autoConvert_v1beta1_RKE2ControlPlaneStatus_To_v1beta2_RKE2ControlPlaneStatus(in, out, s); err != nil {

controlplane/api/v1beta1/zz_generated.conversion.go

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controlplane/api/v1beta2/rke2controlplane_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ type RKE2ControlPlaneSpec struct {
7777

7878
// Version defines the desired Kubernetes version.
7979
// +kubebuilder:validation:Pattern="(v\\d\\.\\d{2}\\.\\d+\\+rke2r\\d)|^$"
80-
// +optional
80+
// +required
8181
Version string `json:"version"`
8282

8383
// MachineTemplate contains information about how machines

controlplane/api/v1beta2/rke2controlplanetemplate_types.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ limitations under the License.
1717
package v1beta2
1818

1919
import (
20+
corev1 "k8s.io/api/core/v1"
2021
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22+
23+
bootstrapv1 "github.com/rancher/cluster-api-provider-rke2/bootstrap/api/v1beta2"
2124
)
2225

2326
// RKE2ControlPlaneTemplateSpec defines the desired state of RKE2ControlPlaneTemplate.
@@ -30,7 +33,44 @@ type RKE2ControlPlaneTemplateSpec struct {
3033
// RKE2ControlPlaneTemplateResource contains spec for RKE2ControlPlaneTemplate.
3134
type RKE2ControlPlaneTemplateResource struct {
3235
// Spec is the specification of the desired behavior of the control plane.
33-
Spec RKE2ControlPlaneSpec `json:"spec"`
36+
Spec RKE2ControlPlaneTemplateResourceSpec `json:"spec"`
37+
}
38+
39+
// RKE2ControlPlaneTemplateResourceSpec contains the spec for RKE2ControlPlaneTemplateResource.
40+
type RKE2ControlPlaneTemplateResourceSpec struct {
41+
// RKE2AgentSpec contains the node spec for the RKE2 Control plane nodes.
42+
bootstrapv1.RKE2ConfigSpec `json:",inline"`
43+
44+
// MachineTemplate contains information about how machines
45+
// should be shaped when creating or updating a control plane.
46+
// +optional
47+
MachineTemplate RKE2ControlPlaneMachineTemplate `json:"machineTemplate,omitempty,omitzero"`
48+
49+
// ServerConfig specifies configuration for the agent nodes.
50+
//+optional
51+
ServerConfig RKE2ServerConfig `json:"serverConfig,omitempty,omitzero"`
52+
53+
// ManifestsConfigMapReference references a ConfigMap which contains Kubernetes manifests to be deployed automatically on the cluster
54+
// Each data entry in the ConfigMap will be will be copied to a folder on the control plane nodes that RKE2 scans and uses to deploy manifests.
55+
//+optional
56+
ManifestsConfigMapReference corev1.ObjectReference `json:"manifestsConfigMapReference,omitempty,omitzero"`
57+
58+
// RegistrationMethod is the method to use for registering nodes into the RKE2 cluster.
59+
// +kubebuilder:validation:Enum=internal-first;internal-only-ips;external-only-ips;address;control-plane-endpoint;""
60+
// +optional
61+
RegistrationMethod RegistrationMethod `json:"registrationMethod,omitempty,omitzero"`
62+
63+
// RegistrationAddress is an explicit address to use when registering a node. This is required if
64+
// the registration type is "address". Its for scenarios where a load-balancer or VIP is used.
65+
// +optional
66+
RegistrationAddress string `json:"registrationAddress,omitempty"`
67+
68+
// The Rollout to use to replace control plane machines with new ones.
69+
RolloutStrategy *RolloutStrategy `json:"rolloutStrategy"`
70+
71+
// remediationStrategy is the RemediationStrategy that controls how control plane machine remediation happens.
72+
// +optional
73+
RemediationStrategy *RemediationStrategy `json:"remediationStrategy,omitempty"`
3474
}
3575

3676
// +kubebuilder:object:root=true

controlplane/api/v1beta2/rke2controlplanetemplate_webhook_test.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func TestRKE2ControlPlaneTemplateValidateCreate(t *testing.T) {
3333
inputTemplate: &RKE2ControlPlaneTemplate{
3434
Spec: RKE2ControlPlaneTemplateSpec{
3535
Template: RKE2ControlPlaneTemplateResource{
36-
Spec: RKE2ControlPlaneSpec{
36+
Spec: RKE2ControlPlaneTemplateResourceSpec{
3737
ServerConfig: RKE2ServerConfig{
3838
CNIMultusEnable: true,
3939
CNI: "",
@@ -64,7 +64,6 @@ func TestRKE2ControlPlaneTemplateValidateCreate(t *testing.T) {
6464
func TestRKE2ControlPlaneTemplateValidateUpdate(t *testing.T) {
6565
g := NewWithT(t)
6666

67-
replicas := int32(3)
6867
tests := []struct {
6968
name string
7069
newTemplate *RKE2ControlPlaneTemplate
@@ -76,17 +75,17 @@ func TestRKE2ControlPlaneTemplateValidateUpdate(t *testing.T) {
7675
newTemplate: &RKE2ControlPlaneTemplate{
7776
Spec: RKE2ControlPlaneTemplateSpec{
7877
Template: RKE2ControlPlaneTemplateResource{
79-
Spec: RKE2ControlPlaneSpec{
80-
Replicas: &replicas,
78+
Spec: RKE2ControlPlaneTemplateResourceSpec{
79+
RegistrationMethod: RegistrationMethodFavourInternalIPs,
8180
},
8281
},
8382
},
8483
},
8584
oldTemplate: &RKE2ControlPlaneTemplate{
8685
Spec: RKE2ControlPlaneTemplateSpec{
8786
Template: RKE2ControlPlaneTemplateResource{
88-
Spec: RKE2ControlPlaneSpec{
89-
Replicas: &replicas,
87+
Spec: RKE2ControlPlaneTemplateResourceSpec{
88+
RegistrationMethod: RegistrationMethodFavourInternalIPs,
9089
},
9190
},
9291
},

controlplane/api/v1beta2/zz_generated.deepcopy.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanes.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2989,6 +2989,7 @@ spec:
29892989
type: string
29902990
required:
29912991
- rolloutStrategy
2992+
- version
29922993
type: object
29932994
status:
29942995
description: RKE2ControlPlaneStatus defines the observed state of RKE2ControlPlane.

controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanetemplates.yaml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2476,11 +2476,6 @@ spec:
24762476
If not set, a retry will happen immediately.
24772477
type: string
24782478
type: object
2479-
replicas:
2480-
description: Replicas is the number of replicas for the Control
2481-
Plane.
2482-
format: int32
2483-
type: integer
24842479
rolloutStrategy:
24852480
description: The Rollout to use to replace control plane machines
24862481
with new ones.
@@ -3088,10 +3083,6 @@ spec:
30883083
type: string
30893084
type: array
30903085
type: object
3091-
version:
3092-
description: Version defines the desired Kubernetes version.
3093-
pattern: (v\d\.\d{2}\.\d+\+rke2r\d)|^$
3094-
type: string
30953086
required:
30963087
- rolloutStrategy
30973088
type: object

0 commit comments

Comments
 (0)