mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 10:15:22 +00:00
This PR - defines a patch conflict detector interface, - extracts implementations of the interface from the merginator code, making the merginator code independent of --enable_kyaml. - injects those implementations into kustomize as a function of --enable_kyaml. So, instead of using different merginators to combine resmaps, this pr allows the use of a single patch merge code path that uses different conflict detectors. So instead of debating how to merge, we're now only considering whether to warn on conflict detection in one transformer. This PR is in service of #3304, eliminating seven instances where --enable_kyaml was consulted. These were cases where conflict detection wasn't an issue (but merging patches was).
85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package loader_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"sigs.k8s.io/kustomize/api/filesys"
|
|
. "sigs.k8s.io/kustomize/api/internal/plugins/loader"
|
|
"sigs.k8s.io/kustomize/api/konfig"
|
|
"sigs.k8s.io/kustomize/api/loader"
|
|
"sigs.k8s.io/kustomize/api/provider"
|
|
"sigs.k8s.io/kustomize/api/resmap"
|
|
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
|
valtest_test "sigs.k8s.io/kustomize/api/testutils/valtest"
|
|
"sigs.k8s.io/kustomize/api/types"
|
|
)
|
|
|
|
const (
|
|
//nolint:gosec
|
|
secretGenerator = `
|
|
apiVersion: builtin
|
|
kind: SecretGenerator
|
|
metadata:
|
|
name: secretGenerator
|
|
name: mySecret
|
|
behavior: merge
|
|
envFiles:
|
|
- a.env
|
|
- b.env
|
|
valueFiles:
|
|
- longsecret.txt
|
|
literals:
|
|
- FRUIT=apple
|
|
- VEGETABLE=carrot
|
|
`
|
|
someServiceGenerator = `
|
|
apiVersion: someteam.example.com/v1
|
|
kind: SomeServiceGenerator
|
|
metadata:
|
|
name: myServiceGenerator
|
|
service: my-service
|
|
port: "12345"
|
|
`
|
|
)
|
|
|
|
func TestLoader(t *testing.T) {
|
|
th := kusttest_test.MakeEnhancedHarness(t).
|
|
BuildGoPlugin("builtin", "", "SecretGenerator").
|
|
BuildGoPlugin("someteam.example.com", "v1", "SomeServiceGenerator")
|
|
defer th.Reset()
|
|
p := provider.NewDefaultDepProvider()
|
|
rmF := resmap.NewFactory(
|
|
p.GetResourceFactory(), p.GetConflictDetectorFactory())
|
|
fLdr, err := loader.NewLoader(
|
|
loader.RestrictionRootOnly,
|
|
filesys.Separator, filesys.MakeFsInMemory())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
generatorConfigs, err := rmF.NewResMapFromBytes([]byte(
|
|
someServiceGenerator + "---\n" + secretGenerator))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, behavior := range []types.BuiltinPluginLoadingOptions{
|
|
/* types.BploUseStaticallyLinked,
|
|
types.BploLoadFromFileSys */} {
|
|
c, err := konfig.EnabledPluginConfig(behavior)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
pLdr := NewLoader(c, rmF)
|
|
if pLdr == nil {
|
|
t.Fatal("expect non-nil loader")
|
|
}
|
|
_, err = pLdr.LoadGenerators(
|
|
fLdr, valtest_test.MakeFakeValidator(), generatorConfigs)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|