Merge pull request #279 from mengqiy/overlay_transformer

error out when a patch has not matching object
This commit is contained in:
k8s-ci-robot 2018-02-12 17:04:49 -08:00 committed by GitHub
commit a7ffe0b3ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 30 deletions

View File

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