first stab at a common functions library. include argument parsing and a few definitions wired up. closes #932. closes #945
This commit is contained in:
@@ -35,11 +35,12 @@ The below plugin is a dummy `dokku hello` plugin. If your plugin exposes command
|
|||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
hello)
|
hello)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2";
|
APP="$2";
|
||||||
|
|
||||||
echo "Hello $APP"
|
echo "Hello $APP"
|
||||||
|
|||||||
30
dokku
30
dokku
@@ -10,11 +10,19 @@ export PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"}
|
|||||||
export DOKKU_NOT_IMPLEMENTED_EXIT=10
|
export DOKKU_NOT_IMPLEMENTED_EXIT=10
|
||||||
export DOKKU_VALID_EXIT=0
|
export DOKKU_VALID_EXIT=0
|
||||||
|
|
||||||
|
source "$PLUGIN_PATH/common/functions"
|
||||||
|
|
||||||
[[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc
|
[[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc
|
||||||
[[ -d $DOKKU_ROOT/.dokkurc ]] && for f in $DOKKU_ROOT/.dokkurc/*; do source $f; done
|
[[ -d $DOKKU_ROOT/.dokkurc ]] && for f in $DOKKU_ROOT/.dokkurc/*; do source $f; done
|
||||||
|
|
||||||
[[ $DOKKU_TRACE ]] && set -x
|
[[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
parse_args "$@"
|
||||||
|
for arg in "$@"; do
|
||||||
|
[[ "$arg" =~ ^-.* ]] && shift 1
|
||||||
|
done
|
||||||
|
! has_tty && DOKKU_QUIET_OUTPUT=1
|
||||||
|
|
||||||
if [[ $(id -un) != "dokku" && $1 != plugins-install* && $1 != "plugins-update" ]]; then
|
if [[ $(id -un) != "dokku" && $1 != plugins-install* && $1 != "plugins-update" ]]; then
|
||||||
sudo -u dokku -E -H $0 "$@"
|
sudo -u dokku -E -H $0 "$@"
|
||||||
exit
|
exit
|
||||||
@@ -34,15 +42,15 @@ fi
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
receive)
|
receive)
|
||||||
APP="$2"; IMAGE="dokku/$APP"
|
APP="$2"; IMAGE="dokku/$APP"
|
||||||
echo "-----> Cleaning up ..."
|
info1 "Cleaning up ..."
|
||||||
dokku cleanup
|
dokku cleanup
|
||||||
echo "-----> Building $APP ..."
|
info1 "Building $APP ..."
|
||||||
cat | dokku build $APP
|
cat | dokku build $APP
|
||||||
echo "-----> Releasing $APP ..."
|
info1 "Releasing $APP ..."
|
||||||
dokku release $APP
|
dokku release $APP
|
||||||
echo "-----> Deploying $APP ..."
|
info1 "Deploying $APP ..."
|
||||||
dokku deploy $APP
|
dokku deploy $APP
|
||||||
echo "=====> Application deployed:"
|
info2 "Application deployed:"
|
||||||
dokku urls $APP | sed "s/^/ /"
|
dokku urls $APP | sed "s/^/ /"
|
||||||
echo
|
echo
|
||||||
;;
|
;;
|
||||||
@@ -116,7 +124,7 @@ case "$1" in
|
|||||||
|
|
||||||
# run checks first, then post-deploy hooks, which switches Nginx traffic
|
# run checks first, then post-deploy hooks, which switches Nginx traffic
|
||||||
trap kill_new INT TERM EXIT
|
trap kill_new INT TERM EXIT
|
||||||
echo "-----> Running pre-flight checks"
|
info1 "Running pre-flight checks"
|
||||||
pluginhook check-deploy $id $APP $port ${ipaddr:-localhost}
|
pluginhook check-deploy $id $APP $port ${ipaddr:-localhost}
|
||||||
|
|
||||||
# now using the new container
|
# now using the new container
|
||||||
@@ -124,7 +132,7 @@ case "$1" in
|
|||||||
echo $port > "$DOKKU_ROOT/$APP/PORT"
|
echo $port > "$DOKKU_ROOT/$APP/PORT"
|
||||||
echo "http://$(< "$DOKKU_ROOT/HOSTNAME"):$port" > "$DOKKU_ROOT/$APP/URL"
|
echo "http://$(< "$DOKKU_ROOT/HOSTNAME"):$port" > "$DOKKU_ROOT/$APP/URL"
|
||||||
|
|
||||||
echo "-----> Running post-deploy"
|
info1 "Running post-deploy"
|
||||||
pluginhook post-deploy $APP $port $ipaddr
|
pluginhook post-deploy $APP $port $ipaddr
|
||||||
trap - INT TERM EXIT
|
trap - INT TERM EXIT
|
||||||
|
|
||||||
@@ -132,7 +140,7 @@ case "$1" in
|
|||||||
if [[ -n "$oldid" ]]; then
|
if [[ -n "$oldid" ]]; then
|
||||||
# Let the old container finish processing requests, before terminating it
|
# Let the old container finish processing requests, before terminating it
|
||||||
WAIT="${DOKKU_WAIT_TO_RETIRE:-60}"
|
WAIT="${DOKKU_WAIT_TO_RETIRE:-60}"
|
||||||
echo "-----> Shutting down old container in $WAIT seconds"
|
info1 "Shutting down old container in $WAIT seconds"
|
||||||
(
|
(
|
||||||
exec >/dev/null 2>/dev/null </dev/null
|
exec >/dev/null 2>/dev/null </dev/null
|
||||||
trap '' INT HUP
|
trap '' INT HUP
|
||||||
@@ -176,7 +184,7 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
help|'')
|
help|'')
|
||||||
echo "Usage: dokku COMMAND <app> [command-specific-options]"
|
echo "Usage: dokku [-q|--quiet|-t|--trace|--rm-container|-rm] COMMAND <app> [command-specific-options]"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Options:"
|
echo "Options:"
|
||||||
|
|
||||||
@@ -203,8 +211,8 @@ EOF
|
|||||||
done
|
done
|
||||||
|
|
||||||
if [ "$implemented" -eq 0 ]; then
|
if [ "$implemented" -eq 0 ]; then
|
||||||
echo " ! \`$*\` is not a dokku command."
|
warn "\`$*\` is not a dokku command."
|
||||||
echo " ! See \`dokku help\` for a list of available commands."
|
warn "See \`dokku help\` for a list of available commands."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
trace)
|
trace)
|
||||||
@@ -26,7 +27,7 @@ case "$1" in
|
|||||||
|
|
||||||
logs)
|
logs)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2";
|
APP="$2";
|
||||||
|
|
||||||
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
|
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
|
||||||
@@ -43,21 +44,22 @@ case "$1" in
|
|||||||
|
|
||||||
run)
|
run)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"; IMAGE="dokku/$APP"
|
APP="$2"; IMAGE="dokku/$APP"
|
||||||
|
|
||||||
shift 2
|
shift 2
|
||||||
|
|
||||||
DOCKER_ARGS=$(: | pluginhook docker-args $APP run)
|
DOCKER_ARGS=$(: | pluginhook docker-args $APP run)
|
||||||
DOCKER_ARGS+=$(: | pluginhook docker-args-run $APP)
|
DOCKER_ARGS+=$(: | pluginhook docker-args-run $APP)
|
||||||
[[ "$(/usr/bin/tty || true)" != "not a tty" ]] && DOKKU_RUN_OPTS="-i -t"
|
[[ $DOKKU_RM_CONTAINER ]] && DOKKU_RUN_OPTS="--rm"
|
||||||
|
has_tty && DOKKU_RUN_OPTS+=" -i -t"
|
||||||
|
|
||||||
docker run $DOKKU_RUN_OPTS $DOCKER_ARGS $IMAGE /exec "$@"
|
docker run $DOKKU_RUN_OPTS $DOCKER_ARGS $IMAGE /exec "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
url | urls)
|
url | urls)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"; SCHEME="http"; SSL="$DOKKU_ROOT/$APP/tls"; WILDCARD_SSL="$DOKKU_ROOT/tls"
|
APP="$2"; SCHEME="http"; SSL="$DOKKU_ROOT/$APP/tls"; WILDCARD_SSL="$DOKKU_ROOT/tls"
|
||||||
|
|
||||||
if [[ -e "$SSL/server.crt" && -e "$SSL/server.key" ]] || [[ -e "$WILDCARD_SSL/server.crt" && -e "$WILDCARD_SSL/server.key" ]]; then
|
if [[ -e "$SSL/server.crt" && -e "$SSL/server.key" ]] || [[ -e "$WILDCARD_SSL/server.crt" && -e "$WILDCARD_SSL/server.key" ]]; then
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
apps)
|
apps)
|
||||||
echo "=== My Apps"
|
[[ -z "$DOKKU_QUIET_OUTPUT" ]] && info2 "My Apps"
|
||||||
find $DOKKU_ROOT -follow -maxdepth 1 -type d \( ! -iname ".*" \) -not -path $DOKKU_ROOT/tls | sed 's|^\./||g' | sed 's|'$DOKKU_ROOT'\/||' | tail -n +2 | sort
|
find $DOKKU_ROOT -follow -maxdepth 1 -type d \( ! -iname ".*" \) -not -path $DOKKU_ROOT/tls | sed 's|^\./||g' | sed 's|'$DOKKU_ROOT'\/||' | tail -n +2 | sort
|
||||||
;;
|
;;
|
||||||
|
|
||||||
apps:create)
|
apps:create)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ -d "$DOKKU_ROOT/$2" ]] && echo " ! Name is already taken" && exit 1
|
[[ -d "$DOKKU_ROOT/$2" ]] && warn "Name is already taken" && exit 1
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
mkdir -p "$DOKKU_ROOT/$APP"
|
mkdir -p "$DOKKU_ROOT/$APP"
|
||||||
@@ -18,19 +19,20 @@ case "$1" in
|
|||||||
|
|
||||||
apps:destroy)
|
apps:destroy)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
[[ "$2" == "tls" ]] && echo "Unable to destroy tls directory" && exit 1
|
[[ "$2" == "tls" ]] && echo "Unable to destroy tls directory" && exit 1
|
||||||
APP="$2"; IMAGE="dokku/$APP"; FORCE="$3"
|
APP="$2"; IMAGE="dokku/$APP"
|
||||||
|
|
||||||
if [[ "$FORCE" != "force" ]]; then
|
[[ "$3" == "force" ]] && DOKKU_APPS_FORCE_DELETE=1
|
||||||
echo " ! WARNING: Potentially Destructive Action"
|
if [[ -z "$DOKKU_APPS_FORCE_DELETE" ]]; then
|
||||||
echo " ! This command will destroy $APP (including all add-ons)."
|
warn "WARNING: Potentially Destructive Action"
|
||||||
echo " ! To proceed, type \"$APP\""
|
warn "This command will destroy $APP (including all add-ons)."
|
||||||
|
warn "To proceed, type \"$APP\""
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
read -p "> " app_name
|
read -p "> " app_name
|
||||||
if [[ "$app_name" != "$APP" ]]; then
|
if [[ "$app_name" != "$APP" ]]; then
|
||||||
echo " ! Confirmation did not match $APP. Aborted."
|
warn "Confirmation did not match $APP. Aborted."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
APP="$1"; IMAGE="dokku/$APP"; BUILD_ENV=""
|
APP="$1"; IMAGE="dokku/$APP"; BUILD_ENV=""
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ if [[ -f "$DOKKU_ROOT/$APP/ENV" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -z "$BUILD_ENV" ]]; then
|
if [[ ! -z "$BUILD_ENV" ]]; then
|
||||||
echo "-----> Adding BUILD_ENV to build environment..."
|
info1 "Adding BUILD_ENV to build environment..."
|
||||||
# create build env files for use in buildpacks like this:
|
# create build env files for use in buildpacks like this:
|
||||||
# https://github.com/niteoweb/heroku-buildpack-buildout/blob/5879fa3418f7d8e079f1aa5816ba1adde73f4948/bin/compile#L34
|
# https://github.com/niteoweb/heroku-buildpack-buildout/blob/5879fa3418f7d8e079f1aa5816ba1adde73f4948/bin/compile#L34
|
||||||
id=$(echo $BUILD_ENV |sed 's@export @@g'| docker run -i -a stdin $IMAGE /bin/bash -c "for ENV_VAR in $(cat); do echo \$ENV_VAR |sed 's@^\([^=]*\)=\(.*\)\$@echo \\\"\2\\\" >/tmp/env/\1@g' >>/tmp/set_env.sh; done && mkdir -p /tmp/env && /bin/bash /tmp/set_env.sh")
|
id=$(echo $BUILD_ENV |sed 's@export @@g'| docker run -i -a stdin $IMAGE /bin/bash -c "for ENV_VAR in $(cat); do echo \$ENV_VAR |sed 's@^\([^=]*\)=\(.*\)\$@echo \\\"\2\\\" >/tmp/env/\1@g' >>/tmp/set_env.sh; done && mkdir -p /tmp/env && /bin/bash /tmp/set_env.sh")
|
||||||
|
|||||||
57
plugins/common/functions
Normal file
57
plugins/common/functions
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
function has_tty() {
|
||||||
|
if [[ "$(/usr/bin/tty || true)" == "not a tty" ]]; then
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function info1() {
|
||||||
|
echo "-----> $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function info2() {
|
||||||
|
echo "=====> $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function verbose() {
|
||||||
|
echo " $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function warn() {
|
||||||
|
echo " ! $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail() {
|
||||||
|
echo "$@" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function verify_app_name() {
|
||||||
|
local APP="$1"
|
||||||
|
[[ ! -d "$DOKKU_ROOT/$APP" ]] && fail "App $APP does not exist"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse_args() {
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--quiet|-q)
|
||||||
|
export DOKKU_QUIET_OUTPUT=1
|
||||||
|
;;
|
||||||
|
--trace|-t)
|
||||||
|
export DOKKU_TRACE=1
|
||||||
|
;;
|
||||||
|
--rm-container|-rm)
|
||||||
|
export DOKKU_RM_CONTAINER=1
|
||||||
|
;;
|
||||||
|
--force|-f)
|
||||||
|
export DOKKU_APPS_FORCE_DELETE=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
ENV_FILE="$DOKKU_ROOT/$2/ENV"
|
ENV_FILE="$DOKKU_ROOT/$2/ENV"
|
||||||
ENV_FILE_TEMP="$DOKKU_ROOT/$2/ENV.tmp"
|
ENV_FILE_TEMP="$DOKKU_ROOT/$2/ENV.tmp"
|
||||||
@@ -49,7 +50,7 @@ config_write() {
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
config)
|
config)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
config_create
|
config_create
|
||||||
@@ -64,13 +65,13 @@ case "$1" in
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "=== $APP config vars ==="
|
[[ -z "$DOKKU_QUIET_OUTPUT" ]] && info2 "$APP config vars"
|
||||||
config_styled_hash "$VARS"
|
config_styled_hash "$VARS"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
config:get)
|
config:get)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
if [[ -z $3 ]]; then
|
if [[ -z $3 ]]; then
|
||||||
@@ -91,7 +92,7 @@ case "$1" in
|
|||||||
|
|
||||||
config:set)
|
config:set)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
if [[ -z "${*:3}" ]]; then
|
if [[ -z "${*:3}" ]]; then
|
||||||
@@ -130,7 +131,7 @@ ${var}"
|
|||||||
ENV_ADD=$(echo "$ENV_ADD" | tail -n +2) #remove first empty line
|
ENV_ADD=$(echo "$ENV_ADD" | tail -n +2) #remove first empty line
|
||||||
|
|
||||||
if [ $RESTART_APP ]; then
|
if [ $RESTART_APP ]; then
|
||||||
echo "-----> Setting config vars and restarting $APP"
|
info1 "Setting config vars and restarting $APP"
|
||||||
config_styled_hash "$ENV_ADD" " "
|
config_styled_hash "$ENV_ADD" " "
|
||||||
|
|
||||||
config_write "$ENV_TEMP"
|
config_write "$ENV_TEMP"
|
||||||
@@ -139,7 +140,7 @@ ${var}"
|
|||||||
|
|
||||||
config:unset)
|
config:unset)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
if [[ -z $3 ]]; then
|
if [[ -z $3 ]]; then
|
||||||
@@ -153,7 +154,7 @@ ${var}"
|
|||||||
VARS="${*:3}"
|
VARS="${*:3}"
|
||||||
|
|
||||||
for var in $VARS; do
|
for var in $VARS; do
|
||||||
echo "-----> Unsetting $var and restarting $APP"
|
info1 "Unsetting $var and restarting $APP"
|
||||||
ENV_TEMP=$(echo -e "${ENV_TEMP}" | sed "/^export $var=/ d")
|
ENV_TEMP=$(echo -e "${ENV_TEMP}" | sed "/^export $var=/ d")
|
||||||
|
|
||||||
config_write "$ENV_TEMP"
|
config_write "$ENV_TEMP"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
RE_IPV4="([0-9]{1,3}[\.]){3}[0-9]{1,3}"
|
RE_IPV4="([0-9]{1,3}[\.]){3}[0-9]{1,3}"
|
||||||
|
|
||||||
@@ -19,17 +20,17 @@ RE_IPV6="${RE_IPV6}([0-9a-fA-F]{1,4}:){1,4}:${RE_IPV4}" # TEST: 2
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
domains)
|
domains)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
dokku domains:setup $APP
|
dokku domains:setup $APP
|
||||||
echo "=== $APP Domain Names"
|
[[ -z "$DOKKU_QUIET_OUTPUT" ]] && info2 "$APP Domain Names"
|
||||||
cat "$DOKKU_ROOT/$APP/VHOST"
|
cat "$DOKKU_ROOT/$APP/VHOST"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
domains:setup)
|
domains:setup)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"; VHOST_PATH="$DOKKU_ROOT/$APP/VHOST"
|
APP="$2"; VHOST_PATH="$DOKKU_ROOT/$APP/VHOST"
|
||||||
|
|
||||||
if [[ ! -f $VHOST_PATH ]]; then
|
if [[ ! -f $VHOST_PATH ]]; then
|
||||||
@@ -43,7 +44,7 @@ case "$1" in
|
|||||||
[[ ! $(grep -q NO_VHOST "$DOKKU_ROOT/$APP/ENV") ]] && echo "export NO_VHOST='1'" >> "$DOKKU_ROOT/$APP/ENV"
|
[[ ! $(grep -q NO_VHOST "$DOKKU_ROOT/$APP/ENV") ]] && echo "export NO_VHOST='1'" >> "$DOKKU_ROOT/$APP/ENV"
|
||||||
else
|
else
|
||||||
if [[ -f "$DOKKU_ROOT/VHOST" ]]; then
|
if [[ -f "$DOKKU_ROOT/VHOST" ]]; then
|
||||||
echo "-----> Creating new $VHOST_PATH..."
|
info1 "Creating new $VHOST_PATH..."
|
||||||
SUBDOMAIN=${APP/%\.${VHOST}/}
|
SUBDOMAIN=${APP/%\.${VHOST}/}
|
||||||
hostname=$(: | pluginhook nginx-hostname $APP $SUBDOMAIN $VHOST)
|
hostname=$(: | pluginhook nginx-hostname $APP $SUBDOMAIN $VHOST)
|
||||||
if [[ ! -n $hostname ]]; then
|
if [[ ! -n $hostname ]]; then
|
||||||
@@ -62,7 +63,7 @@ case "$1" in
|
|||||||
|
|
||||||
domains:add)
|
domains:add)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
if [[ -z $3 ]]; then
|
if [[ -z $3 ]]; then
|
||||||
@@ -81,25 +82,25 @@ case "$1" in
|
|||||||
# we need to restart the app to make sure we're binding to the appropriate network interface
|
# we need to restart the app to make sure we're binding to the appropriate network interface
|
||||||
dokku ps:restart $APP
|
dokku ps:restart $APP
|
||||||
pluginhook post-domains-update $APP
|
pluginhook post-domains-update $APP
|
||||||
echo "-----> Added $3 to $APP"
|
info1 "Added $3 to $APP"
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
domains:clear)
|
domains:clear)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
rm -f "$DOKKU_ROOT/$APP/VHOST"
|
rm -f "$DOKKU_ROOT/$APP/VHOST"
|
||||||
dokku domains:setup $APP
|
dokku domains:setup $APP
|
||||||
pluginhook post-domains-update $APP
|
pluginhook post-domains-update $APP
|
||||||
echo "-----> Cleared domains in $APP"
|
info1 "Cleared domains in $APP"
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
domains:remove)
|
domains:remove)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
if [[ -z $3 ]]; then
|
if [[ -z $3 ]]; then
|
||||||
@@ -111,7 +112,7 @@ case "$1" in
|
|||||||
dokku domains:setup $APP
|
dokku domains:setup $APP
|
||||||
sed -i "/^$3$/d" "$DOKKU_ROOT/$APP/VHOST"
|
sed -i "/^$3$/d" "$DOKKU_ROOT/$APP/VHOST"
|
||||||
pluginhook post-domains-update $APP
|
pluginhook post-domains-update $APP
|
||||||
echo "-----> Removed $3 from $APP"
|
info1 "Removed $3 from $APP"
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
restart_nginx () {
|
restart_nginx () {
|
||||||
case "$DOKKU_DISTRO" in
|
case "$DOKKU_DISTRO" in
|
||||||
@@ -62,7 +63,7 @@ EOF
|
|||||||
NONSSL_VHOSTS=$(egrep -v "^${SSL_HOSTNAME}$|^${SSL_HOSTNAME_ALT}$" $VHOST_PATH || exit 0)
|
NONSSL_VHOSTS=$(egrep -v "^${SSL_HOSTNAME}$|^${SSL_HOSTNAME_ALT}$" $VHOST_PATH || exit 0)
|
||||||
|
|
||||||
while read line; do
|
while read line; do
|
||||||
echo "-----> Configuring SSL for $line..."
|
info1 "Configuring SSL for $line..."
|
||||||
SSL_SERVER_NAME=$line
|
SSL_SERVER_NAME=$line
|
||||||
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
||||||
done <<< "$SSL_VHOSTS"
|
done <<< "$SSL_VHOSTS"
|
||||||
@@ -70,7 +71,7 @@ EOF
|
|||||||
|
|
||||||
APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template"
|
APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template"
|
||||||
if [[ -f $APP_NGINX_TEMPLATE ]]; then
|
if [[ -f $APP_NGINX_TEMPLATE ]]; then
|
||||||
echo "-----> Overriding default nginx.conf with detected nginx.conf.template"
|
info1 "Overriding default nginx.conf with detected nginx.conf.template"
|
||||||
NGINX_CONF=$APP_NGINX_TEMPLATE
|
NGINX_CONF=$APP_NGINX_TEMPLATE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -79,11 +80,11 @@ EOF
|
|||||||
NOSSL_SERVER_NAME=$(echo $NONSSL_VHOSTS $SSL_VHOSTS| tr '\n' ' ')
|
NOSSL_SERVER_NAME=$(echo $NONSSL_VHOSTS $SSL_VHOSTS| tr '\n' ' ')
|
||||||
|
|
||||||
if [[ -n "$DOKKU_APP_LISTEN_PORT" ]] && [[ -n "$DOKKU_APP_LISTEN_IP" ]]; then
|
if [[ -n "$DOKKU_APP_LISTEN_PORT" ]] && [[ -n "$DOKKU_APP_LISTEN_IP" ]]; then
|
||||||
echo "-----> Creating $SCHEME nginx.conf"
|
info1 "Creating $SCHEME nginx.conf"
|
||||||
echo "upstream $APP { server $DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT; }" > $DOKKU_ROOT/$APP/nginx.conf
|
echo "upstream $APP { server $DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT; }" > $DOKKU_ROOT/$APP/nginx.conf
|
||||||
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
|
||||||
|
|
||||||
echo "-----> Running nginx-pre-reload"
|
info1 "Running nginx-pre-reload"
|
||||||
pluginhook nginx-pre-reload $APP $DOKKU_APP_LISTEN_PORT $DOKKU_APP_LISTEN_IP
|
pluginhook nginx-pre-reload $APP $DOKKU_APP_LISTEN_PORT $DOKKU_APP_LISTEN_IP
|
||||||
|
|
||||||
echo " Reloading nginx"
|
echo " Reloading nginx"
|
||||||
@@ -91,14 +92,14 @@ EOF
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
if [[ -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
||||||
echo "-----> VHOST support disabled, deleting $APP/VHOST"
|
info1 "VHOST support disabled, deleting $APP/VHOST"
|
||||||
rm "$DOKKU_ROOT/$APP/VHOST"
|
rm "$DOKKU_ROOT/$APP/VHOST"
|
||||||
fi
|
fi
|
||||||
if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then
|
if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then
|
||||||
echo "-----> VHOST support disabled, deleting nginx.conf"
|
info1 "VHOST support disabled, deleting nginx.conf"
|
||||||
rm "$DOKKU_ROOT/$APP/nginx.conf"
|
rm "$DOKKU_ROOT/$APP/nginx.conf"
|
||||||
|
|
||||||
echo "-----> VHOST support disabled, reloading nginx after nginx.conf deletion"
|
info1 "VHOST support disabled, reloading nginx after nginx.conf deletion"
|
||||||
restart_nginx
|
restart_nginx
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -106,7 +107,7 @@ EOF
|
|||||||
|
|
||||||
nginx:import-ssl)
|
nginx:import-ssl)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
[[ -t 0 ]] && echo "Tar archive containing server.crt and server.key expected on stdin" && exit 1
|
[[ -t 0 ]] && echo "Tar archive containing server.crt and server.key expected on stdin" && exit 1
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
APP="$1"; PORT="$2"; IP="$3"
|
APP="$1"; PORT="$2"; IP="$3"
|
||||||
|
|
||||||
set +e; NO_VHOST=$(dokku config:get $APP NO_VHOST); set -e
|
set +e; NO_VHOST=$(dokku config:get $APP NO_VHOST); set -e
|
||||||
|
|
||||||
if [[ -n "$NO_VHOST" ]]; then
|
if [[ -n "$NO_VHOST" ]]; then
|
||||||
echo "-----> NO_VHOST config detected"
|
info1 "NO_VHOST config detected"
|
||||||
elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
|
||||||
dokku domains:setup $APP
|
dokku domains:setup $APP
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
APP="$1"
|
APP="$1"
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
|
|
||||||
release_and_deploy() {
|
release_and_deploy() {
|
||||||
|
source "$(dirname $0)/../common/functions"
|
||||||
local APP="$1";
|
local APP="$1";
|
||||||
|
|
||||||
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
|
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
|
||||||
echo "-----> Releasing $APP ..."
|
info1 "Releasing $APP ..."
|
||||||
dokku release $APP
|
dokku release $APP
|
||||||
echo "-----> Release complete!"
|
info1 "Release complete!"
|
||||||
echo "-----> Deploying $APP ..."
|
info1 "Deploying $APP ..."
|
||||||
dokku deploy $APP
|
dokku deploy $APP
|
||||||
echo "=====> Application deployed:"
|
info2 "Application deployed:"
|
||||||
dokku urls $APP | sed "s/^/ /"
|
dokku urls $APP | sed "s/^/ /"
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
@@ -19,7 +21,7 @@ release_and_deploy() {
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
ps)
|
ps)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
|
|
||||||
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
||||||
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
||||||
@@ -29,7 +31,7 @@ case "$1" in
|
|||||||
|
|
||||||
ps:start)
|
ps:start)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
|
|
||||||
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
||||||
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
||||||
@@ -43,7 +45,7 @@ case "$1" in
|
|||||||
|
|
||||||
ps:stop)
|
ps:stop)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
|
|
||||||
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
||||||
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
||||||
@@ -58,7 +60,7 @@ case "$1" in
|
|||||||
|
|
||||||
ps:rebuild)
|
ps:rebuild)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
APP="$2"
|
APP="$2"
|
||||||
|
|
||||||
dokku git-build $APP
|
dokku git-build $APP
|
||||||
@@ -74,7 +76,7 @@ case "$1" in
|
|||||||
|
|
||||||
ps:restart)
|
ps:restart)
|
||||||
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
|
||||||
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1
|
verify_app_name "$2"
|
||||||
|
|
||||||
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
|
||||||
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ teardown() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@test "dokku client (no args should print help)" {
|
@test "dokku client (no args should print help)" {
|
||||||
run /bin/bash -c "./contrib/dokku_client.sh | head -1 | grep -q 'dokku COMMAND <app>'"
|
run /bin/bash -c "./contrib/dokku_client.sh | head -1 | egrep -q '^Usage: dokku \[.+\] COMMAND <app>.*'"
|
||||||
echo "output: "$output
|
echo "output: "$output
|
||||||
echo "status: "$status
|
echo "status: "$status
|
||||||
assert_success
|
assert_success
|
||||||
|
|||||||
Reference in New Issue
Block a user