Skip to content

Commit 085588b

Browse files
committed
Disable kyaml
Workaround for upstream bug: kubernetes-sigs/kustomize#3446 Signed-off-by: Stefan Prodan <[email protected]>
1 parent 7859a63 commit 085588b

File tree

2 files changed

+35
-31
lines changed

2 files changed

+35
-31
lines changed

controllers/kustomization_controller.go

+10-26
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ import (
2929
"time"
3030

3131
securejoin "github.com/cyphar/filepath-securejoin"
32+
"github.com/fluxcd/pkg/apis/meta"
33+
"github.com/fluxcd/pkg/runtime/events"
34+
"github.com/fluxcd/pkg/runtime/metrics"
35+
"github.com/fluxcd/pkg/runtime/predicates"
36+
"github.com/fluxcd/pkg/untar"
37+
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"
3238
"github.com/go-logr/logr"
3339
apierrors "k8s.io/apimachinery/pkg/api/errors"
3440
apimeta "k8s.io/apimachinery/pkg/api/meta"
@@ -47,16 +53,6 @@ import (
4753
"sigs.k8s.io/controller-runtime/pkg/predicate"
4854
"sigs.k8s.io/controller-runtime/pkg/source"
4955
"sigs.k8s.io/kustomize/api/filesys"
50-
"sigs.k8s.io/kustomize/api/konfig"
51-
"sigs.k8s.io/kustomize/api/krusty"
52-
kustypes "sigs.k8s.io/kustomize/api/types"
53-
54-
"github.com/fluxcd/pkg/apis/meta"
55-
"github.com/fluxcd/pkg/runtime/events"
56-
"github.com/fluxcd/pkg/runtime/metrics"
57-
"github.com/fluxcd/pkg/runtime/predicates"
58-
"github.com/fluxcd/pkg/untar"
59-
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"
6056

6157
kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta1"
6258
)
@@ -506,22 +502,9 @@ func (r *KustomizationReconciler) build(kustomization kustomizev1.Kustomization,
506502
}
507503

508504
fs := filesys.MakeFsOnDisk()
509-
manifestsFile := filepath.Join(dirPath, fmt.Sprintf("%s.yaml", kustomization.GetUID()))
510-
511-
buildOptions := &krusty.Options{
512-
DoLegacyResourceSort: true,
513-
AddManagedbyLabel: false,
514-
LoadRestrictions: kustypes.LoadRestrictionsNone,
515-
DoPrune: false,
516-
PluginConfig: konfig.DisabledPluginConfig(),
517-
UseKyaml: false,
518-
AllowResourceIdChanges: false,
519-
}
520-
521-
k := krusty.MakeKustomizer(fs, buildOptions)
522-
m, err := k.Run(dirPath)
505+
m, err := buildKustomization(fs, dirPath)
523506
if err != nil {
524-
return nil, err
507+
return nil, fmt.Errorf("kustomize build failed: %w", err)
525508
}
526509

527510
// check if resources are encrypted and decrypt them before generating the final YAML
@@ -543,9 +526,10 @@ func (r *KustomizationReconciler) build(kustomization kustomizev1.Kustomization,
543526

544527
resources, err := m.AsYaml()
545528
if err != nil {
546-
return nil, err
529+
return nil, fmt.Errorf("kustomize build failed: %w", err)
547530
}
548531

532+
manifestsFile := filepath.Join(dirPath, fmt.Sprintf("%s.yaml", kustomization.GetUID()))
549533
if err := fs.WriteFile(manifestsFile, resources); err != nil {
550534
return nil, err
551535
}

controllers/kustomization_generator.go

+25-5
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"sigs.k8s.io/kustomize/api/k8sdeps/kunstruct"
2929
"sigs.k8s.io/kustomize/api/konfig"
3030
"sigs.k8s.io/kustomize/api/krusty"
31+
"sigs.k8s.io/kustomize/api/resmap"
3132
kustypes "sigs.k8s.io/kustomize/api/types"
3233
"sigs.k8s.io/yaml"
3334

@@ -222,11 +223,7 @@ func (kg *KustomizeGenerator) checksum(dirPath string) (string, error) {
222223
}
223224

224225
fs := filesys.MakeFsOnDisk()
225-
opt := krusty.MakeDefaultOptions()
226-
opt.LoadRestrictions = kustypes.LoadRestrictionsNone
227-
opt.DoLegacyResourceSort = true
228-
k := krusty.MakeKustomizer(fs, opt)
229-
m, err := k.Run(dirPath)
226+
m, err := buildKustomization(fs, dirPath)
230227
if err != nil {
231228
return "", fmt.Errorf("kustomize build failed: %w", err)
232229
}
@@ -281,3 +278,26 @@ func (kg *KustomizeGenerator) generateLabelTransformer(checksum, dirPath string)
281278

282279
return nil
283280
}
281+
282+
// buildKustomization wraps krusty.MakeKustomizer with the following settings:
283+
// - disable kyaml due to critical bugs like:
284+
// - https://github.com/kubernetes-sigs/kustomize/issues/3446
285+
// - https://github.com/kubernetes-sigs/kustomize/issues/3480
286+
// - reorder the resources just before output (Namespaces and Cluster roles/role bindings first, CRDs before CRs, Webhooks last)
287+
// - load files from outside the kustomization.yaml root
288+
// - disable plugins except for the builtin ones
289+
// - prohibit changes to resourceIds, patch name/kind don't overwrite target name/kind
290+
func buildKustomization(fs filesys.FileSystem, dirPath string) (resmap.ResMap, error) {
291+
buildOptions := &krusty.Options{
292+
UseKyaml: false,
293+
DoLegacyResourceSort: true,
294+
LoadRestrictions: kustypes.LoadRestrictionsNone,
295+
AddManagedbyLabel: false,
296+
DoPrune: false,
297+
PluginConfig: konfig.DisabledPluginConfig(),
298+
AllowResourceIdChanges: false,
299+
}
300+
301+
k := krusty.MakeKustomizer(fs, buildOptions)
302+
return k.Run(dirPath)
303+
}

0 commit comments

Comments
 (0)