feat: implement domains:report command

Also deprecate `domains:default` in favor of `domains:report`

Refs #2356
This commit is contained in:
Jose Diaz-Gonzalez
2017-02-20 23:17:35 -07:00
parent 282979eef4
commit 54429a095c
4 changed files with 145 additions and 3 deletions

View File

@@ -3,7 +3,6 @@
> New as of 0.3.10
```
domains [<app>|--global] # List domains
domains:add <app> <domain> [<domain> ...] # Add domains to app
domains:add-global <domain> [<domain> ...] # Add global domain names
domains:clear <app> # Clear all domains for app
@@ -11,6 +10,7 @@ domains:disable <app> # Disable VHOST support
domains:enable <app> # Enable VHOST support
domains:remove <app> <domain> [<domain> ...] # Remove domains from app
domains:remove-global <domain> [<domain> ...] # Remove global domain names
domains:report [<app>] [<flag>] # Displays a domains report for one or more apps
domains:set <app> <domain> [<domain> ...] # Set domains for app
domains:set-global <domain> [<domain> ...] # 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.

View File

@@ -4,7 +4,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
domains_help_content_func () {
declare desc="return domains plugin help content"
cat<<help_content
domains [<app>], List domains
domains [<app>], [DEPRECATED] Alternative for domains:report
domains:add <app> <domain> [<domain> ...], Add domains to app
domains:add-global <domain> [<domain> ...], Add global domain names
domains:clear <app>, Clear all domains for app
@@ -12,6 +12,7 @@ domains_help_content_func () {
domains:enable <app>, Enable VHOST support
domains:remove <app> <domain> [<domain> ...], Remove domains from app
domains:remove-global <domain> [<domain> ...], Remove global domain names
domains:report [<app>] [<flag>], Displays a domains report for one or more apps
domains:set <app> <domain> [<domain> ...], Set domains for app
domains:set-global <domain> [<domain> ...], Set global domain names
help_content

View File

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

View File

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