Skip to content

Commit 681e2bf

Browse files
authored
Merge pull request #449 from monopole/tcFactory
Consolidate TransformerConfig creation to factory.
2 parents bb9435a + 2283c06 commit 681e2bf

File tree

13 files changed

+206
-158
lines changed

13 files changed

+206
-158
lines changed

pkg/commands/build/build.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,17 @@ limitations under the License.
1717
package build
1818

1919
import (
20-
"errors"
2120
"io"
22-
"log"
23-
"sigs.k8s.io/kustomize/pkg/resmap"
2421
"strings"
2522

23+
"github.com/pkg/errors"
2624
"github.com/spf13/cobra"
2725
"sigs.k8s.io/kustomize/pkg/constants"
2826
"sigs.k8s.io/kustomize/pkg/fs"
2927
"sigs.k8s.io/kustomize/pkg/ifc"
3028
"sigs.k8s.io/kustomize/pkg/ifc/patch"
3129
"sigs.k8s.io/kustomize/pkg/loader"
30+
"sigs.k8s.io/kustomize/pkg/resmap"
3231
"sigs.k8s.io/kustomize/pkg/resource"
3332
"sigs.k8s.io/kustomize/pkg/target"
3433
"sigs.k8s.io/kustomize/pkg/transformerconfig"
@@ -131,13 +130,15 @@ func (o *buildOptions) RunBuild(
131130
if err != nil {
132131
return err
133132
}
133+
tc, err := makeTransformerconfig(fSys, o.transformerconfigPaths)
134+
if err != nil {
135+
return err
136+
}
134137
defer rootLoader.Cleanup()
135138
kt, err := target.NewKustTarget(
136139
rootLoader, fSys,
137140
resmap.NewFactory(resource.NewFactory(kf)),
138-
ptf,
139-
makeTransformerconfig(fSys, o.transformerconfigPaths),
140-
hash)
141+
ptf, tc, hash)
141142
if err != nil {
142143
return err
143144
}
@@ -159,17 +160,15 @@ func (o *buildOptions) RunBuild(
159160

160161
// makeTransformerConfig returns a complete TransformerConfig object from either files
161162
// or the default configs
162-
func makeTransformerconfig(fSys fs.FileSystem, paths []string) *transformerconfig.TransformerConfig {
163-
ldr, err := loader.NewLoader(".", "", fSys)
164-
if err != nil {
165-
log.Fatalf("error creating loader to load transformer configurations %v\n", err)
166-
}
163+
func makeTransformerconfig(
164+
fSys fs.FileSystem, paths []string) (*transformerconfig.TransformerConfig, error) {
167165
if paths == nil || len(paths) == 0 {
168-
return transformerconfig.MakeDefaultTransformerConfig()
166+
return transformerconfig.NewFactory(nil).DefaultConfig(), nil
169167
}
170-
t, err := transformerconfig.MakeTransformerConfigFromFiles(ldr, paths)
168+
ldr, err := loader.NewLoader(".", "", fSys)
171169
if err != nil {
172-
log.Fatalf("failed to load transformer configrations %v\n", err)
170+
return nil, errors.Wrap(
171+
err, "cannot create transformer configuration loader")
173172
}
174-
return t
173+
return transformerconfig.NewFactory(ldr).FromFiles(paths)
175174
}

pkg/crds/crds.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ import (
2424
"github.com/ghodss/yaml"
2525
"k8s.io/kube-openapi/pkg/common"
2626
"sigs.k8s.io/kustomize/pkg/gvk"
27-
"sigs.k8s.io/kustomize/pkg/ifc"
2827
"sigs.k8s.io/kustomize/pkg/transformerconfig"
2928
)
3029

3130
// RegisterCRDs parse CRD schemas from paths and update various pathConfigs
32-
func RegisterCRDs(loader ifc.Loader, paths []string) (*transformerconfig.TransformerConfig, error) {
33-
pathConfigs := transformerconfig.MakeEmptyTransformerConfig()
31+
func RegisterCRDs(
32+
tf *transformerconfig.Factory, paths []string) (*transformerconfig.TransformerConfig, error) {
33+
pathConfigs := tf.EmptyConfig()
3434
for _, path := range paths {
35-
pathConfig, err := registerCRD(loader, path)
35+
pathConfig, err := registerCRD(tf, path)
3636
if err != nil {
3737
return nil, err
3838
}
@@ -42,9 +42,9 @@ func RegisterCRDs(loader ifc.Loader, paths []string) (*transformerconfig.Transfo
4242
}
4343

4444
// register CRD from one path
45-
func registerCRD(loader ifc.Loader, path string) (*transformerconfig.TransformerConfig, error) {
46-
result := transformerconfig.MakeEmptyTransformerConfig()
47-
content, err := loader.Load(path)
45+
func registerCRD(tf *transformerconfig.Factory, path string) (*transformerconfig.TransformerConfig, error) {
46+
result := tf.EmptyConfig()
47+
content, err := tf.Loader().Load(path)
4848
if err != nil {
4949
return result, err
5050
}
@@ -61,7 +61,7 @@ func registerCRD(loader ifc.Loader, path string) (*transformerconfig.Transformer
6161

6262
crds := getCRDs(types)
6363
for crd, k := range crds {
64-
crdPathConfigs := transformerconfig.MakeEmptyTransformerConfig()
64+
crdPathConfigs := tf.EmptyConfig()
6565
err = getCRDPathConfig(
6666
types, crd, crd, k, []string{}, crdPathConfigs)
6767
if err != nil {

pkg/crds/crds_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ func TestRegisterCRD(t *testing.T) {
177177
NameReference: refpathconfigs,
178178
}
179179

180-
pathconfig, _ := registerCRD(makeLoader(t), "/testpath/crd.json")
180+
pathconfig, _ := RegisterCRDs(
181+
transformerconfig.NewFactory(makeLoader(t)), []string{"/testpath/crd.json"})
181182

182183
if !reflect.DeepEqual(pathconfig, expected) {
183184
t.Fatalf("expected\n %v\n but got\n %v\n", expected, pathconfig)

pkg/target/kusttarget.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ func (kt *KustTarget) loadCustomizedResMap() (resmap.ResMap, error) {
136136
if err != nil {
137137
errs.Append(errors.Wrap(err, "loadResMapFromBasesAndResources"))
138138
}
139-
crdPathConfigs, err := crds.RegisterCRDs(kt.ldr, kt.kustomization.Crds)
139+
crdPathConfigs, err := crds.RegisterCRDs(
140+
transformerconfig.NewFactory(kt.ldr), kt.kustomization.Crds)
140141
kt.tcfg = kt.tcfg.Merge(crdPathConfigs)
141142
if err != nil {
142143
errs.Append(errors.Wrap(err, "RegisterCRDs"))

pkg/target/kusttarget_test.go

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,19 @@ metadata:
9191
var rf = resmap.NewFactory(resource.NewFactory(
9292
k8sdeps.NewKunstructuredFactoryImpl()))
9393

94+
func makeKustTarget(t *testing.T, l ifc.Loader) *KustTarget {
95+
fakeFs := fs.MakeFakeFS()
96+
fakeFs.Mkdir("/")
97+
kt, err := NewKustTarget(
98+
l, fakeFs, rf, patch.NewPatchTransformerFactory(),
99+
transformerconfig.NewFactory(l).DefaultConfig(),
100+
k8sdeps.NewKustHash())
101+
if err != nil {
102+
t.Fatalf("Unexpected construction error %v", err)
103+
}
104+
return kt
105+
}
106+
94107
func makeLoader1(t *testing.T) ifc.Loader {
95108
ldr := loadertest.NewFakeLoader("/testpath")
96109
err := ldr.AddFile("/testpath/"+constants.KustomizationFileName, []byte(kustomizationContent1))
@@ -206,17 +219,8 @@ func TestResources1(t *testing.T) {
206219
},
207220
}),
208221
}
209-
l := makeLoader1(t)
210-
fakeFs := fs.MakeFakeFS()
211-
fakeFs.Mkdir("/")
212-
kt, err := NewKustTarget(
213-
l, fakeFs, rf, patch.NewPatchTransformerFactory(),
214-
transformerconfig.MakeDefaultTransformerConfig(),
215-
k8sdeps.NewKustHash())
216-
if err != nil {
217-
t.Fatalf("unexpected construction error %v", err)
218-
}
219-
actual, err := kt.MakeCustomizedResMap()
222+
actual, err := makeKustTarget(
223+
t, makeLoader1(t)).MakeCustomizedResMap()
220224
if err != nil {
221225
t.Fatalf("unexpected Resources error %v", err)
222226
}
@@ -233,16 +237,7 @@ func TestResourceNotFound(t *testing.T) {
233237
if err != nil {
234238
t.Fatalf("Failed to setup fake ldr.")
235239
}
236-
fakeFs := fs.MakeFakeFS()
237-
fakeFs.Mkdir("/")
238-
kt, err := NewKustTarget(
239-
l, fakeFs, rf, patch.NewPatchTransformerFactory(),
240-
transformerconfig.MakeDefaultTransformerConfig(),
241-
k8sdeps.NewKustHash())
242-
if err != nil {
243-
t.Fatalf("Unexpected construction error %v", err)
244-
}
245-
_, err = kt.MakeCustomizedResMap()
240+
_, err = makeKustTarget(t, l).MakeCustomizedResMap()
246241
if err == nil {
247242
t.Fatalf("Didn't get the expected error for an unknown resource")
248243
}
@@ -257,16 +252,7 @@ func TestSecretTimeout(t *testing.T) {
257252
if err != nil {
258253
t.Fatalf("Failed to setup fake ldr.")
259254
}
260-
fakeFs := fs.MakeFakeFS()
261-
fakeFs.Mkdir("/")
262-
kt, err := NewKustTarget(
263-
l, fakeFs, rf, patch.NewPatchTransformerFactory(),
264-
transformerconfig.MakeDefaultTransformerConfig(),
265-
k8sdeps.NewKustHash())
266-
if err != nil {
267-
t.Fatalf("Unexpected construction error %v", err)
268-
}
269-
_, err = kt.MakeCustomizedResMap()
255+
_, err = makeKustTarget(t, l).MakeCustomizedResMap()
270256
if err == nil {
271257
t.Fatalf("Didn't get the expected error for an unknown resource")
272258
}

pkg/transformerconfig/factory.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package transformerconfig
18+
19+
import (
20+
"log"
21+
22+
"github.com/ghodss/yaml"
23+
"sigs.k8s.io/kustomize/pkg/ifc"
24+
"sigs.k8s.io/kustomize/pkg/transformerconfig/defaultconfig"
25+
)
26+
27+
// Factory makes instances of TransformerConfig.
28+
type Factory struct {
29+
loader ifc.Loader
30+
}
31+
32+
func NewFactory(l ifc.Loader) *Factory {
33+
return &Factory{loader: l}
34+
}
35+
36+
func (tf *Factory) Loader() ifc.Loader {
37+
if tf.loader.(ifc.Loader) == nil {
38+
log.Fatal("no loader")
39+
}
40+
return tf.loader
41+
}
42+
43+
// FromFiles returns a TranformerConfig object from a list of files
44+
func (tf *Factory) FromFiles(
45+
paths []string) (*TransformerConfig, error) {
46+
result := &TransformerConfig{}
47+
for _, path := range paths {
48+
data, err := tf.Loader().Load(path)
49+
if err != nil {
50+
return nil, err
51+
}
52+
t, err := makeTransformerConfigFromBytes(data)
53+
if err != nil {
54+
return nil, err
55+
}
56+
result = result.Merge(t)
57+
}
58+
return result, nil
59+
}
60+
61+
// makeTransformerConfigFromBytes returns a TransformerConfig object from bytes
62+
func makeTransformerConfigFromBytes(data []byte) (*TransformerConfig, error) {
63+
var t TransformerConfig
64+
err := yaml.Unmarshal(data, &t)
65+
if err != nil {
66+
return nil, err
67+
}
68+
t.sortFields()
69+
return &t, nil
70+
}
71+
72+
// EmptyConfig returns an empty TransformerConfig object
73+
func (tf *Factory) EmptyConfig() *TransformerConfig {
74+
return &TransformerConfig{}
75+
}
76+
77+
// DefaultConfig returns a default TransformerConfig.
78+
// This should never fail, hence the Fatal panic.
79+
func (tf *Factory) DefaultConfig() *TransformerConfig {
80+
c, err := makeTransformerConfigFromBytes(
81+
defaultconfig.GetDefaultPathConfigs())
82+
if err != nil {
83+
log.Fatalf("Unable to make default transformconfig: %v", err)
84+
}
85+
return c
86+
}

pkg/transformerconfig/factory_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package transformerconfig
18+
19+
import (
20+
"reflect"
21+
"sigs.k8s.io/kustomize/pkg/fs"
22+
"sigs.k8s.io/kustomize/pkg/gvk"
23+
"sigs.k8s.io/kustomize/pkg/ifc"
24+
"sigs.k8s.io/kustomize/pkg/loader"
25+
"testing"
26+
)
27+
28+
func TestMakeDefaultTransformerConfig(t *testing.T) {
29+
// Confirm default can be made without fatal error inside call.
30+
l, _, _ := makeFakeLoaderAndOutput()
31+
_ = NewFactory(l).DefaultConfig()
32+
}
33+
34+
func makeFakeLoaderAndOutput() (ifc.Loader, *TransformerConfig, *TransformerConfig) {
35+
transformerConfig := `
36+
namePrefix:
37+
- path: nameprefix/path
38+
kind: SomeKind
39+
`
40+
fakeFS := fs.MakeFakeFS()
41+
fakeFS.WriteFile("transformerconfig/test/config.yaml", []byte(transformerConfig))
42+
ldr := loader.NewFileLoader(fakeFS)
43+
expected := &TransformerConfig{
44+
NamePrefix: []PathConfig{
45+
{
46+
Gvk: gvk.Gvk{Kind: "SomeKind"},
47+
Path: "nameprefix/path",
48+
},
49+
},
50+
}
51+
return ldr, expected, NewFactory(ldr).DefaultConfig()
52+
}
53+
54+
func TestMakeTransformerConfigFromFiles(t *testing.T) {
55+
ldr, expected, _ := makeFakeLoaderAndOutput()
56+
tcfg, err := NewFactory(ldr).FromFiles([]string{"transformerconfig/test/config.yaml"})
57+
if err != nil {
58+
t.Fatalf("unexpected error %v", err)
59+
}
60+
61+
if !reflect.DeepEqual(tcfg, expected) {
62+
t.Fatalf("expected %v\n but go6t %v\n", expected, tcfg)
63+
}
64+
}

0 commit comments

Comments
 (0)