diff --git a/_functions.sh b/_functions.sh index 7e1f1f78..2254d88f 100755 --- a/_functions.sh +++ b/_functions.sh @@ -207,22 +207,28 @@ initialize_product_settings() { # ${PRODUCT_BRANCH} is computed from ${PRODUCT_VERSION} and is equal to the version up to the latest dot # and with x added. ex : 3.5.0-M4-SNAPSHOT => 3.5.x, 1.1.6-SNAPSHOT => 1.1.x - env_var PRODUCT_BRANCH `expr "${PRODUCT_VERSION}" : '\([0-9]*\.[0-9]*\).*'`".x" - env_var PRODUCT_MAJOR_BRANCH `expr "${PRODUCT_VERSION}" : '\([0-9]*\).*'`".x" - configurable_env_var "INSTANCE_ID" "" + if [[ -v PRODUCT_VERSION ]]; then + env_var PRODUCT_BRANCH `expr "${PRODUCT_VERSION}" : '\([0-9]*\.[0-9]*\).*'`".x" + env_var PRODUCT_MAJOR_BRANCH `expr "${PRODUCT_VERSION}" : '\([0-9]*\).*'`".x" + configurable_env_var "INSTANCE_ID" "" - if [ -z "${INSTANCE_ID}" ]; then - env_var "INSTANCE_KEY" "${PRODUCT_NAME}-${PRODUCT_VERSION}" - else - env_var "INSTANCE_KEY" "${PRODUCT_NAME}-${PRODUCT_VERSION}-${INSTANCE_ID}" + if [ -z "${INSTANCE_ID}" ]; then + env_var "INSTANCE_KEY" "${PRODUCT_NAME}-${PRODUCT_VERSION}" + else + env_var "INSTANCE_KEY" "${PRODUCT_NAME}-${PRODUCT_VERSION}-${INSTANCE_ID}" + fi fi + # docker image should have INSTANCE_KEY + if [ -n "${DEPLOYMENT_DOCKER_IMAGE}" ]; then + env_var "INSTANCE_KEY" "docker-${DEPLOYMENT_DOCKER_IMAGE}-${DOCKER_IMAGE_VERSION}" + fi # validate additional parameters case "${ACTION}" in start | stop | restart | undeploy | deploy | download-dataset) # Mandatory env vars. They need to be defined before launching the script validate_env_var "PRODUCT_NAME" - validate_env_var "PRODUCT_VERSION" + configurable_env_var "PRODUCT_VERSION" "" configurable_env_var "INSTANCE_ID" "" # Defaults values we can override by product/branch/version @@ -347,6 +353,11 @@ initialize_product_settings() { # Validate product and load artifact details # Be careful, this id should be no longer than 10 (because of mysql user name limit) case "${PRODUCT_NAME}" in + docker) + env_var PRODUCT_DESCRIPTION "Docker Image dep" + env_var DEPLOYMENT_DATABASE_ENABLED false + env_var DEPLOYMENT_ES_ENABLED false + ;; gatein) env_var PRODUCT_DESCRIPTION "GateIn Community edition" case "${PRODUCT_BRANCH}" in @@ -1174,46 +1185,50 @@ do_deploy() { env_var "DEPLOYMENT_CMIS_HOST" "${DEPLOYMENT_APACHE_VHOST_ALIAS}" fi + if [ "${PRODUCT_NAME}" == "docker" ]; then + echo_info "Deploying Docker image ${INSTANCE_DESCRIPTION} ..." + ${DOCKER_CMD} pull ${DEPLOYMENT_DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION} - echo_info "Deploying server ${INSTANCE_DESCRIPTION} ..." + else + echo_info "Deploying server ${INSTANCE_DESCRIPTION} ..." - do_download_server - if [ -e "${ADT_CONF_DIR}/${INSTANCE_KEY}.${ACCEPTANCE_HOST}" ]; then - # Stop the server - do_stop - fi - if [ "${DEPLOYMENT_MODE}" == "KEEP_DATA" ]; then - echo_info "Archiving existing data ${INSTANCE_DESCRIPTION} ..." - _tmpdir=`mktemp -d -t archive-data.XXXXXXXXXX` || exit 1 - echo_info "Using temporary directory ${_tmpdir}" - if [ ! -e "${ADT_CONF_DIR}/${INSTANCE_KEY}.${ACCEPTANCE_HOST}" ]; then - echo_warn "This instance wasn't deployed before. Nothing to keep." - mkdir -p ${_tmpdir}/$(basename ${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR}) - do_create_database - do_create_chat_database - do_create_es - do_create_onlyoffice - do_create_cmis - else - # Use a subshell to not expose settings loaded from the deployment descriptor - ( - # The server have been already deployed. - # We load its settings from the configuration - do_load_deployment_descriptor - if [ -d "${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR}" ]; then - mv ${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR} ${_tmpdir} - else + do_download_server + if [ -e "${ADT_CONF_DIR}/${INSTANCE_KEY}.${ACCEPTANCE_HOST}" ]; then + # Stop the server + do_stop + fi + if [ "${DEPLOYMENT_MODE}" == "KEEP_DATA" ]; then + echo_info "Archiving existing data ${INSTANCE_DESCRIPTION} ..." + _tmpdir=`mktemp -d -t archive-data.XXXXXXXXXX` || exit 1 + echo_info "Using temporary directory ${_tmpdir}" + if [ ! -e "${ADT_CONF_DIR}/${INSTANCE_KEY}.${ACCEPTANCE_HOST}" ]; then + echo_warn "This instance wasn't deployed before. Nothing to keep." mkdir -p ${_tmpdir}/$(basename ${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR}) do_create_database do_create_chat_database do_create_es do_create_onlyoffice do_create_cmis + else + # Use a subshell to not expose settings loaded from the deployment descriptor + ( + # The server have been already deployed. + # We load its settings from the configuration + do_load_deployment_descriptor + if [ -d "${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR}" ]; then + mv ${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR} ${_tmpdir} + else + mkdir -p ${_tmpdir}/$(basename ${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR}) + do_create_database + do_create_chat_database + do_create_es + do_create_onlyoffice + do_create_cmis + fi + ) fi - ) + echo_info "Done." fi - echo_info "Done." - fi do_unpack_server @@ -1258,6 +1273,8 @@ do_deploy() { esac # Hack do_configure_chat + + fi do_configure_apache do_create_deployment_descriptor echo_info "Server deployed" @@ -1272,129 +1289,138 @@ do_start() { # The server is supposed to be already deployed. # We load its settings from the configuration do_load_deployment_descriptor - echo_info "Starting server ${INSTANCE_DESCRIPTION} ..." - chmod 755 ${DEPLOYMENT_DIR}/bin/*.sh - mkdir -p $(dirname ${DEPLOYMENT_LOG_PATH}) - cd `dirname ${DEPLOYMENT_DIR}/${DEPLOYMENT_SERVER_SCRIPT}` - - # We need to backup existing logs if they already exist - backup_file $(dirname ${DEPLOYMENT_LOG_PATH}) "${DEPLOYMENT_SERVER_LOG_FILE}" - do_start_onlyoffice - do_start_cmis - do_start_database - do_start_es - do_start_chat_server + if [ "${PRODUCT_NAME}" == "docker" ]; then + echo_info "Starting docker container ${INSTANCE_DESCRIPTION} ..." + echo_info "Starting docker container ${INSTANCE_KEY} ..." + ${DOCKER_CMD} run -d --name="${INSTANCE_KEY}" -p "127.0.0.1:${ACCEPTANCE_PORT}:${DEPLOYMENT_HTTP_PORT}" ${DEPLOYMENT_DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION} - # We need this variable for the setenv - export DEPLOYMENT_CHAT_SERVER_PORT - - # We need this variable for the setenv - export DEPLOYMENT_ONLYOFFICE_HTTP_PORT - export DEPLOYMENT_CMIS_HTTP_PORT + else - case ${DEPLOYMENT_APPSRV_TYPE} in - tomcat) - END_STARTUP_MSG="Server startup in" - CATALINA_OPTS="" - - if [ ! -f "${DEPLOYMENT_DIR}/bin/setenv-local.sh" ]; then - export CATALINA_HOME=${DEPLOYMENT_DIR} - export CATALINA_PID=${DEPLOYMENT_PID_FILE} - # JVM - CATALINA_OPTS="${CATALINA_OPTS} -XX:+HeapDumpOnOutOfMemoryError" - CATALINA_OPTS="${CATALINA_OPTS} -XX:HeapDumpPath="$(dirname ${DEPLOYMENT_LOG_PATH}) - # JMX - CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote=true" - CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.ssl=false" - CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.password.file=${DEPLOYMENT_DIR}/conf/jmxremote.password" - CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.access.file=${DEPLOYMENT_DIR}/conf/jmxremote.access" - CATALINA_OPTS="${CATALINA_OPTS} -Djava.rmi.server.hostname=${DEPLOYMENT_EXT_HOST}" - # Email - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.domain.url=${DEPLOYMENT_URL}" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.from=noreply+acceptance@exoplatform.com" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.username=" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.password=" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.host=localhost" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.port=25" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.starttls.enable=false" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.auth=false" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.socketFactory.port=" - CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.socketFactory.class=" - # JOD Server - CATALINA_OPTS="${CATALINA_OPTS} -Dwcm.jodconverter.portnumbers=${DEPLOYMENT_JOD_CONVERTER_PORTS}" - # CRaSH - CATALINA_OPTS="${CATALINA_OPTS} -Dcrash.telnet.port=${DEPLOYMENT_CRASH_TELNET_PORT}" - CATALINA_OPTS="${CATALINA_OPTS} -Dcrash.ssh.port=${DEPLOYMENT_CRASH_SSH_PORT}" - # Elasticsearch - CATALINA_OPTS="${CATALINA_OPTS} -Des.http.port=${DEPLOYMENT_ES_HTTP_PORT}" - CATALINA_OPTS="${CATALINA_OPTS} -Dexo.es.index.server.url=http://127.0.0.1:${DEPLOYMENT_ES_HTTP_PORT}" - CATALINA_OPTS="${CATALINA_OPTS} -Dexo.es.search.server.url=http://127.0.0.1:${DEPLOYMENT_ES_HTTP_PORT}" - CATALINA_OPTS="${CATALINA_OPTS} -Des.path.data==${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR}" - export CATALINA_OPTS - export EXO_PROFILES="${EXO_PROFILES}" + echo_info "Starting server ${INSTANCE_DESCRIPTION} ..." + chmod 755 ${DEPLOYMENT_DIR}/bin/*.sh + mkdir -p $(dirname ${DEPLOYMENT_LOG_PATH}) + cd `dirname ${DEPLOYMENT_DIR}/${DEPLOYMENT_SERVER_SCRIPT}` + + # We need to backup existing logs if they already exist + backup_file $(dirname ${DEPLOYMENT_LOG_PATH}) "${DEPLOYMENT_SERVER_LOG_FILE}" + + do_start_onlyoffice + do_start_cmis + do_start_database + do_start_es + do_start_chat_server + + # We need this variable for the setenv + export DEPLOYMENT_CHAT_SERVER_PORT + + # We need this variable for the setenv + export DEPLOYMENT_ONLYOFFICE_HTTP_PORT + export DEPLOYMENT_CMIS_HTTP_PORT + + case ${DEPLOYMENT_APPSRV_TYPE} in + tomcat) + END_STARTUP_MSG="Server startup in" + CATALINA_OPTS="" + + if [ ! -f "${DEPLOYMENT_DIR}/bin/setenv-local.sh" ]; then + export CATALINA_HOME=${DEPLOYMENT_DIR} + export CATALINA_PID=${DEPLOYMENT_PID_FILE} + # JVM + CATALINA_OPTS="${CATALINA_OPTS} -XX:+HeapDumpOnOutOfMemoryError" + CATALINA_OPTS="${CATALINA_OPTS} -XX:HeapDumpPath="$(dirname ${DEPLOYMENT_LOG_PATH}) + # JMX + CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote=true" + CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.ssl=false" + CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.password.file=${DEPLOYMENT_DIR}/conf/jmxremote.password" + CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.access.file=${DEPLOYMENT_DIR}/conf/jmxremote.access" + CATALINA_OPTS="${CATALINA_OPTS} -Djava.rmi.server.hostname=${DEPLOYMENT_EXT_HOST}" + # Email + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.domain.url=${DEPLOYMENT_URL}" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.from=noreply+acceptance@exoplatform.com" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.username=" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.password=" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.host=localhost" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.port=25" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.starttls.enable=false" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.auth=false" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.socketFactory.port=" + CATALINA_OPTS="${CATALINA_OPTS} -Dgatein.email.smtp.socketFactory.class=" + # JOD Server + CATALINA_OPTS="${CATALINA_OPTS} -Dwcm.jodconverter.portnumbers=${DEPLOYMENT_JOD_CONVERTER_PORTS}" + # CRaSH + CATALINA_OPTS="${CATALINA_OPTS} -Dcrash.telnet.port=${DEPLOYMENT_CRASH_TELNET_PORT}" + CATALINA_OPTS="${CATALINA_OPTS} -Dcrash.ssh.port=${DEPLOYMENT_CRASH_SSH_PORT}" + # Elasticsearch + CATALINA_OPTS="${CATALINA_OPTS} -Des.http.port=${DEPLOYMENT_ES_HTTP_PORT}" + CATALINA_OPTS="${CATALINA_OPTS} -Dexo.es.index.server.url=http://127.0.0.1:${DEPLOYMENT_ES_HTTP_PORT}" + CATALINA_OPTS="${CATALINA_OPTS} -Dexo.es.search.server.url=http://127.0.0.1:${DEPLOYMENT_ES_HTTP_PORT}" + CATALINA_OPTS="${CATALINA_OPTS} -Des.path.data==${DEPLOYMENT_DIR}/${DEPLOYMENT_DATA_DIR}" + export CATALINA_OPTS + export EXO_PROFILES="${EXO_PROFILES}" + fi + # Additional settings + export CATALINA_OPTS="${CATALINA_OPTS} ${DEPLOYMENT_OPTS}" + # Startup the server + ${DEPLOYMENT_DIR}/${DEPLOYMENT_SERVER_SCRIPT} start + ;; + jbosseap) + case ${DEPLOYMENT_APPSRV_VERSION:0:1} in + 6) + END_STARTUP_MSG="JBAS01587[45]" + ;; + 7) + END_STARTUP_MSG="WFLYSRV0025" + ;; + *) + echo_error "Invalid JBoss EAP server version \"${DEPLOYMENT_APPSRV_VERSION}\"" + print_usage + exit 1 + ;; + esac + # Additional settings + export JAVA_OPTS="${DEPLOYMENT_OPTS}" + # Startup the server + ${DEPLOYMENT_DIR}/${DEPLOYMENT_SERVER_SCRIPT} > /dev/null 2>&1 & + ;; + *) + echo_error "Invalid application server type \"${DEPLOYMENT_APPSRV_TYPE}\"" + print_usage + exit 1 + ;; + esac + + + # Wait for logs availability + while [ true ]; + do + if [ -e "${DEPLOYMENT_LOG_PATH}" ]; then + break fi - # Additional settings - export CATALINA_OPTS="${CATALINA_OPTS} ${DEPLOYMENT_OPTS}" - # Startup the server - ${DEPLOYMENT_DIR}/${DEPLOYMENT_SERVER_SCRIPT} start - ;; - jbosseap) - case ${DEPLOYMENT_APPSRV_VERSION:0:1} in - 6) - END_STARTUP_MSG="JBAS01587[45]" - ;; - 7) - END_STARTUP_MSG="WFLYSRV0025" - ;; - *) - echo_error "Invalid JBoss EAP server version \"${DEPLOYMENT_APPSRV_VERSION}\"" - print_usage - exit 1 - ;; - esac - # Additional settings - export JAVA_OPTS="${DEPLOYMENT_OPTS}" - # Startup the server - ${DEPLOYMENT_DIR}/${DEPLOYMENT_SERVER_SCRIPT} > /dev/null 2>&1 & - ;; - *) - echo_error "Invalid application server type \"${DEPLOYMENT_APPSRV_TYPE}\"" - print_usage - exit 1 - ;; - esac - - - # Wait for logs availability - while [ true ]; - do - if [ -e "${DEPLOYMENT_LOG_PATH}" ]; then - break - fi - sleep 1 - done - # Display logs - tail -f "${DEPLOYMENT_LOG_PATH}" & - local _tailPID=$! - # Check for the end of startup - set +e - while [ true ]; - do - if grep -q "${END_STARTUP_MSG}" "${DEPLOYMENT_LOG_PATH}"; then - kill ${_tailPID} - wait ${_tailPID} 2> /dev/null - break - fi - sleep 1 - done - set -e - cd - - echo_info "Server started" - echo_info "URL : ${DEPLOYMENT_URL}" - echo_info "Logs : ${DEPLOYMENT_LOG_URL}" - echo_info "JMX : ${DEPLOYMENT_JMX_URL}" - ) + sleep 1 + done + # Display logs + tail -f "${DEPLOYMENT_LOG_PATH}" & + local _tailPID=$! + # Check for the end of startup + set +e + while [ true ]; + do + if grep -q "${END_STARTUP_MSG}" "${DEPLOYMENT_LOG_PATH}"; then + kill ${_tailPID} + wait ${_tailPID} 2> /dev/null + break + fi + sleep 1 + done + set -e + cd - + echo_info "Server started" + echo_info "URL : ${DEPLOYMENT_URL}" + echo_info "Logs : ${DEPLOYMENT_LOG_URL}" + echo_info "JMX : ${DEPLOYMENT_JMX_URL}" + fi + ) } # @@ -1405,6 +1431,9 @@ do_stop() { echo_warn "${PRODUCT_NAME} ${PRODUCT_VERSION} isn't deployed !" echo_warn "The product cannot be stopped" exit 0 + elif [ "${PRODUCT_NAME}" == "docker" ]; then + echo_info "Stopping docker container ${INSTANCE_KEY}" + ensure_docker_container_stopped ${INSTANCE_KEY} else # Use a subshell to not expose settings loaded from the deployment descriptor ( @@ -1526,7 +1555,11 @@ do_undeploy() { do_drop_cmis_data do_drop_chat do_drop_es_data - echo_info "Undeploying server ${PRODUCT_DESCRIPTION} ${PRODUCT_VERSION} ..." + if [ "${PRODUCT_NAME}" == "docker" ]; then + echo_info "Undeploying docker image ${DEPLOYMENT_DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION} ..." + else + echo_info "Undeploying server ${PRODUCT_DESCRIPTION} ${PRODUCT_VERSION} ..." + fi # Delete Awstat config rm -f ${AWSTATS_CONF_DIR}/awstats.${DEPLOYMENT_EXT_HOST}.conf # Delete the vhost @@ -1544,9 +1577,15 @@ do_undeploy() { # close firewall port for Onlyoffice documentserver only if addon was deployed do_ufw_close_port ${DEPLOYMENT_ONLYOFFICE_HTTP_PORT} "OnlyOffice Documentserver HTTP" ${ADT_DEV_MODE} fi + if [ "${PRODUCT_NAME}" == "docker" ]; then + echo_info "Suppress docker container ${INSTANCE_KEY}" + ${DOCKER_CMD} rm ${INSTANCE_KEY} + else echo_info "Server undeployed" + fi # Delete the deployment descriptor - rm ${ADT_CONF_DIR}/${INSTANCE_KEY}.${ACCEPTANCE_HOST} + rm ${ADT_CONF_DIR}/${INSTANCE_KEY}.${ACCEPTANCE_HOST} + ) fi } diff --git a/_functions_es.sh b/_functions_es.sh index 1aab3556..f6120d04 100644 --- a/_functions_es.sh +++ b/_functions_es.sh @@ -16,8 +16,10 @@ elif test "${SCRIPT_DIR:0:1}" != "/"; then fi do_get_es_settings() { - env_var DEPLOYMENT_ES_CONTAINER_NAME "${INSTANCE_KEY}_es" - configurable_env_var DEPLOYMENT_ES_HEAP "512m" + if ${DEPLOYMENT_ES_ENABLED}; then + env_var DEPLOYMENT_ES_CONTAINER_NAME "${INSTANCE_KEY}_es" + configurable_env_var DEPLOYMENT_ES_HEAP "512m" + fi } # diff --git a/adt-dev.sh b/adt-dev.sh index 83df2313..e25d3762 100755 --- a/adt-dev.sh +++ b/adt-dev.sh @@ -100,6 +100,9 @@ Action # Undeploy eXo Platform Enterprise 4.4.0 on MySQL 5.7 ./adt-dev.sh undeploy-all -n plfent -v 4.4.0 -p 200 -d DOCKER_MYSQL:5.7 + + # Deploy Docker image of tomcat 8 + ./adt-dev.sh deploy -n docker -r tomcat:8.0 EOF } @@ -113,7 +116,7 @@ shift # if 1st parameter start with "-" character : print help if [ "${ACTION:0:1}" = "-" ]; then echo "The first parameter must be an ACTION"; print_usage_dev; exit 1; fi -while getopts "n:v:a:C:d:p:ci:l:h" OPTION; do +while getopts "n:v:a:C:d:r:p:ci:l:h" OPTION; do case $OPTION in n) export PRODUCT_NAME=$OPTARG; echo "## NAME = $OPTARG";; v) export PRODUCT_VERSION=$OPTARG; echo "## VERSION = $OPTARG";; @@ -122,6 +125,9 @@ while getopts "n:v:a:C:d:p:ci:l:h" OPTION; do d) export DEPLOYMENT_DATABASE_TYPE=$(echo "${OPTARG}" | cut -f1 -d':'); echo "## DATABASE TYPE = ${DEPLOYMENT_DATABASE_TYPE}" # cut -s to avoid retrieve the database type instead an empty version when there is no ':' on the string export DEPLOYMENT_DATABASE_VERSION=$(echo "${OPTARG}" | cut -s -f2 -d':'); echo "## DATABASE VERSION = ${DEPLOYMENT_DATABASE_VERSION}" ;; + r) export DEPLOYMENT_DOCKER_IMAGE=$(echo "$OPTARG" | cut -f1 -d':'); echo "## DOCKER IMAGE = ${DEPLOYMENT_DOCKER_IMAGE}" + # cut -s to avoid retrieve the docker image version instead a latest version when there is no ':' on the string + export DOCKER_IMAGE_VERSION=$(echo "$OPTARG" | cut -s -f2 -d':'); echo "## DOCKER IMAGE VERSION = ${DOCKER_IMAGE_VERSION}" ;; p) export DEPLOYMENT_PORT_PREFIX=$OPTARG; echo "## PORT PREFIX = $OPTARG";; c) export DEPLOYMENT_CHAT_ENABLED=true;; i) export INSTANCE_ID=$OPTARG; echo "## INSTANCE ID = $OPTARG";;