diff --git a/common-functions b/common-functions index 0674f7b..ad0cb04 100755 --- a/common-functions +++ b/common-functions @@ -339,6 +339,59 @@ service_logs() { docker logs $DOKKU_LOGS_ARGS "$ID" } +service_parse_args() { + declare desc="cli arg parser" + local next_index=1; local skip=false; local args=("$@") + + for arg in "$@"; do + shift + case "$arg" in + "--config-options") set -- "$@" "-c" ;; + "--custom-env") set -- "$@" "-C" ;; + "--image") set -- "$@" "-i" ;; + "--image-version") set -- "$@" "-I" ;; + "--password") set -- "$@" "-p" ;; + "--root-password") set -- "$@" "-r" ;; + + "--alias") set -- "$@" "-a" ;; + "--database") set -- "$@" "-d" ;; + "--memory") set -- "$@" "-m" ;; + "--querystring") set -- "$@" "-q" ;; + "--user") set -- "$@" "-u" ;; + *) set -- "$@" "$arg" + esac + done + + 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 + ;; + c) export PLUGIN_CONFIG_OPTIONS=$OPTARG + ;; + C) export SERVICE_CUSTOM_ENV=$OPTARG + ;; + d) export SERVICE_DATABASE=$OPTARG + ;; + i) export PLUGIN_IMAGE=$OPTARG + ;; + I) export PLUGIN_IMAGE_VERSION=$OPTARG + ;; + m) export SERVICE_MEMORY=$OPTARG + ;; + p) export SERVICE_PASSWORD=$OPTARG + ;; + q) export SERVICE_QUERYSTRING=$OPTARG + ;; + r) export SERVICE_ROOT_PASSWORD=$OPTARG + ;; + u) export SERVICE_USER=$OPTARG + ;; + esac + done + shift "$(( OPTIND - 1 ))" # remove options from positional parameters +} + service_port_expose() { declare desc="Wrapper for exposing service ports" declare SERVICE="$1" diff --git a/functions b/functions index 632018a..4e47aa8 100755 --- a/functions +++ b/functions @@ -15,6 +15,8 @@ service_create() { [[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] || dokku_log_fail "$PLUGIN_SERVICE service $SERVICE already exists" SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" + service_parse_args "${@:2}" + if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " ; then docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed" fi @@ -22,10 +24,15 @@ service_create() { mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory" mkdir -p "$SERVICE_ROOT/data" || dokku_log_fail "Unable to create service data directory" touch "$LINKS_FILE" - password=$(openssl rand -hex 16) - echo "$password" > "$SERVICE_ROOT/PASSWORD" + PASSWORD=$(openssl rand -hex 16) + if [[ -n "$SERVICE_PASSWORD" ]]; then + PASSWORD="$SERVICE_PASSWORD" + dokku_log_warn "Specified password may not be as secure as the auto-generated password" + fi + echo "$PASSWORD" > "$SERVICE_ROOT/PASSWORD" chmod 640 "$SERVICE_ROOT/PASSWORD" + [[ -n "$SERVICE_CUSTOM_ENV" ]] && POSTGRES_CUSTOM_ENV="$SERVICE_CUSTOM_ENV" if [[ -n $POSTGRES_CUSTOM_ENV ]]; then echo "$POSTGRES_CUSTOM_ENV" | tr ';' "\n" > "$SERVICE_ROOT/ENV" else diff --git a/subcommands/clone b/subcommands/clone index bb4e303..f92ead1 100755 --- a/subcommands/clone +++ b/subcommands/clone @@ -17,7 +17,7 @@ postgres-clone-cmd() { PLUGIN_IMAGE=$(service_version "$SERVICE" | grep -o "^.*:" | sed -r "s/://g") PLUGIN_IMAGE_VERSION=$(service_version "$SERVICE" | grep -o ":.*$" | sed -r "s/://g") - service_create "$NEW_SERVICE" + 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 dokku_log_info1 "Done" diff --git a/subcommands/create b/subcommands/create index 56ef58a..77eae5b 100755 --- a/subcommands/create +++ b/subcommands/create @@ -9,7 +9,7 @@ postgres-create-cmd() { local cmd="$PLUGIN_COMMAND_PREFIX:create" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 declare SERVICE="$1" - service_create "$SERVICE" + service_create "$SERVICE" "${@:2}" } postgres-create-cmd "$@"