Skip to content

Commit 57f5a7c

Browse files
committed
Introduce support for migrating API version
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
1 parent ddb9bd6 commit 57f5a7c

5 files changed

Lines changed: 42 additions & 21 deletions

File tree

go.mod

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ require (
2424
github.com/fluxcd/pkg/apis/event v0.25.0
2525
github.com/fluxcd/pkg/apis/kustomize v1.16.0
2626
github.com/fluxcd/pkg/apis/meta v1.26.0
27-
github.com/fluxcd/pkg/auth v0.41.0
27+
github.com/fluxcd/pkg/auth v0.40.0
2828
github.com/fluxcd/pkg/cache v0.13.0
29-
github.com/fluxcd/pkg/http/fetch v0.24.0
30-
github.com/fluxcd/pkg/kustomize v1.30.0
29+
github.com/fluxcd/pkg/http/fetch v0.22.0
30+
github.com/fluxcd/pkg/kustomize v1.29.0
3131
github.com/fluxcd/pkg/runtime v0.103.0
32-
github.com/fluxcd/pkg/ssa v0.71.0
33-
github.com/fluxcd/pkg/tar v1.1.0
32+
github.com/fluxcd/pkg/ssa v0.70.0
33+
github.com/fluxcd/pkg/tar v0.17.0
3434
github.com/fluxcd/pkg/testserver v0.13.0
3535
github.com/fluxcd/source-controller/api v1.8.0
3636
github.com/getsops/sops/v3 v3.12.1
@@ -110,7 +110,6 @@ require (
110110
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.13 // indirect
111111
github.com/aws/aws-sdk-go-v2/service/sts v1.41.6 // indirect
112112
github.com/aws/smithy-go v1.24.0 // indirect
113-
github.com/aws/smithy-go/aws-http-auth v1.1.3 // indirect
114113
github.com/beorn7/perks v1.0.1 // indirect
115114
github.com/blang/semver v3.5.1+incompatible // indirect
116115
github.com/blang/semver/v4 v4.0.0 // indirect
@@ -136,7 +135,7 @@ require (
136135
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
137136
github.com/fatih/color v1.18.0 // indirect
138137
github.com/felixge/httpsnoop v1.0.4 // indirect
139-
github.com/fluxcd/pkg/envsubst v1.6.0 // indirect
138+
github.com/fluxcd/pkg/envsubst v1.5.0 // indirect
140139
github.com/fluxcd/pkg/sourceignore v0.17.0 // indirect
141140
github.com/fsnotify/fsnotify v1.9.0 // indirect
142141
github.com/fxamacker/cbor/v2 v2.9.0 // indirect

go.sum

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.41.6 h1:5fFjR/ToSOzB2OQ/XqWpZBmNvmP/
127127
github.com/aws/aws-sdk-go-v2/service/sts v1.41.6/go.mod h1:qgFDZQSD/Kys7nJnVqYlWKnh0SSdMjAi0uSwON4wgYQ=
128128
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
129129
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
130-
github.com/aws/smithy-go/aws-http-auth v1.1.3 h1:8/T7/2n8x+x9sIAmi5h5mDKS8v7/u2GEpF6T6RrGMrc=
131-
github.com/aws/smithy-go/aws-http-auth v1.1.3/go.mod h1:KL46VTjVK9De3jurMqDLBkXCP9vrAvD03zQrmyzyrQ0=
132130
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
133131
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
134132
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
@@ -213,24 +211,24 @@ github.com/fluxcd/pkg/apis/kustomize v1.16.0 h1:PhWXEhqQqsisIpwp1/wHvTvo+MO+GGzs
213211
github.com/fluxcd/pkg/apis/kustomize v1.16.0/go.mod h1:IZOy4CCtR/hxMGb7erK1RfbGnczVv4/dRBoVD37AywI=
214212
github.com/fluxcd/pkg/apis/meta v1.26.0 h1:dxP1FfBpTCYso6odzRcltVnnRuBb2VyhhgV0VX9YbUE=
215213
github.com/fluxcd/pkg/apis/meta v1.26.0/go.mod h1:c7o6mJGLCMvNrfdinGZehkrdZuFT9vZdZNrn66DtVD0=
216-
github.com/fluxcd/pkg/auth v0.41.0 h1:7NaaPN03ginRUUA928n7hiRJoBoMrF/Prl0AtDlLXBQ=
217-
github.com/fluxcd/pkg/auth v0.41.0/go.mod h1:U9xNHUyxOdPhxRnSW7dwloEF9EMeITxt84g8CD8YB3Q=
214+
github.com/fluxcd/pkg/auth v0.40.0 h1:p6Kw6KH+z8oRqngKhmTt8ILKD/rC+8tP87a//kLZhi8=
215+
github.com/fluxcd/pkg/auth v0.40.0/go.mod h1:Oq/hIEKUMTbL2bv5blf+EhC/jXXJLsOjIMtJj/AtG3Y=
218216
github.com/fluxcd/pkg/cache v0.13.0 h1:MqtlgOwIVcGKKgV422e39O+KFSVMWuExKeRaMDBjJlk=
219217
github.com/fluxcd/pkg/cache v0.13.0/go.mod h1:0xRZ1hitrIFQ6pl68ke2wZLbIqA2VLzY78HpDo9DVxs=
220-
github.com/fluxcd/pkg/envsubst v1.6.0 h1:up1bcNAQ6cCm1OA2aWlcERZqRhXE/V/QasHht5/+0lM=
221-
github.com/fluxcd/pkg/envsubst v1.6.0/go.mod h1:c3a8DYI855sZUubHFYQbjfjop6Wu4/zg1cLyf7SnCes=
222-
github.com/fluxcd/pkg/http/fetch v0.24.0 h1:helmjE86zZG6UTcWDV0IxkKpDKWh96FKeGDSz+W1ZcM=
223-
github.com/fluxcd/pkg/http/fetch v0.24.0/go.mod h1:4gGHbadYT5PpVELFfzPx+3FrXSJupcTxu4qciYsFZas=
224-
github.com/fluxcd/pkg/kustomize v1.30.0 h1:WVufDRbpgCTy+bR+ALVtKFfFpKXVAIEIlEceJbA210M=
225-
github.com/fluxcd/pkg/kustomize v1.30.0/go.mod h1:LBo4uYZdnPFQnCBg1qnPtSpntK6XJbybVSovdH+IxZw=
218+
github.com/fluxcd/pkg/envsubst v1.5.0 h1:S07mo+MkGhptdHA4pRze5HPKlc8tHxKswNdcMZi1WDY=
219+
github.com/fluxcd/pkg/envsubst v1.5.0/go.mod h1:c3a8DYI855sZUubHFYQbjfjop6Wu4/zg1cLyf7SnCes=
220+
github.com/fluxcd/pkg/http/fetch v0.22.0 h1:FT8CfstPE/e7+KRxNrx8ZJ1Uj5rkR5wXOtvQJurNQ0U=
221+
github.com/fluxcd/pkg/http/fetch v0.22.0/go.mod h1:X+8wF3peP79TyyDSgCJiavz+fAcYaf7CRXSeu7ccsPA=
222+
github.com/fluxcd/pkg/kustomize v1.29.0 h1:B/5hr9wX6INwaQAZ6BGKVNvZm++A6qjgorUfoaBAwPw=
223+
github.com/fluxcd/pkg/kustomize v1.29.0/go.mod h1:cW08mnngSP8MJYb6mDmMvxH8YjNATdiML0udb37dk+M=
226224
github.com/fluxcd/pkg/runtime v0.103.0 h1:J5y5GPhWdkyqIUBlaI1FP2N02TtZmsjbWhhZubuTSFk=
227225
github.com/fluxcd/pkg/runtime v0.103.0/go.mod h1:mbo2f3azo3yVQgm7XZGxQB6/2zvzQ5Wgtd8TjRRwwAw=
228226
github.com/fluxcd/pkg/sourceignore v0.17.0 h1:Z72nruRMhC15zIEpWoDrAcJcJ1El6QDnP/aRDfE4WOA=
229227
github.com/fluxcd/pkg/sourceignore v0.17.0/go.mod h1:3e/VmYLId0pI/H5sK7W9Ibif+j0Ahns9RxNjDMtTTfY=
230-
github.com/fluxcd/pkg/ssa v0.71.0 h1:xEGkY4OLo0tODJxjh3TX/lzxeqAiwjRDyKZ7dakz5Sc=
231-
github.com/fluxcd/pkg/ssa v0.71.0/go.mod h1:6igtlt7/zF+nNFQpa5ZAkkvtpL6o36NRU39/PqqC+Bg=
232-
github.com/fluxcd/pkg/tar v1.1.0 h1:BQWTQtoJCbqbAjtWp7lNCjRfP+/jYL6xFW5/ik5fAZ0=
233-
github.com/fluxcd/pkg/tar v1.1.0/go.mod h1:b1xyIRYDD0ket4SV5u0UXYv+ZdN/O/HmIO5jZQdHQls=
228+
github.com/fluxcd/pkg/ssa v0.70.0 h1:IBylYPiTK1IEdCC2DvjKXIhwQcbd5VufXA9WS3zO+tE=
229+
github.com/fluxcd/pkg/ssa v0.70.0/go.mod h1:6igtlt7/zF+nNFQpa5ZAkkvtpL6o36NRU39/PqqC+Bg=
230+
github.com/fluxcd/pkg/tar v0.17.0 h1:uNxbFXy8ly8C7fJ8D7w3rjTNJFrb4Hp1aY/30XkfvxY=
231+
github.com/fluxcd/pkg/tar v0.17.0/go.mod h1:b1xyIRYDD0ket4SV5u0UXYv+ZdN/O/HmIO5jZQdHQls=
234232
github.com/fluxcd/pkg/testserver v0.13.0 h1:xEpBcEYtD7bwvZ+i0ZmChxKkDo/wfQEV3xmnzVybSSg=
235233
github.com/fluxcd/pkg/testserver v0.13.0/go.mod h1:akRYv3FLQUsme15na9ihECRG6hBuqni4XEY9W8kzs8E=
236234
github.com/fluxcd/source-controller/api v1.8.0 h1:ndrYmcv6ZMcdQHFSUkOrFVDO7h16SfDBSw/DOqf/LPo=

internal/controller/kustomization_controller.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ type KustomizationReconciler struct {
120120
DirectSourceFetch bool
121121
FailFast bool
122122
GroupChangeLog bool
123+
MigrateAPIVersion bool
123124
StrictSubstitutions bool
124125
}
125126

@@ -867,6 +868,7 @@ func (r *KustomizationReconciler) apply(ctx context.Context,
867868
fmt.Sprintf("%s/force", kustomizev1.GroupVersion.Group): kustomizev1.EnabledValue,
868869
}
869870
applyOpts.CustomStageKinds = r.CustomStageKinds
871+
applyOpts.MigrateAPIVersion = r.MigrateAPIVersion
870872

871873
fieldManagers := []ssa.FieldManager{
872874
{

internal/features/features.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,18 @@ const (
5555
// immediate processing of the new revision. This can help avoid getting
5656
// stuck on failing deployments when fixes are available.
5757
CancelHealthCheckOnNewRevision = "CancelHealthCheckOnNewRevision"
58+
59+
// MigrateAPIVersion controls whether the controller migrates the API
60+
// version referenced by the managed fields entries of in-cluster objects
61+
// to the API version of the applied objects when they differ.
62+
//
63+
// This works around a server-side apply dry-run failure that can occur
64+
// after a CRD upgrade introduces a new optional field with a default
65+
// value in a newer API version: the managed fields entry owned by the
66+
// controller still references the old API version, and the API server
67+
// reports the defaulted field as "field not declared in schema" when
68+
// validating managed fields against the old version's schema.
69+
MigrateAPIVersion = "MigrateAPIVersion"
5870
)
5971

6072
var features = map[string]bool{
@@ -88,6 +100,9 @@ var features = map[string]bool{
88100
// DirectSourceFetch
89101
// opt-in from v1.8
90102
controller.FeatureGateDirectSourceFetch: false,
103+
// MigrateAPIVersion
104+
// opt-in from v1.8.4
105+
MigrateAPIVersion: false,
91106
}
92107

93108
func init() {

main.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,12 @@ func main() {
303303
os.Exit(1)
304304
}
305305

306+
migrateAPIVersion, err := features.Enabled(features.MigrateAPIVersion)
307+
if err != nil {
308+
setupLog.Error(err, "unable to check feature gate "+features.MigrateAPIVersion)
309+
os.Exit(1)
310+
}
311+
306312
var tokenCache *pkgcache.TokenCache
307313
if tokenCacheOptions.MaxSize > 0 {
308314
var err error
@@ -357,6 +363,7 @@ func main() {
357363
KubeConfigOpts: kubeConfigOpts,
358364
Mapper: restMapper,
359365
Metrics: metricsH,
366+
MigrateAPIVersion: migrateAPIVersion,
360367
NoCrossNamespaceRefs: aclOptions.NoCrossNamespaceRefs,
361368
NoRemoteBases: noRemoteBases,
362369
SOPSAgeSecret: sopsAgeSecret,

0 commit comments

Comments
 (0)