True and false are mysterious.

This commit is contained in:
jregan
2019-05-20 20:21:00 -07:00
committed by Jeffrey Regan
parent 72f565d55d
commit a352ff3923
6 changed files with 43 additions and 42 deletions

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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) {

View File

@@ -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
}

View File

@@ -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

View File

@@ -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