From 77f98625495df72f3a3d83ff1c9702e465ab2d8a Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:09:42 -0500 Subject: [PATCH 01/22] feat: add post-app-rename-setup trigger --- plugins/20_events/post-app-rename-setup | 1 + plugins/apps/subcommands/rename | 1 + 2 files changed, 2 insertions(+) create mode 120000 plugins/20_events/post-app-rename-setup diff --git a/plugins/20_events/post-app-rename-setup b/plugins/20_events/post-app-rename-setup new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/post-app-rename-setup @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 0ce98e154..845fd5e87 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -24,6 +24,7 @@ cmd-apps-rename() { rm -rf "$OLD_CACHE_DIR" apps_create "$NEW_APP" cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP" + plugn trigger post-app-rename-setup "$OLD_APP" "$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" From 0740636d5352a75beccf344c0d65735141b7f28c Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:10:26 -0500 Subject: [PATCH 02/22] feat: call ps_rebuild from post-app-rename-setup --- plugins/apps/subcommands/rename | 1 - plugins/ps/post-app-rename-setup | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100755 plugins/ps/post-app-rename-setup diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 845fd5e87..5ce94b69a 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -30,7 +30,6 @@ cmd-apps-rename() { [[ -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" [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" - ps_rebuild "$NEW_APP" plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" docker_cleanup "$OLD_APP" "true" echo "Renaming $OLD_APP to $NEW_APP... done" diff --git a/plugins/ps/post-app-rename-setup b/plugins/ps/post-app-rename-setup new file mode 100755 index 000000000..7e4749cf0 --- /dev/null +++ b/plugins/ps/post-app-rename-setup @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/config/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/functions" + +trigger-ps-post-app-rename-setup() { + declare desc="ps post-app-rename-setup plugin trigger" + declare trigger="post-app-rename-setup" + declare OLD_APP="$1" NEW_APP="$2" + + ps_rebuild "$NEW_APP" +} + +trigger-ps-post-app-rename-setup "$@" From c2c2e2ccbd61225d79a699c8b4472eafc6ff2693 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:11:52 -0500 Subject: [PATCH 03/22] refactor: call proxy-clear-config from post-app-rename-setup --- docs/development/plugin-triggers.md | 2 +- plugins/apps/subcommands/rename | 1 - plugins/nginx-vhosts/post-app-rename-setup | 16 ++++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100755 plugins/nginx-vhosts/post-app-rename-setup diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index 202c74a9d..6f884fc72 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -527,7 +527,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x ### `network-clear-config` - Description: Clears network configuration -- Invoked by: `internally triggered by proxy-clear-config within proxy implementations` +- Invoked by: `internally triggered within proxy implementations` - Arguments: `$APP` - Example: diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 5ce94b69a..dbf69b17c 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -25,7 +25,6 @@ cmd-apps-rename() { apps_create "$NEW_APP" cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP" plugn trigger post-app-rename-setup "$OLD_APP" "$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/post-app-rename-setup b/plugins/nginx-vhosts/post-app-rename-setup new file mode 100755 index 000000000..05ab658f1 --- /dev/null +++ b/plugins/nginx-vhosts/post-app-rename-setup @@ -0,0 +1,16 @@ +#!/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-post-app-rename-setup() { + declare desc="calls proxy-clear-config" + declare trigger="post-app-rename-setup" + declare OLD_APP="$1" NEW_APP="$2" + + plugn trigger proxy-clear-config "$NEW_APP" +} + +trigger-nginx-vhosts-post-app-rename-setup "$@" From 3a961d2de798e8c9e2ee4fe5bffc22fc6b4ea043 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:17:13 -0500 Subject: [PATCH 04/22] feat: move URLS and VHOST modifications to post-app-rename-setup --- plugins/apps/subcommands/rename | 2 -- plugins/domains/post-app-rename-setup | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100755 plugins/domains/post-app-rename-setup diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index dbf69b17c..5a46b0b18 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -26,8 +26,6 @@ cmd-apps-rename() { cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP" plugn trigger post-app-rename-setup "$OLD_APP" "$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" [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" docker_cleanup "$OLD_APP" "true" diff --git a/plugins/domains/post-app-rename-setup b/plugins/domains/post-app-rename-setup new file mode 100755 index 000000000..08be9639d --- /dev/null +++ b/plugins/domains/post-app-rename-setup @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +trigger-domains-post-app-rename-setup() { + declare desc="updates VHOST and URLS files during rename" + declare trigger="post-app-rename-setup" + declare OLD_APP="$1" NEW_APP="$2" + + [[ -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" +} + +trigger-domains-post-app-rename-setup "$@" From 9d3538d587a8be00e99f1f8adf08df091754ce61 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:17:58 -0500 Subject: [PATCH 05/22] fix: move ps_rebuild to post-app-rename --- plugins/ps/{post-app-rename-setup => post-app-rename} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename plugins/ps/{post-app-rename-setup => post-app-rename} (61%) diff --git a/plugins/ps/post-app-rename-setup b/plugins/ps/post-app-rename similarity index 61% rename from plugins/ps/post-app-rename-setup rename to plugins/ps/post-app-rename index 7e4749cf0..4b0bd16a4 100755 --- a/plugins/ps/post-app-rename-setup +++ b/plugins/ps/post-app-rename @@ -5,12 +5,12 @@ source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" source "$PLUGIN_AVAILABLE_PATH/ps/functions" -trigger-ps-post-app-rename-setup() { - declare desc="ps post-app-rename-setup plugin trigger" - declare trigger="post-app-rename-setup" +trigger-ps-post-app-rename() { + declare desc="ps post-app-rename plugin trigger" + declare trigger="post-app-rename" declare OLD_APP="$1" NEW_APP="$2" ps_rebuild "$NEW_APP" } -trigger-ps-post-app-rename-setup "$@" +trigger-ps-post-app-rename "$@" From 5801fd98a403d3ebce94887c16893789aa15c45d Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:20:20 -0500 Subject: [PATCH 06/22] refactor: move pre-receive hook modification to post-app-rename-setup trigger --- plugins/apps/subcommands/rename | 1 - plugins/git/post-app-rename-setup | 13 +++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100755 plugins/git/post-app-rename-setup diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 5a46b0b18..bcb8947e5 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -26,7 +26,6 @@ cmd-apps-rename() { cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP" plugn trigger post-app-rename-setup "$OLD_APP" "$NEW_APP" DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP" - [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" docker_cleanup "$OLD_APP" "true" echo "Renaming $OLD_APP to $NEW_APP... done" diff --git a/plugins/git/post-app-rename-setup b/plugins/git/post-app-rename-setup new file mode 100755 index 000000000..c23634b08 --- /dev/null +++ b/plugins/git/post-app-rename-setup @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +trigger-git-post-app-rename-setup() { + declare desc="modifies git-hook" + declare trigger="post-app-rename-setup" + declare OLD_APP="$1" NEW_APP="$2" + + [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" +} + +trigger-git-post-app-rename-setup "$@" From 5dd297bb493b25935b14413af2f803ae9616a4ab Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:21:08 -0500 Subject: [PATCH 07/22] refactor: move pre-receive hook modification to post-app-clone-setup trigger --- plugins/apps/subcommands/clone | 1 - plugins/git/post-app-clone-setup | 13 +++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100755 plugins/git/post-app-clone-setup diff --git a/plugins/apps/subcommands/clone b/plugins/apps/subcommands/clone index 7ba17a6a9..e4fde7cc7 100755 --- a/plugins/apps/subcommands/clone +++ b/plugins/apps/subcommands/clone @@ -49,7 +49,6 @@ cmd-apps-clone() { fi rm -rf "$NEW_CACHE_DIR" - [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" [[ "$SKIP_REBUILD" == "true" ]] || ps_rebuild "$NEW_APP" plugn trigger post-app-clone "$OLD_APP" "$NEW_APP" dokku_log_info1_quiet "Cloning $OLD_APP to $NEW_APP... done" diff --git a/plugins/git/post-app-clone-setup b/plugins/git/post-app-clone-setup new file mode 100755 index 000000000..68fda4efb --- /dev/null +++ b/plugins/git/post-app-clone-setup @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +trigger-git-post-app-clone-setup() { + declare desc="modifies git-hook" + declare trigger="post-app-clone-setup" + declare OLD_APP="$1" NEW_APP="$2" + + [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" +} + +trigger-git-post-app-clone-setup "$@" From 799a5713c23d43c5158df30de513f6c366e5c5fb Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 06:23:14 -0500 Subject: [PATCH 08/22] chore: remove duplicate docker_cleanup call This is already called during apps_destroy --- plugins/apps/subcommands/rename | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index bcb8947e5..9fa77ac03 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -27,7 +27,6 @@ cmd-apps-rename() { plugn trigger post-app-rename-setup "$OLD_APP" "$NEW_APP" DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP" plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" - docker_cleanup "$OLD_APP" "true" echo "Renaming $OLD_APP to $NEW_APP... done" } From 0b40414170060d8e5c9443652821103b86f55c8f Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 18:27:11 -0500 Subject: [PATCH 09/22] refactor: use normal if statement instead of && calls --- plugins/domains/post-app-rename-setup | 8 ++++++-- plugins/git/post-app-clone-setup | 4 +++- plugins/git/post-app-rename-setup | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/plugins/domains/post-app-rename-setup b/plugins/domains/post-app-rename-setup index 08be9639d..7a2d2a5ff 100755 --- a/plugins/domains/post-app-rename-setup +++ b/plugins/domains/post-app-rename-setup @@ -7,8 +7,12 @@ trigger-domains-post-app-rename-setup() { declare trigger="post-app-rename-setup" declare OLD_APP="$1" NEW_APP="$2" - [[ -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" + if [[ -f "$DOKKU_ROOT/$NEW_APP/URLS" ]]; then + sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/URLS" + fi + if [[ -f "$DOKKU_ROOT/$NEW_APP/VHOST" ]]; then + sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/VHOST" + fi } trigger-domains-post-app-rename-setup "$@" diff --git a/plugins/git/post-app-clone-setup b/plugins/git/post-app-clone-setup index 68fda4efb..68db5a879 100755 --- a/plugins/git/post-app-clone-setup +++ b/plugins/git/post-app-clone-setup @@ -7,7 +7,9 @@ trigger-git-post-app-clone-setup() { declare trigger="post-app-clone-setup" declare OLD_APP="$1" NEW_APP="$2" - [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" + if [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]]; then + sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" + fi } trigger-git-post-app-clone-setup "$@" diff --git a/plugins/git/post-app-rename-setup b/plugins/git/post-app-rename-setup index c23634b08..544da745b 100755 --- a/plugins/git/post-app-rename-setup +++ b/plugins/git/post-app-rename-setup @@ -7,7 +7,9 @@ trigger-git-post-app-rename-setup() { declare trigger="post-app-rename-setup" declare OLD_APP="$1" NEW_APP="$2" - [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" + if [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]]; then + sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" + fi } trigger-git-post-app-rename-setup "$@" From b1ae58f968fcf8aaa8dbde3faefecb8f8292c6c0 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 18:40:55 -0500 Subject: [PATCH 10/22] chore: re-arrange commands to be in alphabetical order --- plugins/common/src/prop/prop.go | 143 ++++++++++++++++---------------- 1 file changed, 71 insertions(+), 72 deletions(-) diff --git a/plugins/common/src/prop/prop.go b/plugins/common/src/prop/prop.go index f72d970b2..1850f7562 100644 --- a/plugins/common/src/prop/prop.go +++ b/plugins/common/src/prop/prop.go @@ -33,12 +33,70 @@ func main() { pluginName := flag.Arg(1) switch cmd { - case "rpush": + case "del": + appName := flag.Arg(2) + property := flag.Arg(3) + err := common.PropertyDelete(pluginName, appName, property) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + case "destroy": + appName := flag.Arg(2) + err := common.PropertyDestroy(pluginName, appName) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + case "exists": + appName := flag.Arg(2) + property := flag.Arg(3) + exists := common.PropertyExists(pluginName, appName, property) + if !exists { + os.Exit(1) + } + case "get": + appName := flag.Arg(2) + property := flag.Arg(3) + value := common.PropertyGet(pluginName, appName, property) + if value != "" { + fmt.Printf("%v\n", value) + } + case "get-all": + appName := flag.Arg(2) + values, err := common.PropertyGetAll(pluginName, appName) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + + for key, value := range values { + fmt.Fprintln(os.Stdout, key, strings.TrimSuffix(value, "\n")) + } + case "get-with-default": + appName := flag.Arg(2) + property := flag.Arg(3) + defaultValue := flag.Arg(4) + value := common.PropertyGetDefault(pluginName, appName, property, defaultValue) + if value != "" { + fmt.Printf("%v\n", value) + } + case "lindex": + appName := flag.Arg(2) + property := flag.Arg(3) + index := strToInt(flag.Arg(4), 0, false) + propertyValue, err := common.PropertyListGetByIndex(pluginName, appName, property, index) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + + fmt.Printf("%v\n", propertyValue) + case "lismember": appName := flag.Arg(2) property := flag.Arg(3) value := flag.Arg(4) - index := strToInt(flag.Arg(5), 0, true) - err := common.PropertyListAdd(pluginName, appName, property, value, index) + _, err := common.PropertyListGetByValue(pluginName, appName, property, value) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) @@ -65,26 +123,6 @@ func main() { for _, line := range lines { fmt.Printf("%v\n", line) } - case "lindex": - appName := flag.Arg(2) - property := flag.Arg(3) - index := strToInt(flag.Arg(4), 0, false) - propertyValue, err := common.PropertyListGetByIndex(pluginName, appName, property, index) - if err != nil { - fmt.Fprintln(os.Stderr, err.Error()) - os.Exit(1) - } - - fmt.Printf("%v\n", propertyValue) - case "lismember": - appName := flag.Arg(2) - property := flag.Arg(3) - value := flag.Arg(4) - _, err := common.PropertyListGetByValue(pluginName, appName, property, value) - if err != nil { - fmt.Fprintln(os.Stderr, err.Error()) - os.Exit(1) - } case "lrem": appName := flag.Arg(2) property := flag.Arg(3) @@ -113,6 +151,16 @@ func main() { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } + case "rpush": + appName := flag.Arg(2) + property := flag.Arg(3) + value := flag.Arg(4) + index := strToInt(flag.Arg(5), 0, true) + err := common.PropertyListAdd(pluginName, appName, property, value, index) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } case "set": appName := flag.Arg(2) property := flag.Arg(3) @@ -122,60 +170,11 @@ func main() { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } - case "get": - appName := flag.Arg(2) - property := flag.Arg(3) - value := common.PropertyGet(pluginName, appName, property) - if value != "" { - fmt.Printf("%v\n", value) - } - case "get-with-default": - appName := flag.Arg(2) - property := flag.Arg(3) - defaultValue := flag.Arg(4) - value := common.PropertyGetDefault(pluginName, appName, property, defaultValue) - if value != "" { - fmt.Printf("%v\n", value) - } - case "get-all": - appName := flag.Arg(2) - values, err := common.PropertyGetAll(pluginName, appName) - if err != nil { - fmt.Fprintln(os.Stderr, err.Error()) - os.Exit(1) - } - - for key, value := range values { - fmt.Fprintln(os.Stdout, key, strings.TrimSuffix(value, "\n")) - } - case "exists": - appName := flag.Arg(2) - property := flag.Arg(3) - exists := common.PropertyExists(pluginName, appName, property) - if !exists { - os.Exit(1) - } - case "del": - appName := flag.Arg(2) - property := flag.Arg(3) - err := common.PropertyDelete(pluginName, appName, property) - if err != nil { - fmt.Fprintln(os.Stderr, err.Error()) - os.Exit(1) - } case "setup": err := common.PropertySetup(pluginName) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } - case "destroy": - appName := flag.Arg(2) - err := common.PropertyDestroy(pluginName, appName) - if err != nil { - fmt.Fprintln(os.Stderr, err.Error()) - os.Exit(1) - } - } } From ebd27cd6665e1cfef41999efde67854fbfa569ac Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 18:43:42 -0500 Subject: [PATCH 11/22] chore: drop unused and unspecified arg --- plugins/common/property-functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/common/property-functions b/plugins/common/property-functions index 6c8d0fffe..72330838d 100755 --- a/plugins/common/property-functions +++ b/plugins/common/property-functions @@ -12,7 +12,7 @@ fn-plugin-property-get() { fn-plugin-property-destroy() { declare desc="destroy the properties for an app" declare PLUGIN="$1" APP="$2" - "$PLUGIN_CORE_AVAILABLE_PATH/common/prop" "destroy" "$PLUGIN" "$APP" "$KEY" + "$PLUGIN_CORE_AVAILABLE_PATH/common/prop" "destroy" "$PLUGIN" "$APP" } fn-plugin-property-delete() { From d336d7c5c24cdd85de8c8b11b9f207d980147f6b Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 18:48:06 -0500 Subject: [PATCH 12/22] feat: add `prop clone` command --- plugins/common/properties.go | 16 ++++++++++++++++ plugins/common/property-functions | 6 ++++++ plugins/common/src/prop/prop.go | 8 ++++++++ 3 files changed, 30 insertions(+) diff --git a/plugins/common/properties.go b/plugins/common/properties.go index cbbf75349..5483914b6 100644 --- a/plugins/common/properties.go +++ b/plugins/common/properties.go @@ -44,6 +44,22 @@ func CommandPropertySet(pluginName, appName, property, value string, properties } } +// PropertyClone clones a set of properties from one app to another +func PropertyClone(pluginName string, oldAppName string, newAppName string) error { + properties, err := PropertyGetAll(pluginName, oldAppName) + if err != nil { + return err + } + + for property, value := range properties { + if err := PropertyWrite(pluginName, newAppName, property, value); err != nil { + return err + } + } + + return nil +} + // PropertyDelete deletes a property from the plugin properties for an app func PropertyDelete(pluginName string, appName string, property string) error { propertyPath := getPropertyPath(pluginName, appName, property) diff --git a/plugins/common/property-functions b/plugins/common/property-functions index 72330838d..8f20ad8b4 100755 --- a/plugins/common/property-functions +++ b/plugins/common/property-functions @@ -9,6 +9,12 @@ fn-plugin-property-get() { fn-plugin-property-get-default "$PLUGIN" "$APP" "$KEY" "$DEFAULT" } +fn-plugin-property-clone() { + declare desc="destroy the properties for an app" + declare PLUGIN="$1" OLD_APP="$2" NEW_APP="$3" + "$PLUGIN_CORE_AVAILABLE_PATH/common/prop" "clone" "$PLUGIN" "$OLD_APP" "$NEW_APP" +} + fn-plugin-property-destroy() { declare desc="destroy the properties for an app" declare PLUGIN="$1" APP="$2" diff --git a/plugins/common/src/prop/prop.go b/plugins/common/src/prop/prop.go index 1850f7562..8614d9a0f 100644 --- a/plugins/common/src/prop/prop.go +++ b/plugins/common/src/prop/prop.go @@ -33,6 +33,14 @@ func main() { pluginName := flag.Arg(1) switch cmd { + case "clone": + oldAppName := flag.Arg(2) + newAppName := flag.Arg(3) + err := common.PropertyClone(pluginName, oldAppName, newAppName) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } case "del": appName := flag.Arg(2) property := flag.Arg(3) From 63f4ec3867d292c024b63ff87985dd455b838578 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 19:08:39 -0500 Subject: [PATCH 13/22] feat: call clone/destroy prop commands as necessary --- plugins/buildpacks/.gitignore | 3 +- plugins/buildpacks/Makefile | 2 +- plugins/buildpacks/src/triggers/triggers.go | 8 +++++ plugins/buildpacks/triggers.go | 23 ++++++++++++++ plugins/git/post-app-clone-setup | 3 ++ plugins/git/post-app-rename-setup | 4 +++ plugins/network/Makefile | 2 +- plugins/network/network.go | 4 +-- plugins/network/src/triggers/triggers.go | 9 ++++-- plugins/network/triggers.go | 31 +++++++++++++++++-- plugins/nginx-vhosts/post-app-clone-setup | 2 ++ plugins/nginx-vhosts/post-app-rename-setup | 3 ++ plugins/resource/.gitignore | 2 +- plugins/resource/Makefile | 2 +- plugins/resource/src/triggers/triggers.go | 8 +++++ plugins/resource/triggers.go | 23 ++++++++++++++ .../post-app-clone-setup | 2 ++ .../post-app-rename-setup | 16 ++++++++++ 18 files changed, 134 insertions(+), 13 deletions(-) create mode 100755 plugins/scheduler-docker-local/post-app-rename-setup diff --git a/plugins/buildpacks/.gitignore b/plugins/buildpacks/.gitignore index 053d0cfd9..291036bd4 100644 --- a/plugins/buildpacks/.gitignore +++ b/plugins/buildpacks/.gitignore @@ -3,6 +3,5 @@ /triggers/* /triggers /install -/post-delete -/post-extract +/post-* /report diff --git a/plugins/buildpacks/Makefile b/plugins/buildpacks/Makefile index 74a13c23e..700601cc5 100644 --- a/plugins/buildpacks/Makefile +++ b/plugins/buildpacks/Makefile @@ -1,5 +1,5 @@ SUBCOMMANDS = subcommands/add subcommands/clear subcommands/list subcommands/remove subcommands/report subcommands/set -TRIGGERS = triggers/install triggers/post-delete triggers/post-extract triggers/report +TRIGGERS = triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/post-extract triggers/report BUILD = commands subcommands triggers PLUGIN_NAME = buildpacks diff --git a/plugins/buildpacks/src/triggers/triggers.go b/plugins/buildpacks/src/triggers/triggers.go index 83e01740b..98899a858 100644 --- a/plugins/buildpacks/src/triggers/triggers.go +++ b/plugins/buildpacks/src/triggers/triggers.go @@ -19,6 +19,14 @@ func main() { switch trigger { case "install": buildpacks.TriggerInstall() + case "post-app-clone-setup": + oldAppName := flag.Arg(0) + newAppName := flag.Arg(1) + buildpacks.TriggerPostAppCloneSetup(oldAppName, newAppName) + case "post-app-rename-setup": + oldAppName := flag.Arg(0) + newAppName := flag.Arg(1) + buildpacks.TriggerPostAppRenameSetup(oldAppName, newAppName) case "post-delete": appName := flag.Arg(0) buildpacks.TriggerPostDelete(appName) diff --git a/plugins/buildpacks/triggers.go b/plugins/buildpacks/triggers.go index d06e387e4..26481c634 100644 --- a/plugins/buildpacks/triggers.go +++ b/plugins/buildpacks/triggers.go @@ -16,6 +16,29 @@ func TriggerInstall() { } } +// TriggerPostAppCloneSetup creates new buildpacks files +func TriggerPostAppCloneSetup(oldAppName string, newAppName string) error { + err := common.PropertyClone("buildpacks", oldAppName, newAppName) + if err != nil { + return err + } + + return nil +} + +// TriggerPostAppRenameSetup renames buildpacks files +func TriggerPostAppRenameSetup(oldAppName string, newAppName string) error { + if err := common.PropertyClone("buildpacks", oldAppName, newAppName); err != nil { + return err + } + + if err := common.PropertyDestroy("buildpacks", oldAppName); err != nil { + return err + } + + return nil +} + // TriggerPostDelete destroys the buildpacks property for a given app container func TriggerPostDelete(appName string) { err := common.PropertyDestroy("buildpacks", appName) diff --git a/plugins/git/post-app-clone-setup b/plugins/git/post-app-clone-setup index 68db5a879..b0d6a21c0 100755 --- a/plugins/git/post-app-clone-setup +++ b/plugins/git/post-app-clone-setup @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -eo pipefail [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" trigger-git-post-app-clone-setup() { declare desc="modifies git-hook" @@ -10,6 +11,8 @@ trigger-git-post-app-clone-setup() { if [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]]; then sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" fi + + fn-plugin-property-clone "git" "$OLD_APP" "$NEW_APP" } trigger-git-post-app-clone-setup "$@" diff --git a/plugins/git/post-app-rename-setup b/plugins/git/post-app-rename-setup index 544da745b..960d10461 100755 --- a/plugins/git/post-app-rename-setup +++ b/plugins/git/post-app-rename-setup @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -eo pipefail [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" trigger-git-post-app-rename-setup() { declare desc="modifies git-hook" @@ -10,6 +11,9 @@ trigger-git-post-app-rename-setup() { if [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]]; then sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" fi + + fn-plugin-property-clone "git" "$OLD_APP" "$NEW_APP" + fn-plugin-property-destroy "git" "$OLD_APP" } trigger-git-post-app-rename-setup "$@" diff --git a/plugins/network/Makefile b/plugins/network/Makefile index fe23e2813..32a94414d 100644 --- a/plugins/network/Makefile +++ b/plugins/network/Makefile @@ -1,5 +1,5 @@ SUBCOMMANDS = subcommands/create subcommands/destroy subcommands/exists subcommands/info subcommands/list subcommands/rebuild subcommands/rebuildall subcommands/report subcommands/set -TRIGGERS = triggers/core-post-deploy triggers/install triggers/network-build-config triggers/network-compute-ports triggers/network-config-exists triggers/network-get-ipaddr triggers/network-get-listeners triggers/network-get-port triggers/network-get-property triggers/network-write-ipaddr triggers/network-write-port triggers/post-app-clone-setup triggers/post-container-create triggers/post-create triggers/post-delete triggers/report +TRIGGERS = triggers/core-post-deploy triggers/install triggers/network-build-config triggers/network-compute-ports triggers/network-config-exists triggers/network-get-ipaddr triggers/network-get-listeners triggers/network-get-port triggers/network-get-property triggers/network-write-ipaddr triggers/network-write-port triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-container-create triggers/post-create triggers/post-delete triggers/report BUILD = commands subcommands triggers PLUGIN_NAME = network diff --git a/plugins/network/network.go b/plugins/network/network.go index 149fc3ff8..4516b36ed 100644 --- a/plugins/network/network.go +++ b/plugins/network/network.go @@ -188,8 +188,8 @@ func HasNetworkConfig(appName string) bool { return common.FileExists(ipfile) && common.FileExists(portfile) } -// PostAppCloneSetup removes old IP and PORT files for a newly cloned app -func PostAppCloneSetup(appName string) bool { +// ClearNetworkConfig removes old IP and PORT files for a newly cloned app +func ClearNetworkConfig(appName string) bool { dokkuRoot := common.MustGetEnv("DOKKU_ROOT") appRoot := strings.Join([]string{dokkuRoot, appName}, "/") success := true diff --git a/plugins/network/src/triggers/triggers.go b/plugins/network/src/triggers/triggers.go index 24bdd96d0..76a5c2e19 100644 --- a/plugins/network/src/triggers/triggers.go +++ b/plugins/network/src/triggers/triggers.go @@ -61,8 +61,13 @@ func main() { port := flag.Arg(3) network.TriggerNetworkWritePort(appName, processType, containerIndex, port) case "post-app-clone-setup": - appName := flag.Arg(1) - network.TriggerPostAppCloneSetup(appName) + oldAppName := flag.Arg(0) + newAppName := flag.Arg(1) + network.TriggerPostAppCloneSetup(oldAppName, newAppName) + case "post-app-rename-setup": + oldAppName := flag.Arg(0) + newAppName := flag.Arg(1) + network.TriggerPostAppRenameSetup(oldAppName, newAppName) case "post-container-create": containerType := flag.Arg(0) containerID := flag.Arg(1) diff --git a/plugins/network/triggers.go b/plugins/network/triggers.go index 8fa11724a..30b49d8b1 100644 --- a/plugins/network/triggers.go +++ b/plugins/network/triggers.go @@ -153,12 +153,37 @@ func TriggerNetworkWritePort(appName string, processType string, containerIndex } } -// TriggerPostAppCloneSetup cleans up network files for a new app clone -func TriggerPostAppCloneSetup(appName string) { - success := PostAppCloneSetup(appName) +// TriggerPostAppCloneSetup creates new network files +func TriggerPostAppCloneSetup(oldAppName string, newAppName string) error { + success := ClearNetworkConfig(newAppName) if !success { os.Exit(1) } + + err := common.PropertyClone("network", oldAppName, newAppName) + if err != nil { + return err + } + + return nil +} + +// TriggerPostAppRenameSetup renames network files +func TriggerPostAppRenameSetup(oldAppName string, newAppName string) error { + success := ClearNetworkConfig(newAppName) + if !success { + os.Exit(1) + } + + if err := common.PropertyClone("network", oldAppName, newAppName); err != nil { + return err + } + + if err := common.PropertyDestroy("network", oldAppName); err != nil { + return err + } + + return nil } // TriggerPostContainerCreate associates the container with a specified network diff --git a/plugins/nginx-vhosts/post-app-clone-setup b/plugins/nginx-vhosts/post-app-clone-setup index c35608d1f..181bb2a0a 100755 --- a/plugins/nginx-vhosts/post-app-clone-setup +++ b/plugins/nginx-vhosts/post-app-clone-setup @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -eo pipefail [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" trigger-nginx-vhosts-post-app-clone-setup() { declare desc="removes nginx files when setting up a clone" @@ -8,6 +9,7 @@ trigger-nginx-vhosts-post-app-clone-setup() { declare OLD_APP="$1" NEW_APP="$2" local APP_DIR="$DOKKU_ROOT/$NEW_APP" + fn-plugin-property-clone "nginx" "$OLD_APP" "$NEW_APP" rm -rf "$APP_DIR/nginx.conf" } diff --git a/plugins/nginx-vhosts/post-app-rename-setup b/plugins/nginx-vhosts/post-app-rename-setup index 05ab658f1..598b4fbd7 100755 --- a/plugins/nginx-vhosts/post-app-rename-setup +++ b/plugins/nginx-vhosts/post-app-rename-setup @@ -2,6 +2,7 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/internal-functions" source "$PLUGIN_AVAILABLE_PATH/proxy/functions" @@ -10,6 +11,8 @@ trigger-nginx-vhosts-post-app-rename-setup() { declare trigger="post-app-rename-setup" declare OLD_APP="$1" NEW_APP="$2" + fn-plugin-property-clone "nginx" "$OLD_APP" "$NEW_APP" + fn-plugin-property-destroy "nginx" "$OLD_APP" plugn trigger proxy-clear-config "$NEW_APP" } diff --git a/plugins/resource/.gitignore b/plugins/resource/.gitignore index a34683d35..1e1f0ddd2 100644 --- a/plugins/resource/.gitignore +++ b/plugins/resource/.gitignore @@ -3,7 +3,7 @@ /triggers/* /triggers /install -/post-delete +/post-* /report /docker-args-process-deploy /docker-args-process-run diff --git a/plugins/resource/Makefile b/plugins/resource/Makefile index ea16485f9..9357f9cc2 100644 --- a/plugins/resource/Makefile +++ b/plugins/resource/Makefile @@ -1,5 +1,5 @@ SUBCOMMANDS = subcommands/limit subcommands/limit-clear subcommands/report subcommands/reserve subcommands/reserve-clear -TRIGGERS = triggers/docker-args-process-deploy triggers/install triggers/post-delete triggers/report triggers/resource-get-property +TRIGGERS = triggers/docker-args-process-deploy triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/report triggers/resource-get-property BUILD = commands subcommands triggers PLUGIN_NAME = resource diff --git a/plugins/resource/src/triggers/triggers.go b/plugins/resource/src/triggers/triggers.go index 2bdf6d362..82d7bf5a8 100644 --- a/plugins/resource/src/triggers/triggers.go +++ b/plugins/resource/src/triggers/triggers.go @@ -24,6 +24,14 @@ func main() { err = resource.TriggerDockerArgsProcessDeploy(appName, processType) case "install": err = resource.TriggerInstall() + case "post-app-clone-setup": + oldAppName := flag.Arg(0) + newAppName := flag.Arg(1) + err := resource.TriggerPostAppCloneSetup(oldAppName, newAppName) + case "post-app-rename-setup": + oldAppName := flag.Arg(0) + newAppName := flag.Arg(1) + err := resource.TriggerPostAppRenameSetup(oldAppName, newAppName) case "post-delete": appName := flag.Arg(0) err = resource.TriggerPostDelete(appName) diff --git a/plugins/resource/triggers.go b/plugins/resource/triggers.go index 4b9469a79..cf2dddb06 100644 --- a/plugins/resource/triggers.go +++ b/plugins/resource/triggers.go @@ -92,6 +92,29 @@ func TriggerInstall() error { return nil } +// TriggerPostAppCloneSetup creates new resource files +func TriggerPostAppCloneSetup(oldAppName string, newAppName string) error { + err := common.PropertyClone("resource", oldAppName, newAppName) + if err != nil { + return err + } + + return nil +} + +// TriggerPostAppRenameSetup renames resource files +func TriggerPostAppRenameSetup(oldAppName string, newAppName string) error { + if err := common.PropertyClone("resource", oldAppName, newAppName); err != nil { + return err + } + + if err := common.PropertyDestroy("resource", oldAppName); err != nil { + return err + } + + return nil +} + // TriggerPostDelete destroys the resource property for a given app container func TriggerPostDelete(appName string) error { return common.PropertyDestroy("resource", appName) diff --git a/plugins/scheduler-docker-local/post-app-clone-setup b/plugins/scheduler-docker-local/post-app-clone-setup index f829496a5..1b3aa0e15 100755 --- a/plugins/scheduler-docker-local/post-app-clone-setup +++ b/plugins/scheduler-docker-local/post-app-clone-setup @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -eo pipefail [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" trigger-scheduler-docker-local-post-app-clone-setup() { declare desc="removes docker-local files when setting up a clone" @@ -8,6 +9,7 @@ trigger-scheduler-docker-local-post-app-clone-setup() { declare OLD_APP="$1" NEW_APP="$2" local APP_DIR="$DOKKU_ROOT/$NEW_APP" + fn-plugin-property-clone "scheduler-docker-local" "$OLD_APP" "$NEW_APP" find "$APP_DIR" -type f -name 'CONTAINER.*' -exec rm {} \; } diff --git a/plugins/scheduler-docker-local/post-app-rename-setup b/plugins/scheduler-docker-local/post-app-rename-setup new file mode 100755 index 000000000..c810bc8db --- /dev/null +++ b/plugins/scheduler-docker-local/post-app-rename-setup @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" + +trigger-scheduler-docker-local-post-app-rename-setup() { + declare desc="updates settings when renaming an app" + declare trigger="post-app-rename-setup" + declare OLD_APP="$1" NEW_APP="$2" + local APP_DIR="$DOKKU_ROOT/$NEW_APP" + + fn-plugin-property-clone "scheduler-docker-local" "$OLD_APP" "$NEW_APP" + fn-plugin-property-destroy "scheduler-docker-local" "$OLD_APP" +} + +trigger-scheduler-docker-local-post-app-rename-setup "$@" From 8987ec67041361ee639099bcb3b506199ae083a4 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 19:18:04 -0500 Subject: [PATCH 14/22] refactor: move cache and rebuild handling to plugin triggers --- plugins/apps/subcommands/clone | 17 +----------- plugins/apps/subcommands/rename | 9 ------- .../builder-herokuish/post-app-clone-setup | 26 +++++++++++++++++++ .../builder-herokuish/post-app-rename-setup | 26 +++++++++++++++++++ plugins/ps/post-app-clone | 18 +++++++++++++ 5 files changed, 71 insertions(+), 25 deletions(-) create mode 100755 plugins/builder-herokuish/post-app-clone-setup create mode 100755 plugins/builder-herokuish/post-app-rename-setup create mode 100755 plugins/ps/post-app-clone diff --git a/plugins/apps/subcommands/clone b/plugins/apps/subcommands/clone index e4fde7cc7..7d0b8257f 100755 --- a/plugins/apps/subcommands/clone +++ b/plugins/apps/subcommands/clone @@ -21,8 +21,6 @@ cmd-apps-clone() { OLD_APP="$1" NEW_APP="$2" [[ -z "$OLD_APP" ]] && dokku_log_fail "Please specify an app to run the command on" - local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$NEW_APP" - is_valid_app_name "$OLD_APP" is_valid_app_name "$NEW_APP" apps_exists "$OLD_APP" >/dev/null 2>&1 || dokku_log_fail "App does not exist" @@ -35,22 +33,9 @@ cmd-apps-clone() { dokku_log_fail "Name is already taken" fi - local NEW_CACHE_DIR="$DOKKU_ROOT/$NEW_APP/cache" - local NEW_CACHE_HOST_DIR="$DOKKU_HOST_ROOT/$NEW_APP/cache" - apps_create "$NEW_APP" - pushd "$DOKKU_ROOT/$OLD_APP/." >/dev/null - find ./* \( -name ".cache" -o -name "cache" \) -prune -o -print | cpio -pdmu --quiet "$DOKKU_ROOT/$NEW_APP" - popd >/dev/null 2>&1 || pushd "/tmp" >/dev/null plugn trigger post-app-clone-setup "$OLD_APP" "$NEW_APP" - - if [[ -d "$NEW_CACHE_DIR" ]] && ! rmdir "$NEW_CACHE_DIR"; then - "$DOCKER_BIN" container run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS --rm --volume "$NEW_CACHE_HOST_DIR:/cache" "dokku/$OLD_APP" chmod 777 -R /cache - fi - rm -rf "$NEW_CACHE_DIR" - - [[ "$SKIP_REBUILD" == "true" ]] || ps_rebuild "$NEW_APP" - plugn trigger post-app-clone "$OLD_APP" "$NEW_APP" + SKIP_REBUILD=$SKIP_REBUILD plugn trigger post-app-clone "$OLD_APP" "$NEW_APP" dokku_log_info1_quiet "Cloning $OLD_APP to $NEW_APP... done" } diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 9fa77ac03..ba4032da8 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -13,17 +13,8 @@ cmd-apps-rename() { [[ -z "$OLD_APP" ]] && dokku_log_fail "Please specify an app to run the command on" [[ -d "$DOKKU_ROOT/$NEW_APP" ]] && dokku_log_fail "Name is already taken" - local OLD_CACHE_DIR="$DOKKU_ROOT/$OLD_APP/cache" - local OLD_CACHE_HOST_DIR="$DOKKU_HOST_ROOT/$OLD_APP/cache" - local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$OLD_APP" - - if [[ -d "$OLD_CACHE_DIR" ]] && ! rmdir "$OLD_CACHE_DIR" >/dev/null 2>&1; then - "$DOCKER_BIN" container run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS --rm --volume "$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 post-app-rename-setup "$OLD_APP" "$NEW_APP" DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP" plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" diff --git a/plugins/builder-herokuish/post-app-clone-setup b/plugins/builder-herokuish/post-app-clone-setup new file mode 100755 index 000000000..5d79dda88 --- /dev/null +++ b/plugins/builder-herokuish/post-app-clone-setup @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" + +trigger-builder-herokuish-post-app-clone-setup() { + declare desc="builder-herokuish post-app-clone-setup plugin trigger" + declare trigger="post-app-clone-setup" + declare OLD_APP="$1" NEW_APP="$2" + + local NEW_CACHE_DIR="$DOKKU_ROOT/$NEW_APP/cache" + local NEW_CACHE_HOST_DIR="$DOKKU_HOST_ROOT/$NEW_APP/cache" + + pushd "$DOKKU_ROOT/$OLD_APP/." >/dev/null + find ./* \( -name ".cache" -o -name "cache" \) -prune -o -print | cpio -pdmu --quiet "$DOKKU_ROOT/$NEW_APP" + popd >/dev/null 2>&1 || pushd "/tmp" >/dev/null + + if [[ -d "$NEW_CACHE_DIR" ]] && ! rmdir "$NEW_CACHE_DIR"; then + local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$NEW_APP" + "$DOCKER_BIN" container run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS --rm --volume "$NEW_CACHE_HOST_DIR:/cache" "dokku/$OLD_APP" chmod 777 -R /cache + fi + rm -rf "$NEW_CACHE_DIR" +} + +trigger-builder-herokuish-post-app-clone-setup "$@" diff --git a/plugins/builder-herokuish/post-app-rename-setup b/plugins/builder-herokuish/post-app-rename-setup new file mode 100755 index 000000000..8c8d8ddfe --- /dev/null +++ b/plugins/builder-herokuish/post-app-rename-setup @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" + +trigger-builder-herokuish-post-app-clone-setup() { + declare desc="builder-herokuish post-app-clone-setup plugin trigger" + declare trigger="post-app-clone-setup" + declare OLD_APP="$1" NEW_APP="$2" + + 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" >/dev/null 2>&1; then + local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$NEW_APP" + "$DOCKER_BIN" container run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS --rm --volume "$OLD_CACHE_HOST_DIR:/cache" "dokku/$OLD_APP" chmod 777 -R /cache + fi + rm -rf "$OLD_CACHE_DIR" + + pushd "$DOKKU_ROOT/$OLD_APP/." >/dev/null + find ./* \( -name ".cache" -o -name "cache" \) -prune -o -print | cpio -pdmu --quiet "$DOKKU_ROOT/$NEW_APP" + popd >/dev/null 2>&1 || pushd "/tmp" >/dev/null +} + +trigger-builder-herokuish-post-app-clone-setup "$@" diff --git a/plugins/ps/post-app-clone b/plugins/ps/post-app-clone new file mode 100755 index 000000000..92fdefd7b --- /dev/null +++ b/plugins/ps/post-app-clone @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/config/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/functions" + +trigger-ps-post-app-clone() { + declare desc="ps post-app-clone plugin trigger" + declare trigger="post-app-clone" + declare OLD_APP="$1" NEW_APP="$2" + + if [[ "$SKIP_REBUILD" != "true" ]]; then + ps_rebuild "$NEW_APP" + fi +} + +trigger-ps-post-app-clone "$@" From 2e774f0806851dad5a5d5eb03228425fbeeedeee Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 19:23:07 -0500 Subject: [PATCH 15/22] feat: unify apps:rename and apps:clone - add --skip-deploy to apps:rename - add all missing validation to rename command - fix log output to be a bit more logical --- docs/deployment/application-management.md | 8 +++++++- plugins/apps/subcommands/clone | 3 ++- plugins/apps/subcommands/rename | 21 ++++++++++++++++++--- plugins/ps/post-app-rename | 4 +++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/deployment/application-management.md b/docs/deployment/application-management.md index 9d58be15d..b738caede 100644 --- a/docs/deployment/application-management.md +++ b/docs/deployment/application-management.md @@ -134,6 +134,12 @@ Renaming node-js-app to io-js-app... done This will copy all of your app's contents into a new app directory with the name of your choice, delete your old app, then rebuild the new version of the app and deploy it. All of your config variables, including database urls, will be preserved. +By default, Dokku will deploy the renamed app, though you can skip the deploy by using the `--skip-deploy` flag: + +```shell +dokku apps:rename --skip-deploy node-js-app io-js-app +``` + ### Cloning an existing app > New as of 0.11.5 @@ -157,7 +163,7 @@ This will copy all of your app's contents into a new app directory with the name > Warning: If you have exposed specific ports via `docker-options` plugin, or performed anything that cannot be done against multiple applications, `apps:clone` may result in errors. -By default, Dokku will deploy this new application, though you can skip the deploy by using the `--skip-deploy` flag: +By default, Dokku will deploy this new app, though you can skip the deploy by using the `--skip-deploy` flag: ```shell dokku apps:clone --skip-deploy node-js-app io-js-app diff --git a/plugins/apps/subcommands/clone b/plugins/apps/subcommands/clone index 7d0b8257f..a89ca39db 100755 --- a/plugins/apps/subcommands/clone +++ b/plugins/apps/subcommands/clone @@ -33,10 +33,11 @@ cmd-apps-clone() { dokku_log_fail "Name is already taken" fi + dokku_log_info1_quiet "Cloning $OLD_APP to $NEW_APP" apps_create "$NEW_APP" plugn trigger post-app-clone-setup "$OLD_APP" "$NEW_APP" SKIP_REBUILD=$SKIP_REBUILD plugn trigger post-app-clone "$OLD_APP" "$NEW_APP" - dokku_log_info1_quiet "Cloning $OLD_APP to $NEW_APP... done" + dokku_log_verbose_quiet "Done" } cmd-apps-clone "$@" diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index ba4032da8..38f1089e5 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -10,15 +10,30 @@ cmd-apps-rename() { declare cmd="apps:rename" [[ "$1" == "$cmd" ]] && shift 1 declare OLD_APP="$1" NEW_APP="$2" + local SKIP_REBUILD=false + for arg in "$@"; do + [[ "$arg" == "--skip-deploy" ]] && shift 1 && SKIP_REBUILD=true +s [[ "$arg" =~ ^--.* ]] || break + done + + OLD_APP="$1" NEW_APP="$2" [[ -z "$OLD_APP" ]] && dokku_log_fail "Please specify an app to run the command on" - [[ -d "$DOKKU_ROOT/$NEW_APP" ]] && dokku_log_fail "Name is already taken" + is_valid_app_name "$OLD_APP" + is_valid_app_name "$NEW_APP" + apps_exists "$OLD_APP" >/dev/null 2>&1 || dokku_log_fail "App does not exist" + + if apps_exists "$NEW_APP" >/dev/null 2>&1; then + dokku_log_fail "Name is already taken" + fi + + dokku_log_info1_quiet "Renaming $OLD_APP to $NEW_APP" apps_create "$NEW_APP" plugn trigger post-app-rename-setup "$OLD_APP" "$NEW_APP" DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP" - plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" - echo "Renaming $OLD_APP to $NEW_APP... done" + SKIP_REBUILD=$SKIP_REBUILD plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" + dokku_log_verbose_quiet "Done" } cmd-apps-rename "$@" diff --git a/plugins/ps/post-app-rename b/plugins/ps/post-app-rename index 4b0bd16a4..7175b517b 100755 --- a/plugins/ps/post-app-rename +++ b/plugins/ps/post-app-rename @@ -10,7 +10,9 @@ trigger-ps-post-app-rename() { declare trigger="post-app-rename" declare OLD_APP="$1" NEW_APP="$2" - ps_rebuild "$NEW_APP" + if [[ "$SKIP_REBUILD" != "true" ]]; then + ps_rebuild "$NEW_APP" + fi } trigger-ps-post-app-rename "$@" From 7389bb3f034e672f2034a0b280c15954089240db Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 20:42:29 -0500 Subject: [PATCH 16/22] fix: properly handle returned errors --- plugins/buildpacks/src/triggers/triggers.go | 9 +++++++-- plugins/network/src/triggers/triggers.go | 9 +++++++-- plugins/resource/src/triggers/triggers.go | 4 ++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/plugins/buildpacks/src/triggers/triggers.go b/plugins/buildpacks/src/triggers/triggers.go index 98899a858..d8d3420cf 100644 --- a/plugins/buildpacks/src/triggers/triggers.go +++ b/plugins/buildpacks/src/triggers/triggers.go @@ -16,17 +16,18 @@ func main() { trigger := parts[len(parts)-1] flag.Parse() + var err error switch trigger { case "install": buildpacks.TriggerInstall() case "post-app-clone-setup": oldAppName := flag.Arg(0) newAppName := flag.Arg(1) - buildpacks.TriggerPostAppCloneSetup(oldAppName, newAppName) + err = buildpacks.TriggerPostAppCloneSetup(oldAppName, newAppName) case "post-app-rename-setup": oldAppName := flag.Arg(0) newAppName := flag.Arg(1) - buildpacks.TriggerPostAppRenameSetup(oldAppName, newAppName) + err = buildpacks.TriggerPostAppRenameSetup(oldAppName, newAppName) case "post-delete": appName := flag.Arg(0) buildpacks.TriggerPostDelete(appName) @@ -40,4 +41,8 @@ func main() { default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } + + if err != nil { + common.LogFail(err.Error()) + } } diff --git a/plugins/network/src/triggers/triggers.go b/plugins/network/src/triggers/triggers.go index 76a5c2e19..ce4b26872 100644 --- a/plugins/network/src/triggers/triggers.go +++ b/plugins/network/src/triggers/triggers.go @@ -16,6 +16,7 @@ func main() { trigger := parts[len(parts)-1] flag.Parse() + var err error switch trigger { case "install": network.TriggerInstall() @@ -63,11 +64,11 @@ func main() { case "post-app-clone-setup": oldAppName := flag.Arg(0) newAppName := flag.Arg(1) - network.TriggerPostAppCloneSetup(oldAppName, newAppName) + err = network.TriggerPostAppCloneSetup(oldAppName, newAppName) case "post-app-rename-setup": oldAppName := flag.Arg(0) newAppName := flag.Arg(1) - network.TriggerPostAppRenameSetup(oldAppName, newAppName) + err = network.TriggerPostAppRenameSetup(oldAppName, newAppName) case "post-container-create": containerType := flag.Arg(0) containerID := flag.Arg(1) @@ -90,4 +91,8 @@ func main() { default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } + + if err != nil { + common.LogFail(err.Error()) + } } diff --git a/plugins/resource/src/triggers/triggers.go b/plugins/resource/src/triggers/triggers.go index 82d7bf5a8..79d6e1e19 100644 --- a/plugins/resource/src/triggers/triggers.go +++ b/plugins/resource/src/triggers/triggers.go @@ -27,11 +27,11 @@ func main() { case "post-app-clone-setup": oldAppName := flag.Arg(0) newAppName := flag.Arg(1) - err := resource.TriggerPostAppCloneSetup(oldAppName, newAppName) + err = resource.TriggerPostAppCloneSetup(oldAppName, newAppName) case "post-app-rename-setup": oldAppName := flag.Arg(0) newAppName := flag.Arg(1) - err := resource.TriggerPostAppRenameSetup(oldAppName, newAppName) + err = resource.TriggerPostAppRenameSetup(oldAppName, newAppName) case "post-delete": appName := flag.Arg(0) err = resource.TriggerPostDelete(appName) From 02e2fa73f5f6f4cbc7c6f2d5deb600b90e9c052c Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 21:47:42 -0500 Subject: [PATCH 17/22] fix: drop extra s --- plugins/apps/subcommands/rename | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 38f1089e5..87611e7ec 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -14,7 +14,7 @@ cmd-apps-rename() { for arg in "$@"; do [[ "$arg" == "--skip-deploy" ]] && shift 1 && SKIP_REBUILD=true -s [[ "$arg" =~ ^--.* ]] || break + [[ "$arg" =~ ^--.* ]] || break done OLD_APP="$1" NEW_APP="$2" From fdf09adcd54c69d87c2c953b36e117ba0262bf5f Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 21:48:33 -0500 Subject: [PATCH 18/22] fix: ignore errors when getting all properties --- plugins/common/properties.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/common/properties.go b/plugins/common/properties.go index 5483914b6..5c5971fab 100644 --- a/plugins/common/properties.go +++ b/plugins/common/properties.go @@ -48,7 +48,7 @@ func CommandPropertySet(pluginName, appName, property, value string, properties func PropertyClone(pluginName string, oldAppName string, newAppName string) error { properties, err := PropertyGetAll(pluginName, oldAppName) if err != nil { - return err + return nil } for property, value := range properties { From 973313e3aaacfb472dfab945debe86d47ff574d3 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 22:12:15 -0500 Subject: [PATCH 19/22] tests: add tests for app renaming --- tests/unit/10_apps.bats | 59 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/tests/unit/10_apps.bats b/tests/unit/10_apps.bats index 0c3464224..8b489a903 100644 --- a/tests/unit/10_apps.bats +++ b/tests/unit/10_apps.bats @@ -117,10 +117,67 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - run /bin/bash -c "dokku apps:rename $TEST_APP great-test-name" + + run /bin/bash -c "dokku buildpacks:add $TEST_APP https://github.com/heroku/heroku-buildpack-ruby.git" echo "output: $output" echo "status: $status" assert_success + run /bin/bash -c "dokku git:set $TEST_APP deploy-branch SOME_BRANCH_NAME" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku network:set $TEST_APP attach-post-create test-network" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku nginx:set $TEST_APP bind-address-ipv4 127.0.0.1" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku resource:limit --memory 100 $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku scheduler-docker-local:set $TEST_APP disable-chown true" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku --trace apps:rename $TEST_APP great-test-name" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku buildpacks:report great-test-name --buildpacks-list" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "https://github.com/heroku/heroku-buildpack-ruby.git" + run /bin/bash -c "dokku git:report great-test-name --git-deploy-branch" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "SOME_BRANCH_NAME" + run /bin/bash -c "dokku network:report great-test-name --network-attach-post-create" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "test-network" + run /bin/bash -c "dokku nginx:report great-test-name --nginx-bind-address-ipv4" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "127.0.0.1" + run /bin/bash -c "dokku resource:report great-test-name --resource-_default_.limit.memory" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "100" + run /bin/bash -c "dokku scheduler-docker-local:report great-test-name --scheduler-docker-local-disable-chown" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "true" + run /bin/bash -c "dokku --force apps:destroy great-test-name" echo "output: $output" echo "status: $status" From d978f98c23466b40ddf02fdbbef6dbf72e46b0f1 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 22:16:40 -0500 Subject: [PATCH 20/22] chore: drop extra log output --- plugins/apps/subcommands/clone | 1 - plugins/apps/subcommands/rename | 1 - 2 files changed, 2 deletions(-) diff --git a/plugins/apps/subcommands/clone b/plugins/apps/subcommands/clone index a89ca39db..960b20569 100755 --- a/plugins/apps/subcommands/clone +++ b/plugins/apps/subcommands/clone @@ -37,7 +37,6 @@ cmd-apps-clone() { apps_create "$NEW_APP" plugn trigger post-app-clone-setup "$OLD_APP" "$NEW_APP" SKIP_REBUILD=$SKIP_REBUILD plugn trigger post-app-clone "$OLD_APP" "$NEW_APP" - dokku_log_verbose_quiet "Done" } cmd-apps-clone "$@" diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 87611e7ec..803e4e8e2 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -33,7 +33,6 @@ cmd-apps-rename() { plugn trigger post-app-rename-setup "$OLD_APP" "$NEW_APP" DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP" SKIP_REBUILD=$SKIP_REBUILD plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" - dokku_log_verbose_quiet "Done" } cmd-apps-rename "$@" From b4d7d37d9b4354213644940be52401dc64fc9392 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 22:38:35 -0500 Subject: [PATCH 21/22] tests: add tests for app cloning --- tests/unit/10_apps.bats | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/tests/unit/10_apps.bats b/tests/unit/10_apps.bats index 8b489a903..e943d809e 100644 --- a/tests/unit/10_apps.bats +++ b/tests/unit/10_apps.bats @@ -217,6 +217,83 @@ teardown() { assert_success } +@test "(apps) apps:clone (no app)" { + run /bin/bash -c "dokku apps:create $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku buildpacks:add $TEST_APP https://github.com/heroku/heroku-buildpack-ruby.git" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku git:set $TEST_APP deploy-branch SOME_BRANCH_NAME" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku network:set $TEST_APP attach-post-create test-network" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku nginx:set $TEST_APP bind-address-ipv4 127.0.0.1" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku resource:limit --memory 100 $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku scheduler-docker-local:set $TEST_APP disable-chown true" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku apps:clone $TEST_APP great-test-name" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku apps:list | grep $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku buildpacks:report great-test-name --buildpacks-list" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "https://github.com/heroku/heroku-buildpack-ruby.git" + run /bin/bash -c "dokku git:report great-test-name --git-deploy-branch" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "SOME_BRANCH_NAME" + run /bin/bash -c "dokku network:report great-test-name --network-attach-post-create" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "test-network" + run /bin/bash -c "dokku nginx:report great-test-name --nginx-bind-address-ipv4" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "127.0.0.1" + run /bin/bash -c "dokku resource:report great-test-name --resource-_default_.limit.memory" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "100" + run /bin/bash -c "dokku scheduler-docker-local:report great-test-name --scheduler-docker-local-disable-chown" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "true" + + run /bin/bash -c "dokku --force apps:destroy great-test-name" + echo "output: $output" + echo "status: $status" + assert_success +} + @test "(apps) apps:clone ssl-app" { run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_PROXY_PORT_MAP=https:443:5000 DOKKU_PROXY_SSL_PORT=443" deploy_app From acff195fcbd5a55cadf24aa9578cd8e3ca7ab56e Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 17 Feb 2020 23:41:01 -0500 Subject: [PATCH 22/22] tests: use TEST_NETWORK env var for test-network name --- tests/unit/20_network.bats | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/unit/20_network.bats b/tests/unit/20_network.bats index 594651f3d..4eddaf925 100644 --- a/tests/unit/20_network.bats +++ b/tests/unit/20_network.bats @@ -85,32 +85,32 @@ teardown() { } @test "(network) network management" { - run /bin/bash -c "dokku network:list | grep test-network" + run /bin/bash -c "dokku network:list | grep $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_failure - run /bin/bash -c "dokku network:exists test-network" + run /bin/bash -c "dokku network:exists $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_failure - run /bin/bash -c "dokku network:create test-network" + run /bin/bash -c "dokku network:create $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_success - run /bin/bash -c "dokku network:list | grep test-network" + run /bin/bash -c "dokku network:list | grep $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_success - run /bin/bash -c "dokku network:create test-network" + run /bin/bash -c "dokku network:create $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_failure - run /bin/bash -c "dokku network:exists test-network" + run /bin/bash -c "dokku network:exists $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_success @@ -125,22 +125,22 @@ teardown() { echo "status: $status" assert_failure - run /bin/bash -c "dokku --force network:destroy test-network" + run /bin/bash -c "dokku --force network:destroy $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_success - run /bin/bash -c "dokku --force network:destroy test-network" + run /bin/bash -c "dokku --force network:destroy $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_failure - run /bin/bash -c "dokku network:exists test-network" + run /bin/bash -c "dokku network:exists $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_failure - run /bin/bash -c "dokku network:list | grep test-network" + run /bin/bash -c "dokku network:list | grep $TEST_NETWORK" echo "output: $output" echo "status: $status" assert_failure