1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

F #5057: add DH entrypoint support (#1243)

This commit is contained in:
Alejandro Huertas Herrero 2021-05-31 12:39:23 +02:00 committed by GitHub
parent 66b1ff490d
commit a9cdd05cd5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 85 additions and 0 deletions

View File

@ -203,6 +203,88 @@ fi
# Add extra commands, this is the dockerfile in case there is any
dockerfile_template=${dockerfile_template/\%EXTRA\%/$extra}
#-------------------------------------------------------------------------------
# Inspect image to get CMD, ENTRYPOINT and ENV
#
# Following Docker documentation formats:
# https://docs.docker.com/engine/reference/builder/#cmd
# https://docs.docker.com/engine/reference/builder/#entrypoint
# https://docs.docker.com/engine/reference/builder/#env
#
# When having CMD and ENTRYPOINT:
#
# The main purpose of a CMD is to provide defaults for an executing container.
# These defaults can include an executable, or they can omit the executable,
# in which case you must specify an ENTRYPOINT instruction as well.
#-------------------------------------------------------------------------------
if [ $export_from == "dockerhub" ]; then
cmd=$(docker inspect "$docker_hub" | jq -r '.[0].Config.Cmd[] |= "\"" + . + "\"" | .[0].Config.Cmd')
entrypoint=$(docker inspect "$docker_hub" | jq -r '.[0].Config.Entrypoint')
env=$(docker inspect "$docker_hub" | jq -r '.[0].Config.Env')
else
# Build the image with user Dockerfile to be able to inspect it
docker build -t one"$sid" -f "$dockerfile" "$dockerdir" > /dev/null 2>&1
image_id=$(docker images -q one"$sid")
cmd=$(docker inspect "$docker_hub" | jq -r '.[0].Config.Cmd[] |= "\"" + . + "\"" | .[0].Config.Cmd')
entrypoint=$(docker inspect "$image_id" | jq -r '.[0].Config.Entrypoint |')
env=$(docker inspect "$image_id" | jq -r '.[0].Config.Env')
# Delete this image as it will need to be build after
docker image rm -f one"$sid" > /dev/null 2>&1
fi
#-------------------------------------------------------------------------------
# Build OpenNebula entrypoint
#
# 1. Export all the variables under $env
# 2. Export user custom variables located under /var/run/one-context/one_env
# 3. Run the entrypoint:
# if entrypoint && cmd
# command = entrypoint + cmd
# else if entrypoint && !cmd
# command = entrypoint
# else if !entrypoint && cmd
# command = cmd
# else
# no OpenNebula entrypoint
#-------------------------------------------------------------------------------
if [ -n "$entrypoint" ] && ! [ "$entrypoint" == "null" ]; then
entrypoint=$(echo "$entrypoint" | jq -r '. | join(" ")')
fi
if [ -n "$cmd" ] && ! [ "$cmd" == "null" ]; then
cmd=$(echo "$cmd" | jq -r '. | join(" ")')
fi
if [ -n "$entrypoint" ] && ! [ "$entrypoint" == "null" ] && ! echo "$entrypoint" | grep -Ewq '(bash|sh)'; then
if [ -n "$cmd" ] && ! [ "$cmd" == "null" ] && ! echo "$cmd" | grep -Ewq '(bash|sh)'; then
one_entrypoint="${entrypoint} ${cmd}"
else
one_entrypoint="${entrypoint}"
fi
elif [ -n "$cmd" ] && ! [ "$cmd" == "null" ] && ! echo "$cmd" | grep -Ewq '(bash|sh)'; then
one_entrypoint="${cmd}"
fi
if [ -n "$one_entrypoint" ]; then
one_env="RUN echo '#!/bin/sh\n"
if [ -n "$env" ] && ! [ "$env" == "null" ]; then
env=$(echo "$env" | jq -jr '.[] | "export " + . + "\\n"')
one_env="${one_env}$env"
fi
one_env="${one_env}source /var/run/one-context/one_env\n"
one_entrypoint="${one_env}${one_entrypoint}' > /one_entrypoint.sh"
dockerfile_template=${dockerfile_template/\%ONE_ENTRYPOINT\%/$one_entrypoint}
else
dockerfile_template=${dockerfile_template/\%ONE_ENTRYPOINT\%/''}
fi
echo "$dockerfile_template" > "$dockerfile"
docker build -t one"$sid" -f "$dockerfile" "$dockerdir" > /dev/null 2>&1

View File

@ -4,6 +4,7 @@
# in the download process and are replaced by some variables.
#
# EXTRA is replaced by the user dockerfile in case it is used
# ONE_ENTRYPOINT is replaced by the image entry point
#
# The rest of the template can be modified depending on your needs.
#
@ -14,6 +15,8 @@ USER root
COPY context /root/context
%COMMANDS%
%EXTRA%
%ONE_ENTRYPOINT%
RUN if [ -f /one_entrypoint.sh ]; then chmod u+x /one_entrypoint.sh; fi
RUN rm -rf /root/context
RUN echo "#Generated by OpenNebula" > /etc/resolv.conf
RUN rm -f /etc/ssh/ssh_host_* > /dev/null 2>&1