Skip to content

Commit

Permalink
fix: extract entrypoint from registry
Browse files Browse the repository at this point in the history
Signed-off-by: SdgJlbl <sarah.diot-girard@owkin.com>
  • Loading branch information
SdgJlbl committed Aug 3, 2023
1 parent 56de6fa commit 583f27d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
13 changes: 11 additions & 2 deletions backend/builder/tasks/tasks_build_image.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import structlog

import orchestrator
from backend.celery import app
from builder.exceptions import CeleryRetryError
from builder.image_builder.image_builder import build_image_if_missing
from builder.tasks.task import BuildTask

logger = structlog.get_logger(__name__)


@app.task(
bind=True,
Expand All @@ -15,6 +20,10 @@
# see http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-reject-on-worker-lost
# and https://github.com/celery/celery/issues/5106
def build_image(task: BuildTask, function_serialized: str, channel: str, compute_task_key: str) -> None:
function = orchestrator.Function.parse_raw(function_serialized)
try:
function = orchestrator.Function.parse_raw(function_serialized)

build_image_if_missing(channel, function)
build_image_if_missing(channel, function)
except Exception as exception:
logger.exception(exception)
raise CeleryRetryError() from exception
8 changes: 8 additions & 0 deletions backend/substrapp/compute_tasks/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,14 @@
from substrapp.compute_tasks.volumes import get_volumes
from substrapp.compute_tasks.volumes import get_worker_subtuple_pvc_name
from substrapp.docker_registry import get_container_image_name
from substrapp.docker_registry import get_entrypoint
from substrapp.exceptions import PodReadinessTimeoutError
from substrapp.kubernetes_utils import delete_pod
from substrapp.kubernetes_utils import execute
from substrapp.kubernetes_utils import get_volume
from substrapp.kubernetes_utils import pod_exists_by_label_selector
from substrapp.kubernetes_utils import wait_for_pod_readiness
from substrapp.models import ImageEntrypoint
from substrapp.orchestrator import get_orchestrator_client
from substrapp.utils import timeit

Expand All @@ -49,6 +51,12 @@ def execute_compute_task(ctx: Context) -> None:
env = get_environment(ctx)
image = get_container_image_name(container_image_tag)

# save entrypoint to DB
entrypoint = get_entrypoint(container_image_tag)
ImageEntrypoint.objects.get_or_create(
function_checksum=ctx.function.function_address.checksum, entrypoint_json=entrypoint
)

k8s_client = _get_k8s_client()

should_create_pod = not pod_exists_by_label_selector(k8s_client, compute_pod.label_selector)
Expand Down
5 changes: 5 additions & 0 deletions backend/substrapp/docker_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ def get_container_image_name(image_name: str) -> str:
return f"{pull_domain}/{USER_IMAGE_REPOSITORY}:{image_name}"


def get_entrypoint(image_tag: str) -> str:
d = get_container_image(image_tag)
return json.loads(d["history"][0]["v1Compatibility"])["config"]["Entrypoint"]


def delete_container_image_safe(image_tag: str) -> None:
"""deletes a container image from the docker registry but will fail silently"""
try:
Expand Down

0 comments on commit 583f27d

Please sign in to comment.