Skip to content

Commit b14fad5

Browse files
authored
Merge pull request kubernetes#130181 from natasha41575/apiserver-generation
start setting pod metadata.generation
2 parents 3985b78 + d02401d commit b14fad5

File tree

7 files changed

+428
-2
lines changed

7 files changed

+428
-2
lines changed

pkg/api/pod/testing/make.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,12 @@ func SetLabels(annos map[string]string) Tweak {
202202
}
203203
}
204204

205+
func SetGeneration(gen int64) Tweak {
206+
return func(pod *api.Pod) {
207+
pod.Generation = gen
208+
}
209+
}
210+
205211
func SetSchedulingGates(gates ...api.PodSchedulingGate) Tweak {
206212
return func(pod *api.Pod) {
207213
pod.Spec.SchedulingGates = gates

pkg/apis/core/validation/validation.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5581,7 +5581,7 @@ func ValidatePodEphemeralContainersUpdate(newPod, oldPod *core.Pod, opts PodVali
55815581
func ValidatePodResize(newPod, oldPod *core.Pod, opts PodValidationOptions) field.ErrorList {
55825582
// Part 1: Validate newPod's spec and updates to metadata
55835583
fldPath := field.NewPath("metadata")
5584-
allErrs := ValidateImmutableField(&newPod.ObjectMeta, &oldPod.ObjectMeta, fldPath)
5584+
allErrs := ValidateObjectMetaUpdate(&newPod.ObjectMeta, &oldPod.ObjectMeta, fldPath)
55855585
allErrs = append(allErrs, validatePodMetadataAndSpec(newPod, opts)...)
55865586

55875587
// pods with pod-level resources cannot be resized

pkg/registry/core/pod/strategy.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ func (podStrategy) GetResetFields() map[fieldpath.APIVersion]*fieldpath.Set {
8686
// PrepareForCreate clears fields that are not allowed to be set by end users on creation.
8787
func (podStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) {
8888
pod := obj.(*api.Pod)
89+
pod.Generation = 1
8990
pod.Status = api.PodStatus{
9091
Phase: api.PodPending,
9192
QOSClass: qos.GetPodQOS(pod),
@@ -104,6 +105,7 @@ func (podStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object
104105
oldPod := old.(*api.Pod)
105106
newPod.Status = oldPod.Status
106107
podutil.DropDisabledPodFields(newPod, oldPod)
108+
updatePodGeneration(newPod, oldPod)
107109
}
108110

109111
// Validate validates a new pod.
@@ -260,6 +262,7 @@ func (podEphemeralContainersStrategy) PrepareForUpdate(ctx context.Context, obj,
260262

261263
*newPod = *dropNonEphemeralContainerUpdates(newPod, oldPod)
262264
podutil.DropDisabledPodFields(newPod, oldPod)
265+
updatePodGeneration(newPod, oldPod)
263266
}
264267

265268
func (podEphemeralContainersStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
@@ -334,6 +337,7 @@ func (podResizeStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.
334337
*newPod = *dropNonResizeUpdates(newPod, oldPod)
335338
podutil.MarkPodProposedForResize(oldPod, newPod)
336339
podutil.DropDisabledPodFields(newPod, oldPod)
340+
updatePodGeneration(newPod, oldPod)
337341
}
338342

339343
func (podResizeStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
@@ -975,3 +979,11 @@ func apparmorFieldForAnnotation(annotation string) *api.AppArmorProfile {
975979
// length or if the annotation has an unrecognized value
976980
return nil
977981
}
982+
983+
// updatePodGeneration bumps metadata.generation if needed for any updates
984+
// to the podspec.
985+
func updatePodGeneration(newPod, oldPod *api.Pod) {
986+
if !apiequality.Semantic.DeepEqual(newPod.Spec, oldPod.Spec) {
987+
newPod.Generation++
988+
}
989+
}

0 commit comments

Comments
 (0)