From 5b03672708eab08607c2cf54dafcb25cf0c1d06d Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 25 Feb 2018 15:41:27 -0500 Subject: [PATCH] feat: implement exists and linked subcommands --- .travis.yml | 11 +++++------ README.md | 2 ++ common-functions | 15 +++++++++++++++ subcommands/exists | 20 ++++++++++++++++++++ subcommands/linked | 24 ++++++++++++++++++++++++ tests/setup.sh | 6 ++++++ tests/test_helper.bash | 1 + 7 files changed, 73 insertions(+), 6 deletions(-) create mode 100755 subcommands/exists create mode 100755 subcommands/linked diff --git a/.travis.yml b/.travis.yml index 451fe6f..81181d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,9 @@ sudo: required dist: trusty language: bash env: - - DOKKU_VERSION=master - - DOKKU_VERSION=v0.7.0 - - DOKKU_VERSION=v0.6.0 - - DOKKU_VERSION=v0.5.0 - - DOKKU_VERSION=v0.4.0 -before_install: make setup + - DOKKU_VERSION=master DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.7.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.6.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.5.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.4.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis script: make test diff --git a/README.md b/README.md index 50f617f..07c220e 100644 --- a/README.md +++ b/README.md @@ -29,11 +29,13 @@ postgres:connect Connect via psql to a postgres service postgres:create Create a postgres service with environment variables postgres:destroy Delete the service, delete the data and stop its container if there are no links left postgres:enter [command] Enter or run a command in a running postgres service container +postgres:exists Check if the postgres service exists postgres:export > Export a dump of the postgres service database postgres:expose [port] Expose a postgres service on custom port if provided (random port otherwise) postgres:import < Import a dump into the postgres service database postgres:info Print the connection information postgres:link Link the postgres service to the app +postgres:linked Check if the postgres service is linked to an app postgres:list List all postgres services postgres:logs [-t] Print the most recent log(s) for this service postgres:promote Promote service as DATABASE_URL in diff --git a/common-functions b/common-functions index 413c050..7450339 100755 --- a/common-functions +++ b/common-functions @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_AVAILABLE_PATH/config/functions" docker_ports_options() { declare desc="Exports a list of exposed ports" @@ -288,6 +289,20 @@ service_info() { fi } +service_is_linked() { + declare desc="Links a service to an application" + declare SERVICE="$1" APP="$2" + update_plugin_scheme_for_app "$APP" + local SERVICE_URL=$(service_url "$SERVICE") + local EXISTING_CONFIG=$(config_all "$APP") + local LINK=$(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1) || true + if [[ -z $LINK ]]; then + dokku_log_warn "Service $SERVICE is not linked to $APP" + exit 1 + fi + dokku_log_info1 "Service $SERVICE is linked to $APP" +} + service_link() { declare desc="Links a service to an application" declare SERVICE="$1" APP="$2" diff --git a/subcommands/exists b/subcommands/exists new file mode 100755 index 0000000..93b6a99 --- /dev/null +++ b/subcommands/exists @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_BASE_PATH/common/functions" +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" + +service-exists-cmd() { + #E here we check if the lolipop $PLUGIN_COMMAND_PREFIX service exists. + #E dokku $PLUGIN_COMMAND_PREFIX:exists lolipop + #A service, service to run command against + declare desc="check if the $PLUGIN_SERVICE service exists" + local cmd="$PLUGIN_COMMAND_PREFIX:exists" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + dokku_log_info1 "Service $SERVICE exists" +} + +service-exists-cmd "$@" diff --git a/subcommands/linked b/subcommands/linked new file mode 100755 index 0000000..f5a1789 --- /dev/null +++ b/subcommands/linked @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_BASE_PATH/common/functions" +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" + +service-linked-cmd() { + #E here we check if the lolipop $PLUGIN_COMMAND_PREFIX service is linked to the 'playground' app. + #E dokku $PLUGIN_COMMAND_PREFIX:linked lolipop playground + #A service, service to run command against + #A app, app to run command against + declare desc="check if the $PLUGIN_SERVICE service is linked to an app" + local cmd="$PLUGIN_COMMAND_PREFIX:linked" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" APP="$2" + APP=${APP:="$DOKKU_APP_NAME"} + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + [[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on" + verify_app_name "$APP" + verify_service_name "$SERVICE" + service_is_linked "$SERVICE" "$APP" +} + +service-linked-cmd "$@" diff --git a/tests/setup.sh b/tests/setup.sh index 83d078f..9aac172 100644 --- a/tests/setup.sh +++ b/tests/setup.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/test_helper.bash" BIN_STUBS="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" @@ -10,6 +11,11 @@ fi cd $DOKKU_ROOT echo "Dokku version $DOKKU_VERSION" git checkout $DOKKU_VERSION > /dev/null +if grep go-build Makefile > /dev/null; then + mv "$BIN_STUBS/docker" "$BIN_STUBS/docker-stub" + make go-build + mv "$BIN_STUBS/docker-stub" "$BIN_STUBS/docker" +fi cd - source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" diff --git a/tests/test_helper.bash b/tests/test_helper.bash index 307a475..9aa1026 100644 --- a/tests/test_helper.bash +++ b/tests/test_helper.bash @@ -11,6 +11,7 @@ export PLUGIN_CORE_AVAILABLE_PATH="$PLUGIN_PATH" export POSTGRES_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/fixtures" export PLUGIN_DATA_ROOT="$POSTGRES_ROOT" export PLUGIN_CONFIG_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config" +export DOKKU_LIB_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib-root" if [[ "$(uname)" == "Darwin" ]]; then export PLUGN_URL="https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_darwin_x86_64.tgz" else