mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-07-16 17:33:14 +00:00
Consolidate transformer config creation to factory.
This commit is contained in:
86
pkg/transformerconfig/factory.go
Normal file
86
pkg/transformerconfig/factory.go
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package transformerconfig
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/ghodss/yaml"
|
||||
"sigs.k8s.io/kustomize/pkg/ifc"
|
||||
"sigs.k8s.io/kustomize/pkg/transformerconfig/defaultconfig"
|
||||
)
|
||||
|
||||
// Factory makes instances of TransformerConfig.
|
||||
type Factory struct {
|
||||
loader ifc.Loader
|
||||
}
|
||||
|
||||
func NewFactory(l ifc.Loader) *Factory {
|
||||
return &Factory{loader: l}
|
||||
}
|
||||
|
||||
func (tf *Factory) Loader() ifc.Loader {
|
||||
if tf.loader.(ifc.Loader) == nil {
|
||||
log.Fatal("no loader")
|
||||
}
|
||||
return tf.loader
|
||||
}
|
||||
|
||||
// FromFiles returns a TranformerConfig object from a list of files
|
||||
func (tf *Factory) FromFiles(
|
||||
paths []string) (*TransformerConfig, error) {
|
||||
result := &TransformerConfig{}
|
||||
for _, path := range paths {
|
||||
data, err := tf.Loader().Load(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
t, err := makeTransformerConfigFromBytes(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = result.Merge(t)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// makeTransformerConfigFromBytes returns a TransformerConfig object from bytes
|
||||
func makeTransformerConfigFromBytes(data []byte) (*TransformerConfig, error) {
|
||||
var t TransformerConfig
|
||||
err := yaml.Unmarshal(data, &t)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
t.sortFields()
|
||||
return &t, nil
|
||||
}
|
||||
|
||||
// EmptyConfig returns an empty TransformerConfig object
|
||||
func (tf *Factory) EmptyConfig() *TransformerConfig {
|
||||
return &TransformerConfig{}
|
||||
}
|
||||
|
||||
// DefaultConfig returns a default TransformerConfig.
|
||||
// This should never fail, hence the Fatal panic.
|
||||
func (tf *Factory) DefaultConfig() *TransformerConfig {
|
||||
c, err := makeTransformerConfigFromBytes(
|
||||
defaultconfig.GetDefaultPathConfigs())
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to make default transformconfig: %v", err)
|
||||
}
|
||||
return c
|
||||
}
|
||||
64
pkg/transformerconfig/factory_test.go
Normal file
64
pkg/transformerconfig/factory_test.go
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package transformerconfig
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"sigs.k8s.io/kustomize/pkg/fs"
|
||||
"sigs.k8s.io/kustomize/pkg/gvk"
|
||||
"sigs.k8s.io/kustomize/pkg/ifc"
|
||||
"sigs.k8s.io/kustomize/pkg/loader"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMakeDefaultTransformerConfig(t *testing.T) {
|
||||
// Confirm default can be made without fatal error inside call.
|
||||
l, _, _ := makeFakeLoaderAndOutput()
|
||||
_ = NewFactory(l).DefaultConfig()
|
||||
}
|
||||
|
||||
func makeFakeLoaderAndOutput() (ifc.Loader, *TransformerConfig, *TransformerConfig) {
|
||||
transformerConfig := `
|
||||
namePrefix:
|
||||
- path: nameprefix/path
|
||||
kind: SomeKind
|
||||
`
|
||||
fakeFS := fs.MakeFakeFS()
|
||||
fakeFS.WriteFile("transformerconfig/test/config.yaml", []byte(transformerConfig))
|
||||
ldr := loader.NewFileLoader(fakeFS)
|
||||
expected := &TransformerConfig{
|
||||
NamePrefix: []PathConfig{
|
||||
{
|
||||
Gvk: gvk.Gvk{Kind: "SomeKind"},
|
||||
Path: "nameprefix/path",
|
||||
},
|
||||
},
|
||||
}
|
||||
return ldr, expected, NewFactory(ldr).DefaultConfig()
|
||||
}
|
||||
|
||||
func TestMakeTransformerConfigFromFiles(t *testing.T) {
|
||||
ldr, expected, _ := makeFakeLoaderAndOutput()
|
||||
tcfg, err := NewFactory(ldr).FromFiles([]string{"transformerconfig/test/config.yaml"})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(tcfg, expected) {
|
||||
t.Fatalf("expected %v\n but go6t %v\n", expected, tcfg)
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,7 @@ limitations under the License.
|
||||
package transformerconfig
|
||||
|
||||
import (
|
||||
"log"
|
||||
"sort"
|
||||
|
||||
"github.com/ghodss/yaml"
|
||||
"sigs.k8s.io/kustomize/pkg/ifc"
|
||||
"sigs.k8s.io/kustomize/pkg/transformerconfig/defaultconfig"
|
||||
)
|
||||
|
||||
type rpcSlice []ReferencePathConfig
|
||||
@@ -95,46 +90,3 @@ func (t *TransformerConfig) Merge(input *TransformerConfig) *TransformerConfig {
|
||||
merged.sortFields()
|
||||
return merged
|
||||
}
|
||||
|
||||
// MakeTransformerConfigFromFiles returns a TranformerConfig object from a list of files
|
||||
func MakeTransformerConfigFromFiles(ldr ifc.Loader, paths []string) (*TransformerConfig, error) {
|
||||
result := &TransformerConfig{}
|
||||
for _, path := range paths {
|
||||
data, err := ldr.Load(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
t, err := MakeTransformerConfigFromBytes(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = result.Merge(t)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// MakeTransformerConfigFromBytes returns a TransformerConfig object from bytes
|
||||
func MakeTransformerConfigFromBytes(data []byte) (*TransformerConfig, error) {
|
||||
var t TransformerConfig
|
||||
err := yaml.Unmarshal(data, &t)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
t.sortFields()
|
||||
return &t, nil
|
||||
}
|
||||
|
||||
// MakeEmptyTransformerConfig returns an empty TransformerConfig object
|
||||
func MakeEmptyTransformerConfig() *TransformerConfig {
|
||||
return &TransformerConfig{}
|
||||
}
|
||||
|
||||
// MakeDefaultTransformerConfig returns a default TransformerConfig.
|
||||
// This should never fail, hence the Fatal panic.
|
||||
func MakeDefaultTransformerConfig() *TransformerConfig {
|
||||
c, err := MakeTransformerConfigFromBytes(defaultconfig.GetDefaultPathConfigs())
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to make default transformconfig: %v", err)
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
@@ -17,17 +17,15 @@ limitations under the License.
|
||||
package transformerconfig
|
||||
|
||||
import (
|
||||
"sigs.k8s.io/kustomize/pkg/ifc"
|
||||
"testing"
|
||||
|
||||
"reflect"
|
||||
"sigs.k8s.io/kustomize/pkg/fs"
|
||||
|
||||
"sigs.k8s.io/kustomize/pkg/gvk"
|
||||
"sigs.k8s.io/kustomize/pkg/loader"
|
||||
)
|
||||
|
||||
func TestAddNameReferencePathConfigs(t *testing.T) {
|
||||
cfg := MakeEmptyTransformerConfig()
|
||||
cfg := &TransformerConfig{}
|
||||
|
||||
pathConfig := ReferencePathConfig{
|
||||
Gvk: gvk.Gvk{
|
||||
@@ -51,7 +49,7 @@ func TestAddNameReferencePathConfigs(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAddPathConfigs(t *testing.T) {
|
||||
cfg := MakeEmptyTransformerConfig()
|
||||
cfg := &TransformerConfig{}
|
||||
|
||||
pathConfig := PathConfig{
|
||||
Gvk: gvk.Gvk{Group: "GroupA", Kind: "KindB"},
|
||||
@@ -116,11 +114,11 @@ func TestMerge(t *testing.T) {
|
||||
CreateIfNotPresent: true,
|
||||
},
|
||||
}
|
||||
cfga := MakeEmptyTransformerConfig()
|
||||
cfga := &TransformerConfig{}
|
||||
cfga.AddNamereferencePathConfig(nameReference[0])
|
||||
cfga.AddPrefixPathConfig(pathConfigs[0])
|
||||
|
||||
cfgb := MakeEmptyTransformerConfig()
|
||||
cfgb := &TransformerConfig{}
|
||||
cfgb.AddNamereferencePathConfig(nameReference[1])
|
||||
cfgb.AddPrefixPathConfig(pathConfigs[1])
|
||||
|
||||
@@ -134,7 +132,7 @@ func TestMerge(t *testing.T) {
|
||||
t.Fatal("merge failed for namereference pathconfig")
|
||||
}
|
||||
|
||||
expected := MakeEmptyTransformerConfig()
|
||||
expected := &TransformerConfig{}
|
||||
expected.AddNamereferencePathConfig(nameReference[0])
|
||||
expected.AddNamereferencePathConfig(nameReference[1])
|
||||
expected.AddPrefixPathConfig(pathConfigs[0])
|
||||
@@ -144,39 +142,3 @@ func TestMerge(t *testing.T) {
|
||||
t.Fatalf("expected: %v\n but got: %v\n", expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMakeDefaultTransformerConfig(t *testing.T) {
|
||||
// Confirm default can be made without fatal error inside call.
|
||||
_ = MakeDefaultTransformerConfig()
|
||||
}
|
||||
|
||||
func makeFakeLoaderAndOutput() (ifc.Loader, *TransformerConfig, *TransformerConfig) {
|
||||
transformerConfig := `
|
||||
namePrefix:
|
||||
- path: nameprefix/path
|
||||
kind: SomeKind
|
||||
`
|
||||
fakeFS := fs.MakeFakeFS()
|
||||
fakeFS.WriteFile("transformerconfig/test/config.yaml", []byte(transformerConfig))
|
||||
ldr := loader.NewFileLoader(fakeFS)
|
||||
expected := &TransformerConfig{
|
||||
NamePrefix: []PathConfig{
|
||||
{
|
||||
Gvk: gvk.Gvk{Kind: "SomeKind"},
|
||||
Path: "nameprefix/path",
|
||||
},
|
||||
},
|
||||
}
|
||||
return ldr, expected, MakeDefaultTransformerConfig()
|
||||
}
|
||||
func TestMakeTransformerConfigFromFiles(t *testing.T) {
|
||||
ldr, expected, _ := makeFakeLoaderAndOutput()
|
||||
tcfg, err := MakeTransformerConfigFromFiles(ldr, []string{"transformerconfig/test/config.yaml"})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(tcfg, expected) {
|
||||
t.Fatalf("expected %v\n but go6t %v\n", expected, tcfg)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user