Merge pull request #279 from mengqiy/overlay_transformer
error out when a patch has not matching object
This commit is contained in:
commit
a7ffe0b3ed
|
|
@ -43,39 +43,32 @@ func NewOverlayTransformer(overlay types.KObject) (Transformer, error) {
|
||||||
// Transform apply the overlay on top of the base resources.
|
// Transform apply the overlay on top of the base resources.
|
||||||
func (o *OverlayTransformer) Transform(baseResourceMap types.KObject) error {
|
func (o *OverlayTransformer) Transform(baseResourceMap types.KObject) error {
|
||||||
// Strategic merge the resources exist in both base and overlay.
|
// Strategic merge the resources exist in both base and overlay.
|
||||||
for gvkn, base := range baseResourceMap {
|
for gvkn, overlay := range o.overlay {
|
||||||
// Merge overlay with base resource.
|
// Merge overlay with base resource.
|
||||||
if overlay, found := o.overlay[gvkn]; found {
|
base, found := baseResourceMap[gvkn]
|
||||||
versionedObj, err := scheme.Scheme.New(gvkn.GVK)
|
if !found {
|
||||||
if err != nil {
|
return fmt.Errorf("failed to find an object with %#v to apply the patch", gvkn.GVK)
|
||||||
switch {
|
|
||||||
case runtime.IsNotRegisteredError(err):
|
|
||||||
return fmt.Errorf("failed to find schema for %#v (which may be a CRD type): %v", gvkn.GVK, err)
|
|
||||||
default:
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// TODO: Change this to use the new Merge package.
|
|
||||||
// Store the name of the base object, because this name may have been munged.
|
|
||||||
// Apply this name to the StrategicMergePatched object.
|
|
||||||
baseName := base.GetName()
|
|
||||||
merged, err := strategicpatch.StrategicMergeMapPatch(
|
|
||||||
base.UnstructuredContent(),
|
|
||||||
overlay.UnstructuredContent(),
|
|
||||||
versionedObj)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
base.SetName(baseName)
|
|
||||||
baseResourceMap[gvkn].Object = merged
|
|
||||||
delete(o.overlay, gvkn)
|
|
||||||
}
|
}
|
||||||
}
|
versionedObj, err := scheme.Scheme.New(gvkn.GVK)
|
||||||
// If there are resources in overlay that are not defined in base, just add it to base.
|
if err != nil {
|
||||||
if len(o.overlay) > 0 {
|
if runtime.IsNotRegisteredError(err) {
|
||||||
for gvkn, jsonObj := range o.overlay {
|
return fmt.Errorf("failed to find schema for %#v (which may be a CRD type): %v", gvkn.GVK, err)
|
||||||
baseResourceMap[gvkn] = jsonObj
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
// TODO: Change this to use the new Merge package.
|
||||||
|
// Store the name of the base object, because this name may have been munged.
|
||||||
|
// Apply this name to the StrategicMergePatched object.
|
||||||
|
baseName := base.GetName()
|
||||||
|
merged, err := strategicpatch.StrategicMergeMapPatch(
|
||||||
|
base.UnstructuredContent(),
|
||||||
|
overlay.UnstructuredContent(),
|
||||||
|
versionedObj)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
base.SetName(baseName)
|
||||||
|
baseResourceMap[gvkn].Object = merged
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue