@@ -546,10 +546,12 @@ async def patch_session(
546546 if extra_containers :
547547 patch .spec .extraContainers = extra_containers
548548
549+ # Patching the image pull secret
549550 if isinstance (user , AuthenticatedAPIUser ) and internal_gitlab_user .access_token is not None :
550551 image = session .spec .session .image
551552 server_name = session .metadata .name
552553 needs_pull_secret = await requires_image_pull_secret (nb_config , image , internal_gitlab_user )
554+ logger .info (f"Session with ID { session_id } needs pull secret for image { image } : { needs_pull_secret } " )
553555
554556 if needs_pull_secret :
555557 image_pull_secret_name = f"{ server_name } -image-secret"
@@ -558,14 +560,22 @@ async def patch_session(
558560 image_secret = get_gitlab_image_pull_secret (
559561 nb_config , user , image_pull_secret_name , internal_gitlab_user .access_token
560562 )
561- if image_secret :
562- updated_secrets = [
563- secret
564- for secret in (session .spec .imagePullSecrets or [])
565- if not secret .name .endswith ("-image-secret" )
566- ]
567- updated_secrets .append (ImagePullSecret (name = image_pull_secret_name , adopt = True ))
568- patch .spec .imagePullSecrets = updated_secrets
563+
564+ if not image_secret :
565+ logger .error (f"Failed to create image pull secret for session ID { session_id } with image { image } " )
566+ raise errors .ProgrammingError (
567+ message = f"We cannot retrive credentials for your private image { image } . "
568+ "In order to resolve this problem, you can try to log out and back in "
569+ "and/or check that you still have permissions for the image repository."
570+ )
571+ # Ensure the secret is created in the cluster
572+ await nb_config .k8s_v2_client .create_secret (image_secret .secret )
573+
574+ updated_secrets = [
575+ secret for secret in (session .spec .imagePullSecrets or []) if not secret .name .endswith ("-image-secret" )
576+ ]
577+ updated_secrets .append (ImagePullSecret (name = image_pull_secret_name , adopt = True ))
578+ patch .spec .imagePullSecrets = updated_secrets
569579
570580 patch_serialized = patch .to_rfc7386 ()
571581 if len (patch_serialized ) == 0 :
0 commit comments