Skip to content

Commit 44e5264

Browse files
UPSTREAM: <carry>: add service account to curl job
1 parent 9fcd630 commit 44e5264

1 file changed

Lines changed: 34 additions & 4 deletions

File tree

openshift/tests-extension/test/olmv1-catalog.go

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
batchv1 "k8s.io/api/batch/v1"
1313
corev1 "k8s.io/api/core/v1"
14+
apierrors "k8s.io/apimachinery/pkg/api/errors"
1415
"k8s.io/apimachinery/pkg/api/meta"
1516
"k8s.io/apimachinery/pkg/api/resource"
1617
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -76,12 +77,40 @@ func verifyCatalogEndpoint(ctx SpecContext, catalog, endpoint, query string) {
7677
strings.ReplaceAll(endpoint, "?", ""),
7778
strings.ReplaceAll(catalog, "-", ""))
7879

79-
job := buildCurlJob(jobNamePrefix, "default", serviceURL)
80+
// Create the ServiceAccount first
81+
serviceAccount := &corev1.ServiceAccount{
82+
ObjectMeta: metav1.ObjectMeta{
83+
Name: jobNamePrefix,
84+
Namespace: "default",
85+
},
86+
}
87+
88+
err = k8sClient.Create(ctx, serviceAccount)
89+
Expect(err).NotTo(HaveOccurred(), "failed to create ServiceAccount")
90+
91+
// Create the Job
92+
job := buildCurlJob(jobNamePrefix, "default", serviceURL, serviceAccount.Name)
8093
err = k8sClient.Create(ctx, job)
8194
Expect(err).NotTo(HaveOccurred(), "failed to create Job")
8295

8396
DeferCleanup(func(ctx SpecContext) {
84-
_ = k8sClient.Delete(ctx, job)
97+
// Force delete job with zero grace period to ensure cleanup doesn't hang
98+
// Use Foreground propagation to ensure Pods are deleted before the Job is removed,
99+
// guaranteeing the ServiceAccount isn't deleted while Pods are still using it
100+
deletePolicy := metav1.DeletePropagationForeground
101+
gracePeriod := int64(0)
102+
err := k8sClient.Delete(ctx, job, &client.DeleteOptions{
103+
GracePeriodSeconds: &gracePeriod,
104+
PropagationPolicy: &deletePolicy,
105+
})
106+
if err != nil && !apierrors.IsNotFound(err) {
107+
Expect(err).NotTo(HaveOccurred(), "failed to delete Job")
108+
}
109+
Eventually(func(g Gomega) {
110+
err := k8sClient.Get(ctx, client.ObjectKeyFromObject(job), &batchv1.Job{})
111+
g.Expect(err).To(HaveOccurred())
112+
}).WithTimeout(helpers.DefaultTimeout).WithPolling(helpers.DefaultPolling).Should(Succeed())
113+
_ = k8sClient.Delete(ctx, serviceAccount)
85114
})
86115

87116
By("Waiting for Job to succeed")
@@ -203,7 +232,7 @@ var _ = Describe("[sig-olmv1][OCPFeatureGate:NewOLM][Skipped:Disconnected] OLMv1
203232
})
204233
})
205234

206-
func buildCurlJob(prefix, namespace, url string) *batchv1.Job {
235+
func buildCurlJob(prefix, namespace, url, serviceAccountName string) *batchv1.Job {
207236
backoff := int32(1)
208237
// This means the k8s garbage collector will automatically delete the job 5 minutes
209238
// after it has completed or failed.
@@ -232,7 +261,8 @@ func buildCurlJob(prefix, namespace, url string) *batchv1.Job {
232261
BackoffLimit: &backoff,
233262
Template: corev1.PodTemplateSpec{
234263
Spec: corev1.PodSpec{
235-
RestartPolicy: corev1.RestartPolicyNever,
264+
ServiceAccountName: serviceAccountName,
265+
RestartPolicy: corev1.RestartPolicyNever,
236266
Containers: []corev1.Container{{
237267
Name: "api-tester",
238268
Image: "registry.redhat.io/rhel8/httpd-24:latest",

0 commit comments

Comments
 (0)