From 36ef24f15ff5ee5d283e2297721fd7208d65ed31 Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 09:48:40 -0700 Subject: [PATCH 1/8] chore: omit additional items. --- .gitignore | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f8a3aa0..f6473b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ .idea *.iml - -config.json .vscode .DS_Store + +config.json +config.working.json + +jobs/ +projects/ From a523ad7d747d942383c3c644fbcf8a8abc4d82a7 Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 09:49:17 -0700 Subject: [PATCH 2/8] fix: reset COMMENT. --- docker-entrypoint | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docker-entrypoint b/docker-entrypoint index 272f182..41af427 100755 --- a/docker-entrypoint +++ b/docker-entrypoint @@ -186,7 +186,6 @@ 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}")" @@ -203,6 +202,9 @@ function build_crontab() { COMMENT=$(jq -r .["$i"].comment "${CONFIG}") if [ "${COMMENT}" != "null" ]; then echo "# ${COMMENT}" >> ${CRONTAB_FILE} + else + # Reset COMMENT to empty rather than keep the 'null' value. + COMMENT= fi SCRIPT_NAME=$(jq -r .["$i"].name "${CONFIG}") @@ -217,7 +219,6 @@ cat << EOF > "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh set -e echo "Start Cronjob **${SCRIPT_NAME}** ${COMMENT}" - $(make_cmd "$(jq -c .["$i"] "${CONFIG}")") EOF TRIGGER=$(jq -r .["$i"].trigger "${CONFIG}") From 9316c9f5c2dd05c329897ae28b3aa2eb57f8a047 Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 10:22:43 -0700 Subject: [PATCH 3/8] fix: address jq parsing errors when some properties are not set. --- docker-entrypoint | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docker-entrypoint b/docker-entrypoint index 41af427..1d51a53 100755 --- a/docker-entrypoint +++ b/docker-entrypoint @@ -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("")') + 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("")') + ENVIRONMENT=$(echo "${1}" | jq -r 'select(.environment != null) | .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 + 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}" From 0643e9ceaeee2c8df64207dad50887c11d558081 Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 10:40:02 -0700 Subject: [PATCH 4/8] chore: moving line to be consistent. --- docker-entrypoint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-entrypoint b/docker-entrypoint index 1d51a53..09ef079 100755 --- a/docker-entrypoint +++ b/docker-entrypoint @@ -67,13 +67,13 @@ slugify() { make_image_cmd() { DOCKERARGS=$(echo "${1}" | jq -r .dockerargs) + 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 'select(.environment != null) | .environment | map(" -e " + .) | join("")') - if [ "${DOCKERARGS}" == "null" ]; then DOCKERARGS=; fi if [ -n "${NAME}" ]; then DOCKERARGS+=" --rm --name ${NAME} "; fi if [ -n "${NETWORK}" ]; then DOCKERARGS+=" --network ${NETWORK} "; fi if [ -n "${VOLUMES}" ]; then DOCKERARGS+="${VOLUMES}"; fi From 08bbceff959460d63b77fcc0746dd14b5005afce Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 10:43:25 -0700 Subject: [PATCH 5/8] fix: cleaning script creation. --- docker-entrypoint | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-entrypoint b/docker-entrypoint index 09ef079..fc3deca 100755 --- a/docker-entrypoint +++ b/docker-entrypoint @@ -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" From e69b2767074136107d45a6f4fadfd3a1cf26fe16 Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 10:45:41 -0700 Subject: [PATCH 6/8] chore: nicer formatting. --- docker-entrypoint | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docker-entrypoint b/docker-entrypoint index fc3deca..4509cb3 100755 --- a/docker-entrypoint +++ b/docker-entrypoint @@ -201,10 +201,11 @@ function build_crontab() { 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= + COMMENT=" " fi SCRIPT_NAME=$(jq -r .["$i"].name "${CONFIG}") @@ -218,7 +219,7 @@ cat << EOF > "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh #!/usr/bin/env bash set -e -echo "Start Cronjob **${SCRIPT_NAME}** ${COMMENT}" +echo "Start Cronjob **${SCRIPT_NAME}**${COMMENT}" $(make_cmd "$(jq -c .["$i"] "${CONFIG}")") EOF TRIGGER=$(jq -r .["$i"].trigger "${CONFIG}") @@ -233,7 +234,7 @@ EOF done < <(jq -r '.['"$i"'].trigger|keys[]' "${CONFIG}") fi - echo "echo \"End Cronjob **${SCRIPT_NAME}** ${COMMENT}\"" >> "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh + echo "echo \"End Cronjob **${SCRIPT_NAME}**${COMMENT}\"" >> "${HOME_DIR}"/jobs/"${SCRIPT_NAME}".sh echo "${SCHEDULE} ${COMMAND}" >> ${CRONTAB_FILE} From 31d0b732b2ae29069edb6a93af60b9fb47c68603 Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 10:53:34 -0700 Subject: [PATCH 7/8] chore: cleaning up echos. --- docker-entrypoint | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docker-entrypoint b/docker-entrypoint index 4509cb3..de76ba9 100755 --- a/docker-entrypoint +++ b/docker-entrypoint @@ -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 @@ -188,14 +188,14 @@ function build_crontab() { 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 @@ -219,7 +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}") @@ -227,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} @@ -257,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 From 9da424985d018ead48b360539cc1556137204003 Mon Sep 17 00:00:00 2001 From: Robert Wlodarczyk <robert@simplicityguy.com> Date: Sat, 16 Jul 2022 11:24:32 -0700 Subject: [PATCH 8/8] fix: moving the top level key name to the "name" property. --- docker-entrypoint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-entrypoint b/docker-entrypoint index de76ba9..dd8ada5 100755 --- a/docker-entrypoint +++ b/docker-entrypoint @@ -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() {