diff --git a/controllers/dynamicenv_controller.go b/controllers/dynamicenv_controller.go index d0ea082..fd809bd 100644 --- a/controllers/dynamicenv_controller.go +++ b/controllers/dynamicenv_controller.go @@ -145,7 +145,7 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) subsetsAndConsumers := mergeSubsetsAndConsumers(dynamicEnv.Spec.Subsets, dynamicEnv.Spec.Consumers) - if err := r.cleanupRemovedSubsetsOrConsumers(ctx, subsetsAndConsumers, uniqueVersion, dynamicEnv); err != nil { + if err := r.cleanupRemovedSubsetsOrConsumers(ctx, subsetsAndConsumers, dynamicEnv); err != nil { rls.cleanupError = err } @@ -157,14 +157,15 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) defaultVersionForSubset = s.DefaultVersion } + subsetName := mkSubsetName(s) baseDeployment := &appsv1.Deployment{} err := r.Get(ctx, types.NamespacedName{Name: s.Name, Namespace: s.Namespace}, baseDeployment) if err != nil { log.Error(err, "couldn't find the deployment we need to override", "deployment-name", s.Name, "namespace", s.Namespace) msg := fmt.Sprintf("couldn't find the deployment we need to override (name: %s, ns: %s)", s.Name, s.Namespace) rls.returnError = fmt.Errorf("%s: %w", msg, err) - rls.addDeploymentMessage(uniqueName, st.Type, "%s, %v", msg, err) - rls.nonReadyCS[uniqueName] = true + rls.addDeploymentMessage(subsetName, st.Type, "%s, %v", msg, err) + rls.nonReadyCS[subsetName] = true break } @@ -172,6 +173,7 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) Client: r.Client, UniqueName: uniqueName, UniqueVersion: uniqueVersion, + SubsetName: subsetName, Owner: owner, BaseDeployment: baseDeployment, DeploymentType: st.Type, @@ -186,7 +188,7 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) deploymentHandlers = append(deploymentHandlers, &deploymentHandler) if err := deploymentHandler.Handle(); err != nil { rls.returnError = err - rls.addDeploymentMessage(uniqueName, st.Type, err.Error()) + rls.addDeploymentMessage(subsetName, st.Type, err.Error()) break } @@ -195,7 +197,7 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) if err != nil { msg := fmt.Sprintf("locating service hostname for deployment '%s'", baseDeployment.Name) rls.returnError = fmt.Errorf("%s: %w", msg, err) - rls.subsetMessages[uniqueName] = rls.subsetMessages[uniqueName].AppendGlobalMsg("%s: %v", msg, err) + rls.subsetMessages[subsetName] = rls.subsetMessages[subsetName].AppendGlobalMsg("%s: %v", msg, err) break } @@ -204,6 +206,7 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) UniqueName: uniqueName, UniqueVersion: uniqueVersion, Namespace: s.Namespace, + SubsetName: subsetName, VersionLabel: r.VersionLabel, DefaultVersion: defaultVersionForSubset, StatusHandler: &statusHandler, @@ -215,7 +218,7 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) mrHandlers = append(mrHandlers, &destinationRuleHandler) if err := destinationRuleHandler.Handle(); err != nil { rls.returnError = err - rls.subsetMessages[uniqueName] = rls.subsetMessages[uniqueName].AppendDestinationRuleMsg(err.Error()) + rls.subsetMessages[subsetName] = rls.subsetMessages[subsetName].AppendDestinationRuleMsg(err.Error()) break } @@ -225,6 +228,7 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) UniqueVersion: uniqueVersion, RoutePrefix: helpers.CalculateVirtualServicePrefix(uniqueVersion, s.Name), Namespace: s.Namespace, + SubsetName: subsetName, ServiceHosts: serviceHosts, DefaultVersion: defaultVersionForSubset, DynamicEnv: dynamicEnv, @@ -241,15 +245,15 @@ func (r *DynamicEnvReconciler) Reconcile(ctx context.Context, req ctrl.Request) log.Error(err, "error updating virtual service for subset", "subset", s.Name) msg := fmt.Sprintf("error updating virtual service for subset (%s)", uniqueName) rls.returnError = fmt.Errorf("%s: %w", msg, err) - rls.subsetMessages[uniqueName] = rls.subsetMessages[uniqueName].AppendVirtualServiceMsg("%s: %s", msg, err) + rls.subsetMessages[subsetName] = rls.subsetMessages[subsetName].AppendVirtualServiceMsg("%s: %s", msg, err) } } commonHostExists := helpers.CommonValueExists(destinationRuleHandler.GetHosts(), virtualServiceHandler.GetHosts()) if !commonHostExists { degradedExists = true - rls.nonReadyCS[uniqueName] = true - rls.subsetMessages[uniqueName] = rls.subsetMessages[uniqueName].AppendGlobalMsg("Couldn't find common active service hostname across DestinationRules and VirtualServices") + rls.nonReadyCS[subsetName] = true + rls.subsetMessages[subsetName] = rls.subsetMessages[subsetName].AppendGlobalMsg("Couldn't find common active service hostname across DestinationRules and VirtualServices") } } } @@ -522,11 +526,11 @@ func (r *DynamicEnvReconciler) SetupWithManager(mgr ctrl.Manager) error { } // Cleanup subsets and consumers that are removed from the dynamic environment CRD. -func (r *DynamicEnvReconciler) cleanupRemovedSubsetsOrConsumers(ctx context.Context, subsetsAndConsumers []SubsetType, version string, de *riskifiedv1alpha1.DynamicEnv) error { +func (r *DynamicEnvReconciler) cleanupRemovedSubsetsOrConsumers(ctx context.Context, subsetsAndConsumers []SubsetType, de *riskifiedv1alpha1.DynamicEnv) error { var allSC = make(map[string]riskifiedv1alpha1.SubsetOrConsumer) for _, st := range subsetsAndConsumers { - uniqueName := mkSubsetUniqueName(st.Subset.Name, version) - allSC[uniqueName] = st.Type + subsetName := mkSubsetName(st.Subset) + allSC[subsetName] = st.Type } deletedSC := findDeletedSC(de, allSC) for name, typ := range deletedSC { @@ -703,3 +707,7 @@ func markedForDeletion(de *riskifiedv1alpha1.DynamicEnv) bool { func mkSubsetUniqueName(name, version string) string { return name + "-" + version } + +func mkSubsetName(subset riskifiedv1alpha1.Subset) string { + return fmt.Sprintf("%s/%s", subset.Namespace, subset.Name) +} diff --git a/e2e-testing/kuttl/add-remove-subsets/00-assert.yaml b/e2e-testing/kuttl/add-remove-subsets/00-assert.yaml index e40bece..a1608d3 100644 --- a/e2e-testing/kuttl/add-remove-subsets/00-assert.yaml +++ b/e2e-testing/kuttl/add-remove-subsets/00-assert.yaml @@ -7,7 +7,7 @@ metadata: status: state: ready subsetsStatus: - details-default-dynamicenv-add-remove-subsets: + add-remove-subsets/details: deployment: name: details-default-dynamicenv-add-remove-subsets namespace: add-remove-subsets diff --git a/e2e-testing/kuttl/add-remove-subsets/01-assert.yaml b/e2e-testing/kuttl/add-remove-subsets/01-assert.yaml index 0f7cd3b..7f51a5c 100644 --- a/e2e-testing/kuttl/add-remove-subsets/01-assert.yaml +++ b/e2e-testing/kuttl/add-remove-subsets/01-assert.yaml @@ -6,13 +6,13 @@ metadata: namespace: default status: consumersStatus: - details-worker-default-dynamicenv-add-remove-subsets: + add-remove-subsets/details-worker: name: details-worker-default-dynamicenv-add-remove-subsets namespace: add-remove-subsets status: running state: ready subsetsStatus: - details-default-dynamicenv-add-remove-subsets: + add-remove-subsets/details: deployment: name: details-default-dynamicenv-add-remove-subsets namespace: add-remove-subsets @@ -25,7 +25,7 @@ status: - name: details namespace: add-remove-subsets status: running - reviews-default-dynamicenv-add-remove-subsets: + add-remove-subsets/reviews: deployment: name: reviews-default-dynamicenv-add-remove-subsets namespace: add-remove-subsets diff --git a/e2e-testing/kuttl/add-remove-subsets/02-assert.yaml b/e2e-testing/kuttl/add-remove-subsets/02-assert.yaml index 7f38ba7..0babad0 100644 --- a/e2e-testing/kuttl/add-remove-subsets/02-assert.yaml +++ b/e2e-testing/kuttl/add-remove-subsets/02-assert.yaml @@ -7,7 +7,7 @@ metadata: status: state: ready subsetsStatus: - reviews-default-dynamicenv-add-remove-subsets: + add-remove-subsets/reviews: deployment: name: reviews-default-dynamicenv-add-remove-subsets namespace: add-remove-subsets diff --git a/e2e-testing/kuttl/consumers-with-and-without-errors/00-assert.yaml b/e2e-testing/kuttl/consumers-with-and-without-errors/00-assert.yaml index 4038fc4..bea9524 100644 --- a/e2e-testing/kuttl/consumers-with-and-without-errors/00-assert.yaml +++ b/e2e-testing/kuttl/consumers-with-and-without-errors/00-assert.yaml @@ -8,12 +8,12 @@ status: totalCount: 3 totalReady: 2 consumersStatus: - details-worker-default-dynamicenv-consumers-with-and-without-er: + consumers-with-and-without-errors/details-worker: name: details-worker-default-dynamicenv-consumers-with-and-without-er namespace: consumers-with-and-without-errors status: running hash: -7893432429265961114 - details-worker-invalid-default-dynamicenv-consumers-with-and-without-er: + consumers-with-and-without-errors/details-worker-invalid: errors: - error: 'couldn''t find the deployment we need to override (name: details-worker-invalid, ns: consumers-with-and-without-errors), Deployment.apps "details-worker-invalid" diff --git a/e2e-testing/kuttl/delegate-virtual-service/00-assert.yaml b/e2e-testing/kuttl/delegate-virtual-service/00-assert.yaml index 4cf9370..0c67ef4 100644 --- a/e2e-testing/kuttl/delegate-virtual-service/00-assert.yaml +++ b/e2e-testing/kuttl/delegate-virtual-service/00-assert.yaml @@ -124,7 +124,7 @@ metadata: namespace: default status: subsetsStatus: - test-app-default-dynamicenv-delegate-virtual-service: + delegate-virtual-service/test-app: subsetErrors: virtualServices: - error: 'Wierd, Couldn''t find a service with name: does-not-exist-delegate, diff --git a/e2e-testing/kuttl/global-virtual-service-errors/00-assert.yaml b/e2e-testing/kuttl/global-virtual-service-errors/00-assert.yaml index 70faa61..b0279f0 100644 --- a/e2e-testing/kuttl/global-virtual-service-errors/00-assert.yaml +++ b/e2e-testing/kuttl/global-virtual-service-errors/00-assert.yaml @@ -9,9 +9,9 @@ status: totalCount: 1 totalReady: 0 subsetsStatus: - details-default-dynamicenv-global-virtual-service-errors: + global-virtual-service-errors/details: subsetErrors: virtualServices: - error: 'error updating virtual service for subset (details-default-dynamicenv-global-virtual-service-errors): - could not find even one virtual service that handles subset "details-default-dynamicenv-global-virtual-service-errors"' + could not find even one virtual service that handles subset "global-virtual-service-errors/details"' ... \ No newline at end of file diff --git a/e2e-testing/kuttl/multiple-services-scenarios-no-vs/00-assert.yaml b/e2e-testing/kuttl/multiple-services-scenarios-no-vs/00-assert.yaml index 00c4a66..1c5d32b 100644 --- a/e2e-testing/kuttl/multiple-services-scenarios-no-vs/00-assert.yaml +++ b/e2e-testing/kuttl/multiple-services-scenarios-no-vs/00-assert.yaml @@ -7,7 +7,7 @@ metadata: status: state: degraded subsetsStatus: - details-default-dynamicenv-multiple-services-scenarios-n: + multiple-services-scenarios-no-vs/details: deployment: name: details-default-dynamicenv-multiple-services-scenarios-n namespace: multiple-services-scenarios-no-vs @@ -22,7 +22,7 @@ status: subsetErrors: virtualServices: - error: 'error updating virtual service for subset (details-default-dynamicenv-multiple-services-scenarios-n): - could not find even one virtual service that handles subset "details-default-dynamicenv-multiple-services-scenarios-n"' + could not find even one virtual service that handles subset "multiple-services-scenarios-no-vs/details"' totalCount: 1 totalReady: 0 ... \ No newline at end of file diff --git a/e2e-testing/kuttl/multiple-services-scenarios-no-working-single-host/00-assert.yaml b/e2e-testing/kuttl/multiple-services-scenarios-no-working-single-host/00-assert.yaml index 222f3d5..f15dca4 100644 --- a/e2e-testing/kuttl/multiple-services-scenarios-no-working-single-host/00-assert.yaml +++ b/e2e-testing/kuttl/multiple-services-scenarios-no-working-single-host/00-assert.yaml @@ -21,7 +21,7 @@ spec: status: state: degraded subsetsStatus: - details-default-dynamicenv-multiple-services-scenarios-n: + multiple-services-scenarios-no-working-single-host/details: deployment: name: details-default-dynamicenv-multiple-services-scenarios-n namespace: multiple-services-scenarios-no-working-single-host diff --git a/e2e-testing/kuttl/multiple-services-scenarios/00-assert.yaml b/e2e-testing/kuttl/multiple-services-scenarios/00-assert.yaml index ce5fa84..b040d21 100644 --- a/e2e-testing/kuttl/multiple-services-scenarios/00-assert.yaml +++ b/e2e-testing/kuttl/multiple-services-scenarios/00-assert.yaml @@ -7,7 +7,7 @@ metadata: status: state: ready subsetsStatus: - details-default-dynamicenv-multiple-services-per-deploym: + multiple-services-per-deployment/details: deployment: name: details-default-dynamicenv-multiple-services-per-deploym namespace: multiple-services-per-deployment diff --git a/e2e-testing/kuttl/multiple-services-scenarios/02-assert.yaml b/e2e-testing/kuttl/multiple-services-scenarios/02-assert.yaml index f3d0531..211934a 100644 --- a/e2e-testing/kuttl/multiple-services-scenarios/02-assert.yaml +++ b/e2e-testing/kuttl/multiple-services-scenarios/02-assert.yaml @@ -7,7 +7,7 @@ metadata: status: state: ready subsetsStatus: - details-default-dynamicenv-multiple-services-per-deploym: + multiple-services-per-deployment/details: deployment: name: details-default-dynamicenv-multiple-services-per-deploym namespace: multiple-services-per-deployment diff --git a/e2e-testing/kuttl/multiple-services-scenarios/04-assert.yaml b/e2e-testing/kuttl/multiple-services-scenarios/04-assert.yaml index 64008e8..e60ff7d 100644 --- a/e2e-testing/kuttl/multiple-services-scenarios/04-assert.yaml +++ b/e2e-testing/kuttl/multiple-services-scenarios/04-assert.yaml @@ -7,7 +7,7 @@ metadata: status: state: degraded subsetsStatus: - details-default-dynamicenv-multiple-services-per-deploym: + multiple-services-per-deployment/details: deployment: name: details-default-dynamicenv-multiple-services-per-deploym namespace: multiple-services-per-deployment diff --git a/e2e-testing/kuttl/multiple-services-scenarios/05-assert.yaml b/e2e-testing/kuttl/multiple-services-scenarios/05-assert.yaml index d6f8d60..758939e 100644 --- a/e2e-testing/kuttl/multiple-services-scenarios/05-assert.yaml +++ b/e2e-testing/kuttl/multiple-services-scenarios/05-assert.yaml @@ -7,7 +7,7 @@ metadata: status: state: ready subsetsStatus: - details-default-dynamicenv-multiple-services-per-deploym: + multiple-services-per-deployment/details: deployment: name: details-default-dynamicenv-multiple-services-per-deploym namespace: multiple-services-per-deployment diff --git a/e2e-testing/kuttl/reconcile-flow/00-assert.yaml b/e2e-testing/kuttl/reconcile-flow/00-assert.yaml index a778494..b8f1da1 100644 --- a/e2e-testing/kuttl/reconcile-flow/00-assert.yaml +++ b/e2e-testing/kuttl/reconcile-flow/00-assert.yaml @@ -8,7 +8,7 @@ status: totalCount: 1 totalReady: 0 subsetsStatus: - details-default-dynamicenv-reconcile-flow: + reconcile-flow/details: subsetErrors: deployment: - error: 'couldn''t find the deployment we need to override (name: details, diff --git a/e2e-testing/kuttl/response-headers/00-assert.yaml b/e2e-testing/kuttl/response-headers/00-assert.yaml index 38c05d2..1cec71a 100644 --- a/e2e-testing/kuttl/response-headers/00-assert.yaml +++ b/e2e-testing/kuttl/response-headers/00-assert.yaml @@ -126,7 +126,7 @@ metadata: namespace: default status: subsetsStatus: - test-app-default-dynamicenv-response-headers: + response-headers/test-app: virtualServices: - name: test-app-vs namespace: response-headers-2 diff --git a/e2e-testing/kuttl/status-updates/00-assert.yaml b/e2e-testing/kuttl/status-updates/00-assert.yaml index 2d748e5..1b4a000 100644 --- a/e2e-testing/kuttl/status-updates/00-assert.yaml +++ b/e2e-testing/kuttl/status-updates/00-assert.yaml @@ -8,7 +8,7 @@ status: totalCount: 1 totalReady: 1 subsetsStatus: - details-default-dynamicenv-status-updates: + status-updates/details: deployment: name: details-default-dynamicenv-status-updates namespace: status-updates diff --git a/e2e-testing/kuttl/update-subset-resources/00-assert.yaml b/e2e-testing/kuttl/update-subset-resources/00-assert.yaml index c2d9dda..a9ebf59 100644 --- a/e2e-testing/kuttl/update-subset-resources/00-assert.yaml +++ b/e2e-testing/kuttl/update-subset-resources/00-assert.yaml @@ -27,5 +27,5 @@ metadata: name: dynamicenv-update-subset-resources status: subsetsStatus: - details-default-dynamicenv-update-subset-resources: + update-subset-resources/details: hash: -5576677875946656812 diff --git a/e2e-testing/kuttl/update-subset-resources/01-assert.yaml b/e2e-testing/kuttl/update-subset-resources/01-assert.yaml index 961c857..0d1811f 100644 --- a/e2e-testing/kuttl/update-subset-resources/01-assert.yaml +++ b/e2e-testing/kuttl/update-subset-resources/01-assert.yaml @@ -19,7 +19,7 @@ metadata: name: dynamicenv-update-subset-resources status: subsetsStatus: - details-default-dynamicenv-update-subset-resources: + update-subset-resources/details: hash: 3856039101763933687 deployment: name: details-default-dynamicenv-update-subset-resources diff --git a/e2e-testing/kuttl/valid-state/00-assert.yaml b/e2e-testing/kuttl/valid-state/00-assert.yaml index 5f942cf..f5d51cd 100644 --- a/e2e-testing/kuttl/valid-state/00-assert.yaml +++ b/e2e-testing/kuttl/valid-state/00-assert.yaml @@ -4,7 +4,7 @@ metadata: name: dynamicenv-valid-state status: subsetsStatus: - details-default-dynamicenv-valid-state: + valid-state/details: deployment: name: details-default-dynamicenv-valid-state namespace: valid-state diff --git a/e2e-testing/kuttl/vs-with-multiple-services/00-assert.yaml b/e2e-testing/kuttl/vs-with-multiple-services/00-assert.yaml index 3de0b4a..d421e3d 100644 --- a/e2e-testing/kuttl/vs-with-multiple-services/00-assert.yaml +++ b/e2e-testing/kuttl/vs-with-multiple-services/00-assert.yaml @@ -69,7 +69,7 @@ metadata: namespace: default status: subsetsStatus: - details-default-dynamicenv-vs-with-multiple-services: + vs-with-multiple-services/details: virtualServices: - name: all-services namespace: vs-with-multiple-services diff --git a/pkg/handlers/deployment_handler.go b/pkg/handlers/deployment_handler.go index 47bd141..0796cd7 100644 --- a/pkg/handlers/deployment_handler.go +++ b/pkg/handlers/deployment_handler.go @@ -43,6 +43,8 @@ type DeploymentHandler struct { UniqueName string // The unique version of the deployment we need to handle UniqueVersion string + // The name of the subset/consumer as it appears in the Status map + SubsetName string // THe owner of the deployment we need to handle (e.g. to configure watches) Owner types.NamespacedName // The deployment we should use as base @@ -89,7 +91,7 @@ func (h *DeploymentHandler) Handle() error { if err != nil { return fmt.Errorf("calculating hash for %q: %w", h.UniqueName, err) } - if err := h.StatusHandler.ApplyHash(h.UniqueName, hash, h.DeploymentType); err != nil { + if err := h.StatusHandler.ApplyHash(h.SubsetName, hash, h.DeploymentType); err != nil { return fmt.Errorf("setting subset hash on deployment creation %q: %w", h.UniqueName, err) } @@ -146,24 +148,21 @@ func (h *DeploymentHandler) GetStatus() (riskifiedv1alpha1.ResourceStatus, error } func (h *DeploymentHandler) ApplyStatus(rs riskifiedv1alpha1.ResourceStatus) error { - return h.StatusHandler.AddDeploymentStatusEntry(h.UniqueName, rs, h.DeploymentType) + return h.StatusHandler.AddDeploymentStatusEntry(h.SubsetName, rs, h.DeploymentType) } func (h *DeploymentHandler) GetSubset() string { - return h.UniqueName + return h.SubsetName } func (h *DeploymentHandler) UpdateIfRequired() error { h.Log.V(1).Info("Checking whether it's required to update subset", "subset namespace", h.Subset.Namespace, "subset name", h.Subset.Name) - // Trusting the webhook validator we assume the following: - // - Subset name/namespace can not be changed - // - Container and initContainer overrides must have the same names s := h.Subset var existingHash uint64 if h.DeploymentType == riskifiedv1alpha1.CONSUMER { - existingHash = h.StatusHandler.GetHashForConsumer(h.UniqueName) + existingHash = h.StatusHandler.GetHashForConsumer(h.SubsetName) } else { - existingHash = h.StatusHandler.GetHashForSubset(h.UniqueName) + existingHash = h.StatusHandler.GetHashForSubset(h.SubsetName) } hash, err := hashstructure.Hash(h.Subset, hashstructure.FormatV2, nil) if err != nil { @@ -183,7 +182,7 @@ func (h *DeploymentHandler) UpdateIfRequired() error { h.Log.Error(err, "Updating Subset", "subset full name", h.UniqueName) return fmt.Errorf("error updating subset %s: %w", h.UniqueName, err) } - if err := h.StatusHandler.ApplyHash(h.UniqueName, hash, h.DeploymentType); err != nil { + if err := h.StatusHandler.ApplyHash(h.SubsetName, hash, h.DeploymentType); err != nil { return fmt.Errorf("setting subset hash for '%s': %w", h.UniqueName, err) } } @@ -260,7 +259,7 @@ func (h *DeploymentHandler) setStatus(status riskifiedv1alpha1.LifeCycleStatus) Namespace: h.Subset.Namespace, Status: status, } - if err := h.StatusHandler.AddDeploymentStatusEntry(h.UniqueName, currentState, h.DeploymentType); err != nil { + if err := h.StatusHandler.AddDeploymentStatusEntry(h.SubsetName, currentState, h.DeploymentType); err != nil { return err } return nil diff --git a/pkg/handlers/deployment_handler_test.go b/pkg/handlers/deployment_handler_test.go index 42c008c..ae0b7eb 100644 --- a/pkg/handlers/deployment_handler_test.go +++ b/pkg/handlers/deployment_handler_test.go @@ -203,6 +203,7 @@ var _ = Describe("DeploymentHandler", func() { } mc := struct{ MockClient }{} handler := mkDeploymentHandler("details-default-dynamicenv-sample", de, mc) + handler.SubsetName = fmt.Sprintf("%s/%s", de.Spec.Subsets[0].Namespace, de.Spec.Subsets[0].Name) subset := de.Spec.Subsets[0].DeepCopy() handler.Subset = *subset errorResult := handler.UpdateIfRequired() diff --git a/pkg/handlers/destinationrule_handler.go b/pkg/handlers/destinationrule_handler.go index 0b29d90..3f548fa 100644 --- a/pkg/handlers/destinationrule_handler.go +++ b/pkg/handlers/destinationrule_handler.go @@ -42,6 +42,8 @@ type DestinationRuleHandler struct { UniqueVersion string // The namespace of the target DestinationRule Namespace string + // The name of the subset/consumer as it appears in the Status map + SubsetName string // The version label VersionLabel string // The version that gets the default route @@ -119,7 +121,7 @@ func (h *DestinationRuleHandler) GetStatus() (statuses []riskifiedv1alpha1.Resou func (h *DestinationRuleHandler) ApplyStatus(statuses []riskifiedv1alpha1.ResourceStatus) error { for _, rs := range statuses { - if err := h.StatusHandler.AddDestinationRuleStatusEntry(h.UniqueName, rs); err != nil { + if err := h.StatusHandler.AddDestinationRuleStatusEntry(h.SubsetName, rs); err != nil { return err } } @@ -127,7 +129,7 @@ func (h *DestinationRuleHandler) ApplyStatus(statuses []riskifiedv1alpha1.Resour } func (h *DestinationRuleHandler) GetSubset() string { - return h.UniqueName + return h.SubsetName } func (h *DestinationRuleHandler) GetHosts() []string { @@ -135,7 +137,7 @@ func (h *DestinationRuleHandler) GetHosts() []string { } func (h *DestinationRuleHandler) createMissingDestinationRule(destinationRuleName, serviceHost string) error { - if err := h.setStatus(h.UniqueName, destinationRuleName, riskifiedv1alpha1.Initializing); err != nil { + if err := h.setStatus(h.SubsetName, destinationRuleName, riskifiedv1alpha1.Initializing); err != nil { return fmt.Errorf("failed to update status (prior to launching destination rule: %s): %w", serviceHost, err) } if err := h.createOverridingDestinationRule(destinationRuleName, serviceHost); err != nil { diff --git a/pkg/handlers/fixtures/simple-dynamicenv.yaml b/pkg/handlers/fixtures/simple-dynamicenv.yaml index d79fcc7..948f8bf 100644 --- a/pkg/handlers/fixtures/simple-dynamicenv.yaml +++ b/pkg/handlers/fixtures/simple-dynamicenv.yaml @@ -18,5 +18,5 @@ spec: value: test status: subsetsStatus: - details-default-dynamicenv-sample: + services/details: hash: 1157382594159137535 diff --git a/pkg/handlers/virtualservice_handler.go b/pkg/handlers/virtualservice_handler.go index 9a3084e..3a5c0b0 100644 --- a/pkg/handlers/virtualservice_handler.go +++ b/pkg/handlers/virtualservice_handler.go @@ -36,9 +36,11 @@ import ( // A handler for managing VirtualService manipulations. type VirtualServiceHandler struct { client.Client - UniqueName string - UniqueVersion string - Namespace string + UniqueName string + UniqueVersion string + Namespace string + // The name of the subset/consumer as it appears in the Status map + SubsetName string RoutePrefix string ServiceHosts []string DefaultVersion string @@ -97,7 +99,7 @@ func (h *VirtualServiceHandler) GetStatus() ([]riskifiedv1alpha1.ResourceStatus, func (h *VirtualServiceHandler) ApplyStatus(statuses []riskifiedv1alpha1.ResourceStatus) error { for _, rs := range statuses { - if err := h.StatusHandler.AddVirtualServiceStatusEntry(h.UniqueName, rs); err != nil { + if err := h.StatusHandler.AddVirtualServiceStatusEntry(h.SubsetName, rs); err != nil { return err } } @@ -105,7 +107,7 @@ func (h *VirtualServiceHandler) ApplyStatus(statuses []riskifiedv1alpha1.Resourc } func (h *VirtualServiceHandler) GetSubset() string { - return h.UniqueName + return h.SubsetName } func (h *VirtualServiceHandler) GetHosts() []string { @@ -164,7 +166,7 @@ func (h *VirtualServiceHandler) extractServiceFromDelegate(delegate *istioapi.De } } msg := fmt.Sprintf("Wierd, Couldn't find a service with name: %s, namespace: %s, in the service list", delegate.Name, delegate.Namespace) - if err := h.StatusHandler.AddGlobalVirtualServiceError(h.UniqueName, msg); err != nil { + if err := h.StatusHandler.AddGlobalVirtualServiceError(h.SubsetName, msg); err != nil { h.Log.Error(err, "failed to write the following message to status: "+msg) } h.Log.Info(msg) @@ -174,7 +176,7 @@ func (h *VirtualServiceHandler) extractServiceFromDelegate(delegate *istioapi.De if errors.IsNotFound(err) { msg := fmt.Sprintf("Delegate (%s/%s) not found", delegate.Namespace, delegate.Name) h.Log.V(0).Info(msg) - if err = h.StatusHandler.AddGlobalVirtualServiceError(h.UniqueName, msg); err != nil { + if err = h.StatusHandler.AddGlobalVirtualServiceError(h.SubsetName, msg); err != nil { h.Log.Error(err, "Error writing virtual service status regarding delegate", "delegate", delegate) } return nil, nil @@ -198,7 +200,7 @@ func (h *VirtualServiceHandler) updateVirtualService(serviceHost string, service // Add this service to status newStatus := riskifiedv1alpha1.ResourceStatus{Name: service.Name, Namespace: service.Namespace} - if err := h.StatusHandler.AddVirtualServiceStatusEntry(h.UniqueName, newStatus); err != nil { + if err := h.StatusHandler.AddVirtualServiceStatusEntry(h.SubsetName, newStatus); err != nil { h.Log.Error(err, "error updating state for virtual service") return err }