Skip to content

Commit 34996b3

Browse files
authored
Merge pull request #1806 from sgaist/build_image_pull_secrets
Implement support for image pull secrets for build pod
2 parents 819bba8 + 0ebb9d7 commit 34996b3

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

binderhub/build.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,10 @@ def _default_namespace(self):
297297
def _default_builder_info(self):
298298
return {"build_image": self.build_image}
299299

300+
image_pull_secrets = List(
301+
[], help="Pull secrets for the builder image", config=True
302+
)
303+
300304
docker_host = Unicode(
301305
"/var/run/docker.sock",
302306
allow_none=True,
@@ -455,6 +459,18 @@ def get_builder_volumes(self):
455459

456460
return volumes, volume_mounts
457461

462+
def get_image_pull_secrets(self):
463+
"""
464+
Get the list of image pull secrets to be used for the builder image
465+
"""
466+
467+
image_pull_secrets = []
468+
469+
for secret in self.image_pull_secrets:
470+
image_pull_secrets.append(client.V1LocalObjectReference(name=secret))
471+
472+
return image_pull_secrets
473+
458474
def submit(self):
459475
"""
460476
Submit a build pod to create the image for the repository.
@@ -526,6 +542,7 @@ def submit(self):
526542
volumes=volumes,
527543
restart_policy="Never",
528544
affinity=self.get_affinity(),
545+
image_pull_secrets=self.get_image_pull_secrets(),
529546
),
530547
)
531548

binderhub/tests/test_build.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,44 @@ class EnvBuild(KubernetesBuildExecutor):
417417
assert env == extra_environments
418418

419419

420+
def test_build_image_pull_secrets():
421+
build_pull_secrets = ["build-image-secret", "build-image-secret-2"]
422+
423+
mock_k8s_api = _list_image_builder_pods_mock()
424+
425+
class PullBuild(KubernetesBuildExecutor):
426+
q = mock.MagicMock()
427+
api = mock_k8s_api
428+
name = "test_build"
429+
repo_url = "repo"
430+
ref = "ref"
431+
image_name = "name"
432+
namespace = "build_namespace"
433+
push_secret = ""
434+
build_image = "image"
435+
image_pull_secrets = build_pull_secrets
436+
memory_limit = 0
437+
docker_host = "http://mydockerregistry.local"
438+
node_selector = {}
439+
440+
build = PullBuild()
441+
442+
with mock.patch.object(build.stop_event, "is_set", return_value=True):
443+
build.submit()
444+
445+
call_args_list = mock_k8s_api.create_namespaced_pod.call_args_list
446+
assert len(call_args_list) == 1
447+
448+
args = call_args_list[0][0]
449+
pod = args[1]
450+
451+
assert len(pod.spec.containers) == 1
452+
453+
pull_secrets = [secret.name for secret in pod.spec.image_pull_secrets]
454+
455+
assert pull_secrets == build_pull_secrets
456+
457+
420458
async def test_local_repo2docker_build():
421459
q = Queue()
422460
repo_url = "https://github.com/binderhub-ci-repos/cached-minimal-dockerfile"

0 commit comments

Comments
 (0)