This commit is contained in:
Nikola Jokic
2026-07-14 19:54:25 +02:00
parent 10ae75d557
commit d2e63d7ca7
8 changed files with 97 additions and 75 deletions
@@ -223,8 +223,9 @@ var _ = Describe("EphemeralRunner", func() {
).Should(Succeed(), "failed to get ephemeral runner")
// update job id to simulate job assigned
er.Status.JobID = "1"
err := k8sClient.Status().Update(ctx, er)
updatedER := er.DeepCopy()
updatedER.Status.JobID = "1"
err := k8sClient.Status().Patch(ctx, updatedER, client.MergeFrom(er))
Expect(err).To(BeNil(), "failed to update ephemeral runner status")
er = new(v1alpha1.EphemeralRunner)
@@ -249,7 +250,8 @@ var _ = Describe("EphemeralRunner", func() {
}).Should(BeEquivalentTo(true))
// delete pod to simulate failure
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
@@ -257,7 +259,7 @@ var _ = Describe("EphemeralRunner", func() {
},
},
})
err = k8sClient.Status().Update(ctx, pod)
err = k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
er = new(v1alpha1.EphemeralRunner)
@@ -277,8 +279,9 @@ var _ = Describe("EphemeralRunner", func() {
return k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, er)
}, ephemeralRunnerTimeout, ephemeralRunnerInterval).Should(Succeed(), "failed to get ephemeral runner")
er.Status.JobID = "1"
err := k8sClient.Status().Update(ctx, er)
updatedER := er.DeepCopy()
updatedER.Status.JobID = "1"
err := k8sClient.Status().Patch(ctx, updatedER, client.MergeFrom(er))
Expect(err).To(BeNil(), "failed to update ephemeral runner status")
Eventually(func() (string, error) {
@@ -297,9 +300,10 @@ var _ = Describe("EphemeralRunner", func() {
return true, nil
}, ephemeralRunnerTimeout, ephemeralRunnerInterval).Should(BeEquivalentTo(true))
pod.Status.Phase = corev1.PodFailed
pod.Status.ContainerStatuses = nil
err = k8sClient.Status().Update(ctx, pod)
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodFailed
updatedPod.Status.ContainerStatuses = nil
err = k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
Eventually(func() bool {
@@ -320,9 +324,10 @@ var _ = Describe("EphemeralRunner", func() {
oldPodUID := pod.UID
pod.Status.Phase = corev1.PodFailed
pod.Status.ContainerStatuses = nil
err := k8sClient.Status().Update(ctx, pod)
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodFailed
updatedPod.Status.ContainerStatuses = nil
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
Eventually(
@@ -369,8 +374,9 @@ var _ = Describe("EphemeralRunner", func() {
// Simulate init container failure without PodFailed phase.
// This can happen when the kubelet has not yet transitioned the pod phase.
pod.Status.Phase = corev1.PodPending
pod.Status.InitContainerStatuses = []corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodPending
updatedPod.Status.InitContainerStatuses = []corev1.ContainerStatus{
{
Name: "setup",
State: corev1.ContainerState{
@@ -382,7 +388,7 @@ var _ = Describe("EphemeralRunner", func() {
},
},
}
err := k8sClient.Status().Update(ctx, pod)
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
Eventually(
@@ -422,8 +428,9 @@ var _ = Describe("EphemeralRunner", func() {
return k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, er)
}, ephemeralRunnerTimeout, ephemeralRunnerInterval).Should(Succeed(), "failed to get ephemeral runner")
er.Status.JobID = "1"
err := k8sClient.Status().Update(ctx, er)
updatedER := er.DeepCopy()
updatedER.Status.JobID = "1"
err := k8sClient.Status().Patch(ctx, updatedER, client.MergeFrom(er))
Expect(err).To(BeNil(), "failed to update ephemeral runner status")
Eventually(func() (string, error) {
@@ -443,8 +450,9 @@ var _ = Describe("EphemeralRunner", func() {
}, ephemeralRunnerTimeout, ephemeralRunnerInterval).Should(BeEquivalentTo(true))
// Simulate init container failure with job assigned
pod.Status.Phase = corev1.PodPending
pod.Status.InitContainerStatuses = []corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodPending
updatedPod.Status.InitContainerStatuses = []corev1.ContainerStatus{
{
Name: "setup",
State: corev1.ContainerState{
@@ -455,7 +463,7 @@ var _ = Describe("EphemeralRunner", func() {
},
},
}
err = k8sClient.Status().Update(ctx, pod)
err = k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
Eventually(func() bool {
@@ -471,8 +479,9 @@ var _ = Describe("EphemeralRunner", func() {
return k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, er)
}, ephemeralRunnerTimeout, ephemeralRunnerInterval).Should(Succeed(), "failed to get ephemeral runner")
er.Status.JobID = "1"
err := k8sClient.Status().Update(ctx, er)
updatedER := er.DeepCopy()
updatedER.Status.JobID = "1"
err := k8sClient.Status().Patch(ctx, updatedER, client.MergeFrom(er))
Expect(err).To(BeNil(), "failed to update ephemeral runner status")
pod := new(corev1.Pod)
@@ -487,8 +496,9 @@ var _ = Describe("EphemeralRunner", func() {
ephemeralRunnerInterval,
).Should(Succeed(), "failed to get pod")
pod.Status.Phase = corev1.PodFailed
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodFailed
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
@@ -496,7 +506,7 @@ var _ = Describe("EphemeralRunner", func() {
},
},
})
err = k8sClient.Status().Update(ctx, pod)
err = k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
Eventually(
@@ -523,8 +533,9 @@ var _ = Describe("EphemeralRunner", func() {
ephemeralRunnerInterval,
).Should(Succeed(), "failed to get pod")
pod.Status.Phase = corev1.PodFailed
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodFailed
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
@@ -532,7 +543,7 @@ var _ = Describe("EphemeralRunner", func() {
},
},
})
err := k8sClient.Status().Update(ctx, pod)
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
Eventually(
@@ -568,9 +579,10 @@ var _ = Describe("EphemeralRunner", func() {
ephemeralRunnerInterval,
).Should(Succeed(), "failed to get pod")
pod.Status.Phase = corev1.PodFailed
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodFailed
oldPodUID := pod.UID
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
@@ -579,7 +591,7 @@ var _ = Describe("EphemeralRunner", func() {
},
})
err := k8sClient.Status().Update(ctx, pod)
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
Eventually(
@@ -939,8 +951,9 @@ var _ = Describe("EphemeralRunner", func() {
ephemeralRunnerInterval,
).Should(BeEquivalentTo(true))
pod.Status.Phase = corev1.PodRunning
err := k8sClient.Status().Update(ctx, pod)
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodRunning
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "failed to patch pod status")
Consistently(
@@ -975,7 +988,8 @@ var _ = Describe("EphemeralRunner", func() {
ephemeralRunnerInterval,
).Should(Succeed(), "failed to get ephemeral runner pod")
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
@@ -983,10 +997,10 @@ var _ = Describe("EphemeralRunner", func() {
},
},
})
err := k8sClient.Status().Update(ctx, pod)
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "Failed to update pod status")
return pod
return updatedPod
}
for i := range 5 {
@@ -1065,13 +1079,14 @@ var _ = Describe("EphemeralRunner", func() {
ephemeralRunnerInterval,
).Should(BeEquivalentTo(true))
pod.Status.Phase = corev1.PodFailed
pod.Status.Reason = "Evicted"
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodFailed
updatedPod.Status.Reason = "Evicted"
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{},
})
err := k8sClient.Status().Update(ctx, pod)
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "failed to patch pod status")
updated := new(v1alpha1.EphemeralRunner)
@@ -1111,13 +1126,14 @@ var _ = Describe("EphemeralRunner", func() {
ephemeralRunnerInterval,
).Should(BeEquivalentTo(true))
pod.Status.Phase = corev1.PodFailed
pod.Status.Reason = "OutOfpods"
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.Phase = corev1.PodFailed
updatedPod.Status.Reason = "OutOfpods"
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{},
})
err := k8sClient.Status().Update(ctx, pod)
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "failed to patch pod status")
updated := new(v1alpha1.EphemeralRunner)
@@ -1157,7 +1173,8 @@ var _ = Describe("EphemeralRunner", func() {
).Should(BeEquivalentTo(true))
// first set phase to running
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{
Running: &corev1.ContainerStateRunning{
@@ -1165,8 +1182,8 @@ var _ = Describe("EphemeralRunner", func() {
},
},
})
pod.Status.Phase = corev1.PodRunning
err := k8sClient.Status().Update(ctx, pod)
updatedPod.Status.Phase = corev1.PodRunning
err := k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil())
Eventually(
@@ -1182,8 +1199,9 @@ var _ = Describe("EphemeralRunner", func() {
).Should(BeEquivalentTo(v1alpha1.EphemeralRunnerPhaseRunning))
// set phase to succeeded
pod.Status.Phase = corev1.PodSucceeded
err = k8sClient.Status().Update(ctx, pod)
nextPod := updatedPod.DeepCopy()
nextPod.Status.Phase = corev1.PodSucceeded
err = k8sClient.Status().Patch(ctx, nextPod, client.MergeFrom(updatedPod))
Expect(err).To(BeNil())
Consistently(
@@ -1258,7 +1276,8 @@ var _ = Describe("EphemeralRunner", func() {
return true, nil
}, ephemeralRunnerTimeout, ephemeralRunnerInterval).Should(BeEquivalentTo(true))
pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{
updatedPod := pod.DeepCopy()
updatedPod.Status.ContainerStatuses = append(updatedPod.Status.ContainerStatuses, corev1.ContainerStatus{
Name: v1alpha1.EphemeralRunnerContainerName,
State: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
@@ -1266,7 +1285,7 @@ var _ = Describe("EphemeralRunner", func() {
},
},
})
err = k8sClient.Status().Update(ctx, pod)
err = k8sClient.Status().Patch(ctx, updatedPod, client.MergeFrom(pod))
Expect(err).To(BeNil(), "failed to update pod status")
updated := new(v1alpha1.EphemeralRunner)