2015-02-05 11:32:46 -08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
has_tty() {
|
2015-02-05 11:32:46 -08:00
|
|
|
if [[ "$(/usr/bin/tty || true)" == "not a tty" ]]; then
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
dokku_log_info1() {
|
2015-02-05 11:32:46 -08:00
|
|
|
echo "-----> $@"
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
dokku_log_info2() {
|
2015-02-05 11:32:46 -08:00
|
|
|
echo "=====> $@"
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
dokku_log_info1_quiet() {
|
2015-02-05 12:38:59 -08:00
|
|
|
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
|
|
|
|
|
echo "-----> $@"
|
|
|
|
|
else
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
dokku_log_info2_quiet() {
|
2015-02-05 12:38:59 -08:00
|
|
|
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
|
|
|
|
|
echo "=====> $@"
|
|
|
|
|
else
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 14:09:39 -08:00
|
|
|
dokku_col_log_info1() {
|
|
|
|
|
printf "%-40s %-40s\n" "-----> $@"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dokku_col_log_info1_quiet() {
|
|
|
|
|
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
|
|
|
|
|
printf "%-40s %-40s\n" "-----> $@"
|
|
|
|
|
else
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dokku_col_log_info2() {
|
|
|
|
|
printf "%-40s %-40s\n" "=====> $@"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dokku_col_log_info2_quiet() {
|
|
|
|
|
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
|
|
|
|
|
printf "%-40s %-40s\n" "=====> $@"
|
|
|
|
|
else
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dokku_col_log_msg() {
|
|
|
|
|
printf "%-40s %-40s\n" "$@"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dokku_col_log_msg_quiet() {
|
|
|
|
|
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
|
|
|
|
|
printf "%-40s %-40s\n" "$@"
|
|
|
|
|
else
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2015-03-20 08:29:35 -07:00
|
|
|
dokku_log_verbose_quiet() {
|
|
|
|
|
if [[ -z "$DOKKU_QUIET_OUTPUT" ]];then
|
|
|
|
|
echo " $@"
|
|
|
|
|
else
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
dokku_log_verbose() {
|
2015-02-05 11:32:46 -08:00
|
|
|
echo " $@"
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
dokku_log_warn() {
|
2015-02-05 11:32:46 -08:00
|
|
|
echo " ! $@"
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
dokku_log_fail() {
|
2015-02-05 11:32:46 -08:00
|
|
|
echo "$@" 1>&2
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
2015-03-20 08:29:35 -07:00
|
|
|
dokku_container_log_verbose_quiet() {
|
|
|
|
|
CID=$1;
|
|
|
|
|
shift
|
|
|
|
|
|
|
|
|
|
OIFS=$IFS
|
|
|
|
|
IFS=$'\n'
|
|
|
|
|
for line in $(docker logs $CID 2>&1); do
|
|
|
|
|
dokku_log_verbose_quiet "$line"
|
|
|
|
|
done
|
|
|
|
|
IFS=$OIFS
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
verify_app_name() {
|
2015-02-05 11:32:46 -08:00
|
|
|
local APP="$1"
|
2015-04-21 10:58:11 -07:00
|
|
|
[[ ! -n "$APP" ]] && dokku_log_fail "(verify_app_name) APP must not be null"
|
2015-02-06 08:28:14 -08:00
|
|
|
[[ ! -d "$DOKKU_ROOT/$APP" ]] && dokku_log_fail "App $APP does not exist"
|
2015-02-07 10:47:04 -08:00
|
|
|
IMAGE="dokku/$APP"
|
2015-02-05 11:32:46 -08:00
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-18 15:39:08 -07:00
|
|
|
verify_app_image() {
|
|
|
|
|
local APP="$1"; local IMAGE="dokku/$APP"
|
|
|
|
|
DOKKU_APP_IMAGES=$(docker images -q $IMAGE)
|
|
|
|
|
if [[ -n "$DOKKU_APP_IMAGES" ]]; then
|
|
|
|
|
return 0
|
|
|
|
|
else
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:47:04 -08:00
|
|
|
is_image_buildstep_based() {
|
|
|
|
|
# circleci can't support --rm as they run lxc in lxc
|
|
|
|
|
[[ ! -f "/home/ubuntu/.circlerc" ]] && local DOCKER_ARGS="--rm"
|
|
|
|
|
docker run --entrypoint="/bin/bash" $DOCKER_ARGS "$@" -c "[[ -f /exec ]]"
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-18 15:39:08 -07:00
|
|
|
is_number() {
|
|
|
|
|
local NUMBER=$1; local NUM_RE='^[0-9]+$'
|
|
|
|
|
if [[ $NUMBER =~ $NUM_RE ]];then
|
|
|
|
|
return 0
|
|
|
|
|
else
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-07 10:57:30 -08:00
|
|
|
parse_args() {
|
2015-02-05 11:32:46 -08:00
|
|
|
for arg in "$@"; do
|
|
|
|
|
case "$arg" in
|
2015-02-09 16:59:07 -08:00
|
|
|
--quiet)
|
2015-02-05 11:32:46 -08:00
|
|
|
export DOKKU_QUIET_OUTPUT=1
|
|
|
|
|
;;
|
2015-02-09 16:59:07 -08:00
|
|
|
--trace)
|
2015-02-05 11:32:46 -08:00
|
|
|
export DOKKU_TRACE=1
|
|
|
|
|
;;
|
2015-02-07 09:26:22 -08:00
|
|
|
--rm-container|--rm)
|
2015-02-05 11:32:46 -08:00
|
|
|
export DOKKU_RM_CONTAINER=1
|
|
|
|
|
;;
|
2015-02-09 16:59:07 -08:00
|
|
|
--force)
|
2015-02-05 11:32:46 -08:00
|
|
|
export DOKKU_APPS_FORCE_DELETE=1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
return 0
|
|
|
|
|
}
|
2015-04-17 15:23:59 -07:00
|
|
|
|
|
|
|
|
copy_from_image() {
|
|
|
|
|
local APP="$1"; local IMAGE="dokku/$APP"; local SRC_FILE="$2"; local DST_DIR="$3"; verify_app_name $APP
|
|
|
|
|
|
2015-04-18 15:39:08 -07:00
|
|
|
if verify_app_image "$APP"; then
|
2015-04-18 10:37:17 -07:00
|
|
|
CID=$(docker run -d $IMAGE bash)
|
|
|
|
|
docker cp "$CID:$SRC_FILE" "$DST_DIR"
|
|
|
|
|
docker rm -f "$CID" &> /dev/null
|
|
|
|
|
else
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
2015-04-17 15:23:59 -07:00
|
|
|
}
|
2015-04-17 18:57:37 -07:00
|
|
|
|
|
|
|
|
is_deployed() {
|
|
|
|
|
APP="$1"
|
|
|
|
|
verify_app_name $APP
|
|
|
|
|
if [[ -f $DOKKU_ROOT/$APP/CONTAINER ]] || ls $DOKKU_ROOT/$APP/CONTAINER.* &> /dev/null;then
|
|
|
|
|
return 0
|
|
|
|
|
else
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get_container_ids() {
|
|
|
|
|
APP="$1"
|
|
|
|
|
verify_app_name $APP
|
|
|
|
|
[[ -f $DOKKU_ROOT/$APP/CONTAINER ]] && DOKKU_CIDS+=$(< $DOKKU_ROOT/$APP/CONTAINER)
|
|
|
|
|
|
|
|
|
|
shopt -s nullglob
|
|
|
|
|
for DOKKU_CID_FILE in $DOKKU_ROOT/$APP/CONTAINER.*; do
|
|
|
|
|
DOKKU_CIDS+=" "
|
|
|
|
|
DOKKU_CIDS+=$(< $DOKKU_CID_FILE)
|
|
|
|
|
DOKKU_CIDS+=" "
|
|
|
|
|
done
|
|
|
|
|
shopt -u nullglob
|
|
|
|
|
echo $DOKKU_CIDS
|
|
|
|
|
}
|