Skip to content

🌱 update controller runtime and cluster-api to newest version #1623

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 35 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
3aea801
feat: update controller-runtime and cluster-api
cgroschupp Jun 26, 2025
e3b7b63
chore: vendoring
cgroschupp Jun 26, 2025
350469c
docs: update README.md
cgroschupp Jun 26, 2025
5d47628
chore: update docker images to golang 1.24
cgroschupp Jun 26, 2025
d318072
chore: execute generate and update mockery
cgroschupp Jun 27, 2025
e3a4eb5
Merge branch 'main' into update-controller-runtime
guettli Jul 10, 2025
74e961d
use builder image which contains Go 1.24
guettli Jul 10, 2025
b90944d
updgrade to newer builder version, which supports go 1.24.5
guettli Jul 10, 2025
5aa6107
update dependencies.
guettli Jul 10, 2025
601702c
use versions in go.mod like cluster api does.
guettli Jul 10, 2025
fdefe5c
fixed to 32
guettli Jul 10, 2025
5aeb58e
tidy
guettli Jul 10, 2025
7fa95bc
added missing vendor files.
guettli Jul 10, 2025
5e99bd0
fixed cel
guettli Jul 10, 2025
b117f63
golangci-lint error seems fixed now.
guettli Jul 10, 2025
b18bddc
Merge branch 'main' into update-controller-runtime
guettli Jul 30, 2025
bb4303b
🌱 build(tools): make `helm` and `hcloud` downloads platform-agnostic …
tdabasinskas Jul 30, 2025
52ebba9
:seedling: Add SkipCreatingHetznerSecretInWorkloadCluster to HetznerC…
guettli Jul 30, 2025
c664fa5
vendor update
cgroschupp Jul 30, 2025
2171fba
fix: downgrade cel and k8s
cgroschupp Jul 30, 2025
7f6cbd5
silence lint about cluster-api/errors deprecation
cgroschupp Jul 30, 2025
db6f45c
fix: linter findings
cgroschupp Jul 30, 2025
4bb62bb
chore: update golangci-lint
cgroschupp Jul 30, 2025
3cd63a8
use lychee from docker image
cgroschupp Jul 30, 2025
c937f07
update deps
cgroschupp Jul 30, 2025
d2596ba
update vendors
cgroschupp Jul 31, 2025
e2cae0a
Merge branch 'main' into update-controller-runtime
guettli Jul 31, 2025
76c9648
test which Go version gets used.
guettli Jul 31, 2025
4735508
fix: change GetHardwareDetailsNics mock to get right ip
cgroschupp Jul 31, 2025
b4c358d
Merge remote-tracking branch 'cgroschupp/update-controller-runtime' i…
guettli Jul 31, 2025
43bf465
fail, if no NIC with IP where found.
guettli Jul 31, 2025
3d1df53
revert lines, which were needed for debugging.
guettli Jul 31, 2025
8f799ee
re-generate manifests. Output changes with new version of controller-…
guettli Jul 31, 2025
fe753d8
Merge branch 'main' into update-controller-runtime
guettli Jul 31, 2025
427cb76
Import deprecated but needed errors constants from CAPI
cgroschupp Aug 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
2 changes: 0 additions & 2 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,6 @@ linters-settings:
alias: bootstrapv1
- pkg: sigs.k8s.io/controller-runtime/pkg/metrics/server
alias: metricsserver
- pkg: sigs.k8s.io/cluster-api/errors
alias: capierrors
- pkg: sigs.k8s.io/controller-runtime/pkg/client/fake
alias: fakeclient
nolintlint:
Expand Down
18 changes: 18 additions & 0 deletions .mockery.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# This config was choosen, so that the output matches to old structure (pre config file .mockery.yaml).
# If you are here to copy this config to a new project, then it might
# make sense to choose a structure which needs less config by using
# the default values of Mockery.
all: True
filename: "{{.InterfaceName}}.go"
mockname: "{{.InterfaceName}}"
outpkg: mocks
packages:
github.com/syself/cluster-api-provider-hetzner/pkg/services/baremetal/client/ssh:
config:
dir: "{{.InterfaceDir}}/../mocks/ssh"
github.com/syself/cluster-api-provider-hetzner/pkg/services/baremetal/client/robot:
config:
dir: "{{.InterfaceDir}}/../mocks/robot"
github.com/syself/cluster-api-provider-hetzner/pkg/services/hcloud/client:
config:
dir: "{{.InterfaceDir}}/mocks"
5 changes: 2 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ export KUBEBUILDER_ENVTEST_KUBERNETES_VERSION ?= 1.31.0
CONTROLLER_GEN := $(abspath $(TOOLS_BIN_DIR)/controller-gen)
controller-gen: $(CONTROLLER_GEN) ## Build a local copy of controller-gen
$(CONTROLLER_GEN): # Build controller-gen from tools folder.
go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.14.0
go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.18.0

KUSTOMIZE := $(abspath $(TOOLS_BIN_DIR)/kustomize)
kustomize: $(KUSTOMIZE) ## Build a local copy of kustomize
Expand Down Expand Up @@ -756,8 +756,7 @@ ifeq ($(BUILD_IN_CONTAINER),true)
-v $(shell pwd):/src/cluster-api-provider-$(INFRA_PROVIDER)$(MOUNT_FLAGS) \
$(BUILDER_IMAGE):$(BUILDER_IMAGE_VERSION) $@;
else
cd pkg/services/baremetal/client; go run github.com/vektra/mockery/[email protected]
cd pkg/services/hcloud/client; go run github.com/vektra/mockery/[email protected] --all
go run github.com/vektra/mockery/[email protected]
endif

.PHONY: generate
Expand Down
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,14 @@ This provider's versions are compatible with the following versions of Cluster A

This provider's versions can install and manage the following versions of Kubernetes:

| | Hetzner Provider `v1.0.x` |
| ----------------- | ------------------------- |
| Kubernetes 1.28.x | ✅ |
| Kubernetes 1.29.x | ✅ |
| Kubernetes 1.30.x | ✅ |
| Kubernetes 1.31.x | ✅ |
| | Hetzner Provider `v1.0.x` | Hetzner Provider `v1.1.x` |
| ----------------- | ------------------------- | ------------------------- |
| Kubernetes 1.28.x | ✅ | ✅ |
| Kubernetes 1.29.x | ✅ | ✅ |
| Kubernetes 1.30.x | ✅ | ✅ |
| Kubernetes 1.31.x | ✅ | ✅ |
| Kubernetes 1.32.x | ❌ | ❔ |
| Kubernetes 1.33.x | ❌ | ❔ |

Test status:

Expand Down
4 changes: 2 additions & 2 deletions api/v1beta1/hcloudmachine_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ package v1beta1

import (
"github.com/hetznercloud/hcloud-go/v2/hcloud"
capierrors "github.com/syself/cluster-api-provider-hetzner/pkg/utils/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
capierrors "sigs.k8s.io/cluster-api/errors"
)

