@@ -211,6 +211,52 @@ func runMnistRayJobRayClusterAppWrapper(t *testing.T, accelerator string, number
211
211
test .Eventually (AppWrappers (test , namespace ), TestTimeoutShort ).Should (BeEmpty ())
212
212
}
213
213
214
+ // Verifying https://github.com/project-codeflare/codeflare-operator/issues/649
215
+ func TestRayClusterImagePullSecret (t * testing.T ) {
216
+ test := With (t )
217
+
218
+ // Create a namespace
219
+ namespace := test .NewTestNamespace ()
220
+
221
+ // Create Kueue resources
222
+ resourceFlavor := CreateKueueResourceFlavor (test , v1beta1.ResourceFlavorSpec {})
223
+ defer func () {
224
+ _ = test .Client ().Kueue ().KueueV1beta1 ().ResourceFlavors ().Delete (test .Ctx (), resourceFlavor .Name , metav1.DeleteOptions {})
225
+ }()
226
+ clusterQueue := createClusterQueue (test , resourceFlavor , 0 )
227
+ defer func () {
228
+ _ = test .Client ().Kueue ().KueueV1beta1 ().ClusterQueues ().Delete (test .Ctx (), clusterQueue .Name , metav1.DeleteOptions {})
229
+ }()
230
+ CreateKueueLocalQueue (test , namespace .Name , clusterQueue .Name , AsDefaultQueue )
231
+
232
+ // Create ServiceAccount, wait until corresponding imagePullSecret is available
233
+ sa := CreateServiceAccount (test , namespace .Name )
234
+ test .Eventually (ServiceAccount (test , sa .Namespace , sa .Name ), TestTimeoutShort ).
235
+ Should (
236
+ HaveField ("ImagePullSecrets" , HaveLen (1 )),
237
+ )
238
+ sa = GetServiceAccount (test , sa .Namespace , sa .Name )
239
+
240
+ // Create MNIST training script
241
+ mnist := constructMNISTConfigMap (test , namespace )
242
+ mnist , err := test .Client ().Core ().CoreV1 ().ConfigMaps (namespace .Name ).Create (test .Ctx (), mnist , metav1.CreateOptions {})
243
+ test .Expect (err ).NotTo (HaveOccurred ())
244
+ test .T ().Logf ("Created ConfigMap %s/%s successfully" , mnist .Namespace , mnist .Name )
245
+
246
+ // Create RayCluster with imagePullSecret and assign it to the localqueue
247
+ rayCluster := constructRayCluster (test , namespace , mnist , 0 )
248
+ rayCluster .Spec .HeadGroupSpec .Template .Spec .ImagePullSecrets = sa .ImagePullSecrets
249
+ rayCluster , err = test .Client ().Ray ().RayV1 ().RayClusters (namespace .Name ).Create (test .Ctx (), rayCluster , metav1.CreateOptions {})
250
+ test .Expect (err ).NotTo (HaveOccurred ())
251
+ test .T ().Logf ("Created RayCluster %s/%s successfully" , rayCluster .Namespace , rayCluster .Name )
252
+
253
+ test .T ().Logf ("Waiting for RayCluster %s/%s to be running" , rayCluster .Namespace , rayCluster .Name )
254
+ test .Eventually (RayCluster (test , namespace .Name , rayCluster .Name ), TestTimeoutMedium ).
255
+ Should (WithTransform (RayClusterState , Equal (rayv1 .Ready )))
256
+ }
257
+
258
+ // Helper functions
259
+
214
260
func constructMNISTConfigMap (test Test , namespace * corev1.Namespace ) * corev1.ConfigMap {
215
261
return & corev1.ConfigMap {
216
262
TypeMeta : metav1.TypeMeta {
@@ -274,11 +320,11 @@ func constructRayCluster(_ Test, namespace *corev1.Namespace, mnist *corev1.Conf
274
320
Resources : corev1.ResourceRequirements {
275
321
Requests : corev1.ResourceList {
276
322
corev1 .ResourceCPU : resource .MustParse ("250m" ),
277
- corev1 .ResourceMemory : resource .MustParse ("512Mi " ),
323
+ corev1 .ResourceMemory : resource .MustParse ("2G " ),
278
324
},
279
325
Limits : corev1.ResourceList {
280
326
corev1 .ResourceCPU : resource .MustParse ("1" ),
281
- corev1 .ResourceMemory : resource .MustParse ("2G " ),
327
+ corev1 .ResourceMemory : resource .MustParse ("4G " ),
282
328
},
283
329
},
284
330
},
0 commit comments