Add support for flags on the service:info command

This commit is contained in:
Jose Diaz-Gonzalez
2016-08-28 05:37:34 -04:00
parent 3c045b11ab
commit 7a8d24931a
5 changed files with 87 additions and 15 deletions

View File

@@ -48,18 +48,26 @@ dokku mysql:create lolipop
# official mysql image
export MYSQL_IMAGE="mysql"
export MYSQL_IMAGE_VERSION="5.5"
dokku mysql:create lolipop
# you can also specify custom environment
# variables to start the mysql service
# in semi-colon separated forma
export MYSQL_CUSTOM_ENV="USER=alpha;HOST=beta"
# create a mysql service
dokku mysql:create lolipop
# get connection information as follows
dokku mysql:info lolipop
# you can also retrieve a specific piece of service info via flags
dokku mysql:info lolipop --config-dir
dokku mysql:info lolipop --data-dir
dokku mysql:info lolipop --dsn
dokku mysql:info lolipop --exposed-ports
dokku mysql:info lolipop --links
dokku mysql:info lolipop --status
dokku mysql:info lolipop --version
# a mysql service can be linked to a
# container this will use native docker
# links via the docker-options plugin

View File

@@ -139,13 +139,37 @@ service_exposed_ports() {
}
service_info() {
local SERVICE="$1"
local SERVICE="$1" INFO_FLAG="$2"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local SERVICE_URL=$(service_url "$SERVICE")
local PORT_FILE="$SERVICE_ROOT/PORT"
local flag key valid_flags
echo " DSN: $SERVICE_URL"
echo " Config dir: $SERVICE_ROOT/config"
echo " Data dir: $SERVICE_ROOT/data"
local flag_map=(
"--config-dir: ${SERVICE_ROOT}/config"
"--data-dir: ${SERVICE_ROOT}/data"
"--dsn: ${SERVICE_URL}"
"--exposed-ports: $(service_exposed_ports "$SERVICE")"
"--links: $(service_linked_apps "$SERVICE")"
"--status: $(service_status "$SERVICE")"
"--version: $(service_version "$SERVICE")"
)
if [[ -z "$INFO_FLAG" ]]; then
dokku_log_info2 "Container 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
for flag in "${flag_map[@]}"; do
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
echo "${flag#*: }" && match=true
fi
done
[[ "$match" == "true" ]] || dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
fi
}
service_link() {
@@ -388,7 +412,7 @@ service_create_container() {
local SERVICE="$1"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local SERVICE_NAME="$(get_service_name "$SERVICE")"
local ROOTPASSWORD=$(cat "$SERVICE_ROOT/ROOTPASSWORD")
local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")"
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
ID=$(docker run --name "$SERVICE_NAME" -v "$SERVICE_ROOT/data:/var/lib/mysql" -v "$SERVICE_ROOT/config:/etc/mysql/conf.d" -e "MYSQL_ROOT_PASSWORD=$ROOTPASSWORD" -e MYSQL_USER=mysql -e "MYSQL_PASSWORD=$PASSWORD" -e "MYSQL_DATABASE=$SERVICE" --env-file="$SERVICE_ROOT/ENV" -d --restart always --label dokku=service --label dokku.service=mysql "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION")
@@ -418,7 +442,7 @@ service_import() {
local SERVICE="$1"
SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
SERVICE_NAME="$(get_service_name "$SERVICE")"
PASSWORD=$(cat "$SERVICE_ROOT/PASSWORD")
PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
if [[ -t 0 ]]; then
dokku_log_fail "No data provided on stdin."
@@ -440,7 +464,7 @@ service_start() {
dokku_log_info1_quiet "Starting container"
local PREVIOUS_ID=$(docker ps -f status=exited | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
local IMAGE_EXISTS=$(docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " && true)
local ROOTPASSWORD=$(cat "$SERVICE_ROOT/ROOTPASSWORD")
local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")"
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
if [[ -n $PREVIOUS_ID ]]; then

View File

@@ -7,11 +7,11 @@ source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
mysql-info-cmd() {
declare desc="print the connection information"
local cmd="$PLUGIN_COMMAND_PREFIX:info" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1"
declare SERVICE="$1" INFO_FLAG="$2"
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
verify_service_name "$SERVICE"
service_info "$SERVICE"
service_info "$SERVICE" "$INFO_FLAG"
}
mysql-info-cmd "$@"

View File

@@ -21,14 +21,46 @@ teardown() {
@test "($PLUGIN_COMMAND_PREFIX:info) success" {
run dokku "$PLUGIN_COMMAND_PREFIX:info" l
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "${lines[*]}" "DSN: mysql://mysql:$password@dokku-mysql-l:3306/l"
local password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "${lines[*]}" "mysql://mysql:$password@dokku-mysql-l:3306/l"
}
@test "($PLUGIN_COMMAND_PREFIX:info) replaces underscores by dash in hostname" {
dokku "$PLUGIN_COMMAND_PREFIX:create" test_with_underscores
run dokku "$PLUGIN_COMMAND_PREFIX:info" test_with_underscores
password="$(cat "$PLUGIN_DATA_ROOT/test_with_underscores/PASSWORD")"
assert_contains "${lines[*]}" "DSN: mysql://mysql:$password@dokku-mysql-test-with-underscores:3306/test_with_underscores"
local password="$(cat "$PLUGIN_DATA_ROOT/test_with_underscores/PASSWORD")"
assert_contains "${lines[*]}" "mysql://mysql:$password@dokku-mysql-test-with-underscores:3306/test_with_underscores"
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" test_with_underscores
}
@test "($PLUGIN_COMMAND_PREFIX:info) success with flag" {
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --dsn
local password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_output "mysql://mysql:$password@dokku-mysql-l:3306/l"
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --config-dir
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --data-dir
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --dsn
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --exposed-ports
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --links
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --status
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --version
assert_success
}
@test "($PLUGIN_COMMAND_PREFIX:info) error when invalid flag" {
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --invalid-flag
assert_failure
}

View File

@@ -47,6 +47,14 @@ assert_success() {
fi
}
assert_failure() {
if [[ "$status" -eq 0 ]]; then
flunk "expected failed exit status"
elif [[ "$#" -gt 0 ]]; then
assert_output "$1"
fi
}
assert_exists() {
if [ ! -f "$1" ]; then
flunk "expected file to exist: $1"