Skip to content

Commit 5dccd84

Browse files
committed
make the current side available to templates to enable complex logic
On-behalf-of: @SAP christoph.mewes@sap.com
1 parent 2f57b56 commit 5dccd84

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

internal/sync/syncer_related.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -516,14 +516,14 @@ func applyTemplateBothSides(relatedOrigin, relatedDest syncSide, origin syncagen
516516
_, remoteSide := remapSyncSides(relatedOrigin, relatedDest, origin)
517517

518518
// evaluate the template for the origin object side
519-
ctx := templating.NewRelatedObjectContext(relatedOrigin.object, remoteSide.clusterName, remoteSide.workspacePath)
519+
ctx := templating.NewRelatedObjectContext(relatedOrigin.object, origin, remoteSide.clusterName, remoteSide.workspacePath)
520520
originValue, err = templating.Render(tpl.Template, ctx)
521521
if err != nil {
522522
return "", "", fmt.Errorf("failed to evaluate template on origin side: %w", err)
523523
}
524524

525525
// and once more on the other side
526-
ctx = templating.NewRelatedObjectContext(relatedDest.object, remoteSide.clusterName, remoteSide.workspacePath)
526+
ctx = templating.NewRelatedObjectContext(relatedDest.object, oppositeSide(origin), remoteSide.clusterName, remoteSide.workspacePath)
527527
destValue, err = templating.Render(tpl.Template, ctx)
528528
if err != nil {
529529
return "", "", fmt.Errorf("failed to evaluate template on destination side: %w", err)
@@ -574,3 +574,11 @@ func remapSyncSides(relatedOrigin, relatedDest syncSide, origin syncagentv1alpha
574574

575575
return relatedDest, relatedOrigin
576576
}
577+
578+
func oppositeSide(origin syncagentv1alpha1.RelatedResourceOrigin) syncagentv1alpha1.RelatedResourceOrigin {
579+
if origin == syncagentv1alpha1.RelatedResourceOriginKcp {
580+
return syncagentv1alpha1.RelatedResourceOriginService
581+
}
582+
583+
return syncagentv1alpha1.RelatedResourceOriginKcp
584+
}

internal/sync/templating/related.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,17 @@ package templating
1919
import (
2020
"github.com/kcp-dev/logicalcluster/v3"
2121

22+
syncagentv1alpha1 "github.com/kcp-dev/api-syncagent/sdk/apis/syncagent/v1alpha1"
23+
2224
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2325
)
2426

25-
// relatedObjectContext is the data available to Go templates when determining
26-
// the local object name (the `naming` section of a PublishedResource).
27+
// relatedObjectContext is the data available to Go templates when evaluating
28+
// the origin of a related object.
2729
type relatedObjectContext struct {
30+
// Side is set to either one of the possible origin values to indicate for
31+
// which cluster the template is currently being evaluated for.
32+
Side syncagentv1alpha1.RelatedResourceOrigin
2833
// Object is the primary object belonging to the related object. Since related
2934
// object templates are evaluated twice (once for the origin side and once
3035
// for the destination side), object is the primary object on the side the
@@ -39,8 +44,9 @@ type relatedObjectContext struct {
3944
ClusterPath logicalcluster.Path
4045
}
4146

42-
func NewRelatedObjectContext(object *unstructured.Unstructured, clusterName logicalcluster.Name, clusterPath logicalcluster.Path) relatedObjectContext {
47+
func NewRelatedObjectContext(object *unstructured.Unstructured, side syncagentv1alpha1.RelatedResourceOrigin, clusterName logicalcluster.Name, clusterPath logicalcluster.Path) relatedObjectContext {
4348
return relatedObjectContext{
49+
Side: side,
4450
Object: object.Object,
4551
ClusterName: clusterName,
4652
ClusterPath: clusterPath,

0 commit comments

Comments
 (0)