From afdc58cd4883d69363caef89dfffb107f95af6e9 Mon Sep 17 00:00:00 2001
From: Stefan Prodan
Date: Thu, 4 Sep 2025 20:07:05 +0300
Subject: [PATCH] Add `.spec.ignoreMissingComponents` field to Kustomization
API
Signed-off-by: Stefan Prodan
---
api/v1/kustomization_types.go | 8 ++++-
...mize.toolkit.fluxcd.io_kustomizations.yaml | 9 ++++--
docs/api/v1/kustomize.md | 32 +++++++++++++++++--
docs/spec/v1/kustomizations.md | 6 ++++
go.mod | 10 +++---
go.sum | 20 ++++++------
6 files changed, 65 insertions(+), 20 deletions(-)
diff --git a/api/v1/kustomization_types.go b/api/v1/kustomization_types.go
index 7d2ec5b..59a86c8 100644
--- a/api/v1/kustomization_types.go
+++ b/api/v1/kustomization_types.go
@@ -177,10 +177,16 @@ type KustomizationSpec struct {
// +optional
Wait bool `json:"wait,omitempty"`
- // Components specifies relative paths to specifications of other Components.
+ // Components specifies relative paths to kustomize Components.
// +optional
Components []string `json:"components,omitempty"`
+ // IgnoreMissingComponents instructs the controller to ignore Components paths
+ // not found in source by removing them from the generated kustomization.yaml
+ // before running kustomize build.
+ // +optional
+ IgnoreMissingComponents bool `json:"ignoreMissingComponents,omitempty"`
+
// HealthCheckExprs is a list of healthcheck expressions for evaluating the
// health of custom resources using Common Expression Language (CEL).
// The expressions are evaluated only when Wait or HealthChecks are specified.
diff --git a/config/crd/bases/kustomize.toolkit.fluxcd.io_kustomizations.yaml b/config/crd/bases/kustomize.toolkit.fluxcd.io_kustomizations.yaml
index df75e41..24b66c9 100644
--- a/config/crd/bases/kustomize.toolkit.fluxcd.io_kustomizations.yaml
+++ b/config/crd/bases/kustomize.toolkit.fluxcd.io_kustomizations.yaml
@@ -71,8 +71,7 @@ spec:
type: object
type: object
components:
- description: Components specifies relative paths to specifications
- of other Components.
+ description: Components specifies relative paths to kustomize Components.
items:
type: string
type: array
@@ -218,6 +217,12 @@ spec:
- name
type: object
type: array
+ ignoreMissingComponents:
+ description: |-
+ IgnoreMissingComponents instructs the controller to ignore Components paths
+ not found in source by removing them from the generated kustomization.yaml
+ before running kustomize build.
+ type: boolean
images:
description: |-
Images is a list of (image name, new name, new tag or digest)
diff --git a/docs/api/v1/kustomize.md b/docs/api/v1/kustomize.md
index 10fb29a..582dc5f 100644
--- a/docs/api/v1/kustomize.md
+++ b/docs/api/v1/kustomize.md
@@ -392,7 +392,21 @@ resources. When enabled, the HealthChecks are ignored. Defaults to false.
(Optional)
- Components specifies relative paths to specifications of other Components.
+Components specifies relative paths to kustomize Components.
+ |
+
+
+
+ignoreMissingComponents
+
+bool
+
+ |
+
+(Optional)
+ IgnoreMissingComponents instructs the controller to ignore Components paths
+not found in source by removing them from the generated kustomization.yaml
+before running kustomize build.
|
@@ -1011,7 +1025,21 @@ resources. When enabled, the HealthChecks are ignored. Defaults to false.
|
(Optional)
- Components specifies relative paths to specifications of other Components.
+Components specifies relative paths to kustomize Components.
+ |
+
+
+
+ignoreMissingComponents
+
+bool
+
+ |
+
+(Optional)
+ IgnoreMissingComponents instructs the controller to ignore Components paths
+not found in source by removing them from the generated kustomization.yaml
+before running kustomize build.
|
diff --git a/docs/spec/v1/kustomizations.md b/docs/spec/v1/kustomizations.md
index 330b011..9a51bcc 100644
--- a/docs/spec/v1/kustomizations.md
+++ b/docs/spec/v1/kustomizations.md
@@ -663,6 +663,7 @@ metadata:
namespace: flux-system
spec:
# ...omitted for brevity
+ ignoreMissingComponents: false
components:
- ../ingress
- ../tls
@@ -670,6 +671,11 @@ spec:
**Note:** The components paths must be local and relative to the path specified by `.spec.path`.
+With `.spec.ignoreMissingComponents` you can specify whether the controller
+should ignore the component paths that are missing from the source. By default,
+it is set to `false`, meaning that the controller will fail the reconciliation
+if any of the specified paths are missing from the source.
+
**Warning:** Components are an alpha feature in Kustomize and are therefore
considered experimental in Flux. No guarantees are provided as the feature may
be modified in backwards incompatible ways or removed without warning.
diff --git a/go.mod b/go.mod
index 7bb1aaa..3517015 100644
--- a/go.mod
+++ b/go.mod
@@ -23,12 +23,12 @@ require (
github.com/fluxcd/pkg/apis/acl v0.9.0
github.com/fluxcd/pkg/apis/event v0.19.0
github.com/fluxcd/pkg/apis/kustomize v1.12.0
- github.com/fluxcd/pkg/apis/meta v1.20.0
- github.com/fluxcd/pkg/auth v0.29.0
+ github.com/fluxcd/pkg/apis/meta v1.21.0
+ github.com/fluxcd/pkg/auth v0.30.0
github.com/fluxcd/pkg/cache v0.11.0
github.com/fluxcd/pkg/http/fetch v0.19.0
- github.com/fluxcd/pkg/kustomize v1.20.0
- github.com/fluxcd/pkg/runtime v0.82.0
+ github.com/fluxcd/pkg/kustomize v1.21.0
+ github.com/fluxcd/pkg/runtime v0.83.0
github.com/fluxcd/pkg/ssa v0.53.0
github.com/fluxcd/pkg/tar v0.14.0
github.com/fluxcd/pkg/testserver v0.13.0
@@ -119,7 +119,7 @@ require (
github.com/containerd/continuity v0.4.5 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
- github.com/docker/cli v28.2.2+incompatible // indirect
+ github.com/docker/cli v28.3.3+incompatible // indirect
github.com/docker/docker v28.3.3+incompatible // indirect
github.com/docker/docker-credential-helpers v0.9.3 // indirect
github.com/docker/go-connections v0.5.0 // indirect
diff --git a/go.sum b/go.sum
index 28529fa..5b5e5c8 100644
--- a/go.sum
+++ b/go.sum
@@ -157,8 +157,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U=
github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE=
-github.com/docker/cli v28.2.2+incompatible h1:qzx5BNUDFqlvyq4AHzdNB7gSyVTmU4cgsyN9SdInc1A=
-github.com/docker/cli v28.2.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/docker/cli v28.3.3+incompatible h1:fp9ZHAr1WWPGdIWBM1b3zLtgCF+83gRdVMTJsUeiyAo=
+github.com/docker/cli v28.3.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/docker v28.3.3+incompatible h1:Dypm25kh4rmk49v1eiVbsAtpAsYURjYkaKubwuBdxEI=
github.com/docker/docker v28.3.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8=
@@ -195,20 +195,20 @@ github.com/fluxcd/pkg/apis/event v0.19.0 h1:ZJU2voontkzp5rNYA4JMOu40S4tRcrWi4Do5
github.com/fluxcd/pkg/apis/event v0.19.0/go.mod h1:deuIyUb6lh+Z1Ccvwwxhm1wNM3kpSo+vF1IgRnpaZfQ=
github.com/fluxcd/pkg/apis/kustomize v1.12.0 h1:KvZN6xwgP/dNSeckL4a/Uv715XqiN1C3xS+jGcPejtE=
github.com/fluxcd/pkg/apis/kustomize v1.12.0/go.mod h1:OojLxIdKm1JAAdh3sL4j4F+vfrLKb7kq1vr8bpyEKgg=
-github.com/fluxcd/pkg/apis/meta v1.20.0 h1:l9h0kWoDZTcYV0WJkFMgDXq6Q4tSojrJ+bHpFJSsaW0=
-github.com/fluxcd/pkg/apis/meta v1.20.0/go.mod h1:XUAEUgT4gkWDAEN79E141tmL+v4SV50tVZ/Ojpc/ueg=
-github.com/fluxcd/pkg/auth v0.29.0 h1:lLc63zjodqIqg5ydlU/Kp3Qa+wvh6G2khjop5MHALvk=
-github.com/fluxcd/pkg/auth v0.29.0/go.mod h1:bjZ+6RMSGgsQQK+aPfVP8HWuBbb+FLlFxMiqd8ywzik=
+github.com/fluxcd/pkg/apis/meta v1.21.0 h1:R+bN02chcs0HUmyVDQhqe/FHmYLjipVDMLnyYfNX850=
+github.com/fluxcd/pkg/apis/meta v1.21.0/go.mod h1:XUAEUgT4gkWDAEN79E141tmL+v4SV50tVZ/Ojpc/ueg=
+github.com/fluxcd/pkg/auth v0.30.0 h1:7JMnY1ClArvOsadt6hOxceu8Q2hLsYHFMt0DV3BQl4Q=
+github.com/fluxcd/pkg/auth v0.30.0/go.mod h1:me38o1nDfSLw6YvnkT9Ce/zqJZICZSA7j5pNMR3JUbc=
github.com/fluxcd/pkg/cache v0.11.0 h1:fsE8S+una21fSNw4MDXGUIf0Gf1J+pqa4RbsVKf2aTI=
github.com/fluxcd/pkg/cache v0.11.0/go.mod h1:2RTIU6PsJniHmfnllQWFEo7fa5V8KQlnMgn4o0sme40=
github.com/fluxcd/pkg/envsubst v1.5.0 h1:S07mo+MkGhptdHA4pRze5HPKlc8tHxKswNdcMZi1WDY=
github.com/fluxcd/pkg/envsubst v1.5.0/go.mod h1:c3a8DYI855sZUubHFYQbjfjop6Wu4/zg1cLyf7SnCes=
github.com/fluxcd/pkg/http/fetch v0.19.0 h1:dRdErv8X2t/VKnh5kFRZrlqKzbq9Gh0n/z3XArjdLho=
github.com/fluxcd/pkg/http/fetch v0.19.0/go.mod h1:z32w8nezoBvQfMogCkhAoqKToOZzPSbIW0PeN2fKXqA=
-github.com/fluxcd/pkg/kustomize v1.20.0 h1:NU1p3PxyOz1LAsPWhmmObzP5EA+LTh9DT+6Tu9+LgCw=
-github.com/fluxcd/pkg/kustomize v1.20.0/go.mod h1:drVtmqUCJc/0a178vjl67DSePQahOBI+aO4x1kzV13M=
-github.com/fluxcd/pkg/runtime v0.82.0 h1:VdPPRJtj8/rcBdqY7GZSffoxe5elFHt+ymwQHNbPOlc=
-github.com/fluxcd/pkg/runtime v0.82.0/go.mod h1:rIDynMhU5upbn8ce3bXQhH5L6vtDw5MELycvtJG/+og=
+github.com/fluxcd/pkg/kustomize v1.21.0 h1:J+OcRTBWJcOwqhNW2oZyPHN7u54qBpScYLYnqTiM3gE=
+github.com/fluxcd/pkg/kustomize v1.21.0/go.mod h1:drVtmqUCJc/0a178vjl67DSePQahOBI+aO4x1kzV13M=
+github.com/fluxcd/pkg/runtime v0.83.0 h1:XzpwKzo7GqfBE/BKpxG5B4U7cUnojnB407S9Dpp6oLU=
+github.com/fluxcd/pkg/runtime v0.83.0/go.mod h1:r8KLvXRguKtpLAa66fA19rIbwPViXm8az038IUabYvw=
github.com/fluxcd/pkg/sourceignore v0.14.0 h1:ZiZzbXtXb/Qp7I7JCStsxOlX8ri8rWwCvmvIrJ0UzQQ=
github.com/fluxcd/pkg/sourceignore v0.14.0/go.mod h1:E3zKvyTyB+oQKqm/2I/jS6Rrt3B7fNuig/4bY2vi3bg=
github.com/fluxcd/pkg/ssa v0.53.0 h1:EtKFAYWXohIGkzPhIrv8NbV5zYr4iZHY6DaNxMR9+bU=