From 5dba48c638a36da153a8787d942e3a48353d871d Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 24 Apr 2018 03:22:12 -0400 Subject: [PATCH] feat: properly handle custom aliases and error states for alias usage when calling link subcommand. Refs dokku/dokku-redis#64 --- common-functions | 23 ++++++++++++++++------- subcommands/clone | 2 +- subcommands/link | 2 ++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/common-functions b/common-functions index 6e23497..9158cc6 100755 --- a/common-functions +++ b/common-functions @@ -346,9 +346,22 @@ service_link() { local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" local EXISTING_CONFIG=$(config_all "$APP") local LINK=$(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1) || true - local DEFAULT_ALIAS=$(echo "$EXISTING_CONFIG" | grep "${PLUGIN_DEFAULT_ALIAS}_URL") || true local SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE") local LINKS_FILE="$SERVICE_ROOT/LINKS" + local ALIAS="$PLUGIN_DEFAULT_ALIAS" + local DEFAULT_ALIAS + + if [[ -n "$SERVICE_ALIAS" ]]; then + ALIAS="$SERVICE_ALIAS" + ALIAS_IN_USE=$(echo "$EXISTING_CONFIG" | grep "${ALIAS}_URL") || true + [[ -n "$ALIAS_IN_USE" ]] && dokku_log_fail "Specified alias $ALIAS already in use" + else + DEFAULT_ALIAS=$(echo "$EXISTING_CONFIG" | grep "${PLUGIN_DEFAULT_ALIAS}_URL") || true + if [[ -n "$DEFAULT_ALIAS" ]]; then + ALIAS=$(service_alternative_alias "$EXISTING_CONFIG") + fi + [[ -z "$ALIAS" ]] && dokku_log_fail "Unable to use default or generated URL alias" + fi [[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK" mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory" @@ -356,11 +369,6 @@ service_link() { echo "$APP" >> "$LINKS_FILE" sort "$LINKS_FILE" -u -o "$LINKS_FILE" - local ALIAS="$PLUGIN_DEFAULT_ALIAS" - if [[ -n $DEFAULT_ALIAS ]]; then - ALIAS=$(service_alternative_alias "$EXISTING_CONFIG") - fi - if declare -f -F add_passed_docker_option > /dev/null; then # shellcheck disable=SC2034 local passed_phases=(build deploy run) @@ -443,7 +451,8 @@ service_parse_args() { OPTIND=1 while getopts "a:c:C:d:i:I:m:p:q:r:u:" opt; do case "$opt" in - a) export SERVICE_ALIAS=$OPTARG + a) + SERVICE_ALIAS="${SERVICE_ALIAS^^}"; export SERVICE_ALIAS="${SERVICE_ALIAS%_URL}" ;; c) export PLUGIN_CONFIG_OPTIONS=$OPTARG ;; diff --git a/subcommands/clone b/subcommands/clone index a9ead6c..6c8beb3 100755 --- a/subcommands/clone +++ b/subcommands/clone @@ -32,7 +32,7 @@ service-clone-cmd() { service_parse_args "${@:3}" - dokku_log_info2 "Cloning $SERVICE to $NEW_SERVICE" + dokku_log_info2 "Cloning $SERVICE to $NEW_SERVICE @ $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" service_create "$NEW_SERVICE" "${@:3}" dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE" service_export "$SERVICE" | service_import "$NEW_SERVICE" > /dev/null 2>&1 || true diff --git a/subcommands/link b/subcommands/link index add93e5..4f94498 100755 --- a/subcommands/link +++ b/subcommands/link @@ -39,6 +39,8 @@ service-link-cmd() { #E ${PLUGIN_SCHEME}2://lolipop:SOME_PASSWORD@dokku-${PLUGIN_COMMAND_PREFIX}-lolipop:${PLUGIN_DATASTORE_PORTS[0]}/lolipop #A service, service to run command against #A app, app to run command against + #F -a|--alias "BLUE_DATABASE", an alternative alias to use for linking to an app via environment variable + #F -q|--querystring "pool=5", ampersand delimited querystring arguments to append to the service link declare desc="link the $PLUGIN_SERVICE service to the app" local cmd="$PLUGIN_COMMAND_PREFIX:link" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 declare SERVICE="$1" APP="$2" LINK_FLAGS_LIST="${@:3}"