diff --git a/internal/k8sdeps/transformer/factory.go b/internal/k8sdeps/transformer/factory.go new file mode 100644 index 000000000..f80f6e5ab --- /dev/null +++ b/internal/k8sdeps/transformer/factory.go @@ -0,0 +1,43 @@ +/* +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 transformer provides transformer factory +package transformer + +import ( + "sigs.k8s.io/kustomize/internal/k8sdeps/transformer/hash" + "sigs.k8s.io/kustomize/internal/k8sdeps/transformer/patch" + "sigs.k8s.io/kustomize/pkg/resource" + "sigs.k8s.io/kustomize/pkg/transformers" +) + +// factoryImpl makes patch transformer and name hash transformer +type factoryImpl struct{} + +// NewFactoryImpl makes a new factoryImpl instance +func NewFactoryImpl() *factoryImpl { + return &factoryImpl{} +} + +// MakePatchTransformer makes a new patch transformer +func (p *factoryImpl) MakePatchTransformer(slice []*resource.Resource, rf *resource.Factory) (transformers.Transformer, error) { + return patch.NewPatchTransformer(slice, rf) +} + +// MakeHashTransformer makes a new name hash transformer +func (p *factoryImpl) MakeHashTransformer() transformers.Transformer { + return hash.NewNameHashTransformer() +} diff --git a/internal/k8sdeps/hash.go b/internal/k8sdeps/transformer/hash/hash.go similarity index 99% rename from internal/k8sdeps/hash.go rename to internal/k8sdeps/transformer/hash/hash.go index 7bf8606c5..17e24ff3e 100644 --- a/internal/k8sdeps/hash.go +++ b/internal/k8sdeps/transformer/hash/hash.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package k8sdeps +package hash import ( "crypto/sha256" diff --git a/internal/k8sdeps/hash_test.go b/internal/k8sdeps/transformer/hash/hash_test.go similarity index 96% rename from internal/k8sdeps/hash_test.go rename to internal/k8sdeps/transformer/hash/hash_test.go index e0bf1d261..2d336f35a 100644 --- a/internal/k8sdeps/hash_test.go +++ b/internal/k8sdeps/transformer/hash/hash_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package k8sdeps +package hash import ( "reflect" @@ -22,8 +22,14 @@ import ( "testing" "k8s.io/api/core/v1" + "sigs.k8s.io/kustomize/pkg/gvk" ) +var service = gvk.Gvk{Version: "v1", Kind: "Service"} +var secret = gvk.Gvk{Version: "v1", Kind: "Secret"} +var cmap = gvk.Gvk{Version: "v1", Kind: "ConfigMap"} +var deploy = gvk.Gvk{Group: "apps", Version: "v1", Kind: "Deployment"} + func TestConfigMapHash(t *testing.T) { cases := []struct { desc string diff --git a/pkg/transformers/namehash.go b/internal/k8sdeps/transformer/hash/namehash.go similarity index 82% rename from pkg/transformers/namehash.go rename to internal/k8sdeps/transformer/hash/namehash.go index 51f09208b..96d9ce3af 100644 --- a/pkg/transformers/namehash.go +++ b/internal/k8sdeps/transformer/hash/namehash.go @@ -14,27 +14,25 @@ See the License for the specific language governing permissions and limitations under the License. */ -package transformers +package hash import ( "fmt" - "sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/resmap" "sigs.k8s.io/kustomize/pkg/resource" + "sigs.k8s.io/kustomize/pkg/transformers" ) // nameHashTransformer contains the prefix and the path config for each field that // the name prefix will be applied. -type nameHashTransformer struct { - hash ifc.Hash -} +type nameHashTransformer struct{} -var _ Transformer = &nameHashTransformer{} +var _ transformers.Transformer = &nameHashTransformer{} // NewNameHashTransformer construct a nameHashTransformer. -func NewNameHashTransformer(h ifc.Hash) Transformer { - return &nameHashTransformer{hash: h} +func NewNameHashTransformer() transformers.Transformer { + return &nameHashTransformer{} } // Transform appends hash to configmaps and secrets. @@ -51,7 +49,7 @@ func (o *nameHashTransformer) Transform(m resmap.ResMap) error { } func (o *nameHashTransformer) appendHash(res *resource.Resource) error { - h, err := o.hash.Hash(res.Map()) + h, err := NewKustHash().Hash(res.Map()) if err != nil { return err } diff --git a/pkg/transformers/namehash_test.go b/internal/k8sdeps/transformer/hash/namehash_test.go similarity index 98% rename from pkg/transformers/namehash_test.go rename to internal/k8sdeps/transformer/hash/namehash_test.go index 2325a955d..9067af09b 100644 --- a/pkg/transformers/namehash_test.go +++ b/internal/k8sdeps/transformer/hash/namehash_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package transformers +package hash import ( "reflect" @@ -152,7 +152,7 @@ func TestNameHashTransformer(t *testing.T) { }).SetBehavior(ifc.BehaviorCreate), } - tran := NewNameHashTransformer(k8sdeps.NewKustHash()) + tran := NewNameHashTransformer() tran.Transform(objs) if !reflect.DeepEqual(objs, expected) { diff --git a/internal/k8sdeps/patch/patch.go b/internal/k8sdeps/transformer/patch/patch.go similarity index 90% rename from internal/k8sdeps/patch/patch.go rename to internal/k8sdeps/transformer/patch/patch.go index 8189de5cf..a57ea39f2 100644 --- a/internal/k8sdeps/patch/patch.go +++ b/internal/k8sdeps/transformer/patch/patch.go @@ -31,19 +31,6 @@ import ( "sigs.k8s.io/kustomize/pkg/transformers" ) -// patchTransformerFactory makes patch transformer -type patchTransformerFactory struct{} - -// NewPatchTransformerFactory makes a new patchTransformerFactory -func NewPatchTransformerFactory() *patchTransformerFactory { - return &patchTransformerFactory{} -} - -// MakePatchTransformer makes a new patch transformer -func (p *patchTransformerFactory) MakePatchTransformer(slice []*resource.Resource, rf *resource.Factory) (transformers.Transformer, error) { - return NewPatchTransformer(slice, rf) -} - // patchTransformer applies patches. type patchTransformer struct { patches []*resource.Resource diff --git a/internal/k8sdeps/patch/patch_test.go b/internal/k8sdeps/transformer/patch/patch_test.go similarity index 100% rename from internal/k8sdeps/patch/patch_test.go rename to internal/k8sdeps/transformer/patch/patch_test.go diff --git a/internal/k8sdeps/patch/patchconflictdetector.go b/internal/k8sdeps/transformer/patch/patchconflictdetector.go similarity index 100% rename from internal/k8sdeps/patch/patchconflictdetector.go rename to internal/k8sdeps/transformer/patch/patchconflictdetector.go diff --git a/kustomize.go b/kustomize.go index 8400e4d57..42c18d0aa 100644 --- a/kustomize.go +++ b/kustomize.go @@ -21,7 +21,7 @@ import ( "github.com/golang/glog" "sigs.k8s.io/kustomize/internal/k8sdeps" - "sigs.k8s.io/kustomize/internal/k8sdeps/patch" + "sigs.k8s.io/kustomize/internal/k8sdeps/transformer" "sigs.k8s.io/kustomize/pkg/commands" ) @@ -30,9 +30,8 @@ func main() { if err := commands.NewDefaultCommand( k8sdeps.NewKunstructuredFactoryImpl(), - patch.NewPatchTransformerFactory(), - k8sdeps.NewKustValidator(), - k8sdeps.NewKustHash()).Execute(); err != nil { + transformer.NewFactoryImpl(), + k8sdeps.NewKustValidator()).Execute(); err != nil { os.Exit(1) } os.Exit(0) diff --git a/pkg/commands/build/build.go b/pkg/commands/build/build.go index 9ebf42e07..c6f5fb6f7 100644 --- a/pkg/commands/build/build.go +++ b/pkg/commands/build/build.go @@ -25,7 +25,7 @@ import ( "sigs.k8s.io/kustomize/pkg/constants" "sigs.k8s.io/kustomize/pkg/fs" "sigs.k8s.io/kustomize/pkg/ifc" - "sigs.k8s.io/kustomize/pkg/ifc/patch" + "sigs.k8s.io/kustomize/pkg/ifc/transformer" "sigs.k8s.io/kustomize/pkg/loader" "sigs.k8s.io/kustomize/pkg/resmap" "sigs.k8s.io/kustomize/pkg/resource" @@ -63,8 +63,7 @@ Use different transformer configurations by passing files to kustomize func NewCmdBuild( out io.Writer, fs fs.FileSystem, kf ifc.KunstructuredFactory, - ptf patch.TransformerFactory, - hash ifc.Hash) *cobra.Command { + ptf transformer.Factory) *cobra.Command { var o buildOptions var p string @@ -78,7 +77,7 @@ func NewCmdBuild( if err != nil { return err } - return o.RunBuild(out, fs, kf, ptf, hash) + return o.RunBuild(out, fs, kf, ptf) }, } cmd.Flags().StringVarP( @@ -124,8 +123,7 @@ func (o *buildOptions) Validate(args []string, p string, fs fs.FileSystem) error func (o *buildOptions) RunBuild( out io.Writer, fSys fs.FileSystem, kf ifc.KunstructuredFactory, - ptf patch.TransformerFactory, - hash ifc.Hash) error { + ptf transformer.Factory) error { rootLoader, err := loader.NewLoader(o.kustomizationPath, "", fSys) if err != nil { return err @@ -138,7 +136,7 @@ func (o *buildOptions) RunBuild( kt, err := target.NewKustTarget( rootLoader, fSys, resmap.NewFactory(resource.NewFactory(kf)), - ptf, tc, hash) + ptf, tc) if err != nil { return err } diff --git a/pkg/commands/build/build_test.go b/pkg/commands/build/build_test.go index 66d808224..dac7fa8dd 100644 --- a/pkg/commands/build/build_test.go +++ b/pkg/commands/build/build_test.go @@ -27,7 +27,7 @@ import ( "github.com/ghodss/yaml" "sigs.k8s.io/kustomize/internal/k8sdeps" - "sigs.k8s.io/kustomize/internal/k8sdeps/patch" + "sigs.k8s.io/kustomize/internal/k8sdeps/transformer" "sigs.k8s.io/kustomize/pkg/commands/kustfile" "sigs.k8s.io/kustomize/pkg/constants" "sigs.k8s.io/kustomize/pkg/fs" @@ -132,8 +132,7 @@ func runBuildTestCase(t *testing.T, testcaseName string, updateKustomizeExpected err = ops.RunBuild( buf, fSys, k8sdeps.NewKunstructuredFactoryImpl(), - patch.NewPatchTransformerFactory(), - k8sdeps.NewKustHash()) + transformer.NewFactoryImpl()) switch { case err != nil && len(testcase.ExpectedError) == 0: t.Errorf("unexpected error: %v", err) diff --git a/pkg/commands/commands.go b/pkg/commands/commands.go index cd4f8c342..1fbee3732 100644 --- a/pkg/commands/commands.go +++ b/pkg/commands/commands.go @@ -27,13 +27,13 @@ import ( "sigs.k8s.io/kustomize/pkg/commands/misc" "sigs.k8s.io/kustomize/pkg/fs" "sigs.k8s.io/kustomize/pkg/ifc" - "sigs.k8s.io/kustomize/pkg/ifc/patch" + "sigs.k8s.io/kustomize/pkg/ifc/transformer" ) // NewDefaultCommand returns the default (aka root) command for kustomize command. func NewDefaultCommand( - kf ifc.KunstructuredFactory, ptf patch.TransformerFactory, - validator ifc.Validator, hash ifc.Hash) *cobra.Command { + kf ifc.KunstructuredFactory, ptf transformer.Factory, + validator ifc.Validator) *cobra.Command { fsys := fs.MakeRealFS() stdOut := os.Stdout @@ -49,7 +49,7 @@ See https://sigs.k8s.io/kustomize c.AddCommand( // TODO: Make consistent API for newCmd* functions. - build.NewCmdBuild(stdOut, fsys, kf, ptf, hash), + build.NewCmdBuild(stdOut, fsys, kf, ptf), edit.NewCmdEdit(fsys, validator, kf), misc.NewCmdConfig(fsys), misc.NewCmdVersion(stdOut), diff --git a/pkg/ifc/ifc.go b/pkg/ifc/ifc.go index 6ae77c2e2..c76aae397 100644 --- a/pkg/ifc/ifc.go +++ b/pkg/ifc/ifc.go @@ -42,11 +42,6 @@ type Loader interface { Cleanup() error } -// Hash interface provides function to compute hash of objects -type Hash interface { - Hash(m map[string]interface{}) (string, error) -} - // Kunstructured allows manipulation of k8s objects // that do not have Golang structs. type Kunstructured interface { diff --git a/pkg/ifc/patch/patch.go b/pkg/ifc/transformer/transformer.go similarity index 87% rename from pkg/ifc/patch/patch.go rename to pkg/ifc/transformer/transformer.go index c808bfc1f..0a74c2809 100644 --- a/pkg/ifc/patch/patch.go +++ b/pkg/ifc/transformer/transformer.go @@ -15,14 +15,15 @@ limitations under the License. */ // Package patch holds miscellaneous interfaces used by kustomize. -package patch +package transformer import ( "sigs.k8s.io/kustomize/pkg/resource" "sigs.k8s.io/kustomize/pkg/transformers" ) -// TransformerFactory makes patch transformer. -type TransformerFactory interface { +// Factory makes transformers +type Factory interface { MakePatchTransformer(slice []*resource.Resource, rf *resource.Factory) (transformers.Transformer, error) + MakeHashTransformer() transformers.Transformer } diff --git a/pkg/target/kusttarget.go b/pkg/target/kusttarget.go index 54ef56b68..20f9fa90a 100644 --- a/pkg/target/kusttarget.go +++ b/pkg/target/kusttarget.go @@ -29,7 +29,7 @@ import ( "github.com/pkg/errors" "sigs.k8s.io/kustomize/pkg/constants" "sigs.k8s.io/kustomize/pkg/fs" - "sigs.k8s.io/kustomize/pkg/ifc/patch" + "sigs.k8s.io/kustomize/pkg/ifc/transformer" interror "sigs.k8s.io/kustomize/pkg/internal/error" patchtransformer "sigs.k8s.io/kustomize/pkg/patch/transformer" "sigs.k8s.io/kustomize/pkg/resmap" @@ -42,21 +42,19 @@ import ( // KustTarget encapsulates the entirety of a kustomization build. type KustTarget struct { kustomization *types.Kustomization - hash ifc.Hash ldr ifc.Loader fSys fs.FileSystem rf *resmap.Factory tcfg *transformerconfig.TransformerConfig - ptf patch.TransformerFactory + ptf transformer.Factory } // NewKustTarget returns a new instance of KustTarget primed with a Loader. func NewKustTarget( ldr ifc.Loader, fSys fs.FileSystem, rf *resmap.Factory, - ptf patch.TransformerFactory, - tcfg *transformerconfig.TransformerConfig, - h ifc.Hash) (*KustTarget, error) { + ptf transformer.Factory, + tcfg *transformerconfig.TransformerConfig) (*KustTarget, error) { content, err := ldr.Load(constants.KustomizationFileName) if err != nil { return nil, err @@ -74,7 +72,6 @@ func NewKustTarget( fSys: fSys, rf: rf, tcfg: tcfg, - hash: h, ptf: ptf, }, nil } @@ -102,7 +99,7 @@ func (kt *KustTarget) MakeCustomizedResMap() (resmap.ResMap, error) { // resolveRefsToGeneratedResources fixes all name references. func (kt *KustTarget) resolveRefsToGeneratedResources(m resmap.ResMap) (resmap.ResMap, error) { - err := transformers.NewNameHashTransformer(kt.hash).Transform(m) + err := kt.ptf.MakeHashTransformer().Transform(m) if err != nil { return nil, err } @@ -225,7 +222,7 @@ func (kt *KustTarget) loadCustomizedBases() (resmap.ResMap, *interror.Kustomizat continue } target, err := NewKustTarget( - ldr, kt.fSys, kt.rf, kt.ptf, kt.tcfg, kt.hash) + ldr, kt.fSys, kt.rf, kt.ptf, kt.tcfg) if err != nil { errs.Append(errors.Wrap(err, "couldn't make target for "+path)) continue @@ -255,7 +252,7 @@ func (kt *KustTarget) loadBasesAsFlatList() ([]*KustTarget, error) { continue } target, err := NewKustTarget( - ldr, kt.fSys, kt.rf, kt.ptf, kt.tcfg, kt.hash) + ldr, kt.fSys, kt.rf, kt.ptf, kt.tcfg) if err != nil { errs.Append(err) continue diff --git a/pkg/target/kusttarget_test.go b/pkg/target/kusttarget_test.go index 96f1ae008..d8a9c958c 100644 --- a/pkg/target/kusttarget_test.go +++ b/pkg/target/kusttarget_test.go @@ -23,7 +23,7 @@ import ( "testing" "sigs.k8s.io/kustomize/internal/k8sdeps" - "sigs.k8s.io/kustomize/internal/k8sdeps/patch" + "sigs.k8s.io/kustomize/internal/k8sdeps/transformer" "sigs.k8s.io/kustomize/pkg/constants" "sigs.k8s.io/kustomize/pkg/fs" "sigs.k8s.io/kustomize/pkg/gvk" @@ -95,9 +95,8 @@ func makeKustTarget(t *testing.T, l ifc.Loader) *KustTarget { fakeFs := fs.MakeFakeFS() fakeFs.Mkdir("/") kt, err := NewKustTarget( - l, fakeFs, rf, patch.NewPatchTransformerFactory(), - transformerconfig.NewFactory(l).DefaultConfig(), - k8sdeps.NewKustHash()) + l, fakeFs, rf, transformer.NewFactoryImpl(), + transformerconfig.NewFactory(l).DefaultConfig()) if err != nil { t.Fatalf("Unexpected construction error %v", err) }