mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-19 04:26:39 +00:00
Fix: patchOutputs bug for multiple outputs (#5101)
Signed-off-by: Somefive <yd219913@alibaba-inc.com> Signed-off-by: Somefive <yd219913@alibaba-inc.com>
This commit is contained in:
@@ -365,10 +365,9 @@ func (td *traitDef) Complete(ctx process.Context, abstractTemplate string, param
|
||||
for _, auxiliary := range auxiliaries {
|
||||
target := outputsPatcher.LookupPath(value.FieldPath(auxiliary.Name))
|
||||
if !target.Exists() {
|
||||
return errors.WithMessagef(err, "trait=%s, to=%s, invalid patch trait into auxiliary workload", td.name, auxiliary.Name)
|
||||
continue
|
||||
}
|
||||
patcher := outputsPatcher.LookupPath(value.FieldPath(auxiliary.Name))
|
||||
if err := auxiliary.Ins.Unify(patcher); err != nil {
|
||||
if err = auxiliary.Ins.Unify(target); err != nil {
|
||||
return errors.WithMessagef(err, "trait=%s, to=%s, invalid patch trait into auxiliary workload", td.name, auxiliary.Name)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1480,3 +1480,57 @@ if len(context.outputs.ingress.status.loadBalancer.ingress) == 0 {
|
||||
assert.Equal(t, ca.expMessage, gotMessage, message)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTraitPatchSingleOutput(t *testing.T) {
|
||||
baseTemplate := `
|
||||
output: {
|
||||
apiVersion: "apps/v1"
|
||||
kind: "Deployment"
|
||||
spec: selector: matchLabels: "app.oam.dev/component": context.name
|
||||
}
|
||||
|
||||
outputs: gameconfig: {
|
||||
apiVersion: "v1"
|
||||
kind: "ConfigMap"
|
||||
metadata: name: context.name + "game-config"
|
||||
data: {}
|
||||
}
|
||||
|
||||
outputs: sideconfig: {
|
||||
apiVersion: "v1"
|
||||
kind: "ConfigMap"
|
||||
metadata: name: context.name + "side-config"
|
||||
data: {}
|
||||
}
|
||||
|
||||
parameter: {}
|
||||
`
|
||||
traitTemplate := `
|
||||
patchOutputs: sideconfig: data: key: "val"
|
||||
parameter: {}
|
||||
`
|
||||
ctx := process.NewContext(process.ContextData{
|
||||
AppName: "myapp",
|
||||
CompName: "test",
|
||||
Namespace: "default",
|
||||
AppRevisionName: "myapp-v1",
|
||||
})
|
||||
wt := NewWorkloadAbstractEngine("-", &packages.PackageDiscover{})
|
||||
if err := wt.Complete(ctx, baseTemplate, map[string]interface{}{}); err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
td := NewTraitAbstractEngine("single-patch", &packages.PackageDiscover{})
|
||||
r := require.New(t)
|
||||
err := td.Complete(ctx, traitTemplate, map[string]string{})
|
||||
r.NoError(err)
|
||||
base, assists := ctx.Output()
|
||||
r.NotNil(base)
|
||||
r.Equal(2, len(assists))
|
||||
got, err := assists[1].Ins.Unstructured()
|
||||
r.NoError(err)
|
||||
val, ok, err := unstructured.NestedString(got.Object, "data", "key")
|
||||
r.NoError(err)
|
||||
r.True(ok)
|
||||
r.Equal("val", val)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user