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 "$@"