From a352ff392309a9c00ed4c7364afa8fbbb3d2f7cd Mon Sep 17 00:00:00 2001 From: jregan Date: Mon, 20 May 2019 20:21:00 -0700 Subject: [PATCH] True and false are mysterious. --- k8sdeps/transformer/factory.go | 11 ++++-- k8sdeps/transformer/inventory/inventory.go | 19 ++++++---- .../transformer/inventory/inventory_test.go | 4 +- pkg/ifc/transformer/factory.go | 5 ++- pkg/target/kusttarget.go | 38 +++++-------------- pkg/types/kustomization.go | 8 ++++ 6 files changed, 43 insertions(+), 42 deletions(-) diff --git a/k8sdeps/transformer/factory.go b/k8sdeps/transformer/factory.go index 16c576923..cb8a11d0c 100644 --- a/k8sdeps/transformer/factory.go +++ b/k8sdeps/transformer/factory.go @@ -35,7 +35,9 @@ func NewFactoryImpl() *FactoryImpl { } // MakePatchTransformer makes a new patch transformer -func (p *FactoryImpl) MakePatchTransformer(slice []*resource.Resource, rf *resource.Factory) (transformers.Transformer, error) { +func (p *FactoryImpl) MakePatchTransformer( + slice []*resource.Resource, + rf *resource.Factory) (transformers.Transformer, error) { return patch.NewPatchTransformer(slice, rf) } @@ -44,6 +46,9 @@ func (p *FactoryImpl) MakeHashTransformer() transformers.Transformer { return hash.NewNameHashTransformer() } -func (p *FactoryImpl) MakeInventoryTransformer(arg *types.Inventory, namespace string, append bool) transformers.Transformer { - return inventory.NewInventoryTransformer(arg, namespace, append) +func (p *FactoryImpl) MakeInventoryTransformer( + arg *types.Inventory, + namespace string, + gp types.GarbagePolicy) transformers.Transformer { + return inventory.NewInventoryTransformer(arg, namespace, gp) } diff --git a/k8sdeps/transformer/inventory/inventory.go b/k8sdeps/transformer/inventory/inventory.go index 39976e4be..102e370d2 100644 --- a/k8sdeps/transformer/inventory/inventory.go +++ b/k8sdeps/transformer/inventory/inventory.go @@ -18,22 +18,25 @@ import ( // inventoryTransformer compute the inventory object used in prune type inventoryTransformer struct { - append bool - cmName string - cmNamespace string + garbagePolicy types.GarbagePolicy + cmName string + cmNamespace string } var _ transformers.Transformer = &inventoryTransformer{} // NewInventoryTransformer makes a inventoryTransformer. -func NewInventoryTransformer(p *types.Inventory, namespace string, append bool) transformers.Transformer { +func NewInventoryTransformer( + p *types.Inventory, + namespace string, + gp types.GarbagePolicy) transformers.Transformer { if p == nil || p.Type != "ConfigMap" || p.ConfigMap.Namespace != namespace { return transformers.NewNoOpTransformer() } return &inventoryTransformer{ - append: append, - cmName: p.ConfigMap.Name, - cmNamespace: p.ConfigMap.Namespace, + garbagePolicy: gp, + cmName: p.ConfigMap.Name, + cmNamespace: p.ConfigMap.Namespace, } } @@ -84,7 +87,7 @@ func (o *inventoryTransformer) Transform(m resmap.ResMap) error { return err } - if !o.append { + if o.garbagePolicy == types.GarbageCollect { for k := range m { delete(m, k) } diff --git a/k8sdeps/transformer/inventory/inventory_test.go b/k8sdeps/transformer/inventory/inventory_test.go index 6d8ee6978..0337a7d11 100644 --- a/k8sdeps/transformer/inventory/inventory_test.go +++ b/k8sdeps/transformer/inventory/inventory_test.go @@ -148,7 +148,7 @@ func TestInventoryTransformer(t *testing.T) { objs := makeResMap() // include the original resmap; only return the ConfigMap for pruning - tran := NewInventoryTransformer(p, "default", false) + tran := NewInventoryTransformer(p, "default", types.GarbageCollect) tran.Transform(objs) if !reflect.DeepEqual(objs, expected) { @@ -160,7 +160,7 @@ func TestInventoryTransformer(t *testing.T) { expected = objs.DeepCopy(rf) expected[resid.NewResIdWithPrefixNamespace(cmap, "pruneCM", "", "default")] = pruneMap // append the ConfigMap for pruning to the original resmap - tran = NewInventoryTransformer(p, "default", true) + tran = NewInventoryTransformer(p, "default", types.GarbageIgnore) tran.Transform(objs) if !reflect.DeepEqual(objs, expected) { diff --git a/pkg/ifc/transformer/factory.go b/pkg/ifc/transformer/factory.go index cf0290d52..79905d9a7 100644 --- a/pkg/ifc/transformer/factory.go +++ b/pkg/ifc/transformer/factory.go @@ -27,5 +27,8 @@ import ( type Factory interface { MakePatchTransformer(slice []*resource.Resource, rf *resource.Factory) (transformers.Transformer, error) MakeHashTransformer() transformers.Transformer - MakeInventoryTransformer(p *types.Inventory, namespace string, append bool) transformers.Transformer + MakeInventoryTransformer( + p *types.Inventory, + namespace string, + gp types.GarbagePolicy) transformers.Transformer } diff --git a/pkg/target/kusttarget.go b/pkg/target/kusttarget.go index 975fd4738..bf00e191f 100644 --- a/pkg/target/kusttarget.go +++ b/pkg/target/kusttarget.go @@ -114,36 +114,15 @@ func unmarshal(y []byte, o interface{}) error { // MakeCustomizedResMap creates a ResMap per kustomization instructions. // The Resources in the returned ResMap are fully customized. func (kt *KustTarget) MakeCustomizedResMap() (resmap.ResMap, error) { - ra, err := kt.AccumulateTarget() - if err != nil { - return nil, err - } - err = ra.Transform(kt.tFactory.MakeHashTransformer()) - if err != nil { - return nil, err - } - // Given that names have changed (prefixs/suffixes added), - // fix all the back references to those names. - err = ra.FixBackReferences() - if err != nil { - return nil, err - } - // With all the back references fixed, it's OK to resolve Vars. - err = ra.ResolveVars() - if err != nil { - return nil, err - } - - rm := ra.ResMap() - pt := kt.tFactory.MakeInventoryTransformer(kt.kustomization.Inventory, kt.kustomization.Namespace, true) - err = pt.Transform(rm) - if err != nil { - return nil, err - } - return rm, nil + return kt.makeCustomizedResMap(types.GarbageIgnore) } func (kt *KustTarget) MakePruneConfigMap() (resmap.ResMap, error) { + return kt.makeCustomizedResMap(types.GarbageCollect) +} + +func (kt *KustTarget) makeCustomizedResMap( + garbagePolicy types.GarbagePolicy) (resmap.ResMap, error) { ra, err := kt.AccumulateTarget() if err != nil { return nil, err @@ -165,7 +144,10 @@ func (kt *KustTarget) MakePruneConfigMap() (resmap.ResMap, error) { } rm := ra.ResMap() - pt := kt.tFactory.MakeInventoryTransformer(kt.kustomization.Inventory, kt.kustomization.Namespace, false) + pt := kt.tFactory.MakeInventoryTransformer( + kt.kustomization.Inventory, + kt.kustomization.Namespace, + garbagePolicy) err = pt.Transform(rm) if err != nil { return nil, err diff --git a/pkg/types/kustomization.go b/pkg/types/kustomization.go index 63b45e6f1..eca0fd1fb 100644 --- a/pkg/types/kustomization.go +++ b/pkg/types/kustomization.go @@ -142,6 +142,14 @@ type Kustomization struct { Inventory *Inventory `json:"inventory,omitempty" yaml:"inventory:omitempty"` } +type GarbagePolicy int + +const ( + GarbageUnknown GarbagePolicy = iota + GarbageIgnore + GarbageCollect +) + // FixKustomizationPostUnmarshalling fixes things // like empty fields that should not be empty, or // moving content of deprecated fields to newer