diff --git a/pkg/api/v1/pod/util.go b/pkg/api/v1/pod/util.go index 85eb5338337..3aadefdb546 100644 --- a/pkg/api/v1/pod/util.go +++ b/pkg/api/v1/pod/util.go @@ -103,6 +103,9 @@ func SetInitContainersStatusesAnnotations(pod *v1.Pod) error { } pod.Annotations[v1.PodInitContainerStatusesAnnotationKey] = string(value) pod.Annotations[v1.PodInitContainerStatusesBetaAnnotationKey] = string(value) + } else { + delete(pod.Annotations, v1.PodInitContainerStatusesAnnotationKey) + delete(pod.Annotations, v1.PodInitContainerStatusesBetaAnnotationKey) } return nil } diff --git a/pkg/api/v1/pod/util_test.go b/pkg/api/v1/pod/util_test.go index 63f507894ea..41ab0d33c0a 100644 --- a/pkg/api/v1/pod/util_test.go +++ b/pkg/api/v1/pod/util_test.go @@ -17,6 +17,7 @@ limitations under the License. package pod import ( + "encoding/json" "reflect" "strings" "testing" @@ -399,3 +400,52 @@ func TestIsPodAvailable(t *testing.T) { } } } + +func TestSetInitContainersStatusesAnnotations(t *testing.T) { + testStatuses := []v1.ContainerStatus{ + { + Name: "test", + }, + } + value, _ := json.Marshal(testStatuses) + testAnnotation := string(value) + tests := []struct { + name string + pod *v1.Pod + annotations map[string]string + }{ + { + name: "Populate annotations from status", + pod: &v1.Pod{ + Status: v1.PodStatus{ + InitContainerStatuses: testStatuses, + }, + }, + annotations: map[string]string{ + v1.PodInitContainerStatusesAnnotationKey: testAnnotation, + v1.PodInitContainerStatusesBetaAnnotationKey: testAnnotation, + }, + }, + { + name: "Clear annotations if no status", + pod: &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + v1.PodInitContainerStatusesAnnotationKey: testAnnotation, + v1.PodInitContainerStatusesBetaAnnotationKey: testAnnotation, + }, + }, + Status: v1.PodStatus{ + InitContainerStatuses: []v1.ContainerStatus{}, + }, + }, + annotations: map[string]string{}, + }, + } + for _, test := range tests { + SetInitContainersStatusesAnnotations(test.pod) + if !reflect.DeepEqual(test.pod.Annotations, test.annotations) { + t.Errorf("%v, actual = %v, expected = %v", test.name, test.pod.Annotations, test.annotations) + } + } +}