Skip to content

Commit 3a09ac6

Browse files
authored
Merge pull request #241 from fluxcd/kustomize/api-v0.7.2
Update kustomize/api to v0.7.2 and disable kyaml
2 parents 276c901 + 085588b commit 3a09ac6

File tree

5 files changed

+41
-29
lines changed

5 files changed

+41
-29
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ WORKDIR /workspace
66

77
RUN apk add --no-cache ca-certificates curl
88

9-
RUN kubectl_ver=1.20.1 && \
9+
RUN kubectl_ver=1.20.2 && \
1010
arch=${TARGETPLATFORM:-linux/amd64} && \
1111
if [ "$TARGETPLATFORM" == "linux/arm/v7" ]; then arch="linux/arm"; fi && \
1212
curl -sL https://storage.googleapis.com/kubernetes-release/release/v${kubectl_ver}/bin/${arch}/kubectl \

controllers/kustomization_controller.go

+10-18
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,15 +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/krusty"
51-
kustypes "sigs.k8s.io/kustomize/api/types"
52-
53-
"github.com/fluxcd/pkg/apis/meta"
54-
"github.com/fluxcd/pkg/runtime/events"
55-
"github.com/fluxcd/pkg/runtime/metrics"
56-
"github.com/fluxcd/pkg/runtime/predicates"
57-
"github.com/fluxcd/pkg/untar"
58-
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"
5956

6057
kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta1"
6158
)
@@ -505,15 +502,9 @@ func (r *KustomizationReconciler) build(kustomization kustomizev1.Kustomization,
505502
}
506503

507504
fs := filesys.MakeFsOnDisk()
508-
manifestsFile := filepath.Join(dirPath, fmt.Sprintf("%s.yaml", kustomization.GetUID()))
509-
510-
opt := krusty.MakeDefaultOptions()
511-
opt.LoadRestrictions = kustypes.LoadRestrictionsNone
512-
opt.DoLegacyResourceSort = true
513-
k := krusty.MakeKustomizer(fs, opt)
514-
m, err := k.Run(dirPath)
505+
m, err := buildKustomization(fs, dirPath)
515506
if err != nil {
516-
return nil, err
507+
return nil, fmt.Errorf("kustomize build failed: %w", err)
517508
}
518509

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

536527
resources, err := m.AsYaml()
537528
if err != nil {
538-
return nil, err
529+
return nil, fmt.Errorf("kustomize build failed: %w", err)
539530
}
540531

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

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

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ require (
2828
k8s.io/client-go v0.20.2
2929
sigs.k8s.io/cli-utils v0.20.2
3030
sigs.k8s.io/controller-runtime v0.8.0
31-
sigs.k8s.io/kustomize/api v0.7.1
31+
sigs.k8s.io/kustomize/api v0.7.2
3232
sigs.k8s.io/yaml v1.2.0
3333
)

go.sum

+4-4
Original file line numberDiff line numberDiff line change
@@ -1227,11 +1227,11 @@ sigs.k8s.io/controller-runtime v0.8.0 h1:s0dYdo7lQgJiAf+alP82PRwbz+oAqL3oSyMQ18X
12271227
sigs.k8s.io/controller-runtime v0.8.0/go.mod h1:v9Lbj5oX443uR7GXYY46E0EE2o7k2YxQ58GxVNeXSW4=
12281228
sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0=
12291229
sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU=
1230-
sigs.k8s.io/kustomize/api v0.7.1 h1:/cjDi4Pk/hqRSeCCj/Xum66rYrEtc7osM2/O+lvYKkM=
1231-
sigs.k8s.io/kustomize/api v0.7.1/go.mod h1:XOt24UrCkv0x63eT5JVaph4Kqf5EVU2UBAXo6SPBaAY=
1230+
sigs.k8s.io/kustomize/api v0.7.2 h1:ItTD/2XaKO8CosOMFZdaGFdUGTCHdQriW7zQ7AR98rs=
1231+
sigs.k8s.io/kustomize/api v0.7.2/go.mod h1:50/vLATrjhRmMr3spZsI1GcpoZJ8IARy9QstPbA9lGE=
12321232
sigs.k8s.io/kustomize/kyaml v0.8.1/go.mod h1:UTm64bSWVdBUA8EQoYCxVOaBQxUdIOr5LKWxA4GNbkw=
1233-
sigs.k8s.io/kustomize/kyaml v0.10.5 h1:PbJcsZsEM7O3hHtUWTR+4WkHVbQRW9crSy75or1gRbI=
1234-
sigs.k8s.io/kustomize/kyaml v0.10.5/go.mod h1:P6Oy/ah/GZMKzJMIJA2a3/bc8YrBkuL5kJji13PSIzY=
1233+
sigs.k8s.io/kustomize/kyaml v0.10.6 h1:xUJxc/k8JoWqHUahaB8DTqY0KwEPxTbTGStvW8TOcDc=
1234+
sigs.k8s.io/kustomize/kyaml v0.10.6/go.mod h1:K9yg1k/HB/6xNOf5VH3LhTo1DK9/5ykSZO5uIv+Y/1k=
12351235
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
12361236
sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA=
12371237
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=

0 commit comments

Comments
 (0)