Skip to content

Commit d42bb32

Browse files
committed
Don't run transform twice on kustomize inputs
Running object transforms on the raw kustomize files isn't consistent with how they are normally used, but it also is very difficult to pre-transform kustomize inputs - for example if we remove an object, it will likely still be referenced from kustomization.yaml
1 parent 2cc1e5a commit d42bb32

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

pkg/patterns/declarative/reconciler.go

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -299,13 +299,21 @@ func (r *Reconciler) BuildDeploymentObjectsWithFs(ctx context.Context, name type
299299
}
300300

301301
// 3. Parse manifest into objects
302-
// 4. Perform object transformations
303-
objects, err := r.parseAndTransformManifest(ctx, instance, manifestStr)
302+
objects, err := r.parseManifest(ctx, instance, manifestStr)
304303
if err != nil {
305-
log.Error(err, "error parsing and transforming manifest")
304+
log.Error(err, "error parsing manifest")
306305
return nil, err
307306
}
308307

308+
// 4. Perform object transformations
309+
// (unless kustomize is in use, in which case we transform after running kustomize)
310+
if !r.IsKustomizeOptionUsed() {
311+
if err := r.transformManifest(ctx, instance, objects); err != nil {
312+
log.Error(err, "error transforming manifest")
313+
return nil, err
314+
}
315+
}
316+
309317
if fs != nil {
310318
// 5. Write objects to filesystem for kustomizing
311319
for _, item := range objects.Items {
@@ -343,11 +351,16 @@ func (r *Reconciler) BuildDeploymentObjectsWithFs(ctx context.Context, name type
343351
return nil, fmt.Errorf("error converting kustomize output to yaml: %v", err)
344352
}
345353

346-
objects, err := r.parseAndTransformManifest(ctx, instance, string(manifestYaml))
354+
objects, err := r.parseManifest(ctx, instance, string(manifestYaml))
347355
if err != nil {
348356
log.Error(err, "creating final manifest yaml")
349357
return nil, err
350358
}
359+
360+
if err := r.transformManifest(ctx, instance, objects); err != nil {
361+
log.Error(err, "error transforming manifest")
362+
return nil, err
363+
}
351364
manifestObjects.Items = objects.Items
352365
}
353366

@@ -357,8 +370,8 @@ func (r *Reconciler) BuildDeploymentObjectsWithFs(ctx context.Context, name type
357370
return manifestObjects, nil
358371
}
359372

360-
// parseAndTransformManifest parses the manifest into objects and adds any transformations as required
361-
func (r *Reconciler) parseAndTransformManifest(ctx context.Context, instance DeclarativeObject, manifestStr string) (*manifest.Objects, error) {
373+
// parseManifest parses the manifest into objects
374+
func (r *Reconciler) parseManifest(ctx context.Context, instance DeclarativeObject, manifestStr string) (*manifest.Objects, error) {
362375
log := log.Log
363376

364377
objects, err := manifest.ParseObjects(ctx, manifestStr)
@@ -367,6 +380,11 @@ func (r *Reconciler) parseAndTransformManifest(ctx context.Context, instance Dec
367380
return nil, err
368381
}
369382

383+
return objects, nil
384+
}
385+
386+
// transformManifest runs any transformations as required
387+
func (r *Reconciler) transformManifest(ctx context.Context, instance DeclarativeObject, objects *manifest.Objects) error {
370388
transforms := r.options.objectTransformations
371389
if r.options.labelMaker != nil {
372390
transforms = append(transforms, AddLabels(r.options.labelMaker(ctx, instance)))
@@ -375,10 +393,10 @@ func (r *Reconciler) parseAndTransformManifest(ctx context.Context, instance Dec
375393
for _, t := range transforms {
376394
err := t(ctx, instance, objects)
377395
if err != nil {
378-
return nil, err
396+
return err
379397
}
380398
}
381-
return objects, nil
399+
return nil
382400
}
383401

384402
// loadRawManifest loads the raw manifest YAML from the repository

0 commit comments

Comments
 (0)