diff --git a/internal/sync/syncer_related.go b/internal/sync/syncer_related.go index 49b8835..c177cb8 100644 --- a/internal/sync/syncer_related.go +++ b/internal/sync/syncer_related.go @@ -599,10 +599,10 @@ func templateLabelSelector(relatedOrigin, relatedDest syncSide, origin syncagent func remapSyncSides(relatedOrigin, relatedDest syncSide, origin syncagentv1alpha1.RelatedResourceOrigin) (localSide, remoteSide syncSide) { if origin == syncagentv1alpha1.RelatedResourceOriginKcp { - return relatedOrigin, relatedDest + return relatedDest, relatedOrigin } - return relatedDest, relatedOrigin + return relatedOrigin, relatedDest } func oppositeSide(origin syncagentv1alpha1.RelatedResourceOrigin) syncagentv1alpha1.RelatedResourceOrigin { diff --git a/test/e2e/sync/related_test.go b/test/e2e/sync/related_test.go index 27ded3c..764371f 100644 --- a/test/e2e/sync/related_test.go +++ b/test/e2e/sync/related_test.go @@ -404,6 +404,72 @@ func TestSyncRelatedObjects(t *testing.T) { ////////////////////////////////////////////////////////////////////////////////////////////// + { + name: "use cluster-related fields in label selector", + workspace: "sync-cluster-fields-selected-secret-up", + mainResource: crds.Crontab{ + ObjectMeta: metav1.ObjectMeta{ + Name: "my-crontab", + Namespace: "default", + }, + Spec: crds.CrontabSpec{ + CronSpec: "* * *", + Image: "ubuntu:latest", + }, + }, + relatedConfig: syncagentv1alpha1.RelatedResourceSpec{ + Identifier: "credentials", + Origin: syncagentv1alpha1.RelatedResourceOriginService, + Kind: "Secret", + Object: syncagentv1alpha1.RelatedResourceObject{ + RelatedResourceObjectSpec: syncagentv1alpha1.RelatedResourceObjectSpec{ + Selector: &syncagentv1alpha1.RelatedResourceObjectSelector{ + LabelSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{ + "find": "foo-{{ .ClusterName | len }}", + }, + }, + Rewrite: syncagentv1alpha1.RelatedResourceSelectorRewrite{ + Template: &syncagentv1alpha1.TemplateExpression{ + // same fixed name on both sides + Template: "my-credentials", + }, + }, + }, + }, + }, + }, + sourceRelatedObject: corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "unknown-name", + Namespace: "synced-default", + Labels: map[string]string{ + "find": "foo-16", + }, + }, + Data: map[string][]byte{ + "password": []byte("hunter2"), + }, + Type: corev1.SecretTypeOpaque, + }, + + expectedSyncedRelatedObject: corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "my-credentials", + Namespace: "default", + Labels: map[string]string{ + "find": "foo-16", + }, + }, + Data: map[string][]byte{ + "password": []byte("hunter2"), + }, + Type: corev1.SecretTypeOpaque, + }, + }, + + ////////////////////////////////////////////////////////////////////////////////////////////// + { name: "find Secret based on templated label selector", workspace: "sync-templated-selected-secret-up",