Skip to content

Commit 991d71e

Browse files
authored
Merge pull request kubernetes#81956 from apelisse/server-side-apply-beta
Server side apply beta
2 parents 1e6686e + 3969751 commit 991d71e

File tree

7 files changed

+281
-149
lines changed

7 files changed

+281
-149
lines changed

api/openapi-spec/swagger.json

Lines changed: 262 additions & 131 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/features/kube_features.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
579579
genericfeatures.APIResponseCompression: {Default: true, PreRelease: featuregate.Beta},
580580
genericfeatures.APIListChunking: {Default: true, PreRelease: featuregate.Beta},
581581
genericfeatures.DryRun: {Default: true, PreRelease: featuregate.Beta},
582-
genericfeatures.ServerSideApply: {Default: false, PreRelease: featuregate.Alpha},
582+
genericfeatures.ServerSideApply: {Default: true, PreRelease: featuregate.Beta},
583583
genericfeatures.RequestManagement: {Default: false, PreRelease: featuregate.Alpha},
584584

585585
// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed

staging/src/k8s.io/apiserver/pkg/features/kube_features.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ const (
9595

9696
// owner: @apelisse, @lavalamp
9797
// alpha: v1.14
98+
// beta: v1.16
9899
//
99100
// Server-side apply. Merging happens on the server.
100101
ServerSideApply featuregate.Feature = "ServerSideApply"
@@ -156,7 +157,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
156157
APIListChunking: {Default: true, PreRelease: featuregate.Beta},
157158
DryRun: {Default: true, PreRelease: featuregate.Beta},
158159
RemainingItemCount: {Default: true, PreRelease: featuregate.Beta},
159-
ServerSideApply: {Default: false, PreRelease: featuregate.Alpha},
160+
ServerSideApply: {Default: true, PreRelease: featuregate.Beta},
160161
StorageVersionHash: {Default: true, PreRelease: featuregate.Beta},
161162
WinOverlay: {Default: false, PreRelease: featuregate.Alpha},
162163
WinDSR: {Default: false, PreRelease: featuregate.Alpha},

staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,11 @@ func (o *ApplyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
204204
o.DryRun = cmdutil.GetDryRunFlag(cmd)
205205

206206
if o.ForceConflicts && !o.ServerSideApply {
207-
return fmt.Errorf("--experimental-force-conflicts only works with --experimental-server-side")
207+
return fmt.Errorf("--force-conflicts only works with --server-side")
208208
}
209209

210210
if o.DryRun && o.ServerSideApply {
211-
return fmt.Errorf("--dry-run doesn't work with --experimental-server-side (did you mean --server-dry-run instead?)")
211+
return fmt.Errorf("--dry-run doesn't work with --server-side (did you mean --server-dry-run instead?)")
212212
}
213213

214214
if o.DryRun && o.ServerDryRun {

staging/src/k8s.io/kubectl/pkg/cmd/diff/diff.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ func (o *DiffOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
402402
o.ServerSideApply = cmdutil.GetServerSideApplyFlag(cmd)
403403
o.ForceConflicts = cmdutil.GetForceConflictsFlag(cmd)
404404
if o.ForceConflicts && !o.ServerSideApply {
405-
return fmt.Errorf("--experimental-force-conflicts only works with --experimental-server-side")
405+
return fmt.Errorf("--force-conflicts only works with --server-side")
406406
}
407407

408408
if !o.ServerSideApply {

staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
"strings"
2727
"time"
2828

29-
"github.com/evanphx/json-patch"
29+
jsonpatch "github.com/evanphx/json-patch"
3030
"github.com/spf13/cobra"
3131
"github.com/spf13/pflag"
3232
kerrors "k8s.io/apimachinery/pkg/api/errors"
@@ -409,9 +409,9 @@ func AddDryRunFlag(cmd *cobra.Command) {
409409
}
410410

411411
func AddServerSideApplyFlags(cmd *cobra.Command) {
412-
cmd.Flags().Bool("experimental-server-side", false, "If true, apply runs in the server instead of the client. This is an alpha feature and flag.")
413-
cmd.Flags().Bool("experimental-force-conflicts", false, "If true, server-side apply will force the changes against conflicts. This is an alpha feature and flag.")
414-
cmd.Flags().String("experimental-field-manager", "kubectl", "Name of the manager used to track field ownership. This is an alpha feature and flag.")
412+
cmd.Flags().Bool("server-side", false, "If true, apply runs in the server instead of the client.")
413+
cmd.Flags().Bool("force-conflicts", false, "If true, server-side apply will force the changes against conflicts.")
414+
cmd.Flags().String("field-manager", "kubectl", "Name of the manager used to track field ownership.")
415415
}
416416

417417
func AddIncludeUninitializedFlag(cmd *cobra.Command) {
@@ -488,15 +488,15 @@ func DumpReaderToFile(reader io.Reader, filename string) error {
488488
}
489489

490490
func GetServerSideApplyFlag(cmd *cobra.Command) bool {
491-
return GetFlagBool(cmd, "experimental-server-side")
491+
return GetFlagBool(cmd, "server-side")
492492
}
493493

494494
func GetForceConflictsFlag(cmd *cobra.Command) bool {
495-
return GetFlagBool(cmd, "experimental-force-conflicts")
495+
return GetFlagBool(cmd, "force-conflicts")
496496
}
497497

498498
func GetFieldManagerFlag(cmd *cobra.Command) string {
499-
return GetFlagString(cmd, "experimental-field-manager")
499+
return GetFlagString(cmd, "field-manager")
500500
}
501501

502502
func GetDryRunFlag(cmd *cobra.Command) bool {

test/cmd/apply.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,12 +249,12 @@ run_kubectl_apply_tests() {
249249
set -o errexit
250250

251251
create_and_use_new_namespace
252-
kube::log::status "Testing kubectl apply --experimental-server-side"
252+
kube::log::status "Testing kubectl apply --server-side"
253253
## kubectl apply should create the resource that doesn't exist yet
254254
# Pre-Condition: no POD exists
255255
kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" ''
256256
# Command: apply a pod "test-pod" (doesn't exist) should create this pod
257-
kubectl apply --experimental-server-side -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
257+
kubectl apply --server-side -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
258258
# Post-Condition: pod "test-pod" is created
259259
kube::test::get_object_assert 'pods test-pod' "{{${labels_field:?}.name}}" 'test-pod-label'
260260
# Clean up
@@ -265,13 +265,13 @@ run_kubectl_apply_tests() {
265265
kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" ''
266266

267267
# apply dry-run
268-
kubectl apply --experimental-server-side --server-dry-run -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
268+
kubectl apply --server-side --server-dry-run -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
269269
# No pod exists
270270
kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" ''
271271
# apply non dry-run creates the pod
272-
kubectl apply --experimental-server-side -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
272+
kubectl apply --server-side -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
273273
# apply changes
274-
kubectl apply --experimental-server-side --server-dry-run -f hack/testdata/pod-apply.yaml "${kube_flags[@]:?}"
274+
kubectl apply --server-side --server-dry-run -f hack/testdata/pod-apply.yaml "${kube_flags[@]:?}"
275275
# Post-Condition: label still has initial value
276276
kube::test::get_object_assert 'pods test-pod' "{{${labels_field:?}.name}}" 'test-pod-label'
277277

@@ -302,7 +302,7 @@ run_kubectl_apply_tests() {
302302
__EOF__
303303

304304
# Dry-run create the CR
305-
kubectl "${kube_flags[@]:?}" apply --experimental-server-side --server-dry-run -f hack/testdata/CRD/resource.yaml "${kube_flags[@]:?}"
305+
kubectl "${kube_flags[@]:?}" apply --server-side --server-dry-run -f hack/testdata/CRD/resource.yaml "${kube_flags[@]:?}"
306306
# Make sure that the CR doesn't exist
307307
! kubectl "${kube_flags[@]:?}" get resource/myobj
308308

0 commit comments

Comments
 (0)