From 8fa4571b1d8dfd3bde3384e33068c09610e3f45f Mon Sep 17 00:00:00 2001 From: bruelea <166021996+bruelea@users.noreply.github.com> Date: Tue, 3 Sep 2024 20:09:17 +0200 Subject: [PATCH] move the warning for ignored manually defined restoration hash to claim controller --- Makefile | 1 - internal/controller/ipaddress_controller.go | 5 ----- internal/controller/ipaddressclaim_controller.go | 4 ++-- internal/controller/ipaddressclaim_helpers.go | 15 ++++++++++++--- internal/controller/prefix_controller.go | 5 ----- internal/controller/prefixclaim_controller.go | 4 ++-- internal/controller/prefixclaim_helpers.go | 15 ++++++++++++--- 7 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 5d7dda88..28284aa9 100644 --- a/Makefile +++ b/Makefile @@ -122,7 +122,6 @@ docker-build: ## Build docker image with the manager. $(CONTAINER_TOOL) build -t ${IMG} . .PHONY: docker-build-local -docker-build-local: SSH_AGENT_PUBLIC_KEY= docker-build-local: ## Build docker image with the manager. DOCKER_BUILDKIT=1 $(CONTAINER_TOOL) build -t ${LOCAL_IMG} -f Dockerfile . diff --git a/internal/controller/ipaddress_controller.go b/internal/controller/ipaddress_controller.go index 1a2b9603..1addfc5a 100644 --- a/internal/controller/ipaddress_controller.go +++ b/internal/controller/ipaddress_controller.go @@ -142,11 +142,6 @@ func (r *IpAddressReconciler) Reconcile(ctx context.Context, req ctrl.Request) ( } // 2. reserve or update ip address in netbox - _, ok := o.Spec.CustomFields[config.GetOperatorConfig().NetboxRestorationHashFieldName] - if ok { - logger.Info(fmt.Sprintf("Warning: restoration hash is calculated from spec, custom field with key %s will be ignored", config.GetOperatorConfig().NetboxRestorationHashFieldName)) - } - accessor := apismeta.NewAccessor() annotations, err := accessor.Annotations(o) if err != nil { diff --git a/internal/controller/ipaddressclaim_controller.go b/internal/controller/ipaddressclaim_controller.go index eabb2b05..b0d0d2a5 100644 --- a/internal/controller/ipaddressclaim_controller.go +++ b/internal/controller/ipaddressclaim_controller.go @@ -147,7 +147,7 @@ func (r *IpAddressClaimReconciler) Reconcile(ctx context.Context, req ctrl.Reque } // 6.a create the IPAddress object - ipAddressResource := generateIpAddressFromIpAddressClaim(o, ipAddressModel.IpAddress) + ipAddressResource := generateIpAddressFromIpAddressClaim(o, ipAddressModel.IpAddress, logger) err = controllerutil.SetControllerReference(o, ipAddressResource, r.Scheme) if err != nil { return ctrl.Result{}, err @@ -175,7 +175,7 @@ func (r *IpAddressClaimReconciler) Reconcile(ctx context.Context, req ctrl.Reque return ctrl.Result{}, err } - updatedIpAddressSpec := generateIpAddressSpec(o, ipAddress.Spec.IpAddress) + updatedIpAddressSpec := generateIpAddressSpec(o, ipAddress.Spec.IpAddress, logger) _, err = ctrl.CreateOrUpdate(ctx, r.Client, ipAddress, func() error { // only add the mutable fields here ipAddress.Spec.CustomFields = updatedIpAddressSpec.CustomFields diff --git a/internal/controller/ipaddressclaim_helpers.go b/internal/controller/ipaddressclaim_helpers.go index 97f15776..0552d9ac 100644 --- a/internal/controller/ipaddressclaim_helpers.go +++ b/internal/controller/ipaddressclaim_helpers.go @@ -20,29 +20,38 @@ import ( "crypto/sha1" "fmt" + "github.com/go-logr/logr" netboxv1 "github.com/netbox-community/netbox-operator/api/v1" "github.com/netbox-community/netbox-operator/pkg/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -func generateIpAddressFromIpAddressClaim(claim *netboxv1.IpAddressClaim, ip string) *netboxv1.IpAddress { +func generateIpAddressFromIpAddressClaim(claim *netboxv1.IpAddressClaim, ip string, logger logr.Logger) *netboxv1.IpAddress { ipAddressResource := &netboxv1.IpAddress{ ObjectMeta: metav1.ObjectMeta{ Name: claim.Name, Namespace: claim.ObjectMeta.Namespace, }, - Spec: generateIpAddressSpec(claim, ip), + Spec: generateIpAddressSpec(claim, ip, logger), } return ipAddressResource } -func generateIpAddressSpec(claim *netboxv1.IpAddressClaim, ip string) netboxv1.IpAddressSpec { +func generateIpAddressSpec(claim *netboxv1.IpAddressClaim, ip string, logger logr.Logger) netboxv1.IpAddressSpec { + // log a warning if the netboxOperatorRestorationHash name is a key in the customFields map of the IpAddressClaim + _, ok := claim.Spec.CustomFields[config.GetOperatorConfig().NetboxRestorationHashFieldName] + if ok { + logger.Info(fmt.Sprintf("Warning: restoration hash is calculated from spec, custom field with key %s will be ignored", config.GetOperatorConfig().NetboxRestorationHashFieldName)) + } + // Copy customFields from claim and add restoration hash customFields := make(map[string]string, len(claim.Spec.CustomFields)+1) for k, v := range claim.Spec.CustomFields { customFields[k] = v } + customFields[config.GetOperatorConfig().NetboxRestorationHashFieldName] = generateIpAddressRestorationHash(claim) + return netboxv1.IpAddressSpec{ IpAddress: ip, Tenant: claim.Spec.Tenant, diff --git a/internal/controller/prefix_controller.go b/internal/controller/prefix_controller.go index c73f330e..960cfa22 100644 --- a/internal/controller/prefix_controller.go +++ b/internal/controller/prefix_controller.go @@ -142,11 +142,6 @@ func (r *PrefixReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr } /* 2. reserve or update Prefix in netbox */ - _, ok := prefix.Spec.CustomFields[config.GetOperatorConfig().NetboxRestorationHashFieldName] - if ok { - logger.Info(fmt.Sprintf("Warning: restoration hash is calculated from spec, custom field with key %s will be ignored", config.GetOperatorConfig().NetboxRestorationHashFieldName)) - } - accessor := apismeta.NewAccessor() annotations, err := accessor.Annotations(prefix) if err != nil { diff --git a/internal/controller/prefixclaim_controller.go b/internal/controller/prefixclaim_controller.go index 0c18f0f4..5e1fb5e3 100644 --- a/internal/controller/prefixclaim_controller.go +++ b/internal/controller/prefixclaim_controller.go @@ -146,7 +146,7 @@ func (r *PrefixClaimReconciler) Reconcile(ctx context.Context, req ctrl.Request) } /* 6-1, create the Prefix object */ - prefixResource := generatePrefixFromPrefixClaim(prefixClaim, prefixModel.Prefix) + prefixResource := generatePrefixFromPrefixClaim(prefixClaim, prefixModel.Prefix, logger) err = controllerutil.SetControllerReference(prefixClaim, prefixResource, r.Scheme) if err != nil { return ctrl.Result{}, err @@ -169,7 +169,7 @@ func (r *PrefixClaimReconciler) Reconcile(ctx context.Context, req ctrl.Request) return ctrl.Result{}, err } - updatedPrefixSpec := generatePrefixSpec(prefixClaim, prefix.Spec.Prefix) + updatedPrefixSpec := generatePrefixSpec(prefixClaim, prefix.Spec.Prefix, logger) if _, err = ctrl.CreateOrUpdate(ctx, r.Client, prefix, func() error { // only add the mutable fields here prefix.Spec.Site = updatedPrefixSpec.Site diff --git a/internal/controller/prefixclaim_helpers.go b/internal/controller/prefixclaim_helpers.go index 2d87a7b2..63799c88 100644 --- a/internal/controller/prefixclaim_helpers.go +++ b/internal/controller/prefixclaim_helpers.go @@ -20,28 +20,37 @@ import ( "crypto/sha1" "fmt" + "github.com/go-logr/logr" netboxv1 "github.com/netbox-community/netbox-operator/api/v1" "github.com/netbox-community/netbox-operator/pkg/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -func generatePrefixFromPrefixClaim(claim *netboxv1.PrefixClaim, prefix string) *netboxv1.Prefix { +func generatePrefixFromPrefixClaim(claim *netboxv1.PrefixClaim, prefix string, logger logr.Logger) *netboxv1.Prefix { return &netboxv1.Prefix{ ObjectMeta: metav1.ObjectMeta{ Name: claim.Name, Namespace: claim.ObjectMeta.Namespace, }, - Spec: generatePrefixSpec(claim, prefix), + Spec: generatePrefixSpec(claim, prefix, logger), } } -func generatePrefixSpec(claim *netboxv1.PrefixClaim, prefix string) netboxv1.PrefixSpec { +func generatePrefixSpec(claim *netboxv1.PrefixClaim, prefix string, logger logr.Logger) netboxv1.PrefixSpec { + // log a warning if the netboxOperatorRestorationHash name is a key in the customFields map of the IpAddressClaim + _, ok := claim.Spec.CustomFields[config.GetOperatorConfig().NetboxRestorationHashFieldName] + if ok { + logger.Info(fmt.Sprintf("Warning: restoration hash is calculated from spec, custom field with key %s will be ignored", config.GetOperatorConfig().NetboxRestorationHashFieldName)) + } + // Copy customFields from claim and add restoration hash customFields := make(map[string]string, len(claim.Spec.CustomFields)+1) for k, v := range claim.Spec.CustomFields { customFields[k] = v } + customFields[config.GetOperatorConfig().NetboxRestorationHashFieldName] = generatePrefixRestorationHash(claim) + return netboxv1.PrefixSpec{ Prefix: prefix, Tenant: claim.Spec.Tenant,