From 3fe1ead303c6c6d51283251cfd818da6eeeb4b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Carlos=20Mej=C3=ADas=20Rodr=C3=ADguez?= Date: Sat, 24 Nov 2018 13:00:15 -0500 Subject: [PATCH] Add flag options to deployment script with getopts --- deploy | 63 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 14 deletions(-) mode change 100755 => 100644 deploy diff --git a/deploy b/deploy old mode 100755 new mode 100644 index 313e563..25f5630 --- a/deploy +++ b/deploy @@ -1,5 +1,25 @@ #!/usr/bin/env bash +####################################### +# Check a parameter has been provided # +# Arguments: # +# $1 Argument value # +# $2 Argument name # +# $3 Argument envvar # +# $4 Argument flag # +####################################### +check_argument () { + local argument_value=$1 + local argument_name=$2 + local argument_envvar=$3 + local argument_flag=$4 + if [ -z "$argument_value" ]; then + echo "Error: Missing argument \"$argument_name\"." + echo "Try setting \"$argument_envvar\" environment variable or using the \"-$argument_flag\" flag." + exit 1 + fi +} + ########################################### # Checks for error exit codes from httpie # # Arguments: # @@ -22,24 +42,39 @@ check_for_errors () { fi } -PORTAINER_USER=${PORTAINER_USER:-"user"} -PORTAINER_PASSWORD=${PORTAINER_PASSWORD:-"password"} -PORTAINER_URL=${PORTAINER_URL:-"https://portainer.example.com"} -PORTAINER_PRUNE=${PORTAINER_PRUNE:-"false"} +# Set arguments through envvars +PORTAINER_USER=${PORTAINER_USER} +PORTAINER_PASSWORD=${PORTAINER_PASSWORD} +PORTAINER_URL=${PORTAINER_URL} +PORTAINER_STACK_NAME=${PORTAINER_STACK_NAME} +DOCKER_COMPOSE_FILE=${DOCKER_COMPOSE_FILE} PORTAINER_ENDPOINT=${PORTAINER_ENDPOINT:-"1"} +PORTAINER_PRUNE=${PORTAINER_PRUNE:-"false"} HTTPIE_VERIFY_SSL=${HTTPIE_VERIFY_SSL:-"yes"} -if [ -z ${1+x} ]; then - echo "Error: Parameter #1 missing (stack name)" - exit 1 -fi -STACK_NAME="$1" +# Set arguments through flags +while getopts u:p:l:n:c:e:rs option; do + case "${option}" in + u) PORTAINER_USER=${OPTARG} ;; + p) PORTAINER_PASSWORD=${OPTARG} ;; + l) PORTAINER_URL=${OPTARG} ;; + n) PORTAINER_STACK_NAME=${OPTARG} ;; + c) DOCKER_COMPOSE_FILE=${OPTARG} ;; + e) PORTAINER_ENDPOINT=${OPTARG:-$PORTAINER_ENDPOINT} ;; + r) PORTAINER_PRUNE=${"true":-$PORTAINER_PRUNE} ;; + s) HTTPIE_VERIFY_SSL=${"no":-$HTTPIE_VERIFY_SSL} ;; + esac +done -if [ -z ${2+x} ]; then - echo "Error: Parameter #2 missing (path to yaml)" - exit 1 -fi -STACK_YAML_PATH="$2" +# Check required arguments have been provided +check_argument "$PORTAINER_USER" "portainer user" "PORTAINER_USER" "u" +check_argument "$PORTAINER_PASSWORD" "portainer password" "PORTAINER_PASSWORD" "p" +check_argument "$PORTAINER_URL" "portainer url" "PORTAINER_URL" "l" +check_argument "$PORTAINER_STACK_NAME" "portainer stack name" "PORTAINER_STACK_NAME" "n" +check_argument "$DOCKER_COMPOSE_FILE" "docker compose file" "DOCKER_COMPOSE_FILE" "c" + +STACK_NAME=$PORTAINER_STACK_NAME +STACK_YAML_PATH=$DOCKER_COMPOSE_FILE STACK_YAML_CONTENT=$(cat "$STACK_YAML_PATH")