diff --git a/controlplane/api/v1alpha1/conversion.go b/controlplane/api/v1alpha1/conversion.go index d2133e99..6bbdf3d9 100644 --- a/controlplane/api/v1alpha1/conversion.go +++ b/controlplane/api/v1alpha1/conversion.go @@ -37,16 +37,13 @@ func (src *RKE2ControlPlane) ConvertTo(dstRaw conversion.Hub) error { return err } - dst.Spec.Version = src.Spec.AgentConfig.Version - // Manually restore data. restored := &controlplanev1.RKE2ControlPlane{} if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err - } - - if restored.Spec.Version != "" { - dst.Spec.Version = restored.Spec.Version + } else if !ok { + // No stored data. + return nil } if restored.Spec.AgentConfig.AirGappedChecksum != "" { @@ -58,6 +55,8 @@ func (src *RKE2ControlPlane) ConvertTo(dstRaw conversion.Hub) error { } dst.Spec.MachineTemplate = restored.Spec.MachineTemplate + dst.Spec.InfrastructureRef = restored.Spec.InfrastructureRef + dst.Spec.NodeDrainTimeout = restored.Spec.NodeDrainTimeout dst.Status = restored.Status return nil @@ -73,8 +72,6 @@ func (dst *RKE2ControlPlane) ConvertFrom(srcRaw conversion.Hub) error { return err } - dst.Spec.AgentConfig.Version = src.Spec.Version - // Preserve Hub data on down-conversion if err := utilconversion.MarshalData(src, dst); err != nil { return err @@ -123,6 +120,9 @@ func (src *RKE2ControlPlaneTemplate) ConvertTo(dstRaw conversion.Hub) error { restored := &controlplanev1.RKE2ControlPlaneTemplate{} if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err + } else if !ok { + // No stored data. + return nil } if restored.Spec.Template.Spec.AgentConfig.AirGappedChecksum != "" { @@ -184,9 +184,57 @@ func (dst *RKE2ControlPlaneTemplateList) ConvertFrom(srcRaw conversion.Hub) erro } func Convert_v1beta1_RKE2ControlPlaneSpec_To_v1alpha1_RKE2ControlPlaneSpec(in *controlplanev1.RKE2ControlPlaneSpec, out *RKE2ControlPlaneSpec, s apiconversion.Scope) error { - // Version was added in v1beta1. - // MachineTemplate was added in v1beta1. - return autoConvert_v1beta1_RKE2ControlPlaneSpec_To_v1alpha1_RKE2ControlPlaneSpec(in, out, s) + if err := Convert_v1beta1_RKE2ConfigSpec_To_v1alpha1_RKE2ConfigSpec(&in.RKE2ConfigSpec, &out.RKE2ConfigSpec, s); err != nil { + return err + } + out.Replicas = in.Replicas + out.AgentConfig.Version = in.Version + out.InfrastructureRef = in.MachineTemplate.InfrastructureRef + out.NodeDrainTimeout = in.MachineTemplate.NodeDrainTimeout + if err := Convert_v1beta1_RKE2ServerConfig_To_v1alpha1_RKE2ServerConfig(&in.ServerConfig, &out.ServerConfig, s); err != nil { + return err + } + out.ManifestsConfigMapReference = in.ManifestsConfigMapReference + out.RegistrationMethod = RegistrationMethod(in.RegistrationMethod) + out.RegistrationAddress = in.RegistrationAddress + if in.RolloutStrategy != nil { + out.RolloutStrategy = &RolloutStrategy{ + Type: RolloutStrategyType(in.RolloutStrategy.Type), + } + if in.RolloutStrategy.RollingUpdate != nil { + out.RolloutStrategy.RollingUpdate = &RollingUpdate{ + MaxSurge: in.RolloutStrategy.RollingUpdate.MaxSurge, + } + } + } + return nil +} + +func Convert_v1alpha1_RKE2ControlPlaneSpec_To_v1beta1_RKE2ControlPlaneSpec(in *RKE2ControlPlaneSpec, out *controlplanev1.RKE2ControlPlaneSpec, s apiconversion.Scope) error { + if err := Convert_v1alpha1_RKE2ConfigSpec_To_v1beta1_RKE2ConfigSpec(&in.RKE2ConfigSpec, &out.RKE2ConfigSpec, s); err != nil { + return err + } + out.Replicas = in.Replicas + if err := Convert_v1alpha1_RKE2ServerConfig_To_v1beta1_RKE2ServerConfig(&in.ServerConfig, &out.ServerConfig, s); err != nil { + return err + } + out.ManifestsConfigMapReference = in.ManifestsConfigMapReference + out.MachineTemplate.InfrastructureRef = in.InfrastructureRef + out.MachineTemplate.NodeDrainTimeout = in.NodeDrainTimeout + out.Version = in.AgentConfig.Version + out.RegistrationMethod = controlplanev1.RegistrationMethod(in.RegistrationMethod) + out.RegistrationAddress = in.RegistrationAddress + if in.RolloutStrategy != nil { + out.RolloutStrategy = &controlplanev1.RolloutStrategy{ + Type: controlplanev1.RolloutStrategyType(in.RolloutStrategy.Type), + } + if in.RolloutStrategy.RollingUpdate != nil { + out.RolloutStrategy.RollingUpdate = &controlplanev1.RollingUpdate{ + MaxSurge: in.RolloutStrategy.RollingUpdate.MaxSurge, + } + } + } + return nil } func Convert_v1beta1_RKE2ControlPlaneStatus_To_v1alpha1_RKE2ControlPlaneStatus(in *controlplanev1.RKE2ControlPlaneStatus, out *RKE2ControlPlaneStatus, s apiconversion.Scope) error { diff --git a/controlplane/api/v1alpha1/zz_generated.conversion.go b/controlplane/api/v1alpha1/zz_generated.conversion.go index 6414cecb..43cac9e1 100644 --- a/controlplane/api/v1alpha1/zz_generated.conversion.go +++ b/controlplane/api/v1alpha1/zz_generated.conversion.go @@ -101,11 +101,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*RKE2ControlPlaneSpec)(nil), (*v1beta1.RKE2ControlPlaneSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha1_RKE2ControlPlaneSpec_To_v1beta1_RKE2ControlPlaneSpec(a.(*RKE2ControlPlaneSpec), b.(*v1beta1.RKE2ControlPlaneSpec), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*RKE2ControlPlaneTemplate)(nil), (*v1beta1.RKE2ControlPlaneTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_RKE2ControlPlaneTemplate_To_v1beta1_RKE2ControlPlaneTemplate(a.(*RKE2ControlPlaneTemplate), b.(*v1beta1.RKE2ControlPlaneTemplate), scope) }); err != nil { @@ -161,6 +156,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*RKE2ControlPlaneSpec)(nil), (*v1beta1.RKE2ControlPlaneSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_RKE2ControlPlaneSpec_To_v1beta1_RKE2ControlPlaneSpec(a.(*RKE2ControlPlaneSpec), b.(*v1beta1.RKE2ControlPlaneSpec), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*RKE2ControlPlaneStatus)(nil), (*v1beta1.RKE2ControlPlaneStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_RKE2ControlPlaneStatus_To_v1beta1_RKE2ControlPlaneStatus(a.(*RKE2ControlPlaneStatus), b.(*v1beta1.RKE2ControlPlaneStatus), scope) }); err != nil { @@ -407,11 +407,6 @@ func autoConvert_v1alpha1_RKE2ControlPlaneSpec_To_v1beta1_RKE2ControlPlaneSpec(i return nil } -// Convert_v1alpha1_RKE2ControlPlaneSpec_To_v1beta1_RKE2ControlPlaneSpec is an autogenerated conversion function. -func Convert_v1alpha1_RKE2ControlPlaneSpec_To_v1beta1_RKE2ControlPlaneSpec(in *RKE2ControlPlaneSpec, out *v1beta1.RKE2ControlPlaneSpec, s conversion.Scope) error { - return autoConvert_v1alpha1_RKE2ControlPlaneSpec_To_v1beta1_RKE2ControlPlaneSpec(in, out, s) -} - func autoConvert_v1beta1_RKE2ControlPlaneSpec_To_v1alpha1_RKE2ControlPlaneSpec(in *v1beta1.RKE2ControlPlaneSpec, out *RKE2ControlPlaneSpec, s conversion.Scope) error { if err := Convert_v1beta1_RKE2ConfigSpec_To_v1alpha1_RKE2ConfigSpec(&in.RKE2ConfigSpec, &out.RKE2ConfigSpec, s); err != nil { return err diff --git a/controlplane/api/v1beta1/rke2controlplane_types.go b/controlplane/api/v1beta1/rke2controlplane_types.go index b2c3b7aa..e6dc9442 100644 --- a/controlplane/api/v1beta1/rke2controlplane_types.go +++ b/controlplane/api/v1beta1/rke2controlplane_types.go @@ -58,7 +58,6 @@ type RKE2ControlPlaneSpec struct { // MachineTemplate contains information about how machines // should be shaped when creating or updating a control plane. - // +optional MachineTemplate RKE2ControlPlaneMachineTemplate `json:"machineTemplate,omitempty"` // ServerConfig specifies configuration for the agent nodes. @@ -72,11 +71,14 @@ type RKE2ControlPlaneSpec struct { // InfrastructureRef is a required reference to a custom resource // offered by an infrastructure provider. + // This field is deprecated. Use `.machineTemplate.infrastructureRef` instead. + //+optional InfrastructureRef corev1.ObjectReference `json:"infrastructureRef"` // NodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node // The default value is 0, meaning that the node can be drained without any time limitations. // NOTE: NodeDrainTimeout is different from `kubectl drain --timeout` + // This field is deprecated. Use `.machineTemplate.nodeDrainTimeout` instead. // +optional NodeDrainTimeout *metav1.Duration `json:"nodeDrainTimeout,omitempty"` diff --git a/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanes.yaml b/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanes.yaml index d453d1a2..f5b4e1ac 100644 --- a/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanes.yaml +++ b/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanes.yaml @@ -1595,6 +1595,7 @@ spec: description: |- InfrastructureRef is a required reference to a custom resource offered by an infrastructure provider. + This field is deprecated. Use `.machineTemplate.infrastructureRef` instead. properties: apiVersion: description: API version of the referent. @@ -1769,6 +1770,7 @@ spec: NodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node The default value is 0, meaning that the node can be drained without any time limitations. NOTE: NodeDrainTimeout is different from `kubectl drain --timeout` + This field is deprecated. Use `.machineTemplate.nodeDrainTimeout` instead. type: string postRKE2Commands: description: PostRKE2Commands specifies extra commands to run after @@ -2436,7 +2438,6 @@ spec: pattern: (v\d\.\d{2}\.\d+\+rke2r\d)|^$ type: string required: - - infrastructureRef - rolloutStrategy type: object status: diff --git a/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanetemplates.yaml b/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanetemplates.yaml index f85b24b7..e844e0e4 100644 --- a/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanetemplates.yaml +++ b/controlplane/config/crd/bases/controlplane.cluster.x-k8s.io_rke2controlplanetemplates.yaml @@ -436,6 +436,7 @@ spec: description: |- InfrastructureRef is a required reference to a custom resource offered by an infrastructure provider. + This field is deprecated. Use `.machineTemplate.infrastructureRef` instead. properties: apiVersion: description: API version of the referent. @@ -610,6 +611,7 @@ spec: NodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node The default value is 0, meaning that the node can be drained without any time limitations. NOTE: NodeDrainTimeout is different from `kubectl drain --timeout` + This field is deprecated. Use `.machineTemplate.nodeDrainTimeout` instead. type: string postRKE2Commands: description: PostRKE2Commands specifies extra commands to @@ -1296,7 +1298,6 @@ spec: pattern: (v\d\.\d{2}\.\d+\+rke2r\d)|^$ type: string required: - - infrastructureRef - rolloutStrategy type: object required: diff --git a/controlplane/internal/controllers/rke2controlplane_controller.go b/controlplane/internal/controllers/rke2controlplane_controller.go index a095c86a..f9408ce3 100644 --- a/controlplane/internal/controllers/rke2controlplane_controller.go +++ b/controlplane/internal/controllers/rke2controlplane_controller.go @@ -447,6 +447,17 @@ func (r *RKE2ControlPlaneReconciler) reconcileNormal( logger := log.FromContext(ctx) logger.Info("Reconcile RKE2 Control Plane") + // (Quirk) + // Tries to reconcile the v1beta1 `machineTemplate` usage for all those resources that were not updated due to missing conversion logic. + if len(rcp.Spec.MachineTemplate.InfrastructureRef.Name) == 0 && len(rcp.Spec.InfrastructureRef.Name) > 0 { + rcp.Spec.MachineTemplate.InfrastructureRef = rcp.Spec.InfrastructureRef + } + + if rcp.Spec.MachineTemplate.NodeDrainTimeout == nil { + rcp.Spec.MachineTemplate.NodeDrainTimeout = rcp.Spec.NodeDrainTimeout + } + // (Quirk End) + // Wait for the cluster infrastructure to be ready before creating machines if !cluster.Status.InfrastructureReady { logger.Info("Cluster infrastructure is not ready yet") diff --git a/controlplane/internal/controllers/scale.go b/controlplane/internal/controllers/scale.go index 7c27a1d6..e8516191 100644 --- a/controlplane/internal/controllers/scale.go +++ b/controlplane/internal/controllers/scale.go @@ -329,12 +329,12 @@ func (r *RKE2ControlPlaneReconciler) cloneConfigsAndGenerateMachine( UID: rcp.UID, } - rcp.Spec.InfrastructureRef.Namespace = cmp.Or(rcp.Spec.InfrastructureRef.Namespace, rcp.Namespace) + rcp.Spec.MachineTemplate.InfrastructureRef.Namespace = cmp.Or(rcp.Spec.MachineTemplate.InfrastructureRef.Namespace, rcp.Namespace) // Clone the infrastructure template infraRef, err := external.CreateFromTemplate(ctx, &external.CreateFromTemplateInput{ Client: r.Client, - TemplateRef: &rcp.Spec.InfrastructureRef, + TemplateRef: &rcp.Spec.MachineTemplate.InfrastructureRef, Namespace: rcp.Namespace, OwnerRef: infraCloneOwner, ClusterName: cluster.Name, @@ -460,7 +460,7 @@ func (r *RKE2ControlPlaneReconciler) generateMachine( ConfigRef: bootstrapRef, }, FailureDomain: failureDomain, - NodeDrainTimeout: rcp.Spec.NodeDrainTimeout, + NodeDrainTimeout: rcp.Spec.MachineTemplate.NodeDrainTimeout, }, } diff --git a/examples/aws/cluster-template.yaml b/examples/aws/cluster-template.yaml index 2b6ef09d..c862efba 100644 --- a/examples/aws/cluster-template.yaml +++ b/examples/aws/cluster-template.yaml @@ -123,11 +123,12 @@ spec: - sudo hostnamectl set-hostname $(curl -s http://169.254.169.254/1.0/meta-data/hostname) agentConfig: airGapped: true - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta2 - kind: AWSMachineTemplate - name: ${CLUSTER_NAME}-control-plane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta2 + kind: AWSMachineTemplate + name: ${CLUSTER_NAME}-control-plane + nodeDrainTimeout: 2m replicas: ${CONTROL_PLANE_MACHINE_COUNT} serverConfig: cloudProviderName: external diff --git a/examples/docker/air-gapped/rke2-sample.yaml b/examples/docker/air-gapped/rke2-sample.yaml index c3f7ceb9..a4377d3b 100644 --- a/examples/docker/air-gapped/rke2-sample.yaml +++ b/examples/docker/air-gapped/rke2-sample.yaml @@ -54,11 +54,12 @@ spec: kubeProxy: extraEnv: hello: world - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate diff --git a/examples/docker/cis-profile/rke2-sample.yaml b/examples/docker/cis-profile/rke2-sample.yaml index 8e945cc4..e8ed0ffc 100644 --- a/examples/docker/cis-profile/rke2-sample.yaml +++ b/examples/docker/cis-profile/rke2-sample.yaml @@ -50,11 +50,12 @@ spec: - --anonymous-auth=true agentConfig: cisProfile: ${CIS_PROFILE} - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate diff --git a/examples/docker/clusterclass/clusterclass-quick-start.yaml b/examples/docker/clusterclass/clusterclass-quick-start.yaml index 986aad7d..fdd25ce4 100644 --- a/examples/docker/clusterclass/clusterclass-quick-start.yaml +++ b/examples/docker/clusterclass/clusterclass-quick-start.yaml @@ -151,10 +151,6 @@ metadata: spec: template: spec: - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: rke2-class-control-plane serverConfig: cni: calico kubeAPIServer: @@ -162,7 +158,8 @@ spec: - --anonymous-auth=true disableComponents: kubernetesComponents: [ "cloudController"] - nodeDrainTimeout: 2m + machineTemplate: + nodeDrainTimeout: 2m rolloutStrategy: type: "RollingUpdate" rollingUpdate: diff --git a/examples/docker/disable-components/rke2-sample.yaml b/examples/docker/disable-components/rke2-sample.yaml index 90d18263..27f20103 100644 --- a/examples/docker/disable-components/rke2-sample.yaml +++ b/examples/docker/disable-components/rke2-sample.yaml @@ -45,10 +45,6 @@ spec: replicas: ${CABPR_CP_REPLICAS} agentConfig: version: ${KUBERNETES_VERSION}+rke2r1 - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane serverConfig: kubeAPIServer: extraArgs: @@ -56,7 +52,12 @@ spec: disableComponents: pluginComponents: - "rke2-ingress-nginx" - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate diff --git a/examples/docker/enable-multus/rke2-sample.yaml b/examples/docker/enable-multus/rke2-sample.yaml index b4298cbe..3e2e61f0 100644 --- a/examples/docker/enable-multus/rke2-sample.yaml +++ b/examples/docker/enable-multus/rke2-sample.yaml @@ -51,11 +51,12 @@ spec: kubeAPIServer: extraArgs: - --anonymous-auth=true - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate diff --git a/examples/docker/enable-multus/rke2controlplane-test.yaml b/examples/docker/enable-multus/rke2controlplane-test.yaml index 378f0b1c..b1a95a0c 100644 --- a/examples/docker/enable-multus/rke2controlplane-test.yaml +++ b/examples/docker/enable-multus/rke2controlplane-test.yaml @@ -8,8 +8,9 @@ spec: version: v1.24.11+rke2r1 serverConfig: cniMultusEnable: true - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m diff --git a/examples/docker/kube-vip/rke2-sample.yaml b/examples/docker/kube-vip/rke2-sample.yaml index 3ddd5ef8..a8a048ec 100644 --- a/examples/docker/kube-vip/rke2-sample.yaml +++ b/examples/docker/kube-vip/rke2-sample.yaml @@ -49,11 +49,12 @@ spec: version: ${KUBERNETES_VERSION}+rke2r1 serverConfig: cni: calico - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m registrationMethod: "address" registrationAddress: "${REGISTRATION_VIP}" preRKE2Commands: diff --git a/examples/docker/online-default/cluster-template.yaml b/examples/docker/online-default/cluster-template.yaml index b0130785..ce8e2139 100644 --- a/examples/docker/online-default/cluster-template.yaml +++ b/examples/docker/online-default/cluster-template.yaml @@ -57,11 +57,12 @@ spec: kubeAPIServer: extraArgs: - --anonymous-auth=true - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate @@ -186,4 +187,4 @@ data: http-check expect status 403 {{range $server, $backend := .BackendServers}} server {{ $server }} {{ $backend.Address }}:9345 check check-ssl verify none - {{- end}} \ No newline at end of file + {{- end}} diff --git a/examples/docker/priv-registries/rke2-sample.yaml b/examples/docker/priv-registries/rke2-sample.yaml index a9611b81..3eb50357 100644 --- a/examples/docker/priv-registries/rke2-sample.yaml +++ b/examples/docker/priv-registries/rke2-sample.yaml @@ -62,11 +62,12 @@ spec: kind: Secret namespace: ${CABPR_NAMESPACE} name: registry-cert - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: controlplane + nodeDrainTimeout: 2m --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate @@ -227,4 +228,4 @@ data: http-check expect status 403 {{range $server, $backend := .BackendServers}} server {{ $server }} {{ $backend.Address }}:9345 check check-ssl verify none - {{- end}} \ No newline at end of file + {{- end}} diff --git a/examples/metal3/sample-cluster.yaml b/examples/metal3/sample-cluster.yaml index 17af1331..669603e3 100644 --- a/examples/metal3/sample-cluster.yaml +++ b/examples/metal3/sample-cluster.yaml @@ -70,10 +70,11 @@ metadata: name: ${CLUSTER_NAME} namespace: ${NAMESPACE} spec: - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: Metal3MachineTemplate - name: ${CLUSTER_NAME}-controlplane + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: Metal3MachineTemplate + name: ${CLUSTER_NAME}-controlplane replicas: 1 agentConfig: kubelet: diff --git a/examples/vmware/cluster-template.yaml b/examples/vmware/cluster-template.yaml index 3b8bd521..c22b18c0 100644 --- a/examples/vmware/cluster-template.yaml +++ b/examples/vmware/cluster-template.yaml @@ -156,11 +156,12 @@ spec: type: File name: kubeconfig replicas: ${CONTROL_PLANE_MACHINE_COUNT} - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: VSphereMachineTemplate - name: vsphere-controlplane - nodeDrainTimeout: 2m + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: VSphereMachineTemplate + name: vsphere-controlplane + nodeDrainTimeout: 2m preRKE2Commands: - sleep 30 #fix to give OS time to become ready version: ${RKE2_VERSION} @@ -1448,3 +1449,13 @@ kind: ConfigMap metadata: name: cpi-manifests namespace: ${NAMESPACE} +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${CLUSTER_NAME} + namespace: ${NAMESPACE} +stringData: + password: ${VSPHERE_PASSWORD} + username: ${VSPHERE_USERNAME} +--- diff --git a/pkg/rke2/control_plane.go b/pkg/rke2/control_plane.go index be21e19e..1f03a8cf 100644 --- a/pkg/rke2/control_plane.go +++ b/pkg/rke2/control_plane.go @@ -124,7 +124,7 @@ func (c *ControlPlane) Version() *string { // InfrastructureRef returns the RKE2ControlPlane's infrastructure template. func (c *ControlPlane) InfrastructureRef() *corev1.ObjectReference { - return &c.RCP.Spec.InfrastructureRef + return &c.RCP.Spec.MachineTemplate.InfrastructureRef } // AsOwnerReference returns an owner reference to the RKE2ControlPlane. diff --git a/pkg/rke2/machine_filters.go b/pkg/rke2/machine_filters.go index 0ba05d23..63e4f822 100644 --- a/pkg/rke2/machine_filters.go +++ b/pkg/rke2/machine_filters.go @@ -146,8 +146,8 @@ func matchesTemplateClonedFrom(infraConfigs map[string]*unstructured.Unstructure } // Check if the machine's infrastructure reference has been created from the current RCP infrastructure template. - if clonedFromName != rcp.Spec.InfrastructureRef.Name || - clonedFromGroupKind != rcp.Spec.InfrastructureRef.GroupVersionKind().GroupKind().String() { + if clonedFromName != rcp.Spec.MachineTemplate.InfrastructureRef.Name || + clonedFromGroupKind != rcp.Spec.MachineTemplate.InfrastructureRef.GroupVersionKind().GroupKind().String() { return false } diff --git a/test/e2e/data/infrastructure/cluster-template-docker-updated.yaml b/test/e2e/data/infrastructure/cluster-template-docker-updated.yaml index 38d9325d..8461a377 100644 --- a/test/e2e/data/infrastructure/cluster-template-docker-updated.yaml +++ b/test/e2e/data/infrastructure/cluster-template-docker-updated.yaml @@ -117,11 +117,12 @@ spec: kubeAPIServer: extraArgs: - --anonymous-auth=true - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: "${CLUSTER_NAME}-control-plane" - nodeDrainTimeout: 30s + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: "${CLUSTER_NAME}-control-plane" + nodeDrainTimeout: 30s --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate diff --git a/test/e2e/data/infrastructure/cluster-template-docker.yaml b/test/e2e/data/infrastructure/cluster-template-docker.yaml index 0110ad07..876add05 100644 --- a/test/e2e/data/infrastructure/cluster-template-docker.yaml +++ b/test/e2e/data/infrastructure/cluster-template-docker.yaml @@ -118,11 +118,12 @@ spec: kubeAPIServer: extraArgs: - --anonymous-auth=true - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: "${CLUSTER_NAME}-control-plane" - nodeDrainTimeout: 30s + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: DockerMachineTemplate + name: "${CLUSTER_NAME}-control-plane" + nodeDrainTimeout: 30s --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DockerMachineTemplate diff --git a/test/e2e/data/infrastructure/clusterclass-template-docker.yaml b/test/e2e/data/infrastructure/clusterclass-template-docker.yaml index 09db7057..3fde3184 100644 --- a/test/e2e/data/infrastructure/clusterclass-template-docker.yaml +++ b/test/e2e/data/infrastructure/clusterclass-template-docker.yaml @@ -154,10 +154,6 @@ metadata: spec: template: spec: - infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 - kind: DockerMachineTemplate - name: ${CLASS_NAME}-control-plane serverConfig: cni: calico disableComponents: