diff --git a/.custom-gcl.yml b/.custom-gcl.yml index 6ef11b3bf..4006406a2 100644 --- a/.custom-gcl.yml +++ b/.custom-gcl.yml @@ -3,7 +3,7 @@ # with all the plugins listed below. # # See: https://golangci-lint.run/plugins/module-plugins/ -version: v2.8.0 +version: v2.11.4 plugins: # logcheck validates structured logging calls and parameters (e.g., balanced key-value pairs) - module: "sigs.k8s.io/logtools" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index bdfea4d6d..0d66f2442 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,4 +19,4 @@ jobs: - name: Run linter uses: golangci/golangci-lint-action@v9 with: - version: v2.10 + version: v2.11 diff --git a/Makefile b/Makefile index adf5eb12f..a2a3e0612 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,7 @@ manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and Cust .PHONY: generate generate: controller-gen goimports ## Generate code containing DeepCopy, DeepCopyInto, DeepCopyObject, and ApplyConfiguration implementations. - "$(CONTROLLER_GEN)" object:headerFile="hack/boilerplate.go.txt" paths="./..." + "$(CONTROLLER_GEN)" object paths="./..." "$(CONTROLLER_GEN)" applyconfiguration:headerFile="hack/boilerplate.go.txt" paths="./api/..." output:applyconfiguration:dir=./client/applyconfiguration "$(GOIMPORTS)" -w . @@ -295,7 +295,7 @@ ENVTEST_K8S_VERSION ?= $(shell go list -m -f "{{ .Version }}" k8s.io/api | awk - GOLANGCI_LINT_VERSION ?= v2.10 GOIMPORTS_VERSION ?= v0.38.0 CRD_REF_DOCS_VERSION ?= v0.2.0 -KUBEBUILDER_VERSION ?= v4.13.1 +KUBEBUILDER_VERSION ?= v4.14.0 ADDLICENSE_VERSION ?= v1.1.1 GINKGO_VERSION ?= $(shell go list -m -f '{{.Version}}' github.com/onsi/ginkgo/v2) PROMTOOL_VERSION ?= 3.11.3 diff --git a/PROJECT b/PROJECT index 43324fc95..54985e959 100644 --- a/PROJECT +++ b/PROJECT @@ -2,7 +2,7 @@ # This file is used to track the info used to scaffold your project # and allow the plugins properly work. # More info: https://book.kubebuilder.io/reference/project-config.html -cliVersion: 4.13.1 +cliVersion: 4.14.0 domain: ironcore.dev layout: - go.kubebuilder.io/v4 diff --git a/REUSE.toml b/REUSE.toml index 49354ad5c..0dece8811 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -26,7 +26,8 @@ path = [ "package-lock.json", "internal/cmd/visualizer/index.html", "test/data/*.json", - "test/data/*.yaml" + "test/data/*.yaml", + "api/v1alpha1/zz_generated.deepcopy.go" ] precedence = "aggregate" SPDX-FileCopyrightText = "2024 SAP SE or an SAP affiliate company and IronCore contributors" diff --git a/api/v1alpha1/groupversion_info.go b/api/v1alpha1/groupversion_info.go index d43a8351a..238de3b0c 100644 --- a/api/v1alpha1/groupversion_info.go +++ b/api/v1alpha1/groupversion_info.go @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and IronCore contributors // SPDX-License-Identifier: Apache-2.0 -// Package v1alpha1 contains API Schema definitions for the metal v1alpha1 API group +// Package v1alpha1 contains API Schema definitions for the metal v1alpha1 API group. // +kubebuilder:object:generate=true // +groupName=metal.ironcore.dev // +kubebuilder:ac:generate=true diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 610bdc967..c66f267b6 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -1,8 +1,5 @@ //go:build !ignore_autogenerated -// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors -// SPDX-License-Identifier: Apache-2.0 - // Code generated by controller-gen. DO NOT EDIT. package v1alpha1 diff --git a/cmd/main.go b/cmd/main.go index 3773991c0..173c59058 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -413,14 +413,14 @@ func main() { // nolint: gocyclo DefaultProtocol: effectiveProtocol, SkipCertValidation: effectiveSkipCert, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "Endpoint") + setupLog.Error(err, "Failed to create controller", "controller", "endpoint") os.Exit(1) } if err = (&controller.BMCSecretReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BMCSecret") + setupLog.Error(err, "Failed to create controller", "controller", "bmcsecret") os.Exit(1) } if err = (&controller.BMCReconciler{ @@ -439,7 +439,7 @@ func main() { // nolint: gocyclo BasicAuth: true, }, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BMC") + setupLog.Error(err, "Failed to create controller", "controller", "bmc") os.Exit(1) } if err = (&controller.ServerReconciler{ @@ -470,14 +470,14 @@ func main() { // nolint: gocyclo }, DiscoveryTimeout: discoveryTimeout, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "Server") + setupLog.Error(err, "Failed to create controller", "controller", "server") os.Exit(1) } if err = (&controller.ServerBootConfigurationReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "ServerBootConfiguration") + setupLog.Error(err, "Failed to create controller", "controller", "serverbootconfiguration") os.Exit(1) } if err = (&controller.ServerClaimReconciler{ @@ -487,14 +487,14 @@ func main() { // nolint: gocyclo Scheme: mgr.GetScheme(), MaxConcurrentReconciles: serverClaimMaxConcurrentReconciles, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "ServerClaim") + setupLog.Error(err, "Failed to create controller", "controller", "serverclaim") os.Exit(1) } if err = (&controller.ServerMaintenanceReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "ServerMaintenance") + setupLog.Error(err, "Failed to create controller", "controller", "servermaintenance") os.Exit(1) } if err = (&controller.BIOSSettingsReconciler{ @@ -515,7 +515,7 @@ func main() { // nolint: gocyclo TimeoutExpiry: biosSettingsApplyTimeout, DefaultFailedAutoRetryCount: int32(defaultFailedAutoRetryCount), }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BIOSSettings") + setupLog.Error(err, "Failed to create controller", "controller", "biossettings") os.Exit(1) } if err = (&controller.BIOSVersionReconciler{ @@ -535,7 +535,7 @@ func main() { // nolint: gocyclo }, DefaultFailedAutoRetryCount: int32(defaultFailedAutoRetryCount), }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BIOSVersion") + setupLog.Error(err, "Failed to create controller", "controller", "biosversion") os.Exit(1) } if err = (&controller.BMCSettingsReconciler{ @@ -555,7 +555,7 @@ func main() { // nolint: gocyclo }, DefaultFailedAutoRetryCount: int32(defaultFailedAutoRetryCount), }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BMCSettings") + setupLog.Error(err, "Failed to create controller", "controller", "bmcsettings") os.Exit(1) } if err = (&controller.BMCVersionReconciler{ @@ -575,7 +575,7 @@ func main() { // nolint: gocyclo }, DefaultFailedAutoRetryCount: int32(defaultFailedAutoRetryCount), }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BMCVersion") + setupLog.Error(err, "Failed to create controller", "controller", "bmcversion") os.Exit(1) } if err = (&controller.BIOSVersionSetReconciler{ @@ -583,7 +583,7 @@ func main() { // nolint: gocyclo Scheme: mgr.GetScheme(), ResyncInterval: maintenanceResyncInterval, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BIOSVersionSet") + setupLog.Error(err, "Failed to create controller", "controller", "biosversionset") os.Exit(1) } if err = (&controller.BIOSSettingsSetReconciler{ @@ -591,7 +591,7 @@ func main() { // nolint: gocyclo Scheme: mgr.GetScheme(), ResyncInterval: maintenanceResyncInterval, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BIOSSettingsSet") + setupLog.Error(err, "Failed to create controller", "controller", "biossettingsset") os.Exit(1) } if err = (&controller.BMCVersionSetReconciler{ @@ -599,7 +599,7 @@ func main() { // nolint: gocyclo Scheme: mgr.GetScheme(), ResyncInterval: maintenanceResyncInterval, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BMCVersionSet") + setupLog.Error(err, "Failed to create controller", "controller", "bmcversionset") os.Exit(1) } if err := (&controller.BMCSettingsSetReconciler{ @@ -607,7 +607,7 @@ func main() { // nolint: gocyclo Scheme: mgr.GetScheme(), ResyncInterval: maintenanceResyncInterval, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BMCSettingsSet") + setupLog.Error(err, "Failed to create controller", "controller", "bmcsettingsset") os.Exit(1) } if err = (&controller.BMCUserReconciler{ @@ -623,56 +623,56 @@ func main() { // nolint: gocyclo ResourcePollingTimeout: resourcePollingTimeout, }, }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create controller", "controller", "BMCUser") + setupLog.Error(err, "Failed to create controller", "controller", "bmcuser") os.Exit(1) } // nolint:goconst if os.Getenv("ENABLE_WEBHOOKS") != "false" { if err := webhookv1alpha1.SetupEndpointWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create webhook", "webhook", "Endpoint") + setupLog.Error(err, "Failed to create webhook", "webhook", "endpoint") os.Exit(1) } } // nolint:goconst if os.Getenv("ENABLE_WEBHOOKS") != "false" { if err := webhookv1alpha1.SetupBMCSecretWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create webhook", "webhook", "BMCSecret") + setupLog.Error(err, "Failed to create webhook", "webhook", "bmcsecret") os.Exit(1) } } // nolint:goconst if os.Getenv("ENABLE_WEBHOOKS") != "false" { if err := webhookv1alpha1.SetupServerWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create webhook", "webhook", "Server") + setupLog.Error(err, "Failed to create webhook", "webhook", "server") os.Exit(1) } } // nolint:goconst if os.Getenv("ENABLE_WEBHOOKS") != "false" { if err := webhookv1alpha1.SetupBIOSSettingsWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create webhook", "webhook", "BIOSSettings") + setupLog.Error(err, "Failed to create webhook", "webhook", "biossettings") os.Exit(1) } } // nolint:goconst if os.Getenv("ENABLE_WEBHOOKS") != "false" { if err := webhookv1alpha1.SetupBIOSVersionWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create webhook", "webhook", "BIOSVersion") + setupLog.Error(err, "Failed to create webhook", "webhook", "biosversion") os.Exit(1) } } // nolint:goconst if os.Getenv("ENABLE_WEBHOOKS") != "false" { if err := webhookv1alpha1.SetupBMCSettingsWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create webhook", "webhook", "BMCSettings") + setupLog.Error(err, "Failed to create webhook", "webhook", "bmcsettings") os.Exit(1) } } // nolint:goconst if os.Getenv("ENABLE_WEBHOOKS") != "false" { if err := webhookv1alpha1.SetupBMCVersionWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "Failed to create webhook", "webhook", "BMCVersion") + setupLog.Error(err, "Failed to create webhook", "webhook", "bmcversion") os.Exit(1) } } diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index f01e06e6b..18ef345f5 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -66,7 +66,10 @@ spec: - --leader-elect image: controller:latest name: manager - ports: [] + ports: + - containerPort: 8081 + name: health + protocol: TCP securityContext: allowPrivilegeEscalation: false capabilities: diff --git a/docs/api-reference/api.md b/docs/api-reference/api.md index 0440dba08..0aa4eab14 100644 --- a/docs/api-reference/api.md +++ b/docs/api-reference/api.md @@ -8,7 +8,7 @@ Package v1alpha1 contains API Schema definitions for the metal.ironcore.dev API group -Package v1alpha1 contains API Schema definitions for the metal v1alpha1 API group +Package v1alpha1 contains API Schema definitions for the metal v1alpha1 API group. ### Resource Types - [BIOSSettings](#biossettings) diff --git a/go.mod b/go.mod index 4c04a7c41..f910310ae 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/ironcore-dev/metal-operator -go 1.25.6 +go 1.25.7 require ( github.com/go-logr/logr v1.4.3 diff --git a/internal/controller/bmcsettingsset_controller_test.go b/internal/controller/bmcsettingsset_controller_test.go index f093fed96..b8f24974e 100644 --- a/internal/controller/bmcsettingsset_controller_test.go +++ b/internal/controller/bmcsettingsset_controller_test.go @@ -804,6 +804,5 @@ var _ = Describe("BMCSettingsSet Controller", func() { HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))), ) }) - }) }) diff --git a/internal/webhook/v1alpha1/endpoint_webhook.go b/internal/webhook/v1alpha1/endpoint_webhook.go index 6792c26b3..d2879f9c5 100644 --- a/internal/webhook/v1alpha1/endpoint_webhook.go +++ b/internal/webhook/v1alpha1/endpoint_webhook.go @@ -46,8 +46,7 @@ type EndpointCustomValidator struct { func (v *EndpointCustomValidator) ValidateCreate(ctx context.Context, obj *metalv1alpha1.Endpoint) (admission.Warnings, error) { endpointlog.Info("Validation for Endpoint upon creation", "name", obj.GetName()) - allErrs := field.ErrorList{} - allErrs = append(allErrs, ValidateMACAddressCreate(ctx, v.Client, obj.Spec, field.NewPath("spec"))...) + allErrs := ValidateMACAddressCreate(ctx, v.Client, obj.Spec, field.NewPath("spec")) if len(allErrs) != 0 { return nil, apierrors.NewInvalid( @@ -62,8 +61,7 @@ func (v *EndpointCustomValidator) ValidateCreate(ctx context.Context, obj *metal func (v *EndpointCustomValidator) ValidateUpdate(ctx context.Context, oldObj, newObj *metalv1alpha1.Endpoint) (admission.Warnings, error) { endpointlog.Info("Validation for Endpoint upon update", "name", newObj.GetName()) - allErrs := field.ErrorList{} - allErrs = append(allErrs, ValidateMACAddressUpdate(ctx, v.Client, newObj, field.NewPath("spec"))...) + allErrs := ValidateMACAddressUpdate(ctx, v.Client, newObj, field.NewPath("spec")) if len(allErrs) != 0 { return nil, apierrors.NewInvalid( diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index 9ef4077c8..fd57febf2 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -133,7 +133,7 @@ var _ = Describe("controller", Ordered, func() { It("should run successfully", func() { By("validating that the controller-manager pod is running as expected") verifyControllerUp := func(g Gomega) { - // Get the name of the controller-manager pod + By("getting the name of the controller-manager pod") cmd := exec.Command("kubectl", "get", "pods", "-l", "control-plane=controller-manager", "-o", "go-template={{ range .items }}"+ @@ -150,7 +150,7 @@ var _ = Describe("controller", Ordered, func() { controllerPodName = podNames[0] g.Expect(controllerPodName).To(ContainSubstring("controller-manager")) - // Validate the pod's status + By("validating the pod's status") cmd = exec.Command("kubectl", "get", "pods", controllerPodName, "-o", "jsonpath={.status.phase}", "-n", namespace, @@ -334,7 +334,7 @@ func serviceAccountToken() (string, error) { "kind": "TokenRequest" }` - // Temporary file to store the token request + By("creating temporary file to store the token request") secretName := fmt.Sprintf("%s-token-request", serviceAccountName) tokenRequestFile := filepath.Join("/tmp", secretName) err := os.WriteFile(tokenRequestFile, []byte(tokenRequestRawString), os.FileMode(0o644)) @@ -344,7 +344,7 @@ func serviceAccountToken() (string, error) { var out string verifyTokenCreation := func(g Gomega) { - // Execute kubectl command to create the token + By("executing kubectl command to create the token") cmd := exec.Command("kubectl", "create", "--raw", fmt.Sprintf( "/api/v1/namespaces/%s/serviceaccounts/%s/token", namespace, @@ -354,7 +354,7 @@ func serviceAccountToken() (string, error) { output, err := cmd.CombinedOutput() g.Expect(err).NotTo(HaveOccurred()) - // Parse the JSON output to extract the token + By("parsing the JSON output to extract the token") var token tokenRequest err = json.Unmarshal(output, &token) g.Expect(err).NotTo(HaveOccurred()) diff --git a/test/utils/utils.go b/test/utils/utils.go index 7241a4660..dc5834133 100644 --- a/test/utils/utils.go +++ b/test/utils/utils.go @@ -15,7 +15,7 @@ import ( ) const ( - certmanagerVersion = "v1.20.0" + certmanagerVersion = "v1.20.2" certmanagerURLTmpl = "https://github.com/cert-manager/cert-manager/releases/download/%s/cert-manager.yaml" prometheusOperatorVersion = "v0.77.1"