Skip to content

Commit ed88165

Browse files
committed
fix: Remove the @unwind index cache hack
1 parent 9099fe3 commit ed88165

2 files changed

Lines changed: 8 additions & 40 deletions

File tree

pkg/pipeline/default_engine.go

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"strings"
88

99
"github.com/go-logr/logr"
10-
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1110
toolscache "k8s.io/client-go/tools/cache"
1211

1312
"github.com/hsnlab/dcontroller/pkg/cache"
@@ -253,8 +252,9 @@ func (eng *defaultEngine) evalStage(e *expression.Expression, u unstruct) ([]uns
253252

254253
// @demux is one to many
255254
case "@unwind", "@demux":
256-
if _, err := Normalize(eng, u); err != nil {
257-
return nil, errors.New("@demux requires a valid .metadata.name")
255+
name, err := expression.GetJSONPathExp("$.metadata.name", u)
256+
if err != nil {
257+
return nil, errors.New("@valid .metadata.name required")
258258
}
259259

260260
arg, err := e.Arg.Evaluate(expression.EvalCtx{Object: u, Log: eng.log})
@@ -275,19 +275,6 @@ func (eng *defaultEngine) evalStage(e *expression.Expression, u unstruct) ([]uns
275275
return nil, errors.New("could not deepcopy object content")
276276
}
277277

278-
// update the index stack
279-
stack, ok, err := unstructured.NestedSlice(v, "metadata", demuxIndexStack)
280-
if err != nil {
281-
return nil, fmt.Errorf("@demux: cannot get index stack: %w", err)
282-
}
283-
if !ok {
284-
stack = []any{}
285-
}
286-
stack = append(stack, int64(i))
287-
if err := unstructured.SetNestedSlice(v, stack, "metadata", demuxIndexStack); err != nil {
288-
return nil, fmt.Errorf("@demux: cannot set index: %w", err)
289-
}
290-
291278
// the elem to the corresponding jsonpath
292279
jp, err := e.Arg.GetLiteralString()
293280
if err != nil {
@@ -299,6 +286,11 @@ func (eng *defaultEngine) evalStage(e *expression.Expression, u unstruct) ([]uns
299286
return nil, err
300287
}
301288

289+
// add index to name
290+
if err := expression.SetJSONPathExp("$.metadata.name", fmt.Sprintf("%s-%d", name, i), v); err != nil {
291+
return nil, fmt.Errorf("could add index to .metadata.name")
292+
}
293+
302294
v, err = expression.AsObject(v)
303295
if err != nil {
304296
return nil, err

pkg/pipeline/engine.go

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,14 @@ package pipeline
33
import (
44
"fmt"
55
"reflect"
6-
"strings"
76

87
"github.com/go-logr/logr"
98
"k8s.io/apimachinery/pkg/runtime/schema"
109

1110
"github.com/hsnlab/dcontroller/pkg/cache"
12-
"github.com/hsnlab/dcontroller/pkg/expression"
1311
"github.com/hsnlab/dcontroller/pkg/object"
1412
)
1513

16-
const demuxIndexStack = "__demux-index-stack"
17-
1814
type gvk = schema.GroupVersionKind
1915

2016
type Engine interface {
@@ -74,26 +70,6 @@ func Normalize(eng Engine, content unstruct) (object.Object, error) {
7470
}
7571
metaMap["name"] = nameStr
7672

77-
// demux/unwind may add the index at the end of the name: unpack the index stack and update
78-
// the name
79-
is, ok := metaMap[demuxIndexStack]
80-
if ok {
81-
stack, err := expression.AsIntList(is)
82-
if err != nil {
83-
return nil, NewInvalidObjectError(fmt.Sprintf("invalid demux index stack: %q", is))
84-
}
85-
strs := make([]string, len(stack))
86-
for i, x := range stack {
87-
strs[i] = fmt.Sprintf("%d", x)
88-
}
89-
nameStr += fmt.Sprintf("-%s", strings.Join(strs, "-"))
90-
metaMap["name"] = nameStr
91-
92-
// remove stack
93-
delete(metaMap, demuxIndexStack)
94-
content["metadata"] = metaMap
95-
}
96-
9773
object.SetContent(obj, content)
9874
// still needed
9975
obj.SetName(nameStr)

0 commit comments

Comments
 (0)