const (
Expand Down Expand Up @@ -85,7 +85,7 @@ type HCloudMachineStatus struct {
// reconciling the Machine and will contain a succinct value suitable
// for machine interpretation.
// +optional
FailureReason *capierrors.MachineStatusError `json:"failureReason,omitempty"`
FailureReason *capierrors.DeprecatedCAPIMachineStatusError `json:"failureReason,omitempty"`

// FailureMessage will be set in the event that there is a terminal problem
// reconciling the Machine and will contain a more verbose string suitable
Expand Down
45 changes: 32 additions & 13 deletions api/v1beta1/hcloudmachine_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package v1beta1

import (
"context"
"fmt"

apierrors "k8s.io/apimachinery/pkg/api/errors"
Expand All @@ -29,13 +30,18 @@ import (
"github.com/syself/cluster-api-provider-hetzner/pkg/utils"
)

type hcloudMachineWebhook struct{}

// log is for logging in this package.
var hcloudmachinelog = utils.GetDefaultLogger("info").WithName("hcloudmachine-resource")

// SetupWebhookWithManager initializes webhook manager for HCloudMachine.
func (r *HCloudMachine) SetupWebhookWithManager(mgr ctrl.Manager) error {
w := new(hcloudMachineWebhook)
return ctrl.NewWebhookManagedBy(mgr).
For(r).
WithDefaulter(w).
WithValidator(w).
Complete()
}

Expand All @@ -48,46 +54,59 @@ func (r *HCloudMachineList) SetupWebhookWithManager(mgr ctrl.Manager) error {

//+kubebuilder:webhook:path=/mutate-infrastructure-cluster-x-k8s-io-v1beta1-hcloudmachine,mutating=true,failurePolicy=fail,sideEffects=None,groups=infrastructure.cluster.x-k8s.io,resources=hcloudmachines,verbs=create;update,versions=v1beta1,name=mutation.hcloudmachine.infrastructure.cluster.x-k8s.io,admissionReviewVersions={v1,v1beta1}

var _ webhook.Defaulter = &HCloudMachine{}
var _ webhook.CustomDefaulter = &hcloudMachineWebhook{}

// Default implements webhook.Defaulter so a webhook will be registered for the type.
func (r *HCloudMachine) Default() {
// Default implements webhook.CustomDefaulter so a webhook will be registered for the type.
func (*hcloudMachineWebhook) Default(_ context.Context, obj runtime.Object) error {
r, ok := obj.(*HCloudMachine)
if !ok {
return fmt.Errorf("expected an HCloudMachine object but got %T", r)
}
if r.Spec.PublicNetwork == nil {
r.Spec.PublicNetwork = &PublicNetworkSpec{
EnableIPv4: true,
EnableIPv6: true,
}
}
return nil
}

//+kubebuilder:webhook:path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-hcloudmachine,mutating=false,failurePolicy=fail,sideEffects=None,groups=infrastructure.cluster.x-k8s.io,resources=hcloudmachines,verbs=create;update,versions=v1beta1,name=validation.hcloudmachine.infrastructure.cluster.x-k8s.io,admissionReviewVersions={v1,v1beta1}

var _ webhook.Validator = &HCloudMachine{}
var _ webhook.CustomValidator = &hcloudMachineWebhook{}

// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudMachineWebhook) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) {
r, ok := obj.(*HCloudMachine)
if !ok {
return nil, fmt.Errorf("expected an HCloudMachine object but got %T", r)
}

// ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudMachine) ValidateCreate() (admission.Warnings, error) {
hcloudmachinelog.V(1).Info("validate create", "name", r.Name)
var allErrs field.ErrorList

return nil, aggregateObjErrors(r.GroupVersionKind().GroupKind(), r.Name, allErrs)
}

// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudMachine) ValidateUpdate(old runtime.Object) (admission.Warnings, error) {
// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudMachineWebhook) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) {
r, ok := newObj.(*HCloudMachine)
if !ok {
return nil, fmt.Errorf("expected an HCloudMachine object but got %T", r)
}
hcloudmachinelog.V(1).Info("validate update", "name", r.Name)

oldM, ok := old.(*HCloudMachine)
oldM, ok := oldObj.(*HCloudMachine)
if !ok {
return nil, apierrors.NewBadRequest(fmt.Sprintf("expected an HCloudMachine but got a %T", old))
return nil, apierrors.NewBadRequest(fmt.Sprintf("expected an HCloudMachine but got a %T", oldObj))
}

allErrs := validateHCloudMachineSpec(oldM.Spec, r.Spec)

return nil, aggregateObjErrors(r.GroupVersionKind().GroupKind(), r.Name, allErrs)
}

// ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudMachine) ValidateDelete() (admission.Warnings, error) {
hcloudmachinelog.V(1).Info("validate delete", "name", r.Name)
// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type.
func (r *hcloudMachineWebhook) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}
30 changes: 19 additions & 11 deletions api/v1beta1/hcloudmachinetemplate_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,28 +31,36 @@ import (
)

// SetupWebhookWithManager initializes webhook manager for HetznerMachineTemplate.
func (r *HCloudMachineTemplateWebhook) SetupWebhookWithManager(mgr ctrl.Manager) error {
func (r *HCloudMachineTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error {
w := new(hcloudMachineTemplateWebhook)
return ctrl.NewWebhookManagedBy(mgr).
For(&HCloudMachineTemplate{}).
WithValidator(r).
For(r).
WithValidator(w).
WithDefaulter(w).
Complete()
}

// HCloudMachineTemplateWebhook implements a custom validation webhook for HCloudMachineTemplate.
// +kubebuilder:object:generate=false
type HCloudMachineTemplateWebhook struct{}
type hcloudMachineTemplateWebhook struct{}

// Default implements admission.CustomDefaulter.
func (*hcloudMachineTemplateWebhook) Default(_ context.Context, _ runtime.Object) error {
return nil
}

// +kubebuilder:webhook:path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-hcloudmachinetemplate,mutating=false,sideEffects=None,failurePolicy=fail,sideEffects=None,groups=infrastructure.cluster.x-k8s.io,resources=hcloudmachinetemplates,verbs=create;update,versions=v1beta1,name=validation.hcloudmachinetemplate.infrastructure.x-k8s.io,admissionReviewVersions=v1;v1beta1

var _ webhook.CustomValidator = &HCloudMachineTemplateWebhook{}
var _ webhook.CustomValidator = &hcloudMachineTemplateWebhook{}
var _ webhook.CustomDefaulter = &hcloudMachineTemplateWebhook{}

// ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudMachineTemplateWebhook) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudMachineTemplateWebhook) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}

// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudMachineTemplateWebhook) ValidateUpdate(ctx context.Context, oldRaw runtime.Object, newRaw runtime.Object) (admission.Warnings, error) {
// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudMachineTemplateWebhook) ValidateUpdate(ctx context.Context, oldRaw runtime.Object, newRaw runtime.Object) (admission.Warnings, error) {
newHCloudMachineTemplate, ok := newRaw.(*HCloudMachineTemplate)
if !ok {
return nil, apierrors.NewBadRequest(fmt.Sprintf("expected a HCloudMachineTemplate but got a %T", newRaw))
Expand All @@ -74,7 +82,7 @@ func (r *HCloudMachineTemplateWebhook) ValidateUpdate(ctx context.Context, oldRa
return nil, aggregateObjErrors(newHCloudMachineTemplate.GroupVersionKind().GroupKind(), newHCloudMachineTemplate.Name, allErrs)
}

// ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudMachineTemplateWebhook) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudMachineTemplateWebhook) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}
28 changes: 18 additions & 10 deletions api/v1beta1/hcloudremediation_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,42 +17,50 @@ limitations under the License.
package v1beta1

import (
"context"

"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)

type hcloudRemediationWebhook struct{}

// SetupWebhookWithManager initializes webhook manager for HCloudRemediation.
func (r *HCloudRemediation) SetupWebhookWithManager(mgr ctrl.Manager) error {
w := new(hcloudRemediationWebhook)
return ctrl.NewWebhookManagedBy(mgr).
For(r).
WithValidator(w).
WithDefaulter(w).
Complete()
}

//+kubebuilder:webhook:path=/mutate-infrastructure-cluster-x-k8s-io-v1beta1-hcloudremediation,mutating=true,failurePolicy=fail,sideEffects=None,groups=infrastructure.cluster.x-k8s.io,resources=hcloudremediations,verbs=create;update,versions=v1beta1,name=mutation.hcloudremediation.infrastructure.cluster.x-k8s.io,admissionReviewVersions={v1,v1beta1}

var _ webhook.Defaulter = &HCloudRemediation{}
var _ webhook.CustomDefaulter = &hcloudRemediationWebhook{}

// Default implements webhook.Defaulter so a webhook will be registered for the type.
func (r *HCloudRemediation) Default() {
// Default implements webhook.CustomDefaulter so a webhook will be registered for the type.
func (*hcloudRemediationWebhook) Default(_ context.Context, _ runtime.Object) error {
return nil
}

//+kubebuilder:webhook:path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-hcloudremediation,mutating=false,failurePolicy=fail,sideEffects=None,groups=infrastructure.cluster.x-k8s.io,resources=hcloudremediations,verbs=create;update,versions=v1beta1,name=validation.hcloudremediation.infrastructure.cluster.x-k8s.io,admissionReviewVersions={v1,v1beta1}

var _ webhook.Validator = &HCloudRemediation{}
var _ webhook.CustomValidator = &hcloudRemediationWebhook{}

// ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudRemediation) ValidateCreate() (admission.Warnings, error) {
// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudRemediationWebhook) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}

// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudRemediation) ValidateUpdate(runtime.Object) (admission.Warnings, error) {
// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudRemediationWebhook) ValidateUpdate(_ context.Context, _ runtime.Object, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}

// ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudRemediation) ValidateDelete() (admission.Warnings, error) {
// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudRemediationWebhook) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}
28 changes: 18 additions & 10 deletions api/v1beta1/hcloudremediationtemplate_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,42 +17,50 @@ limitations under the License.
package v1beta1

import (
"context"

"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)

type hcloudRemediationTemplateWebhook struct{}

// SetupWebhookWithManager initializes webhook manager for HCloudRemediationTemplate.
func (r *HCloudRemediationTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error {
w := new(hcloudRemediationTemplateWebhook)
return ctrl.NewWebhookManagedBy(mgr).
For(r).
WithValidator(w).
WithDefaulter(w).
Complete()
}

//+kubebuilder:webhook:path=/mutate-infrastructure-cluster-x-k8s-io-v1beta1-hcloudremediationtemplate,mutating=true,failurePolicy=fail,sideEffects=None,groups=infrastructure.cluster.x-k8s.io,resources=hcloudremediationtemplates,verbs=create;update,versions=v1beta1,name=mhcloudremediationtemplate.kb.io,admissionReviewVersions=v1

var _ webhook.Defaulter = &HCloudRemediationTemplate{}
var _ webhook.CustomDefaulter = &hcloudRemediationTemplateWebhook{}

// Default implements webhook.Defaulter so a webhook will be registered for the type.
func (r *HCloudRemediationTemplate) Default() {
// Default implements webhook.CustomDefaulter so a webhook will be registered for the type.
func (*hcloudRemediationTemplateWebhook) Default(_ context.Context, _ runtime.Object) error {
return nil
}

//+kubebuilder:webhook:path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-hcloudremediationtemplate,mutating=false,failurePolicy=fail,sideEffects=None,groups=infrastructure.cluster.x-k8s.io,resources=hcloudremediationtemplates,verbs=create;update,versions=v1beta1,name=vhcloudremediationtemplate.kb.io,admissionReviewVersions=v1

var _ webhook.Validator = &HCloudRemediationTemplate{}
var _ webhook.CustomValidator = &hcloudRemediationTemplateWebhook{}

// ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudRemediationTemplate) ValidateCreate() (admission.Warnings, error) {
// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudRemediationTemplateWebhook) ValidateCreate(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}

// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudRemediationTemplate) ValidateUpdate(runtime.Object) (admission.Warnings, error) {
// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudRemediationTemplateWebhook) ValidateUpdate(_ context.Context, _ runtime.Object, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}

// ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (r *HCloudRemediationTemplate) ValidateDelete() (admission.Warnings, error) {
// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type.
func (*hcloudRemediationTemplateWebhook) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
return nil, nil
}
Loading
Loading