All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ingularityExecutor.0.8.0.source-code.docker.sh.hbs Maven / Gradle / Ivy

#!/bin/bash
#
# This script was automatically generated.
# Task ID: {{{ runContext.taskId }}}
#

set -e

STOP_TIME={{{ stopTimeout }}} # Max time to wait for container to stop before killing

CONTAINER_NAME="{{{ prefix }}}{{{ runContext.taskId }}}"

CURRENT_DIR=`pwd`
CGROUPS_GUID=${CURRENT_DIR##*runs/}
CGROUPS_GUID=${CGROUPS_GUID%/*}

function check_contianer_running {
  status=`sudo -E -H -u {{{ runContext.user }}} docker inspect -f \{{.State.Running}} $1`
  if [ "$status" = "false" ] ; then
    echo "container is no longer running..."
    running=0
  else
    running=1
  fi
}

function setup_signals {
  cid="$1"; shift
  handler="$1"; shift
  for sig; do
    trap "$handler '$cid' '$sig'" "$sig"
  done
}

function handle_signal {
  echo "Received $2"
  echo "Stopping via sudo -E -H -u {{{ runContext.user }}} docker stop -t $STOP_TIME $1"
  sudo -E -H -u {{{ runContext.user }}} docker stop -t $STOP_TIME "$1"
  exit_code=`sudo -E -H -u {{{ runContext.user }}} docker wait "$cid"`
  echo "Attempting to remove container"
  sudo -E -H -u {{{ runContext.user }}} docker rm $1
  exit "$exit_code"
}

function enable_cgroup_hierarchy {
  if [ -d "/cgroup/memory/mesos" ] ;then
    CGROUPS_DIR="/cgroup"
  else
    if [ -d "/sys/fs/cgroup/memory/mesos" ] ; then
      CGROUPS_DIR="/sys/fs/cgroup"
    else
      echo "Couldn't find cgroups directory, memory/cpu reporting may be inaccurate for this task"
      return 0
    fi
  fi
  echo 1 > $CGROUPS_DIR/memory/mesos/$CGROUPS_GUID/memory.use_hierarchy
}

DOCKER_IMAGE={{{ envContext.dockerInfo.image }}}

# load env vars
touch docker.env
{{#each envContext.env}}
{{{name}}}={{{bashEscaped value}}}
echo "{{{name}}}={{{value}}}" >> docker.env
{{/each}}

# Create log directory for logrotate runs
if [[ ! -d {{{ runContext.logDir }}} ]]; then
  echo "Creating log directory ({{{ runContext.logDir }}})..."
  mkdir -p {{{ runContext.logDir }}}
  sudo chown -R {{{ runContext.user }}} {{{ runContext.logDir }}}
fi

# load artifact's profile.d
if [[ -d .profile.d ]]; then
  for FILE in $(ls .profile.d/*); do
    echo $FILE >> docker.env
  done
else
  echo "No deploy-specific profile.d"
fi

# set up port mappings
DOCKER_PORTS=()
{{#each envContext.dockerInfo.portMappingsList}}DOCKER_PORTS+=( -p {{{ hostPort }}}:{{{ containerPort }}} )
{{/each}}

# set up attached volumes
DOCKER_VOLUMES=()
DOCKER_VOLUMES+=( -v "$CURRENT_DIR:/mnt/mesos/sandbox" )
echo "MESOS_SANDBOX=/mnt/mesos/sandbox" >> docker.env
echo "LOG_HOME=/mnt/mesos/sandbox/logs" >> docker.env
echo "MESOS_TASK_ID={{{bashEscaped runContext.taskId}}}" >> docker.env
{{#each envContext.containerVolumes}}
{{#if mode}}raw_mode{{@index}}={{{ mode }}}{{/if}}
DOCKER_VOLUMES+=( -v "{{#if hostPath}}{{{ hostPath }}}:{{{ containerPath }}}{{else}}{{{ containerPath }}}:{{{ containerPath }}}{{/if}}{{#if mode}}:${raw_mode{{@index}},,}{{/if}}" )
{{/each}}

# set up network config
{{#if envContext.dockerInfo.network}}
raw_network={{envContext.dockerInfo.network}}
DOCKER_NETWORK="--net=${raw_network,,}"
{{else}}
DOCKER_NETWORK="--net=host"
{{/if}}

DOCKER_WORKDIR="/mnt/mesos/sandbox/{{{ runContext.taskAppDirectory }}}"

DOCKER_OPTIONS="--name=$CONTAINER_NAME --cgroup-parent=mesos/$CGROUPS_GUID -w $DOCKER_WORKDIR $DOCKER_NETWORK --env-file=docker.env ${DOCKER_VOLUMES[@]} ${DOCKER_PORTS[@]}"

{{#if privileged}}
DOCKER_OPTIONS="$DOCKER_OPTIONS --privileged"
{{/if}}

echo "Ensuring {{{ runContext.taskAppDirectory }}} is owned by {{{ runContext.user }}}"
mkdir -p {{{ runContext.taskAppDirectory }}}
sudo chown -R {{{ runContext.user }}} {{{ runContext.taskAppDirectory }}}

enable_cgroup_hierarchy || true

# Start up the container
echo "Creating continer with: sudo -E -H -u {{{ runContext.user }}} docker create $DOCKER_OPTIONS $DOCKER_IMAGE {{{ runContext.cmd }}}"
cid=`sudo -E -H -u {{{ runContext.user }}} docker create $DOCKER_OPTIONS $DOCKER_IMAGE {{{runContext.cmd }}}`
sudo -E -H -u {{{ runContext.user }}} docker start -a $cid >> {{{ runContext.logFile }}} 2>&1 &
running=1

setup_signals "$cid" "handle_signal" SIGINT SIGTERM

while true; do
  if [ "$running" = "1" ]; then
    sleep 10
    check_contianer_running "$cid"
  else
    break
  fi
done

exit_code=`sudo -E -H -u {{{ runContext.user }}} docker wait "$cid"`
exit "$exit_code"




© 2015 - 2025 Weber Informatics LLC | Privacy Policy