mirror of
https://github.com/willfarrell/docker-crontab.git
synced 2025-04-19 12:49:48 +02:00
Merge pull request #2 from SimplicityGuy/additional-fixes
fix: additional fixes
This commit is contained in:
commit
c530324db3
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,6 +1,10 @@
|
||||
.idea
|
||||
*.iml
|
||||
|
||||
config.json
|
||||
.vscode
|
||||
.DS_Store
|
||||
|
||||
config.json
|
||||
config.working.json
|
||||
|
||||
jobs/
|
||||
projects/
|
||||
|
@ -16,7 +16,7 @@ fi
|
||||
mkdir -p "${HOME_DIR}"/jobs "${HOME_DIR}"/projects
|
||||
|
||||
if [ -z "${DOCKER_HOST}" ] && [ -a "${DOCKER_PORT_2375_TCP}" ]; then
|
||||
export DOCKER_HOST='tcp://docker:2375'
|
||||
export DOCKER_HOST="tcp://docker:2375"
|
||||
fi
|
||||
|
||||
if [ "${LOG_FILE}" == "" ]; then
|
||||
@ -37,7 +37,7 @@ normalize_config() {
|
||||
elif [ -f "${HOME_DIR}/config.yaml" ]; then
|
||||
JSON_CONFIG="$(rq -y <<< "$(cat "${HOME_DIR}"/config.yaml)")"
|
||||
fi
|
||||
jq -r 'map(.)' <<< "${JSON_CONFIG}" > "${HOME_DIR}"/config.working.json
|
||||
jq -r 'to_entries | map_values(.value + { name: .key })' <<< "${JSON_CONFIG}" > "${HOME_DIR}"/config.working.json
|
||||
}
|
||||
|
||||
ensure_docker_socket_accessible() {
|
||||
@ -67,19 +67,19 @@ slugify() {
|
||||
|
||||
make_image_cmd() {
|
||||
DOCKERARGS=$(echo "${1}" | jq -r .dockerargs)
|
||||
VOLUMES=$(echo "${1}" | jq -r '.volumes | map(" -v " + .) | join("")')
|
||||
PORTS=$(echo "${1}" | jq -r '.ports | map(" -p " + .) | join("")')
|
||||
EXPOSE=$(echo "${1}" | jq -r '.expose | map(" --expose " + .) | join("")')
|
||||
if [ "${DOCKERARGS}" == "null" ]; then DOCKERARGS=; fi
|
||||
VOLUMES=$(echo "${1}" | jq -r 'select(.volumes != null) | .volumes | map(" -v " + .) | join("")')
|
||||
PORTS=$(echo "${1}" | jq -r 'select(.ports != null) | .ports | map(" -p " + .) | join("")')
|
||||
EXPOSE=$(echo "${1}" | jq -r 'select(.expose != null) | .expose | map(" --expose " + .) | join("")')
|
||||
NAME=$(echo "${1}" | jq -r 'select(.name != null) | .name')
|
||||
NETWORK=$(echo "${1}" | jq -r 'select(.network != null) | .network')
|
||||
ENVIRONMENT=$(echo "${1}" | jq -r '.environment | map(" -e " + .) | join("")')
|
||||
if [ "${DOCKERARGS}" == "null" ]; then DOCKERARGS=; fi
|
||||
if [ -n "${NAME}" ]; then DOCKERARGS="${DOCKERARGS} --rm --name ${NAME} "; fi
|
||||
if [ -n "${NETWORK}" ]; then DOCKERARGS="${DOCKERARGS} --network ${NETWORK} "; fi
|
||||
if [ -n "${VOLUMES}" ]; then DOCKERARGS="${DOCKERARGS}${VOLUMES}"; fi
|
||||
if [ -n "${ENVIRONMENT}" ]; then DOCKERARGS="${DOCKERARGS}${ENVIRONMENT}"; fi
|
||||
if [ -n "${PORTS}" ]; then DOCKERARGS="${DOCKERARGS}${PORTS}"; fi
|
||||
if [ -n "${EXPOSE}" ]; then DOCKERARGS="${DOCKERARGS}${EXPOSE}"; fi
|
||||
ENVIRONMENT=$(echo "${1}" | jq -r 'select(.environment != null) | .environment | map(" -e " + .) | join("")')
|
||||
if [ -n "${NAME}" ]; then DOCKERARGS+=" --rm --name ${NAME} "; fi
|
||||
if [ -n "${NETWORK}" ]; then DOCKERARGS+=" --network ${NETWORK} "; fi
|
||||
if [ -n "${VOLUMES}" ]; then DOCKERARGS+="${VOLUMES}"; fi
|
||||
if [ -n "${ENVIRONMENT}" ]; then DOCKERARGS+="${ENVIRONMENT}"; fi
|
||||
if [ -n "${PORTS}" ]; then DOCKERARGS+="${PORTS}"; fi
|
||||
if [ -n "${EXPOSE}" ]; then DOCKERARGS+="${EXPOSE}"; fi
|
||||
IMAGE=$(echo "${1}" | jq -r .image | envsubst)
|
||||
TMP_COMMAND=$(echo "${1}" | jq -r .command)
|
||||
echo "docker run ${DOCKERARGS} ${IMAGE} ${TMP_COMMAND}"
|
||||
@ -104,8 +104,8 @@ cat << EOF > "${HOME_DIR}"/projects/"${SCRIPT_NAME}".sh
|
||||
set -e
|
||||
|
||||
CONTAINERS=\$(docker ps --format '{{.Names}}' | grep -E "^${PROJECT}_${CONTAINER}.[0-9]+")
|
||||
for CONTAINER_NAME in \$CONTAINERS; do
|
||||
docker exec ${DOCKERARGS} \${CONTAINER_NAME} ${TMP_COMMAND}
|
||||
for CONTAINER_NAME in \${CONTAINERS}; do
|
||||
docker exec "${DOCKERARGS} \${CONTAINER_NAME} ${TMP_COMMAND}"
|
||||
done
|
||||
EOF
|
||||
echo "/bin/bash ${HOME_DIR}/projects/${SCRIPT_NAME}.sh"
|
||||
@ -186,23 +186,26 @@ function build_crontab() {
|
||||
|
||||
ONSTART=()
|
||||
while read -r i ; do
|
||||
|
||||
SCHEDULE=$(jq -r .["$i"].schedule "${CONFIG}" | sed 's/\*/\\*/g')
|
||||
if [ "${SCHEDULE}" == "null" ]; then
|
||||
echo "Schedule Missing: $(jq -r .["$i"].schedule "${CONFIG}")"
|
||||
echo "'schedule' missing: $(jq -r .["$i"].schedule "${CONFIG}")"
|
||||
continue
|
||||
fi
|
||||
SCHEDULE=$(parse_schedule "${SCHEDULE}" | sed 's/\\//g')
|
||||
|
||||
COMMAND=$(jq -r .["$i"].command "${CONFIG}")
|
||||
if [ "${COMMAND}" == "null" ]; then
|
||||
echo "Command Missing: '${COMMAND}'"
|
||||
echo "'command' missing: '${COMMAND}'"
|
||||
continue
|
||||
fi
|
||||
|
||||
COMMENT=$(jq -r .["$i"].comment "${CONFIG}")
|
||||
if [ "${COMMENT}" != "null" ]; then
|
||||
echo "# ${COMMENT}" >> ${CRONTAB_FILE}
|
||||
COMMENT=" ${COMMENT}"
|
||||
echo "#${COMMENT}" >> ${CRONTAB_FILE}
|
||||
else
|
||||
# Reset COMMENT to empty rather than keep the 'null' value.
|
||||
COMMENT=" "
|
||||
fi
|
||||
|
||||
SCRIPT_NAME=$(jq -r .["$i"].name "${CONFIG}")
|
||||
@ -216,8 +219,7 @@ cat << EOF > "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
echo "Start Cronjob **${SCRIPT_NAME}** ${COMMENT}"
|
||||
|
||||
echo "start cron job **${SCRIPT_NAME}**${COMMENT}"
|
||||
$(make_cmd "$(jq -c .["$i"] "${CONFIG}")")
|
||||
EOF
|
||||
TRIGGER=$(jq -r .["$i"].trigger "${CONFIG}")
|
||||
@ -225,14 +227,14 @@ EOF
|
||||
while read -r j ; do
|
||||
TRIGGER_COMMAND=$(jq .["$i"].trigger["$j"].command "${CONFIG}")
|
||||
if [ "${TRIGGER_COMMAND}" == "null" ]; then
|
||||
echo "Command Missing: '${TRIGGER_COMMAND}'"
|
||||
echo "'command' missing: '${TRIGGER_COMMAND}'"
|
||||
continue
|
||||
fi
|
||||
make_cmd "${TRIGGER_COMMAND}" >> "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh
|
||||
done < <(jq -r '.['"$i"'].trigger|keys[]' "${CONFIG}")
|
||||
fi
|
||||
|
||||
echo "echo \"End Cronjob **${SCRIPT_NAME}** ${COMMENT}\"" >> "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh
|
||||
echo "echo \"end cron job **${SCRIPT_NAME}**${COMMENT}\"" >> "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh
|
||||
|
||||
echo "${SCHEDULE} ${COMMAND}" >> ${CRONTAB_FILE}
|
||||
|
||||
@ -255,7 +257,7 @@ start_app() {
|
||||
normalize_config
|
||||
export CONFIG=${HOME_DIR}/config.working.json
|
||||
if [ ! -f "${CONFIG}" ]; then
|
||||
echo "Unable to find ${CONFIG}."
|
||||
echo "generated ${CONFIG} missing."
|
||||
exit 1
|
||||
fi
|
||||
if [ "${1}" == "crond" ]; then
|
||||
|
Loading…
x
Reference in New Issue
Block a user