From b6ccd491fd056d9889f71fdeeba57abd62494bfb Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 14:31:11 -0500 Subject: [PATCH 01/16] feat: add support for specifying an initial-network property This network is the network that is associated with the container on creation. If specified, then the bridge network is not attached to the service. Only a single initial network can be specified at this time. --- README.md | 20 ++++++++++++++++++++ bin/generate | 2 +- commands | 3 ++- functions | 26 ++++++++++++++++++++++---- pre-delete | 3 ++- subcommands/set | 40 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 87 insertions(+), 7 deletions(-) create mode 100755 subcommands/set diff --git a/README.md b/README.md index 0fb6c49..13cbe51 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ redis:logs [-t|--tail] # print the most recent log redis:pause # pause a running redis service redis:promote # promote service as REDIS_URL in redis:restart # graceful shutdown and restart of the redis service container +redis:set # set or clear a property for a service redis:start # start a previously stopped redis service redis:stop # stop a running redis service redis:unexpose # unexpose a previously exposed redis service @@ -250,6 +251,25 @@ You can unlink a redis service: dokku redis:unlink lollipop playground ``` +### set or clear a property for a service + +```shell +# usage +dokku redis:set +``` + +Set the network to attach after the service container is started: + +```shell +dokku redis:set lollipop post-create-network custom-network +``` + +Unset the post-create-network value: + +```shell +dokku redis:set lollipop post-create-network +``` + ### Service Lifecycle The lifecycle of each service can be managed through the following commands: diff --git a/bin/generate b/bin/generate index c5aa616..89b9999 100755 --- a/bin/generate +++ b/bin/generate @@ -131,7 +131,7 @@ def usage_section(service, variable, alias, image, scheme, ports, options, unimp def usage_intro(service, variable, alias, image, scheme, ports, options, unimplemented): - commands = ["create", "info", "list", "logs", "link", "unlink"] + commands = ["create", "info", "list", "logs", "link", "unlink", "set"] content = ["### Basic Usage"] return fetch_commands_content( diff --git a/commands b/commands index 2fb4cda..5a878fe 100755 --- a/commands +++ b/commands @@ -1,7 +1,8 @@ #!/usr/bin/env bash source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config" [[ " help $PLUGIN_COMMAND_PREFIX:help $PLUGIN_COMMAND_PREFIX $PLUGIN_COMMAND_PREFIX:default " == *" $1 "* ]] || [[ "$1" == "$PLUGIN_COMMAND_PREFIX:"* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT" -source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_BASE_PATH/common/functions" + set -eo pipefail [[ $DOKKU_TRACE ]] && set -x diff --git a/functions b/functions index a8bc936..9d884d1 100755 --- a/functions +++ b/functions @@ -3,7 +3,8 @@ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config" set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common-functions" -source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_BASE_PATH/common/functions" +source "$PLUGIN_BASE_PATH/common/property-functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" if [[ -f "$PLUGIN_AVAILABLE_PATH/docker-options/functions" ]]; then source "$PLUGIN_AVAILABLE_PATH/docker-options/functions" @@ -77,21 +78,38 @@ service_create_container() { export CONFIG_OPTIONS="$(cat "$SERVICE_ROOT/CONFIG_OPTIONS")" fi + declare -a DOCKER_ARGS + DOCKER_ARGS=() + DOCKER_ARGS+=("--detach") + DOCKER_ARGS+=("--env-file=$SERVICE_ROOT/ENV") + DOCKER_ARGS+=("--hostname=$SERVICE") + DOCKER_ARGS+=("--label=dokku.service=$PLUGIN_COMMAND_PREFIX") + DOCKER_ARGS+=("--label=dokku=service") + DOCKER_ARGS+=("--name=$SERVICE_NAME") + DOCKER_ARGS+=("--restart=always") + DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/usr/local/etc/redis") + DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/data:/data") + [[ -f "$SERVICE_ROOT/SERVICE_MEMORY" ]] && SERVICE_MEMORY="$(cat "$SERVICE_ROOT/SERVICE_MEMORY")" if [[ -n "$SERVICE_MEMORY" ]]; then - MEMORY_LIMIT="--memory=${SERVICE_MEMORY}m" + DOCKER_ARGS+=("--memory=${SERVICE_MEMORY}m") fi [[ -f "$SERVICE_ROOT/SHM_SIZE" ]] && SERVICE_SHM_SIZE="$(cat "$SERVICE_ROOT/SHM_SIZE")" if [[ -n "$SERVICE_SHM_SIZE" ]]; then - SHM_SIZE="--shm-size=${SERVICE_SHM_SIZE}" + DOCKER_ARGS+=("--shm-size=${SERVICE_SHM_SIZE}") fi [[ -f "$SERVICE_ROOT/IMAGE" ]] && PLUGIN_IMAGE="$(cat "$SERVICE_ROOT/IMAGE")" [[ -f "$SERVICE_ROOT/IMAGE_VERSION" ]] && PLUGIN_IMAGE_VERSION="$(cat "$SERVICE_ROOT/IMAGE_VERSION")" + local network="$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "initial-network")" + if [[ -n "$network" ]]; then + DOCKER_ARGS+=("--network=${network}") + fi + # shellcheck disable=SC2086 - ID=$("$DOCKER_BIN" container run --name "$SERVICE_NAME" $MEMORY_LIMIT $SHM_SIZE -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/usr/local/etc/redis" --env-file="$SERVICE_ROOT/ENV" -d --restart always --label dokku=service --label dokku.service=redis "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS) + ID=$("$DOCKER_BIN" container run "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS) echo "$ID" >"$SERVICE_ROOT/ID" dokku_log_verbose_quiet "Waiting for container to be ready" diff --git a/pre-delete b/pre-delete index d315464..1f565d5 100755 --- a/pre-delete +++ b/pre-delete @@ -1,5 +1,6 @@ #!/usr/bin/env bash -source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_BASE_PATH/common/functions" + source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config" source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/functions" set -eo pipefail diff --git a/subcommands/set b/subcommands/set new file mode 100755 index 0000000..823497b --- /dev/null +++ b/subcommands/set @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_BASE_PATH/common/functions" +source "$PLUGIN_BASE_PATH/common/property-functions" + +service-set-cmd() { + #E set the network to attach after the service container is started + #E dokku $PLUGIN_COMMAND_PREFIX:set lollipop post-create-network custom-network + #E unset the post-create-network value + #E dokku $PLUGIN_COMMAND_PREFIX:set lollipop post-create-network + #A service, service to run command against + #A key, property name to set + #A value, optional property value to set or empty to unset key + declare desc="set or clear a property for a service" + local cmd="$PLUGIN_COMMAND_PREFIX:set" argv=("$@") + [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" KEY="$2" VALUE="$3" + local VALID_KEYS=("post-create-network" "post-start-network" "initial-network") + verify_service_name "$SERVICE" + + [[ -z "$KEY" ]] && dokku_log_fail "No key specified" + + if ! fn-in-array "$KEY" "${VALID_KEYS[@]}"; then + dokku_log_fail "Invalid key specified, valid keys include: network" + fi + + if [[ -n "$VALUE" ]]; then + dokku_log_info2_quiet "Setting ${KEY} to ${VALUE}" + fn-plugin-property-write "PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" "$VALUE" + else + dokku_log_info2_quiet "Unsetting ${KEY}" + if [[ "$KEY" == "rev-env-var" ]]; then + fn-plugin-property-write "PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" "$VALUE" + else + fn-plugin-property-delete "PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" + fi + fi +} From 1a942e0484c677cdd120251751a9284dca13c943 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 15:21:28 -0500 Subject: [PATCH 02/16] fix: correct issue with checking if the service container is ready when using an initial-network --- functions | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/functions b/functions index 9d884d1..ab8a042 100755 --- a/functions +++ b/functions @@ -90,6 +90,12 @@ service_create_container() { DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/usr/local/etc/redis") DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/data:/data") + declare -a LINK_CONTAINER_DOCKER_ARGS + LINK_CONTAINER_DOCKER_ARGS=() + LINK_CONTAINER_DOCKER_ARGS+=("--rm") + LINK_CONTAINER_DOCKER_ARGS+=("--link") + LINK_CONTAINER_DOCKER_ARGS+=("$SERVICE_NAME:$PLUGIN_COMMAND_PREFIX") + [[ -f "$SERVICE_ROOT/SERVICE_MEMORY" ]] && SERVICE_MEMORY="$(cat "$SERVICE_ROOT/SERVICE_MEMORY")" if [[ -n "$SERVICE_MEMORY" ]]; then DOCKER_ARGS+=("--memory=${SERVICE_MEMORY}m") @@ -106,6 +112,8 @@ service_create_container() { local network="$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "initial-network")" if [[ -n "$network" ]]; then DOCKER_ARGS+=("--network=${network}") + DOCKER_ARGS+=("--network-alias=$SERVICE_NAME") + LINK_CONTAINER_DOCKER_ARGS+=("--network=${network}") fi # shellcheck disable=SC2086 @@ -113,7 +121,7 @@ service_create_container() { echo "$ID" >"$SERVICE_ROOT/ID" dokku_log_verbose_quiet "Waiting for container to be ready" - "$DOCKER_BIN" container run --rm --link "$SERVICE_NAME:$PLUGIN_COMMAND_PREFIX" "$PLUGIN_WAIT_IMAGE" -p "$PLUGIN_DATASTORE_WAIT_PORT" >/dev/null + "$DOCKER_BIN" container run "${LINK_CONTAINER_DOCKER_ARGS[@]}" "$PLUGIN_WAIT_IMAGE" -c "$SERVICE_NAME:$PLUGIN_DATASTORE_WAIT_PORT" >/dev/null dokku_log_info2 "$PLUGIN_SERVICE container created: $SERVICE" service_info "$SERVICE" From 1d6654943bc3d4e34aafb5e6767c9bbcc0286d0b Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 15:21:57 -0500 Subject: [PATCH 03/16] fix: actually call the :set function and ensure we write properties to the correct namespace --- subcommands/set | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/subcommands/set b/subcommands/set index 823497b..8c82b1e 100755 --- a/subcommands/set +++ b/subcommands/set @@ -4,6 +4,7 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_BASE_PATH/common/functions" source "$PLUGIN_BASE_PATH/common/property-functions" +source "$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)/common-functions" service-set-cmd() { #E set the network to attach after the service container is started @@ -28,13 +29,15 @@ service-set-cmd() { if [[ -n "$VALUE" ]]; then dokku_log_info2_quiet "Setting ${KEY} to ${VALUE}" - fn-plugin-property-write "PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" "$VALUE" + fn-plugin-property-write "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" "$VALUE" else dokku_log_info2_quiet "Unsetting ${KEY}" if [[ "$KEY" == "rev-env-var" ]]; then - fn-plugin-property-write "PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" "$VALUE" + fn-plugin-property-write "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" "$VALUE" else - fn-plugin-property-delete "PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" + fn-plugin-property-delete "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$KEY" fi fi } + +service-set-cmd "$@" From cd13edd30dfcf4a3ac3545b6323e6da5cb0edcbf Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 15:54:13 -0500 Subject: [PATCH 04/16] fix: correct error message for valid/invalid properties --- subcommands/set | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subcommands/set b/subcommands/set index 8c82b1e..656bbb1 100755 --- a/subcommands/set +++ b/subcommands/set @@ -18,13 +18,13 @@ service-set-cmd() { local cmd="$PLUGIN_COMMAND_PREFIX:set" argv=("$@") [[ ${argv[0]} == "$cmd" ]] && shift 1 declare SERVICE="$1" KEY="$2" VALUE="$3" - local VALID_KEYS=("post-create-network" "post-start-network" "initial-network") + local VALID_KEYS=("initial-network" "post-create-network" "post-start-network") verify_service_name "$SERVICE" [[ -z "$KEY" ]] && dokku_log_fail "No key specified" if ! fn-in-array "$KEY" "${VALID_KEYS[@]}"; then - dokku_log_fail "Invalid key specified, valid keys include: network" + dokku_log_fail "Invalid key specified, valid keys include: initial-network, post-create-network, post-start-network" fi if [[ -n "$VALUE" ]]; then From ddfbbd669496ea2a745cc3acf2ff72f8eb5be54b Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 15:54:39 -0500 Subject: [PATCH 05/16] refactor: directly write out the cid file when creating the service container --- functions | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/functions b/functions index ab8a042..121bff9 100755 --- a/functions +++ b/functions @@ -78,9 +78,10 @@ service_create_container() { export CONFIG_OPTIONS="$(cat "$SERVICE_ROOT/CONFIG_OPTIONS")" fi + rm -f "$SERVICE_ROOT/ID" declare -a DOCKER_ARGS DOCKER_ARGS=() - DOCKER_ARGS+=("--detach") + DOCKER_ARGS+=("--cidfile=$SERVICE_ROOT/ID") DOCKER_ARGS+=("--env-file=$SERVICE_ROOT/ENV") DOCKER_ARGS+=("--hostname=$SERVICE") DOCKER_ARGS+=("--label=dokku.service=$PLUGIN_COMMAND_PREFIX") @@ -117,8 +118,8 @@ service_create_container() { fi # shellcheck disable=SC2086 - ID=$("$DOCKER_BIN" container run "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS) - echo "$ID" >"$SERVICE_ROOT/ID" + "$DOCKER_BIN" container create "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS >/dev/null + "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")" >/dev/null dokku_log_verbose_quiet "Waiting for container to be ready" "$DOCKER_BIN" container run "${LINK_CONTAINER_DOCKER_ARGS[@]}" "$PLUGIN_WAIT_IMAGE" -c "$SERVICE_NAME:$PLUGIN_DATASTORE_WAIT_PORT" >/dev/null From ea2a23b0b978a5205db6dca6e64b650d9303f129 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 15:59:15 -0500 Subject: [PATCH 06/16] feat: add support for attaching to networks after service container creation and start --- functions | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/functions b/functions index 121bff9..9295d95 100755 --- a/functions +++ b/functions @@ -119,7 +119,22 @@ service_create_container() { # shellcheck disable=SC2086 "$DOCKER_BIN" container create "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS >/dev/null + + if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network")" ]]; then + dokku_log_verbose_quiet "Connecting to networks after container create" + while read -r line || [[ -n "$line" ]]; do + dokku_log_verbose_quiet "- $line" + "$DOCKER_BIN" network connect --alias "$SERVICE_NAME" "$line" "$SERVICE_NAME" + done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network") + fi "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")" >/dev/null + if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network")" ]]; then + dokku_log_verbose_quiet "Connecting to networks after container start" + while read -r line || [[ -n "$line" ]]; do + dokku_log_verbose_quiet "- $line" + "$DOCKER_BIN" network connect --alias "$SERVICE_NAME" "$line" "$SERVICE_NAME" + done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network") + fi dokku_log_verbose_quiet "Waiting for container to be ready" "$DOCKER_BIN" container run "${LINK_CONTAINER_DOCKER_ARGS[@]}" "$PLUGIN_WAIT_IMAGE" -c "$SERVICE_NAME:$PLUGIN_DATASTORE_WAIT_PORT" >/dev/null From c0a393a7aff513c658f1a90d1a6ca33db9a830a9 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 16:07:53 -0500 Subject: [PATCH 07/16] feat: add ability to set multiple, comma-delimited post-create and post-start networks --- functions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/functions b/functions index 9295d95..72e609d 100755 --- a/functions +++ b/functions @@ -125,7 +125,7 @@ service_create_container() { while read -r line || [[ -n "$line" ]]; do dokku_log_verbose_quiet "- $line" "$DOCKER_BIN" network connect --alias "$SERVICE_NAME" "$line" "$SERVICE_NAME" - done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network") + done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network" | tr "," "\n") fi "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")" >/dev/null if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network")" ]]; then @@ -133,7 +133,7 @@ service_create_container() { while read -r line || [[ -n "$line" ]]; do dokku_log_verbose_quiet "- $line" "$DOCKER_BIN" network connect --alias "$SERVICE_NAME" "$line" "$SERVICE_NAME" - done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network") + done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network" | tr "," "\n") fi dokku_log_verbose_quiet "Waiting for container to be ready" From ab0d871347eca9ac0badf6e7977bec1be5d7c7dd Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 16:09:41 -0500 Subject: [PATCH 08/16] docs: add example for multiple networks --- README.md | 6 ++++++ subcommands/set | 2 ++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 13cbe51..23f452c 100644 --- a/README.md +++ b/README.md @@ -264,6 +264,12 @@ Set the network to attach after the service container is started: dokku redis:set lollipop post-create-network custom-network ``` +Set multiple networks: + +```shell +dokku redis:set lollipop post-create-network custom-network,other-network +``` + Unset the post-create-network value: ```shell diff --git a/subcommands/set b/subcommands/set index 656bbb1..260c918 100755 --- a/subcommands/set +++ b/subcommands/set @@ -9,6 +9,8 @@ source "$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)/common-functi service-set-cmd() { #E set the network to attach after the service container is started #E dokku $PLUGIN_COMMAND_PREFIX:set lollipop post-create-network custom-network + #E set multiple networks + #E dokku $PLUGIN_COMMAND_PREFIX:set lollipop post-create-network custom-network,other-network #E unset the post-create-network value #E dokku $PLUGIN_COMMAND_PREFIX:set lollipop post-create-network #A service, service to run command against From fe378009d898d7ae1b65fdd7af2c859e5564f134 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 16:13:59 -0500 Subject: [PATCH 09/16] feat: add network properties to :info output --- README.md | 6 ++++++ common-functions | 3 +++ subcommands/info | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/README.md b/README.md index 23f452c..d96c116 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,10 @@ flags: - `--exposed-ports`: show service exposed ports - `--id`: show the service container id - `--internal-ip`: show the service internal ip +- `--initial-network`: show the initial network being connected to - `--links`: show the service app links +- `--post-create-network`: show the networks to attach to after service container creation +- `--post-start-network`: show the networks to attach to after service container start - `--service-root`: show the service root directory - `--status`: show the service running status - `--version`: show the service image version @@ -132,7 +135,10 @@ dokku redis:info lollipop --dsn dokku redis:info lollipop --exposed-ports dokku redis:info lollipop --id dokku redis:info lollipop --internal-ip +dokku redis:info lollipop --initial-network dokku redis:info lollipop --links +dokku redis:info lollipop --post-create-network +dokku redis:info lollipop --post-start-network dokku redis:info lollipop --service-root dokku redis:info lollipop --status dokku redis:info lollipop --version diff --git a/common-functions b/common-functions index 2b277a6..b8f6c76 100755 --- a/common-functions +++ b/common-functions @@ -539,7 +539,10 @@ service_info() { "--exposed-ports: $(service_exposed_ports "$SERVICE")" "--id: ${SERVICE_CONTAINER_ID}" "--internal-ip: $(get_container_ip "${SERVICE_CONTAINER_ID}")" + "--initial-network: $(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "initial-network")" "--links: $(service_linked_apps "$SERVICE")" + "--post-create-network: $(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network")" + "--post-start-network: $(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network")" "--service-root: ${SERVICE_ROOT}" "--status: $(service_status "$SERVICE")" "--version: $(service_version "$SERVICE")" diff --git a/subcommands/info b/subcommands/info index 7f4b7aa..9cba535 100755 --- a/subcommands/info +++ b/subcommands/info @@ -15,7 +15,10 @@ service-info-cmd() { #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --exposed-ports #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --id #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --internal-ip + #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --initial-network #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --links + #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --post-create-network + #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --post-start-network #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --service-root #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --status #E dokku $PLUGIN_COMMAND_PREFIX:info lollipop --version @@ -26,7 +29,10 @@ service-info-cmd() { #F --exposed-ports, show service exposed ports #F --id, show the service container id #F --internal-ip, show the service internal ip + #F --initial-network, show the initial network being connected to #F --links, show the service app links + #F --post-create-network, show the networks to attach to after service container creation + #F --post-start-network, show the networks to attach to after service container start #F --service-root, show the service root directory #F --status, show the service running status #F --version, show the service image version From 49949f24cb31941b6fea194ae0a2f73bd42f7ddb Mon Sep 17 00:00:00 2001 From: josegonzalez Date: Tue, 7 Feb 2023 20:17:15 -0500 Subject: [PATCH 10/16] debug: check why the commands are failing --- tests/service_import.bats | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/service_import.bats b/tests/service_import.bats index d3bcf34..63c6fc7 100755 --- a/tests/service_import.bats +++ b/tests/service_import.bats @@ -7,6 +7,7 @@ setup() { } teardown() { + dokku trace:off dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l rm -f "/tmp/fake.rdb" } @@ -33,6 +34,7 @@ teardown() { } @test "($PLUGIN_COMMAND_PREFIX:import) success" { + dokku trace:on run dokku "$PLUGIN_COMMAND_PREFIX:import" l <"/tmp/fake.rdb" echo "output: $output" echo "status: $status" From acaaaf586bbc335a2683a18857ea5eba778dc21f Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 20:30:43 -0500 Subject: [PATCH 11/16] refactor: use direct functions instead of subcommands --- functions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/functions b/functions index 72e609d..488b4ca 100755 --- a/functions +++ b/functions @@ -173,9 +173,9 @@ service_import() { if [[ -t 0 ]]; then dokku_log_fail "No data provided on stdin." fi - dokku "$PLUGIN_COMMAND_PREFIX:stop" "$SERVICE" >/dev/null 2>&1 + service_container_rm "$SERVICE" "$DOCKER_BIN" container run --rm -i -v "$SERVICE_HOST_ROOT/data:/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" bash -c "cat > /data/dump.rdb && chown redis: /data/dump.rdb" - dokku "$PLUGIN_COMMAND_PREFIX:start" "$SERVICE" >/dev/null 2>&1 + service_start "$SERVICE" } service_start() { From 2f4d5dfe38ff6f2d249c9bf5b8e36f914aa27444 Mon Sep 17 00:00:00 2001 From: josegonzalez Date: Tue, 7 Feb 2023 20:46:54 -0500 Subject: [PATCH 12/16] feat: add more debug information --- functions | 3 +++ 1 file changed, 3 insertions(+) diff --git a/functions b/functions index 488b4ca..f4a23f5 100755 --- a/functions +++ b/functions @@ -136,6 +136,9 @@ service_create_container() { done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network" | tr "," "\n") fi + docker logs "$SERVICE_NAME" + docker inspect "$SERVICE_NAME" + dokku_log_verbose_quiet "Waiting for container to be ready" "$DOCKER_BIN" container run "${LINK_CONTAINER_DOCKER_ARGS[@]}" "$PLUGIN_WAIT_IMAGE" -c "$SERVICE_NAME:$PLUGIN_DATASTORE_WAIT_PORT" >/dev/null From 76a5fbd9cbea693b64b5127c8befdc6ef9ba74dc Mon Sep 17 00:00:00 2001 From: josegonzalez Date: Tue, 7 Feb 2023 21:18:32 -0500 Subject: [PATCH 13/16] feat: more debugging --- functions | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/functions b/functions index f4a23f5..2876dd2 100755 --- a/functions +++ b/functions @@ -91,6 +91,8 @@ service_create_container() { DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/usr/local/etc/redis") DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/data:/data") + ls -lah $SERVICE_ROOT/ENV $SERVICE_HOST_ROOT/config $SERVICE_HOST_ROOT/data + declare -a LINK_CONTAINER_DOCKER_ARGS LINK_CONTAINER_DOCKER_ARGS=() LINK_CONTAINER_DOCKER_ARGS+=("--rm") @@ -118,7 +120,7 @@ service_create_container() { fi # shellcheck disable=SC2086 - "$DOCKER_BIN" container create "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS >/dev/null + "$DOCKER_BIN" container create "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network")" ]]; then dokku_log_verbose_quiet "Connecting to networks after container create" @@ -127,7 +129,7 @@ service_create_container() { "$DOCKER_BIN" network connect --alias "$SERVICE_NAME" "$line" "$SERVICE_NAME" done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network" | tr "," "\n") fi - "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")" >/dev/null + "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")" if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network")" ]]; then dokku_log_verbose_quiet "Connecting to networks after container start" while read -r line || [[ -n "$line" ]]; do From cdb062fed15fd2edcc1d4013d30b21f105a70262 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 7 Feb 2023 21:46:24 -0500 Subject: [PATCH 14/16] debug --- functions | 8 ++++---- tests/service_import.bats | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/functions b/functions index 2876dd2..61fe4b2 100755 --- a/functions +++ b/functions @@ -120,7 +120,7 @@ service_create_container() { fi # shellcheck disable=SC2086 - "$DOCKER_BIN" container create "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS + suppress_output "$DOCKER_BIN" container create "${DOCKER_ARGS[@]}" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" redis-server /usr/local/etc/redis/redis.conf --bind 0.0.0.0 $CONFIG_OPTIONS if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network")" ]]; then dokku_log_verbose_quiet "Connecting to networks after container create" @@ -129,7 +129,7 @@ service_create_container() { "$DOCKER_BIN" network connect --alias "$SERVICE_NAME" "$line" "$SERVICE_NAME" done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network" | tr "," "\n") fi - "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")" + suppress_output "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")" if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network")" ]]; then dokku_log_verbose_quiet "Connecting to networks after container start" while read -r line || [[ -n "$line" ]]; do @@ -178,9 +178,9 @@ service_import() { if [[ -t 0 ]]; then dokku_log_fail "No data provided on stdin." fi - service_container_rm "$SERVICE" + suppress_output service_container_rm "$SERVICE" "$DOCKER_BIN" container run --rm -i -v "$SERVICE_HOST_ROOT/data:/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" bash -c "cat > /data/dump.rdb && chown redis: /data/dump.rdb" - service_start "$SERVICE" + suppress_output service_start "$SERVICE" } service_start() { diff --git a/tests/service_import.bats b/tests/service_import.bats index 63c6fc7..45f38bc 100755 --- a/tests/service_import.bats +++ b/tests/service_import.bats @@ -7,7 +7,6 @@ setup() { } teardown() { - dokku trace:off dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l rm -f "/tmp/fake.rdb" } @@ -34,8 +33,7 @@ teardown() { } @test "($PLUGIN_COMMAND_PREFIX:import) success" { - dokku trace:on - run dokku "$PLUGIN_COMMAND_PREFIX:import" l <"/tmp/fake.rdb" + run dokku --trace "$PLUGIN_COMMAND_PREFIX:import" l <"/tmp/fake.rdb" echo "output: $output" echo "status: $status" assert_success From 02b6c50bb276695a8d3ac9d96f4e1dac9ab39c08 Mon Sep 17 00:00:00 2001 From: josegonzalez Date: Tue, 7 Feb 2023 21:56:25 -0500 Subject: [PATCH 15/16] chore: drop extra ls --- functions | 2 -- 1 file changed, 2 deletions(-) diff --git a/functions b/functions index 61fe4b2..3cf1ad0 100755 --- a/functions +++ b/functions @@ -91,8 +91,6 @@ service_create_container() { DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/usr/local/etc/redis") DOCKER_ARGS+=("--volume=$SERVICE_HOST_ROOT/data:/data") - ls -lah $SERVICE_ROOT/ENV $SERVICE_HOST_ROOT/config $SERVICE_HOST_ROOT/data - declare -a LINK_CONTAINER_DOCKER_ARGS LINK_CONTAINER_DOCKER_ARGS=() LINK_CONTAINER_DOCKER_ARGS+=("--rm") From 1e33752ea0b6437d9ac1736f4f1a0fdf97ab35a7 Mon Sep 17 00:00:00 2001 From: josegonzalez Date: Tue, 7 Feb 2023 21:57:19 -0500 Subject: [PATCH 16/16] chore: drop debugging code --- functions | 3 --- 1 file changed, 3 deletions(-) diff --git a/functions b/functions index 3cf1ad0..92f9230 100755 --- a/functions +++ b/functions @@ -136,9 +136,6 @@ service_create_container() { done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network" | tr "," "\n") fi - docker logs "$SERVICE_NAME" - docker inspect "$SERVICE_NAME" - dokku_log_verbose_quiet "Waiting for container to be ready" "$DOCKER_BIN" container run "${LINK_CONTAINER_DOCKER_ARGS[@]}" "$PLUGIN_WAIT_IMAGE" -c "$SERVICE_NAME:$PLUGIN_DATASTORE_WAIT_PORT" >/dev/null