From df834f41f313df49ff41abc6f22b01b2eab5ee3a Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sat, 28 Jul 2018 00:19:13 -0400 Subject: [PATCH 1/2] feat: add a test to prove that tls breaks app renames --- tests/unit/10_apps.bats | 15 ++++++++++++++- tests/unit/30_core_1.bats | 6 ------ tests/unit/40_core_2.bats | 6 ------ tests/unit/test_helper.bash | 6 ++++++ 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/tests/unit/10_apps.bats b/tests/unit/10_apps.bats index e58ec2e03..1fce0c5be 100644 --- a/tests/unit/10_apps.bats +++ b/tests/unit/10_apps.bats @@ -113,6 +113,19 @@ teardown () { assert_success } +@test "(apps) apps:rename with tls" { + setup_test_tls + deploy_app + run bash -c "dokku apps:rename $TEST_APP great-test-name" + echo "output: "$output + echo "status: "$status + assert_success + run bash -c "dokku --force apps:destroy great-test-name" + echo "output: "$output + echo "status: "$status + assert_success +} + @test "(apps) apps:clone" { deploy_app run bash -c "dokku apps:clone $TEST_APP great-test-name" @@ -213,4 +226,4 @@ teardown () { assert_output "false" destroy_app -} \ No newline at end of file +} diff --git a/tests/unit/30_core_1.bats b/tests/unit/30_core_1.bats index 310a2854c..e9c9c235d 100644 --- a/tests/unit/30_core_1.bats +++ b/tests/unit/30_core_1.bats @@ -24,12 +24,6 @@ assert_urls() { assert_output < <(tr ' ' '\n' <<< "${urls}") } -build_nginx_config() { - # simulate nginx post-deploy - dokku domains:setup $TEST_APP - dokku nginx:build-config $TEST_APP -} - @test "(core) remove exited containers" { deploy_app diff --git a/tests/unit/40_core_2.bats b/tests/unit/40_core_2.bats index a26d2c8b6..9a82423a5 100644 --- a/tests/unit/40_core_2.bats +++ b/tests/unit/40_core_2.bats @@ -31,12 +31,6 @@ assert_url() { assert_output "${url}" } -build_nginx_config() { - # simulate nginx post-deploy - dokku domains:setup $TEST_APP - dokku nginx:build-config $TEST_APP -} - @test "(core) run (with --options)" { deploy_app run /bin/bash -c "dokku --force --quiet run $TEST_APP node --version" diff --git a/tests/unit/test_helper.bash b/tests/unit/test_helper.bash index ee94c70dc..ab4dbb5b5 100644 --- a/tests/unit/test_helper.bash +++ b/tests/unit/test_helper.bash @@ -372,3 +372,9 @@ cat< "$APP_REPO_DIR/nginx.conf.sigil" some lame nginx config EOF } + +build_nginx_config() { + # simulate nginx post-deploy + dokku domains:setup "$TEST_APP" + dokku nginx:build-config "$TEST_APP" +} From 66b2fb602f9fa4a82e8e4a63172cae4f4633b559 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 26 Jul 2018 09:53:56 -0400 Subject: [PATCH 2/2] feat: implement proxy-clear-config This will allow us to kill stale proxy configuration within apps, which is critical during application renames. - redirect rmdir output to dev-null - trigger a proxy-clear-config (new trigger) when renaming an application - The configuration will be rebuilt during the later `ps_rebuild` Closes #3231 --- docs/development/plugin-triggers.md | 30 +++++++++++++++++++++++++ plugins/20_events/network-clear-config | 1 + plugins/20_events/proxy-clear-config | 1 + plugins/apps/subcommands/rename | 3 ++- plugins/nginx-vhosts/internal-functions | 6 +++++ plugins/nginx-vhosts/proxy-clear-config | 19 ++++++++++++++++ 6 files changed, 59 insertions(+), 1 deletion(-) create mode 120000 plugins/20_events/network-clear-config create mode 120000 plugins/20_events/proxy-clear-config create mode 100755 plugins/nginx-vhosts/proxy-clear-config diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index c655ca3c3..a14bea974 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -373,6 +373,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x # TODO ``` +### `network-clear-config` + +- Description: Clears network configuration +- Invoked by: `internally triggered by proxy-clear-config within proxy implementations` +- Arguments: `$APP` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + ### `network-compute-ports` - Description: Computes the ports for a given app container @@ -1040,6 +1055,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x # TODO ``` +### `proxy-clear-config` + +- Description: Clears the proxy implementation configuration for a given app +- Invoked by: `internally triggered by apps:rename` +- Arguments: `$APP` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + ### `proxy-enable` - Description: Enables the configured proxy implementation for an app diff --git a/plugins/20_events/network-clear-config b/plugins/20_events/network-clear-config new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/network-clear-config @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/proxy-clear-config b/plugins/20_events/proxy-clear-config new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/proxy-clear-config @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index d18604445..2a95d1b26 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -14,12 +14,13 @@ apps_rename_cmd() { local OLD_CACHE_DIR="$DOKKU_ROOT/$OLD_APP/cache" local OLD_CACHE_HOST_DIR="$DOKKU_HOST_ROOT/$OLD_APP/cache" - if [[ -d "$OLD_CACHE_DIR" ]] && ! rmdir "$OLD_CACHE_DIR"; then + if [[ -d "$OLD_CACHE_DIR" ]] && ! rmdir "$OLD_CACHE_DIR" > /dev/null 2>&1; then docker run "$DOKKU_GLOBAL_RUN_ARGS" --rm -v "$OLD_CACHE_HOST_DIR:/cache" "dokku/$OLD_APP" chmod 777 -R /cache fi rm -rf "$OLD_CACHE_DIR" apps_create "$NEW_APP" cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP" + plugn trigger proxy-clear-config "$NEW_APP" DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP" [[ -f "$DOKKU_ROOT/$NEW_APP/URLS" ]] && sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/URLS" [[ -f "$DOKKU_ROOT/$NEW_APP/VHOST" ]] && sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/VHOST" diff --git a/plugins/nginx-vhosts/internal-functions b/plugins/nginx-vhosts/internal-functions index 93d929bb6..edf212502 100755 --- a/plugins/nginx-vhosts/internal-functions +++ b/plugins/nginx-vhosts/internal-functions @@ -26,3 +26,9 @@ nginx_vhosts_help_cmd() { help_desc fi } + +nginx_clear_config() { + declare desc="Remove the nginx conf file" + declare APP="$1"; + rm -f "$DOKKU_ROOT/$APP/nginx.conf" +} diff --git a/plugins/nginx-vhosts/proxy-clear-config b/plugins/nginx-vhosts/proxy-clear-config new file mode 100755 index 000000000..acd909db7 --- /dev/null +++ b/plugins/nginx-vhosts/proxy-clear-config @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/internal-functions" +source "$PLUGIN_AVAILABLE_PATH/proxy/functions" + +trigger-nginx-vhosts-clear-config() { + declare desc="clear nginx config for proxy app containers from command line" + declare trigger="trigger-nginx-vhosts-clear-config" + declare APP="$1" + [[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on" + + if [[ "$(get_app_proxy_type "$APP")" = "nginx" ]]; then + plugn trigger network-clear-config "$APP" + nginx_clear_config "$APP" + fi +} + +trigger-nginx-vhosts-clear-config "$@"