Merge pull request #123323 from gjkim42/add-ValidateInitContainerStateTransition

Validate restartable init container state transition
This commit is contained in:
Kubernetes Prow Robot
2024-03-04 16:21:30 -08:00
committed by GitHub
2 changed files with 422 additions and 1 deletions

View File

@@ -15129,6 +15129,387 @@ func TestValidatePodStatusUpdate(t *testing.T) {
},
"",
"ResourceClaimStatuses okay",
}, {
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "init",
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "init",
Ready: true,
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "init",
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
RestartPolicy: core.RestartPolicyNever,
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "init",
Ready: false,
State: core.ContainerState{
Terminated: &core.ContainerStateTerminated{
ContainerID: "docker://numbers",
Reason: "Completed",
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
`status.initContainerStatuses[0].state: Forbidden: may not be transitioned to non-terminated state`,
"init container cannot restart if RestartPolicyNever",
}, {
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "restartable-init",
RestartPolicy: &containerRestartPolicyAlways,
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
RestartPolicy: core.RestartPolicyNever,
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "restartable-init",
Ready: true,
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "restartable-init",
RestartPolicy: &containerRestartPolicyAlways,
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
RestartPolicy: core.RestartPolicyNever,
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "restartable-init",
Ready: false,
State: core.ContainerState{
Terminated: &core.ContainerStateTerminated{
ContainerID: "docker://numbers",
Reason: "Completed",
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
"",
"restartable init container can restart if RestartPolicyNever",
}, {
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "restartable-init",
RestartPolicy: &containerRestartPolicyAlways,
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
RestartPolicy: core.RestartPolicyOnFailure,
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "restartable-init",
Ready: true,
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "restartable-init",
RestartPolicy: &containerRestartPolicyAlways,
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
RestartPolicy: core.RestartPolicyOnFailure,
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "restartable-init",
Ready: false,
State: core.ContainerState{
Terminated: &core.ContainerStateTerminated{
ContainerID: "docker://numbers",
Reason: "Completed",
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
"",
"restartable init container can restart if RestartPolicyOnFailure",
}, {
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "restartable-init",
RestartPolicy: &containerRestartPolicyAlways,
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
RestartPolicy: core.RestartPolicyAlways,
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "restartable-init",
Ready: true,
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
core.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
Spec: core.PodSpec{
InitContainers: []core.Container{
{
Name: "restartable-init",
RestartPolicy: &containerRestartPolicyAlways,
},
},
Containers: []core.Container{
{
Name: "nginx",
},
},
RestartPolicy: core.RestartPolicyAlways,
},
Status: core.PodStatus{
InitContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "restartable-init",
Ready: false,
State: core.ContainerState{
Terminated: &core.ContainerStateTerminated{
ContainerID: "docker://numbers",
Reason: "Completed",
},
},
}},
ContainerStatuses: []core.ContainerStatus{{
ContainerID: "docker://numbers",
Image: "nginx:alpine",
ImageID: "docker-pullable://nginx@sha256:d0gf00d",
Name: "nginx",
Ready: true,
Started: proto.Bool(true),
State: core.ContainerState{
Running: &core.ContainerStateRunning{
StartedAt: metav1.NewTime(time.Now()),
},
},
}},
},
},
"",
"restartable init container can restart if RestartPolicyAlways",
},
}