| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | #!/usr/bin/env bash | 
					
						
							|  |  |  | set -e | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:17:58 -07:00
										 |  |  | if [ -z "$DOCKER_HOST" ] && [ -a "$DOCKER_PORT_2375_TCP" ]; then | 
					
						
							| 
									
										
										
										
											2017-02-15 10:58:57 -07:00
										 |  |  | 	export DOCKER_HOST='tcp://docker:2375' | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | # for local testing only | 
					
						
							|  |  |  | #HOME_DIR=. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-17 19:41:28 -06:00
										 |  |  | if [ "${LOG_FILE}" == "" ]; then | 
					
						
							|  |  |  |     LOG_DIR=/var/log/crontab | 
					
						
							|  |  |  | 	LOG_FILE=${LOG_DIR}/jobs.log | 
					
						
							|  |  |  | 	mkdir -p ${LOG_DIR} | 
					
						
							| 
									
										
										
										
											2019-03-02 11:26:21 +03:00
										 |  |  |     touch ${LOG_FILE} | 
					
						
							| 
									
										
										
										
											2017-06-17 19:41:28 -06:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  | get_config() { | 
					
						
							| 
									
										
										
										
											2020-12-23 13:08:05 -05:00
										 |  |  |     if [ -f "${HOME_DIR}/config.json" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         jq 'map(.)' "${HOME_DIR}"/config.json > "${HOME_DIR}"/config.working.json | 
					
						
							| 
									
										
										
										
											2020-12-23 13:08:05 -05:00
										 |  |  |     elif [ -f "${HOME_DIR}/config.toml" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         rq -t <<< $(cat "${HOME_DIR}"/config.toml) | jq 'map(.)' > "${HOME_DIR}"/config.json | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  |     elif [ -f "${HOME_DIR}/config.yml" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         rq -y <<< $(cat "${HOME_DIR}"/config.yml) | jq 'map(.)' > "${HOME_DIR}"/config.json | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  |     elif [ -f "${HOME_DIR}/config.yaml" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         rq -y <<< $(cat "${HOME_DIR}"/config.yaml) | jq 'map(.)' > "${HOME_DIR}"/config.json | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-08-15 10:52:20 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | DOCKER_SOCK=/var/run/docker.sock | 
					
						
							| 
									
										
										
										
											2017-02-14 07:18:25 -07:00
										 |  |  | CRONTAB_FILE=/etc/crontabs/docker | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-07 23:25:53 -06:00
										 |  |  | # Ensure dir exist - in case of volume mapping | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  | mkdir -p "${HOME_DIR}"/jobs "${HOME_DIR}"/projects | 
					
						
							| 
									
										
										
										
											2017-04-07 23:25:53 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-02 13:43:07 +03:00
										 |  |  | ensure_docker_socket_accessible() { | 
					
						
							|  |  |  |     if ! grep -q "^docker:" /etc/group; then | 
					
						
							|  |  |  |         # Ensure 'docker' user has permissions for docker socket (without changing permissions) | 
					
						
							|  |  |  |         DOCKER_GID=$(stat -c '%g' ${DOCKER_SOCK}) | 
					
						
							|  |  |  |         if [ "${DOCKER_GID}" != "0" ]; then | 
					
						
							|  |  |  |             if ! grep -qE "^[^:]+:[^:]+:${DOCKER_GID}:" /etc/group; then | 
					
						
							|  |  |  |                 # No group with such gid exists - create group docker | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |                 addgroup -g "${DOCKER_GID}" docker | 
					
						
							| 
									
										
										
										
											2019-03-02 13:43:07 +03:00
										 |  |  |                 adduser docker docker | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |                 # Group with such gid exists - add user "docker" to this group | 
					
						
							| 
									
										
										
										
											2022-07-16 08:15:18 -07:00
										 |  |  |                 DOCKER_GROUP_NAME=$(getent group "${DOCKER_GID}" | awk -F':' '{{ print $1 }}') | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |                 adduser docker "$DOCKER_GROUP_NAME" | 
					
						
							| 
									
										
										
										
											2019-03-02 13:43:07 +03:00
										 |  |  |             fi | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             # Docker socket belongs to "root" group - add user "docker" to this group | 
					
						
							|  |  |  |             adduser docker root | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-01-09 13:17:49 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 13:54:20 -07:00
										 |  |  | slugify() { | 
					
						
							|  |  |  |     echo "$@" | iconv -t ascii | sed -r s/[~\^]+//g | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-06-17 19:41:28 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | make_image_cmd() { | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     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("")') | 
					
						
							| 
									
										
										
										
											2019-08-15 10:52:20 -04:00
										 |  |  |     # We'll add name in, if it exists | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     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("")') | 
					
						
							| 
									
										
										
										
											2019-08-15 10:52:20 -04:00
										 |  |  |     # echo ${1} | jq -r '.environment | join("\n")' > ${PWD}/${NAME}.env | 
					
						
							|  |  |  |     # ENVIRONMENT=" --env-file ${PWD}/${NAME}.env" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     if [ "${DOCKERARGS}" == "null" ]; then DOCKERARGS=; fi | 
					
						
							| 
									
										
										
										
											2022-07-16 08:16:22 -07:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     IMAGE=$(echo "${1}" | jq -r .image | envsubst) | 
					
						
							|  |  |  |     TMP_COMMAND=$(echo "${1}" | jq -r .command) | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     echo "docker run ${DOCKERARGS} ${IMAGE} ${TMP_COMMAND}" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | make_container_cmd() { | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     DOCKERARGS=$(echo "${1}" | jq -r .dockerargs) | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     if [ "${DOCKERARGS}" == "null" ]; then DOCKERARGS=; fi | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     SCRIPT_NAME=$(echo "${1}" | jq -r .name) | 
					
						
							|  |  |  |     SCRIPT_NAME=$(slugify "$SCRIPT_NAME") | 
					
						
							|  |  |  |     PROJECT=$(echo "${1}" | jq -r .project) | 
					
						
							|  |  |  |     CONTAINER=$(echo "${1}" | jq -r .container | envsubst) | 
					
						
							|  |  |  |     TMP_COMMAND=$(echo "${1}" | jq -r .command) | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if [ "${PROJECT}" != "null" ]; then | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # create bash script to detect all running containers | 
					
						
							| 
									
										
										
										
											2017-06-17 20:10:47 -06:00
										 |  |  |         if [ "${SCRIPT_NAME}" == "null" ]; then | 
					
						
							|  |  |  |             SCRIPT_NAME=$(cat /proc/sys/kernel/random/uuid) | 
					
						
							|  |  |  |         fi | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  | cat << EOF > "${HOME_DIR}"/projects/"${SCRIPT_NAME}".sh | 
					
						
							| 
									
										
										
										
											2017-02-12 21:37:00 -07:00
										 |  |  | #!/usr/bin/env bash | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | set -e | 
					
						
							| 
									
										
										
										
											2017-06-17 20:10:47 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-09 11:03:39 +01:00
										 |  |  | CONTAINERS=\$(docker ps --format '{{.Names}}' | grep -E "^${PROJECT}_${CONTAINER}.[0-9]+") | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | for CONTAINER_NAME in \$CONTAINERS; do | 
					
						
							| 
									
										
										
										
											2017-02-14 07:18:25 -07:00
										 |  |  |     docker exec ${DOCKERARGS} \${CONTAINER_NAME} ${TMP_COMMAND} | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | done | 
					
						
							|  |  |  | EOF | 
					
						
							| 
									
										
										
										
											2017-06-17 20:10:47 -06:00
										 |  |  |         echo "/bin/bash ${HOME_DIR}/projects/${SCRIPT_NAME}.sh" | 
					
						
							| 
									
										
										
										
											2019-08-15 10:52:20 -04:00
										 |  |  |         # cat "/bin/bash ${HOME_DIR}/projects/${SCRIPT_NAME}.sh" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     else | 
					
						
							|  |  |  |         echo "docker exec ${DOCKERARGS} ${CONTAINER} ${TMP_COMMAND}" | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-14 07:44:14 -07:00
										 |  |  | #make_host_cmd() { | 
					
						
							|  |  |  | #   HOST_BINARY=$(echo ${1} | jq -r .host) | 
					
						
							|  |  |  | #   TMP_COMMAND=$(echo ${1} | jq -r .command) | 
					
						
							|  |  |  | #   echo "${HOST_BINARY} ${TMP_COMMAND}" | 
					
						
							|  |  |  | #} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | make_cmd() { | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     if [ "$(echo "${1}" | jq -r .image)" != "null" ]; then | 
					
						
							| 
									
										
										
										
											2017-02-12 21:08:45 -07:00
										 |  |  |         make_image_cmd "$1" | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     elif [ "$(echo "${1}" | jq -r .container)" != "null" ]; then | 
					
						
							| 
									
										
										
										
											2017-02-12 21:08:45 -07:00
										 |  |  |         make_container_cmd "$1" | 
					
						
							| 
									
										
										
										
											2017-02-14 07:44:14 -07:00
										 |  |  |     #elif [ "$(echo ${1} | jq -r .host)" != "null" ]; then | 
					
						
							|  |  |  |     #   make_host_cmd "$1" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         echo "${1}" | jq -r .command | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | parse_schedule() { | 
					
						
							|  |  |  | 	case $1 in | 
					
						
							|  |  |  |         "@yearly") | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "0 0 1 1 *" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "@annually") | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "0 0 1 1 *" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "@monthly") | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "0 0 1 * *" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "@weekly") | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "0 0 * * 0" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "@daily") | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "0 0 * * *" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "@midnight") | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "0 0 * * *" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "@hourly") | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "0 * * * *" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "@every") | 
					
						
							|  |  |  |             TIME=$2 | 
					
						
							|  |  |  |             TOTAL=0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |             M=$(echo "$TIME" | grep -o '[0-9]\+m') | 
					
						
							|  |  |  |             H=$(echo "$TIME" | grep -o '[0-9]\+h') | 
					
						
							|  |  |  |             D=$(echo "$TIME" | grep -o '[0-9]\+d') | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if [ -n "${M}" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:14:30 -07:00
										 |  |  |                 TOTAL=$((TOTAL + ${M::-1})) | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             fi | 
					
						
							|  |  |  |             if [ -n "${H}" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:14:30 -07:00
										 |  |  |                 TOTAL=$((TOTAL + ${H::-1} * 60)) | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             fi | 
					
						
							|  |  |  |             if [ -n "${D}" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:14:30 -07:00
										 |  |  |                 TOTAL=$((TOTAL + ${D::-1} * 60 * 24)) | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-23 09:45:24 -06:00
										 |  |  |             echo "*/${TOTAL} * * * *" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         *) | 
					
						
							|  |  |  |             echo "${@}" | 
					
						
							|  |  |  |             ;; | 
					
						
							|  |  |  |     esac | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function build_crontab() { | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     rm -rf ${CRONTAB_FILE} | 
					
						
							| 
									
										
										
										
											2017-02-14 07:18:25 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ONSTART=() | 
					
						
							| 
									
										
										
										
											2022-07-16 08:17:17 -07:00
										 |  |  |     while read -r i ; do | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         SCHEDULE=$(jq -r .["$i"].schedule "${CONFIG}" | sed 's/\*/\\*/g') | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |         if [ "${SCHEDULE}" == "null" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |             echo "Schedule Missing: $(jq -r .["$i"].schedule "${CONFIG}")" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             continue | 
					
						
							|  |  |  |         fi | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         SCHEDULE=$(parse_schedule "${SCHEDULE}" | sed 's/\\//g') | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         if [ "$(jq -r .["$i"].command "${CONFIG}")" == "null" ]; then | 
					
						
							|  |  |  |             echo "Command Missing: $(jq -r .["$i"].command "${CONFIG}")" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |             continue | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         COMMENT=$(jq -r .["$i"].comment "${CONFIG}") | 
					
						
							| 
									
										
										
										
											2017-02-15 13:42:35 -07:00
										 |  |  |         if [ "${COMMENT}" != "null" ]; then | 
					
						
							|  |  |  |             echo "# ${COMMENT}" >> ${CRONTAB_FILE} | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         SCRIPT_NAME=$(jq -r .["$i"].name "${CONFIG}") | 
					
						
							|  |  |  |         SCRIPT_NAME=$(slugify "$SCRIPT_NAME") | 
					
						
							| 
									
										
										
										
											2017-06-17 19:41:28 -06:00
										 |  |  |         if [ "${SCRIPT_NAME}" == "null" ]; then | 
					
						
							|  |  |  |             SCRIPT_NAME=$(cat /proc/sys/kernel/random/uuid) | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 11:16:11 -07:00
										 |  |  |         COMMAND="/bin/bash ${HOME_DIR}/jobs/${SCRIPT_NAME}.sh" | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  | cat << EOF > "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh | 
					
						
							| 
									
										
										
										
											2017-02-15 11:16:11 -07:00
										 |  |  | #!/usr/bin/env bash | 
					
						
							|  |  |  | set -e | 
					
						
							| 
									
										
										
										
											2017-06-17 20:55:56 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | # TODO find workaround | 
					
						
							|  |  |  | # [error] write /dev/stdout: broken pipe <- when using docker commands | 
					
						
							|  |  |  | #UUID=\$(cat /proc/sys/kernel/random/uuid) | 
					
						
							| 
									
										
										
										
											2017-06-21 13:14:00 -06:00
										 |  |  | #exec > >(read message; echo "\${UUID} \$(date -Iseconds) [info] \$message" | tee -a ${LOG_FILE} ) | 
					
						
							|  |  |  | #exec 2> >(read message; echo "\${UUID} \$(date -Iseconds) [error] \$message" | tee -a ${LOG_FILE} >&2) | 
					
						
							| 
									
										
										
										
											2017-06-17 20:10:47 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-17 19:41:28 -06:00
										 |  |  | echo "Start Cronjob **${SCRIPT_NAME}** ${COMMENT}" | 
					
						
							| 
									
										
										
										
											2017-02-15 11:16:11 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  | $(make_cmd "$(jq -c .["$i"] "${CONFIG}")") | 
					
						
							| 
									
										
										
										
											2017-02-15 11:16:11 -07:00
										 |  |  | EOF | 
					
						
							| 
									
										
										
										
											2017-06-17 20:55:56 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         if [ "$(jq -r .["$i"].trigger "${CONFIG}")" != "null" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:17:17 -07:00
										 |  |  |             while read -r j ; do | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |                 if [ "$(jq .["$i"].trigger["$j"].command "${CONFIG}")" == "null" ]; then | 
					
						
							|  |  |  |                     echo "Command Missing: $(jq -r .["$i"].trigger["$j"].command "${CONFIG}")" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |                     continue | 
					
						
							|  |  |  |                 fi | 
					
						
							| 
									
										
										
										
											2017-02-15 11:16:11 -07:00
										 |  |  |                 #TRIGGER_COMMAND=$(make_cmd "$(jq -c .[$i].trigger[$j] ${CONFIG})") | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |                 echo "$(make_cmd "$(jq -c .["$i"].trigger["$j"] "${CONFIG}")")" >> "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh | 
					
						
							| 
									
										
										
										
											2017-02-15 11:16:11 -07:00
										 |  |  |                 #COMMAND="${COMMAND} && ${TRIGGER_COMMAND}" | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |             done < <(jq -r '.['"$i"'].trigger|keys[]' "${CONFIG}") | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |         fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         echo "echo \"End Cronjob **${SCRIPT_NAME}** ${COMMENT}\"" >> "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh | 
					
						
							| 
									
										
										
										
											2017-06-17 20:55:56 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |         echo "${SCHEDULE} ${COMMAND}" >> ${CRONTAB_FILE} | 
					
						
							| 
									
										
										
										
											2017-02-14 07:18:25 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         if [ "$(jq -r .["$i"].onstart "${CONFIG}")" == "true" ]; then | 
					
						
							| 
									
										
										
										
											2017-02-14 07:18:25 -07:00
										 |  |  |             ONSTART+=("${COMMAND}") | 
					
						
							|  |  |  |         fi | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |     done < <(jq -r '.|keys[]' "${CONFIG}") | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 07:03:07 -07:00
										 |  |  |     echo "##### crontab generation complete #####" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  |     cat ${CRONTAB_FILE} | 
					
						
							| 
									
										
										
										
											2017-02-14 07:18:25 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 07:03:07 -07:00
										 |  |  |     echo "##### run commands with onstart #####" | 
					
						
							| 
									
										
										
										
											2017-04-07 23:25:53 -06:00
										 |  |  |     for COMMAND in "${ONSTART[@]}"; do | 
					
						
							| 
									
										
										
										
											2017-02-15 07:03:07 -07:00
										 |  |  |         echo "${COMMAND}" | 
					
						
							| 
									
										
										
										
											2017-02-14 07:44:14 -07:00
										 |  |  |         ${COMMAND} & | 
					
						
							| 
									
										
										
										
											2017-02-14 07:18:25 -07:00
										 |  |  |     done | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-02 13:43:07 +03:00
										 |  |  | ensure_docker_socket_accessible | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  | start_app() { | 
					
						
							|  |  |  |     get_config | 
					
						
							| 
									
										
										
										
											2020-12-23 13:22:15 -05:00
										 |  |  |     if [ -f "${HOME_DIR}/config.working.json" ]; then | 
					
						
							|  |  |  |         export CONFIG=${HOME_DIR}/config.working.json | 
					
						
							|  |  |  |     elif [ -f "${HOME_DIR}/config.json" ]; then | 
					
						
							|  |  |  |          export CONFIG=${HOME_DIR}/config.json | 
					
						
							| 
									
										
										
										
											2017-02-12 16:57:19 -07:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  |         echo "NO CONFIG FILE FOUND" | 
					
						
							| 
									
										
										
										
											2017-02-12 16:57:19 -07:00
										 |  |  |     fi | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  |     if [ "$1" = "crond" ]; then | 
					
						
							| 
									
										
										
										
											2022-07-16 08:13:11 -07:00
										 |  |  |         if [ -f "${CONFIG}" ]; then | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  |             build_crontab | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             echo "Unable to find ${CONFIG}" | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |     echo "$@" | 
					
						
							|  |  |  |     exec "$@" | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-02-12 16:28:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 13:15:31 -04:00
										 |  |  | start_app "$@" |