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 // 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) return patch.NewPatchTransformer(slice, rf)
} }
@@ -44,6 +46,9 @@ func (p *FactoryImpl) MakeHashTransformer() transformers.Transformer {
return hash.NewNameHashTransformer() return hash.NewNameHashTransformer()
} }
func (p *FactoryImpl) MakeInventoryTransformer(arg *types.Inventory, namespace string, append bool) transformers.Transformer { func (p *FactoryImpl) MakeInventoryTransformer(
return inventory.NewInventoryTransformer(arg, namespace, append) 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 // inventoryTransformer compute the inventory object used in prune
type inventoryTransformer struct { type inventoryTransformer struct {
append bool garbagePolicy types.GarbagePolicy
cmName string cmName string
cmNamespace string cmNamespace string
} }
var _ transformers.Transformer = &inventoryTransformer{} var _ transformers.Transformer = &inventoryTransformer{}
// NewInventoryTransformer makes a 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 { if p == nil || p.Type != "ConfigMap" || p.ConfigMap.Namespace != namespace {
return transformers.NewNoOpTransformer() return transformers.NewNoOpTransformer()
} }
return &inventoryTransformer{ return &inventoryTransformer{
append: append, garbagePolicy: gp,
cmName: p.ConfigMap.Name, cmName: p.ConfigMap.Name,
cmNamespace: p.ConfigMap.Namespace, cmNamespace: p.ConfigMap.Namespace,
} }
} }
@@ -84,7 +87,7 @@ func (o *inventoryTransformer) Transform(m resmap.ResMap) error {
return err return err
} }
if !o.append { if o.garbagePolicy == types.GarbageCollect {
for k := range m { for k := range m {
delete(m, k) delete(m, k)
} }

View File

@@ -148,7 +148,7 @@ func TestInventoryTransformer(t *testing.T) {
objs := makeResMap() objs := makeResMap()
// include the original resmap; only return the ConfigMap for pruning // include the original resmap; only return the ConfigMap for pruning
tran := NewInventoryTransformer(p, "default", false) tran := NewInventoryTransformer(p, "default", types.GarbageCollect)
tran.Transform(objs) tran.Transform(objs)
if !reflect.DeepEqual(objs, expected) { if !reflect.DeepEqual(objs, expected) {
@@ -160,7 +160,7 @@ func TestInventoryTransformer(t *testing.T) {
expected = objs.DeepCopy(rf) expected = objs.DeepCopy(rf)
expected[resid.NewResIdWithPrefixNamespace(cmap, "pruneCM", "", "default")] = pruneMap expected[resid.NewResIdWithPrefixNamespace(cmap, "pruneCM", "", "default")] = pruneMap
// append the ConfigMap for pruning to the original resmap // append the ConfigMap for pruning to the original resmap
tran = NewInventoryTransformer(p, "default", true) tran = NewInventoryTransformer(p, "default", types.GarbageIgnore)
tran.Transform(objs) tran.Transform(objs)
if !reflect.DeepEqual(objs, expected) { if !reflect.DeepEqual(objs, expected) {

View File

@@ -27,5 +27,8 @@ import (
type Factory interface { type Factory interface {
MakePatchTransformer(slice []*resource.Resource, rf *resource.Factory) (transformers.Transformer, error) MakePatchTransformer(slice []*resource.Resource, rf *resource.Factory) (transformers.Transformer, error)
MakeHashTransformer() transformers.Transformer 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. // MakeCustomizedResMap creates a ResMap per kustomization instructions.
// The Resources in the returned ResMap are fully customized. // The Resources in the returned ResMap are fully customized.
func (kt *KustTarget) MakeCustomizedResMap() (resmap.ResMap, error) { func (kt *KustTarget) MakeCustomizedResMap() (resmap.ResMap, error) {
ra, err := kt.AccumulateTarget() return kt.makeCustomizedResMap(types.GarbageIgnore)
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
} }
func (kt *KustTarget) MakePruneConfigMap() (resmap.ResMap, error) { 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() ra, err := kt.AccumulateTarget()
if err != nil { if err != nil {
return nil, err return nil, err
@@ -165,7 +144,10 @@ func (kt *KustTarget) MakePruneConfigMap() (resmap.ResMap, error) {
} }
rm := ra.ResMap() 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) err = pt.Transform(rm)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -142,6 +142,14 @@ type Kustomization struct {
Inventory *Inventory `json:"inventory,omitempty" yaml:"inventory:omitempty"` Inventory *Inventory `json:"inventory,omitempty" yaml:"inventory:omitempty"`
} }
type GarbagePolicy int
const (
GarbageUnknown GarbagePolicy = iota
GarbageIgnore
GarbageCollect
)
// FixKustomizationPostUnmarshalling fixes things // FixKustomizationPostUnmarshalling fixes things
// like empty fields that should not be empty, or // like empty fields that should not be empty, or
// moving content of deprecated fields to newer // moving content of deprecated fields to newer