From 0e899cdd1395af71388600a973a7c5fbf7fb9f32 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 20 Feb 2017 21:41:19 -0700 Subject: [PATCH 1/7] feat: implement proxy:report command Also deprecate `proxy:default` in favor of `proxy:report` Refs #2356 --- docs/advanced-usage/proxy-management.md | 54 +++++++++++++++++-- plugins/proxy/commands | 1 + plugins/proxy/functions | 14 +++-- plugins/proxy/subcommands/default | 1 + plugins/proxy/subcommands/report | 70 +++++++++++++++++++++++++ 5 files changed, 132 insertions(+), 8 deletions(-) create mode 100755 plugins/proxy/subcommands/report diff --git a/docs/advanced-usage/proxy-management.md b/docs/advanced-usage/proxy-management.md index 31d695530..09f88c0c4 100644 --- a/docs/advanced-usage/proxy-management.md +++ b/docs/advanced-usage/proxy-management.md @@ -3,19 +3,21 @@ > New as of 0.5.0, Enhanced in 0.6.0 ``` -proxy # Show proxy settings for app proxy:disable # Disable proxy for app proxy:enable # Enable proxy for app proxy:ports # List proxy port mappings for app proxy:ports-add :: [::...] # Set proxy port mappings for app proxy:ports-clear # Clear all proxy port mappings for app proxy:ports-remove [|::...] # Unset proxy port mappings for app +proxy:report [] [] # Displays a proxy report for one or more apps proxy:set # Set proxy type for app ``` In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into the proxy plugin. Dokku 0.6.0 introduced the ability to map host ports to specific container ports. In the future this will allow other proxy software - such as HAProxy or Caddy - to be used in place of nginx. -## Container network interface binding +## Usage + +### Container network interface binding > New as of 0.5.0 @@ -58,7 +60,51 @@ CONTAINER ID IMAGE COMMAND CREATED d6499edb0edb dokku/node-js-app:latest "/bin/bash -c '/star About a minute ago Up About a minute 0.0.0.0:49153->5000/tcp node-js-app.web.1 ``` -## Proxy port mapping +### Displaying proxy reports about an app + +> New as of 0.8.1 + +You can get a report about the app's proxy status using the `proxy:report` command: + +```shell +dokku proxy:report +``` + +``` +=====> node-js-app proxy information + Proxy enabled: true + Proxy type: nginx + Proxy port map: http:80:5000 https:443:5000 +=====> python-sample proxy information + Proxy enabled: true + Proxy type: nginx + Proxy port map: http:80:5000 +=====> ruby-sample proxy information + Proxy enabled: true + Proxy type: nginx + Proxy port map: http:80:5000 +``` + +You can run the command for a specific app also. + +```shell +dokku proxy:report node-js-app +``` + +``` +=====> node-js-app proxy information + Proxy enabled: true + Proxy type: nginx + Proxy port map: http:80:5000 https:443:5000 +``` + +You can pass flags which will output only the value of the specific information you want. For example: + +```shell +dokku proxy:report node-js-app --proxy-type +``` + +### Proxy port mapping > New as of 0.6.0 @@ -141,7 +187,7 @@ By default, buildpack apps and dockerfile apps **without** explicitly exposed po > Note: This default behavior **will not** be automatically changed on subsequent pushes and must be manipulated with the `proxy:ports-*` syntax detailed above. -## Proxy Port Scheme +#### Proxy Port Scheme The proxy port scheme is as follows: diff --git a/plugins/proxy/commands b/plugins/proxy/commands index 25d60d2ea..7df9f973b 100755 --- a/plugins/proxy/commands +++ b/plugins/proxy/commands @@ -14,6 +14,7 @@ case "$1" in proxy:ports-clear , Clear all proxy port mappings for app proxy:ports-add :: [::...], Set proxy port mappings for app proxy:ports-remove [|::...], Unset proxy port mappings for app + proxy:report [] [], Displays a proxy report for one or more apps proxy:set , Set proxy type for app help_content } diff --git a/plugins/proxy/functions b/plugins/proxy/functions index d7d3b1a2f..5202a21ef 100755 --- a/plugins/proxy/functions +++ b/plugins/proxy/functions @@ -24,10 +24,16 @@ get_app_proxy_type() { echo "$APP_PROXY_TYPE" } +get_app_proxy_port_map() { + declare desc="return a list of configured port mappings" + local APP="$1"; local PROXY_PORT_MAP="$(config_get "$APP" DOKKU_PROXY_PORT_MAP || true)" + echo "$PROXY_PORT_MAP" +} + list_app_proxy_ports() { declare desc="list proxy port mappings for an app" local APP="$1"; verify_app_name "$APP" - local PROXY_PORT_MAP="$(config_get "$APP" DOKKU_PROXY_PORT_MAP || true)" + local PROXY_PORT_MAP="$(get_app_proxy_port_map "$APP")" if [[ -n "$PROXY_PORT_MAP" ]]; then dokku_log_info1_quiet "Port mappings for $APP" @@ -45,7 +51,7 @@ filter_app_proxy_ports() { declare desc="list proxy port mappings for an app that start with a particular scheme and a host port" local APP="$1"; verify_app_name "$APP" local SCHEME="$2" HOST_PORT="$3" - local PROXY_PORT_MAP="$(config_get "$APP" DOKKU_PROXY_PORT_MAP || true)" + local PROXY_PORT_MAP="$(get_app_proxy_port_map "$APP")" if [[ -n "$PROXY_PORT_MAP" ]]; then local port_map @@ -62,7 +68,7 @@ filter_app_proxy_ports() { add_proxy_ports() { declare desc="add proxy port mappings from an app" local APP="$1" - local PROXY_PORT_MAP="$(config_get "$APP" DOKKU_PROXY_PORT_MAP || true)" + local PROXY_PORT_MAP="$(get_app_proxy_port_map "$APP")" shift 1 local INPUT_PORTS="$*" @@ -78,7 +84,7 @@ add_proxy_ports() { remove_proxy_ports() { declare desc="remove specific proxy port mappings from an app" local APP="$1" - local PROXY_PORT_MAP="$(config_get "$APP" DOKKU_PROXY_PORT_MAP || true)" + local PROXY_PORT_MAP="$(get_app_proxy_port_map "$APP")" local RE_PORT='^[0-9]+$' shift 1 diff --git a/plugins/proxy/subcommands/default b/plugins/proxy/subcommands/default index 4e867c850..03c08f400 100755 --- a/plugins/proxy/subcommands/default +++ b/plugins/proxy/subcommands/default @@ -12,6 +12,7 @@ proxy_main_cmd() { local APPS="$1" fi + dokku_log_warn "Deprecated: Please use proxy:report" dokku_col_log_info1_quiet "App Name" "Proxy Type" local app for app in $APPS; do diff --git a/plugins/proxy/subcommands/report b/plugins/proxy/subcommands/report new file mode 100755 index 000000000..260483417 --- /dev/null +++ b/plugins/proxy/subcommands/report @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/proxy/functions" + +fn-proxy-enabled() { + declare APP="$1" + local PROXY_ENABLED=false + + if [[ "$(is_app_proxy_enabled "$APP")" == "true" ]]; then + PROXY_ENABLED=true + fi + echo "$PROXY_ENABLED" +} + +proxy_report_single_app() { + local APP="$1"; local APP_DIR="$DOKKU_ROOT/$APP"; local INFO_FLAG="$2" + if [[ "$INFO_FLAG" == "true" ]]; then + INFO_FLAG="" + fi + verify_app_name "$APP" + local flag_map=( + "--proxy-enabled: $(fn-proxy-enabled "$APP")" + "--proxy-type: $(get_app_proxy_type "$APP")" + "--proxy-port-map: $(get_app_proxy_port_map "$APP")" + ) + + if [[ -z "$INFO_FLAG" ]]; then + dokku_log_info2 "$APP proxy information" + for flag in "${flag_map[@]}"; do + key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')" + dokku_log_verbose "$(printf "%-20s %-25s" "${key^}" "${flag#*: }")" + done + else + local match=false; local value_exists=false + for flag in "${flag_map[@]}"; do + valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)" + if [[ "$flag" == "${INFO_FLAG}:"* ]]; then + value=${flag#*: } + size="${#value}" + if [[ "$size" -ne 0 ]]; then + echo "$value" && match=true && value_exists=true + else + match=true + fi + fi + done + if [[ "$match" == "true" ]]; then + [[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed" + else + dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}" + fi + fi +} + +proxy_report_cmd() { + declare desc="displays a proxy report for one or more apps" + local cmd="proxy:report" + local INSTALLED_APPS=$(dokku_apps); local APP + + if [[ -z $2 ]]; then + for APP in $INSTALLED_APPS; do + proxy_report_single_app "$APP" "true" + done + else + proxy_report_single_app "$2" "$3" + fi +} + +proxy_report_cmd "$@" From 225840b79d004d0b4befcdd33826c2ff0867ee7a Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 20 Feb 2017 21:48:58 -0700 Subject: [PATCH 2/7] refactor: move proxy:help to internal-functions --- plugins/proxy/commands | 27 ++----------------------- plugins/proxy/internal-functions | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 plugins/proxy/internal-functions diff --git a/plugins/proxy/commands b/plugins/proxy/commands index 7df9f973b..db59fda92 100755 --- a/plugins/proxy/commands +++ b/plugins/proxy/commands @@ -1,34 +1,11 @@ #!/usr/bin/env bash [[ " help proxy:help " == *" $1 "* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT" +source "$PLUGIN_AVAILABLE_PATH/proxy/internal-functions" set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x case "$1" in help | proxy:help) - help_content_func () { - declare desc="return proxy plugin help content" - cat<, Show proxy settings for app - proxy:enable , Enable proxy for app - proxy:disable , Disable proxy for app - proxy:ports , List proxy port mappings for app - proxy:ports-clear , Clear all proxy port mappings for app - proxy:ports-add :: [::...], Set proxy port mappings for app - proxy:ports-remove [|::...], Unset proxy port mappings for app - proxy:report [] [], Displays a proxy report for one or more apps - proxy:set , Set proxy type for app -help_content - } - - if [[ $1 = "proxy:help" ]] ; then - echo -e 'Usage: dokku proxy[:COMMAND]' - echo '' - echo 'Control the proxy used by dokku, per app.' - echo '' - echo 'Additional commands:' - help_content_func | sort | column -c2 -t -s, - else - help_content_func - fi + proxy_vhosts_help_cmd "$@" ;; *) diff --git a/plugins/proxy/internal-functions b/plugins/proxy/internal-functions new file mode 100644 index 000000000..ec85d4ab2 --- /dev/null +++ b/plugins/proxy/internal-functions @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +proxy_vhosts_help_content_func() { + declare desc="return proxy plugin help content" + cat<, [DEPRECATED] Show proxy settings for app + proxy:enable , Enable proxy for app + proxy:disable , Disable proxy for app + proxy:ports , List proxy port mappings for app + proxy:ports-clear , Clear all proxy port mappings for app + proxy:ports-add :: [::...], Set proxy port mappings for app + proxy:ports-remove [|::...], Unset proxy port mappings for app + proxy:report [] [], Displays a proxy report for one or more apps + proxy:set , Set proxy type for app +help_content +} + +proxy_vhosts_help_cmd() { + if [[ $1 = "proxy:help" ]] ; then + echo -e 'Usage: dokku proxy[:COMMAND]' + echo '' + echo 'Manage the proxy used by dokku on a per app.' + echo '' + echo 'Additional commands:' + proxy_vhosts_help_content_func | sort | column -c2 -t -s, + elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then + proxy_vhosts_help_content_func + else + cat< Date: Mon, 20 Feb 2017 22:35:52 -0700 Subject: [PATCH 3/7] refactor: move nginx:help to internal-functions --- plugins/nginx-vhosts/commands | 14 ++++--------- plugins/nginx-vhosts/functions | 19 ----------------- plugins/nginx-vhosts/internal-functions | 28 +++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 29 deletions(-) create mode 100755 plugins/nginx-vhosts/internal-functions diff --git a/plugins/nginx-vhosts/commands b/plugins/nginx-vhosts/commands index 2995231d7..3dbfc98d8 100755 --- a/plugins/nginx-vhosts/commands +++ b/plugins/nginx-vhosts/commands @@ -1,21 +1,15 @@ #!/usr/bin/env bash [[ " help nginx:help " == *" $1 "* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT" +source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/internal-functions" set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/functions" case "$1" in help | nginx:help) - - - if [[ $1 = "nginx:help" ]] ; then - help_formatted - else - help_content_func - fi - ;; + nginx_vhosts_help_cmd "$@" + ;; *) exit "$DOKKU_NOT_IMPLEMENTED_EXIT" - ;; + ;; esac diff --git a/plugins/nginx-vhosts/functions b/plugins/nginx-vhosts/functions index 8f1af2c40..c68d9aa66 100755 --- a/plugins/nginx-vhosts/functions +++ b/plugins/nginx-vhosts/functions @@ -6,25 +6,6 @@ source "$PLUGIN_AVAILABLE_PATH/config/functions" source "$PLUGIN_AVAILABLE_PATH/domains/functions" source "$PLUGIN_AVAILABLE_PATH/ps/functions" -help_formatted (){ - echo -e 'Usage: dokku nginx[:COMMAND]' - echo '' - echo 'Interact with Dokku'"'"'s Nginx proxy.' - echo '' - echo 'Additional commands:' - help_content_func | sort | column -c2 -t -s, -} - -help_content_func () { - declare desc="return nginx plugin help content" - cat<, (Re)builds nginx config for given app - nginx:access-logs [-t], Show the nginx access logs for an application (-t follows) - nginx:error-logs [-t], Show the nginx error logs for an application (-t follows) -help_content - } - validate_nginx() { declare desc="validate entire nginx config" set +e diff --git a/plugins/nginx-vhosts/internal-functions b/plugins/nginx-vhosts/internal-functions new file mode 100755 index 000000000..93d929bb6 --- /dev/null +++ b/plugins/nginx-vhosts/internal-functions @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +nginx_vhosts_help_content_func() { + declare desc="return nginx plugin help content" + cat<, (Re)builds nginx config for given app + nginx:access-logs [-t], Show the nginx access logs for an application (-t follows) + nginx:error-logs [-t], Show the nginx error logs for an application (-t follows) +help_content +} + +nginx_vhosts_help_cmd() { + if [[ $1 = "nginx:help" ]] ; then + echo -e 'Usage: dokku nginx[:COMMAND]' + echo '' + echo 'Interact with Dokku'"'"'s Nginx proxy.' + echo '' + echo 'Additional commands:' + nginx_vhosts_help_content_func | sort | column -c2 -t -s, + elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then + nginx_vhosts_help_content_func + else + cat< Date: Mon, 20 Feb 2017 22:39:53 -0700 Subject: [PATCH 4/7] refactor: alias nginx:default to nginx:help --- plugins/nginx-vhosts/subcommands/default | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) mode change 100644 => 100755 plugins/nginx-vhosts/subcommands/default diff --git a/plugins/nginx-vhosts/subcommands/default b/plugins/nginx-vhosts/subcommands/default old mode 100644 new mode 100755 index 30cb86061..5a4deae9b --- a/plugins/nginx-vhosts/subcommands/default +++ b/plugins/nginx-vhosts/subcommands/default @@ -1,13 +1,5 @@ #!/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/nginx-vhosts/functions" +source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/internal-functions" -nginx_main_cmd() { - declare desc="display nginx plugin help content" - local cmd="nginx" - help_formatted -} - -nginx_main_cmd "$@" +nginx_vhosts_help_cmd "$@" From 48653e566319f75ca289543d2049cb90b856894f Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 20 Feb 2017 22:44:51 -0700 Subject: [PATCH 5/7] chore: properly name functions --- plugins/proxy/commands | 2 +- plugins/proxy/internal-functions | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) mode change 100644 => 100755 plugins/proxy/internal-functions diff --git a/plugins/proxy/commands b/plugins/proxy/commands index db59fda92..3802db5ef 100755 --- a/plugins/proxy/commands +++ b/plugins/proxy/commands @@ -5,7 +5,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x case "$1" in help | proxy:help) - proxy_vhosts_help_cmd "$@" + proxy_help_cmd "$@" ;; *) diff --git a/plugins/proxy/internal-functions b/plugins/proxy/internal-functions old mode 100644 new mode 100755 index ec85d4ab2..3ff81c845 --- a/plugins/proxy/internal-functions +++ b/plugins/proxy/internal-functions @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -proxy_vhosts_help_content_func() { +proxy_help_content_func() { declare desc="return proxy plugin help content" cat<, [DEPRECATED] Show proxy settings for app @@ -16,16 +16,16 @@ proxy_vhosts_help_content_func() { help_content } -proxy_vhosts_help_cmd() { +proxy_help_cmd() { if [[ $1 = "proxy:help" ]] ; then echo -e 'Usage: dokku proxy[:COMMAND]' echo '' echo 'Manage the proxy used by dokku on a per app.' echo '' echo 'Additional commands:' - proxy_vhosts_help_content_func | sort | column -c2 -t -s, + proxy_help_content_func | sort | column -c2 -t -s, elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then - proxy_vhosts_help_content_func + proxy_help_content_func else cat< Date: Mon, 20 Feb 2017 22:50:07 -0700 Subject: [PATCH 6/7] refactor: move domains:help to internal-functions --- plugins/domains/commands | 28 ++---------------------- plugins/domains/internal-functions | 35 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 26 deletions(-) create mode 100755 plugins/domains/internal-functions diff --git a/plugins/domains/commands b/plugins/domains/commands index 5b2018369..1ed2fde7f 100755 --- a/plugins/domains/commands +++ b/plugins/domains/commands @@ -1,35 +1,11 @@ #!/usr/bin/env bash [[ " help domains:help " == *" $1 "* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT" +source "$PLUGIN_AVAILABLE_PATH/domains/internal-functions" set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x case "$1" in help | domains:help) - help_content_func () { - declare desc="return domains plugin help content" - cat<], List domains - domains:add [ ...], Add domains to app - domains:add-global [ ...], Add global domain names - domains:clear , Clear all domains for app - domains:disable , Disable VHOST support - domains:enable , Enable VHOST support - domains:remove [ ...], Remove domains from app - domains:remove-global [ ...], Remove global domain names - domains:set [ ...], Set domains for app - domains:set-global [ ...], Set global domain names -help_content - } - - if [[ $1 = "domains:help" ]] ; then - echo -e 'Usage: dokku domains[:COMMAND]' - echo '' - echo 'Manage vhost domains used by the Dokku proxy.' - echo '' - echo 'Additional commands:' - help_content_func | sort | column -c2 -t -s, - else - help_content_func - fi + domains_help_cmd "$@" ;; *) diff --git a/plugins/domains/internal-functions b/plugins/domains/internal-functions new file mode 100755 index 000000000..33ab2dd1c --- /dev/null +++ b/plugins/domains/internal-functions @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +domains_help_content_func () { + declare desc="return domains plugin help content" + cat<], List domains + domains:add [ ...], Add domains to app + domains:add-global [ ...], Add global domain names + domains:clear , Clear all domains for app + domains:disable , Disable VHOST support + domains:enable , Enable VHOST support + domains:remove [ ...], Remove domains from app + domains:remove-global [ ...], Remove global domain names + domains:set [ ...], Set domains for app + domains:set-global [ ...], Set global domain names +help_content +} + +domains_help_cmd() { + if [[ $1 = "domains:help" ]] ; then + echo -e 'Usage: dokku domains[:COMMAND]' + echo '' + echo 'Manage vhost domains used by the Dokku proxy.' + echo '' + echo 'Additional commands:' + domains_help_content_func | sort | column -c2 -t -s, + elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then + domains_help_content_func + else + cat< Date: Mon, 20 Feb 2017 23:17:35 -0700 Subject: [PATCH 7/7] feat: implement domains:report command Also deprecate `domains:default` in favor of `domains:report` Refs #2356 --- docs/configuration/domains.md | 52 +++++++++++++++- plugins/domains/internal-functions | 3 +- plugins/domains/subcommands/default | 1 + plugins/domains/subcommands/report | 92 +++++++++++++++++++++++++++++ 4 files changed, 145 insertions(+), 3 deletions(-) create mode 100755 plugins/domains/subcommands/report diff --git a/docs/configuration/domains.md b/docs/configuration/domains.md index 048a495ef..6f7402d3a 100644 --- a/docs/configuration/domains.md +++ b/docs/configuration/domains.md @@ -3,7 +3,6 @@ > New as of 0.3.10 ``` -domains [|--global] # List domains domains:add [ ...] # Add domains to app domains:add-global [ ...] # Add global domain names domains:clear # Clear all domains for app @@ -11,6 +10,7 @@ domains:disable # Disable VHOST support domains:enable # Enable VHOST support domains:remove [ ...] # Remove domains from app domains:remove-global [ ...] # Remove global domain names +domains:report [] [] # Displays a domains report for one or more apps domains:set [ ...] # Set domains for app domains:set-global [ ...] # Set global domain names ``` @@ -41,7 +41,7 @@ NEW_SUBDOMAIN=`echo $SUBDOMAIN | rev` echo "$NEW_SUBDOMAIN.$VHOST" ``` -If the `nginx-hostname` has no output, the normal hostname algorithm will be executed. +If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed. ## Disabling VHOSTS @@ -75,6 +75,54 @@ dokku domains:remove myapp example.com dokku domains:set myapp example.com example.org ``` +## Displaying domains reports about an app + +> New as of 0.8.1 + +You can get a report about the app's domains status using the `domains:report` command: + +```shell +dokku domains:report +``` + +``` +=====> node-js-app domains information + Domains app enabled: true + Domains app vhosts: ruby-sample.example.org + Domains global enabled: true + Domains global vhosts: example.org +=====> python-sample domains information + Domains app enabled: true + Domains app vhosts: ruby-sample.example.org + Domains global enabled: true + Domains global vhosts: example.org +=====> ruby-sample domains information + Domains app enabled: true + Domains app vhosts: ruby-sample.example.org + Domains global enabled: true + Domains global vhosts: example.org +``` + +You can run the command for a specific app also. + +```shell +dokku domains:report node-js-app +``` + +``` +=====> node-js-app domains information + Domains app enabled: true + Domains app vhosts: node-js-app.example.org + Domains global enabled: true + Domains global vhosts: example.org +``` + +You can pass flags which will output only the value of the specific information you want. For example: + +```shell +dokku domains:report node-js-app --domains-app-enabled +``` + ## Default site By default, Dokku will route any received request with an unknown HOST header value to the lexicographically first site in the nginx config stack. If this is not the desired behavior, you may want to add the following configuration to the global nginx configuration. diff --git a/plugins/domains/internal-functions b/plugins/domains/internal-functions index 33ab2dd1c..fb4ab8fce 100755 --- a/plugins/domains/internal-functions +++ b/plugins/domains/internal-functions @@ -4,7 +4,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x domains_help_content_func () { declare desc="return domains plugin help content" cat<], List domains + domains [], [DEPRECATED] Alternative for domains:report domains:add [ ...], Add domains to app domains:add-global [ ...], Add global domain names domains:clear , Clear all domains for app @@ -12,6 +12,7 @@ domains_help_content_func () { domains:enable , Enable VHOST support domains:remove [ ...], Remove domains from app domains:remove-global [ ...], Remove global domain names + domains:report [] [], Displays a domains report for one or more apps domains:set [ ...], Set domains for app domains:set-global [ ...], Set global domain names help_content diff --git a/plugins/domains/subcommands/default b/plugins/domains/subcommands/default index c046e7fac..27728e49c 100755 --- a/plugins/domains/subcommands/default +++ b/plugins/domains/subcommands/default @@ -8,6 +8,7 @@ domains_main_cmd() { local cmd="domains" local APP="$2" + dokku_log_warn "Deprecated: Please use domains:report" if [[ "$(is_global_vhost_enabled)" == "true" ]]; then dokku_log_info2_quiet "Global Domain Name" get_global_vhosts diff --git a/plugins/domains/subcommands/report b/plugins/domains/subcommands/report new file mode 100755 index 000000000..ce7f3078a --- /dev/null +++ b/plugins/domains/subcommands/report @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/domains/functions" + +fn-domains-app-enabled() { + declare APP="$1" + local DOMAINS_APP_ENABLED=false + if [[ "$(is_app_vhost_enabled "$APP")" == "true" ]]; then + DOMAINS_APP_ENABLED=true + fi + echo "$DOMAINS_APP_ENABLED" +} + +fn-domains-app-vhosts() { + declare APP="$1" + local APP_VHOST_FILE="$DOKKU_ROOT/$APP/VHOST" + if [[ -f "$APP_VHOST_FILE" ]]; then + tr '\n' ' ' < "$APP_VHOST_FILE" + fi +} + +fn-domains-global-enabled() { + local DOMAINS_GLOBAL_ENABLED=false + if [[ "$(is_global_vhost_enabled)" == "true" ]]; then + DOMAINS_GLOBAL_ENABLED=true + fi + echo "$DOMAINS_GLOBAL_ENABLED" +} + +fn-domains-global-vhosts() { + if [[ "$(is_global_vhost_enabled)" == "true" ]]; then + get_global_vhosts | tr '\n' ' ' + fi +} + +domains_report_single_app() { + local APP="$1"; local APP_DIR="$DOKKU_ROOT/$APP"; local INFO_FLAG="$2" + if [[ "$INFO_FLAG" == "true" ]]; then + INFO_FLAG="" + fi + verify_app_name "$APP" + local flag_map=( + "--domains-app-enabled: $(fn-domains-app-enabled "$APP")" + "--domains-app-vhosts: $(fn-domains-app-vhosts "$APP")" + "--domains-global-enabled: $(fn-domains-global-enabled)" + "--domains-global-vhosts: $(fn-domains-global-vhosts)" + ) + + if [[ -z "$INFO_FLAG" ]]; then + dokku_log_info2 "$APP domains information" + for flag in "${flag_map[@]}"; do + key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')" + dokku_log_verbose "$(printf "%-20s %-25s" "${key^}" "${flag#*: }")" + done + else + local match=false; local value_exists=false + for flag in "${flag_map[@]}"; do + valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)" + if [[ "$flag" == "${INFO_FLAG}:"* ]]; then + value=${flag#*: } + size="${#value}" + if [[ "$size" -ne 0 ]]; then + echo "$value" && match=true && value_exists=true + else + match=true + fi + fi + done + if [[ "$match" == "true" ]]; then + [[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed" + else + dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}" + fi + fi +} + +domains_report_cmd() { + declare desc="displays a domains report for one or more apps" + local cmd="domains:report" + local INSTALLED_APPS=$(dokku_apps); local APP + + if [[ -z $2 ]]; then + for APP in $INSTALLED_APPS; do + domains_report_single_app "$APP" "true" + done + else + domains_report_single_app "$2" "$3" + fi +} + +domains_report_cmd "$@"