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