bump controller-runtime to 0.20.1, update webhooks and tests

This commit is contained in:
Ashley Dumaine 2025-02-10 12:02:36 -05:00
parent aa892efcbf
commit 0e7c20d99d
No known key found for this signature in database
GPG Key ID: 1EEED691556670B0
6 changed files with 42 additions and 27 deletions

View File

@ -17,6 +17,7 @@ limitations under the License.
package v1beta1 package v1beta1
import ( import (
"context"
"fmt" "fmt"
"github.com/coreos/butane/config/common" "github.com/coreos/butane/config/common"
@ -46,11 +47,13 @@ func (r *RKE2Config) SetupWebhookWithManager(mgr ctrl.Manager) error {
//+kubebuilder:webhook:path=/mutate-bootstrap-cluster-x-k8s-io-v1beta1-rke2config,mutating=true,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configs,verbs=create;update,versions=v1beta1,name=mrke2config.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/mutate-bootstrap-cluster-x-k8s-io-v1beta1-rke2config,mutating=true,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configs,verbs=create;update,versions=v1beta1,name=mrke2config.kb.io,admissionReviewVersions=v1
var _ webhook.Defaulter = &RKE2Config{} var _ webhook.CustomDefaulter = &RKE2Config{}
// Default implements webhook.Defaulter so a webhook will be registered for the type. // Default implements webhook.Defaulter so a webhook will be registered for the type.
func (r *RKE2Config) Default() { func (r *RKE2Config) Default(_ context.Context, _ runtime.Object) error {
DefaultRKE2ConfigSpec(&r.Spec) DefaultRKE2ConfigSpec(&r.Spec)
return nil
} }
// DefaultRKE2ConfigSpec defaults the RKE2ConfigSpec. // DefaultRKE2ConfigSpec defaults the RKE2ConfigSpec.
@ -62,10 +65,10 @@ func DefaultRKE2ConfigSpec(spec *RKE2ConfigSpec) {
//+kubebuilder:webhook:path=/validate-bootstrap-cluster-x-k8s-io-v1beta1-rke2config,mutating=false,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configs,verbs=create;update,versions=v1beta1,name=vrke2config.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/validate-bootstrap-cluster-x-k8s-io-v1beta1-rke2config,mutating=false,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configs,verbs=create;update,versions=v1beta1,name=vrke2config.kb.io,admissionReviewVersions=v1
var _ webhook.Validator = &RKE2Config{} var _ webhook.CustomValidator = &RKE2Config{}
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. // ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2Config) ValidateCreate() (admission.Warnings, error) { func (r *RKE2Config) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
rke2configlog.Info("RKE2Config validate create", "rke2config", klog.KObj(r)) rke2configlog.Info("RKE2Config validate create", "rke2config", klog.KObj(r))
var allErrs field.ErrorList var allErrs field.ErrorList
@ -80,7 +83,7 @@ func (r *RKE2Config) ValidateCreate() (admission.Warnings, error) {
} }
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2Config) ValidateUpdate(_ runtime.Object) (admission.Warnings, error) { func (r *RKE2Config) ValidateUpdate(_ context.Context, _, _ runtime.Object) (admission.Warnings, error) {
rke2configlog.Info("RKE2Config validate update", "rke2config", klog.KObj(r)) rke2configlog.Info("RKE2Config validate update", "rke2config", klog.KObj(r))
var allErrs field.ErrorList var allErrs field.ErrorList
@ -95,7 +98,7 @@ func (r *RKE2Config) ValidateUpdate(_ runtime.Object) (admission.Warnings, error
} }
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. // ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2Config) ValidateDelete() (admission.Warnings, error) { func (r *RKE2Config) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil return nil, nil
} }

View File

@ -17,6 +17,7 @@ limitations under the License.
package v1beta1 package v1beta1
import ( import (
"context"
"testing" "testing"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
@ -76,7 +77,7 @@ func TestRKE2Config_ValidateCreate(t *testing.T) {
Spec: *tt.spec.DeepCopy(), Spec: *tt.spec.DeepCopy(),
} }
_, err := config.ValidateCreate() _, err := config.ValidateCreate(context.Background(), config)
if tt.expectErr { if tt.expectErr {
Expect(err).To(HaveOccurred()) Expect(err).To(HaveOccurred())

View File

@ -17,6 +17,8 @@ limitations under the License.
package v1beta1 package v1beta1
import ( import (
"context"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime" ctrl "sigs.k8s.io/controller-runtime"
logf "sigs.k8s.io/controller-runtime/pkg/log" logf "sigs.k8s.io/controller-runtime/pkg/log"
@ -36,33 +38,35 @@ func (r *RKE2ConfigTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error {
//+kubebuilder:webhook:path=/mutate-bootstrap-cluster-x-k8s-io-v1beta1-rke2configtemplate,mutating=true,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configtemplates,verbs=create;update,versions=v1beta1,name=mrke2configtemplate.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/mutate-bootstrap-cluster-x-k8s-io-v1beta1-rke2configtemplate,mutating=true,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configtemplates,verbs=create;update,versions=v1beta1,name=mrke2configtemplate.kb.io,admissionReviewVersions=v1
var _ webhook.Defaulter = &RKE2ConfigTemplate{} var _ webhook.CustomDefaulter = &RKE2ConfigTemplate{}
// Default implements webhook.Defaulter so a webhook will be registered for the type. // Default implements webhook.Defaulter so a webhook will be registered for the type.
func (r *RKE2ConfigTemplate) Default() { func (r *RKE2ConfigTemplate) Default(_ context.Context, _ runtime.Object) error {
RKE2configtemplatelog.Info("default", "name", r.Name) RKE2configtemplatelog.Info("default", "name", r.Name)
return nil
} }
//+kubebuilder:webhook:path=/validate-bootstrap-cluster-x-k8s-io-v1beta1-rke2configtemplate,mutating=false,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configtemplates,verbs=create;update,versions=v1beta1,name=vrke2configtemplate.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/validate-bootstrap-cluster-x-k8s-io-v1beta1-rke2configtemplate,mutating=false,failurePolicy=fail,sideEffects=None,groups=bootstrap.cluster.x-k8s.io,resources=rke2configtemplates,verbs=create;update,versions=v1beta1,name=vrke2configtemplate.kb.io,admissionReviewVersions=v1
var _ webhook.Validator = &RKE2ConfigTemplate{} var _ webhook.CustomValidator = &RKE2ConfigTemplate{}
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. // ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ConfigTemplate) ValidateCreate() (admission.Warnings, error) { func (r *RKE2ConfigTemplate) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
RKE2configtemplatelog.Info("validate create", "name", r.Name) RKE2configtemplatelog.Info("validate create", "name", r.Name)
return nil, nil return nil, nil
} }
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ConfigTemplate) ValidateUpdate(_ runtime.Object) (admission.Warnings, error) { func (r *RKE2ConfigTemplate) ValidateUpdate(_ context.Context, _, _ runtime.Object) (admission.Warnings, error) {
RKE2configtemplatelog.Info("validate update", "name", r.Name) RKE2configtemplatelog.Info("validate update", "name", r.Name)
return nil, nil return nil, nil
} }
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. // ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ConfigTemplate) ValidateDelete() (admission.Warnings, error) { func (r *RKE2ConfigTemplate) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
RKE2configtemplatelog.Info("validate delete", "name", r.Name) RKE2configtemplatelog.Info("validate delete", "name", r.Name)
return nil, nil return nil, nil

View File

@ -17,6 +17,7 @@ limitations under the License.
package v1beta1 package v1beta1
import ( import (
"context"
"errors" "errors"
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
@ -43,10 +44,10 @@ func (r *RKE2ControlPlane) SetupWebhookWithManager(mgr ctrl.Manager) error {
//+kubebuilder:webhook:path=/mutate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplane,mutating=true,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanes,verbs=create;update,versions=v1beta1,name=mrke2controlplane.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/mutate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplane,mutating=true,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanes,verbs=create;update,versions=v1beta1,name=mrke2controlplane.kb.io,admissionReviewVersions=v1
var _ webhook.Defaulter = &RKE2ControlPlane{} var _ webhook.CustomDefaulter = &RKE2ControlPlane{}
// Default implements webhook.Defaulter so a webhook will be registered for the type. // Default implements webhook.Defaulter so a webhook will be registered for the type.
func (r *RKE2ControlPlane) Default() { func (r *RKE2ControlPlane) Default(_ context.Context, _ runtime.Object) error {
bootstrapv1.DefaultRKE2ConfigSpec(&r.Spec.RKE2ConfigSpec) bootstrapv1.DefaultRKE2ConfigSpec(&r.Spec.RKE2ConfigSpec)
// Defaults missing MachineTemplate.InfrastructureRef to Spec.InfrastructureRef // Defaults missing MachineTemplate.InfrastructureRef to Spec.InfrastructureRef
@ -58,14 +59,16 @@ func (r *RKE2ControlPlane) Default() {
if r.Spec.MachineTemplate.NodeDrainTimeout == nil { if r.Spec.MachineTemplate.NodeDrainTimeout == nil {
r.Spec.MachineTemplate.NodeDrainTimeout = r.Spec.NodeDrainTimeout r.Spec.MachineTemplate.NodeDrainTimeout = r.Spec.NodeDrainTimeout
} }
return nil
} }
//+kubebuilder:webhook:path=/validate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplane,mutating=false,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanes,verbs=create;update,versions=v1beta1,name=vrke2controlplane.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/validate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplane,mutating=false,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanes,verbs=create;update,versions=v1beta1,name=vrke2controlplane.kb.io,admissionReviewVersions=v1
var _ webhook.Validator = &RKE2ControlPlane{} var _ webhook.CustomValidator = &RKE2ControlPlane{}
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. // ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ControlPlane) ValidateCreate() (admission.Warnings, error) { func (r *RKE2ControlPlane) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
rke2controlplanelog.Info("RKE2ControlPlane validate create", "control-plane", klog.KObj(r)) rke2controlplanelog.Info("RKE2ControlPlane validate create", "control-plane", klog.KObj(r))
var allErrs field.ErrorList var allErrs field.ErrorList
@ -83,7 +86,7 @@ func (r *RKE2ControlPlane) ValidateCreate() (admission.Warnings, error) {
} }
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ControlPlane) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { func (r *RKE2ControlPlane) ValidateUpdate(_ context.Context, old, _ runtime.Object) (admission.Warnings, error) {
oldControlplane, ok := old.(*RKE2ControlPlane) oldControlplane, ok := old.(*RKE2ControlPlane)
if !ok { if !ok {
return nil, apierrors.NewInvalid(GroupVersion.WithKind("RKE2ControlPlane").GroupKind(), r.Name, field.ErrorList{ return nil, apierrors.NewInvalid(GroupVersion.WithKind("RKE2ControlPlane").GroupKind(), r.Name, field.ErrorList{
@ -112,7 +115,7 @@ func (r *RKE2ControlPlane) ValidateUpdate(old runtime.Object) (admission.Warning
} }
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. // ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ControlPlane) ValidateDelete() (admission.Warnings, error) { func (r *RKE2ControlPlane) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
rke2controlplanelog.Info("validate delete", "name", r.Name) rke2controlplanelog.Info("validate delete", "name", r.Name)
return nil, nil return nil, nil

View File

@ -17,6 +17,7 @@ limitations under the License.
package v1beta1 package v1beta1
import ( import (
"context"
"errors" "errors"
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
@ -39,19 +40,21 @@ func (r *RKE2ControlPlaneTemplate) SetupWebhookWithManager(mgr ctrl.Manager) err
//+kubebuilder:webhook:path=/mutate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplanetemplate,mutating=true,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanetemplates,verbs=create;update,versions=v1beta1,name=mrke2controlplanetemplate.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/mutate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplanetemplate,mutating=true,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanetemplates,verbs=create;update,versions=v1beta1,name=mrke2controlplanetemplate.kb.io,admissionReviewVersions=v1
var _ webhook.Defaulter = &RKE2ControlPlaneTemplate{} var _ webhook.CustomDefaulter = &RKE2ControlPlaneTemplate{}
// Default implements webhook.Defaulter so a webhook will be registered for the type. // Default implements webhook.Defaulter so a webhook will be registered for the type.
func (r *RKE2ControlPlaneTemplate) Default() { func (r *RKE2ControlPlaneTemplate) Default(_ context.Context, _ runtime.Object) error {
bootstrapv1.DefaultRKE2ConfigSpec(&r.Spec.Template.Spec.RKE2ConfigSpec) bootstrapv1.DefaultRKE2ConfigSpec(&r.Spec.Template.Spec.RKE2ConfigSpec)
return nil
} }
//+kubebuilder:webhook:path=/validate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplanetemplate,mutating=false,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanetemplates,verbs=create;update,versions=v1beta1,name=vrke2controlplanetemplate.kb.io,admissionReviewVersions=v1 //+kubebuilder:webhook:path=/validate-controlplane-cluster-x-k8s-io-v1beta1-rke2controlplanetemplate,mutating=false,failurePolicy=fail,sideEffects=None,groups=controlplane.cluster.x-k8s.io,resources=rke2controlplanetemplates,verbs=create;update,versions=v1beta1,name=vrke2controlplanetemplate.kb.io,admissionReviewVersions=v1
var _ webhook.Validator = &RKE2ControlPlaneTemplate{} var _ webhook.CustomValidator = &RKE2ControlPlaneTemplate{}
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. // ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ControlPlaneTemplate) ValidateCreate() (admission.Warnings, error) { func (r *RKE2ControlPlaneTemplate) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
rke2controlplanelog.Info("RKE2ControlPlane validate create", "control-plane", klog.KObj(r)) rke2controlplanelog.Info("RKE2ControlPlane validate create", "control-plane", klog.KObj(r))
var allErrs field.ErrorList var allErrs field.ErrorList
@ -68,7 +71,7 @@ func (r *RKE2ControlPlaneTemplate) ValidateCreate() (admission.Warnings, error)
} }
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ControlPlaneTemplate) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { func (r *RKE2ControlPlaneTemplate) ValidateUpdate(_ context.Context, old, _ runtime.Object) (admission.Warnings, error) {
oldControlplane, ok := old.(*RKE2ControlPlaneTemplate) oldControlplane, ok := old.(*RKE2ControlPlaneTemplate)
if !ok { if !ok {
return nil, apierrors.NewInvalid(GroupVersion.WithKind("RKE2ControlPlane").GroupKind(), r.Name, field.ErrorList{ return nil, apierrors.NewInvalid(GroupVersion.WithKind("RKE2ControlPlane").GroupKind(), r.Name, field.ErrorList{
@ -96,7 +99,7 @@ func (r *RKE2ControlPlaneTemplate) ValidateUpdate(old runtime.Object) (admission
} }
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. // ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *RKE2ControlPlaneTemplate) ValidateDelete() (admission.Warnings, error) { func (r *RKE2ControlPlaneTemplate) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
rke2controlplanelog.Info("validate delete", "name", r.Name) rke2controlplanelog.Info("validate delete", "name", r.Name)
return nil, nil return nil, nil

View File

@ -14,6 +14,7 @@ limitations under the License.
package v1beta1 package v1beta1
import ( import (
"context"
"testing" "testing"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
@ -48,7 +49,7 @@ func TestRKE2ControlPlaneTemplateValidateCreate(t *testing.T) {
tt := test tt := test
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
t.Parallel() t.Parallel()
warn, err := tt.inputTemplate.ValidateCreate() warn, err := tt.inputTemplate.ValidateCreate(context.Background(), tt.inputTemplate)
if tt.wantErr { if tt.wantErr {
g.Expect(err).To(HaveOccurred()) g.Expect(err).To(HaveOccurred())
} else { } else {
@ -96,7 +97,7 @@ func TestRKE2ControlPlaneTemplateValidateUpdate(t *testing.T) {
tt := test tt := test
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
t.Parallel() t.Parallel()
warn, err := tt.newTemplate.ValidateUpdate(tt.oldTemplate) warn, err := tt.newTemplate.ValidateUpdate(context.Background(), tt.oldTemplate, tt.newTemplate)
if tt.wantErr { if tt.wantErr {
g.Expect(err).To(HaveOccurred()) g.Expect(err).To(HaveOccurred())
} else { } else {