2 # Deployment script for MSO lab
3 # ===================================================
4 # Available parameters :
6 # env DOCKER_HOST (optional)
7 # | sets the docker host to be used if not local unix socket
9 # env MSO_CONFIG_UPDATES (optional)
10 # | json structure that matches volumes/mso/chef-config/mso-docker.json
11 # | elements whose value needs to be updated before the deployment
14 # env MSO_DOCKER_IMAGE_VERSION
15 # | json structure that matches volumes/mso/chef-config/mso-docker.json
16 # | elements whose value needs to be updated before the deployment
18 ################################### Functions definition ################################
22 echo "Deploying with local images, not pulling them from Nexus."
25 if [ "$#" -ne 6 ] & [ ! $NO_NEXUS ]; then
26 echo "Usage: deploy.sh <NEXUS_HOST_MSO:NEXUS_PORT_MSO> <NEXUS_LOGIN_MSO> <NEXUS_PASSWORD_MSO> <NEXUS_HOST_MARIADB:NEXUS_PORT_MARIADB> <NEXUS_LOGIN_MARIADB> <NEXUS_PASSWORD_MARIADB>
27 - env DOCKER_HOST (optional)
28 sets the docker host to be used if not local unix socket
30 - env MSO_DOCKER_IMAGE_VERSION (required)
31 sets the mso docker image version
33 - env MSO_CONFIG_UPDATES (optional)
34 json structure that matches volumes/mso/chef-config/mso-docker.json
35 elements whose value needs to be updated before the deployment
40 if [ -z "$MSO_DOCKER_IMAGE_VERSION" ] & [ ! $NO_NEXUS ]; then
41 echo "Env variable MSO_DOCKER_IMAGE_VERSION must be SET to a version before running this script"
45 NEXUS_DOCKER_REPO_MSO=$1
48 NEXUS_DOCKER_REPO_MARIADB=$4
49 NEXUS_USERNAME_MARIADB=$5
50 NEXUS_PASSWD_MARIADB=$6
54 function init_docker_command() {
55 if [ -z ${DOCKER_HOST+x} ];
58 LBL_DOCKER_HOST="local docker using unix socket"
60 DOCKER_CMD="docker -H ${DOCKER_HOST}"
61 LBL_DOCKER_HOST="(remote) docker using ${DOCKER_HOST}"
64 if [ -f "/opt/docker/docker-compose" ];
66 DOCKER_COMPOSE_CMD="/opt/docker/docker-compose"
68 DOCKER_COMPOSE_CMD="docker-compose"
71 echo "docker command: ${LBL_DOCKER_HOST}"
74 function container_name() {
76 BASE=$(echo $(basename `pwd`) | sed "s/[^a-z0-9]//i" | tr [:upper:] [:lower:])
77 echo ${BASE}_${SERVICE}_1
80 function update_json_config() {
81 if [ -n "$MSO_CONFIG_UPDATES" ];
83 chmod u+x $SCRIPT_DIR/json_updater.py
84 echo $MSO_CONFIG_UPDATES | $SCRIPT_DIR/json_updater.py $SCRIPT_DIR/volumes/mso/chef-config/mso-docker.json
85 echo "MSO docker JSON updated"
90 function pull_docker_images() {
91 echo "Using Nexus for MSO: $NEXUS_DOCKER_REPO_MSO (user "$NEXUS_USERNAME_MSO")"
93 $DOCKER_CMD login -u $NEXUS_USERNAME_MSO -p $NEXUS_PASSWD_MSO $NEXUS_DOCKER_REPO_MSO
94 $DOCKER_CMD login -u $NEXUS_USERNAME_MARIADB -p $NEXUS_PASSWD_MARIADB $NEXUS_DOCKER_REPO_MARIADB
97 $DOCKER_CMD pull $NEXUS_DOCKER_REPO_MSO/openecomp/mso:$MSO_DOCKER_IMAGE_VERSION
98 $DOCKER_CMD tag $NEXUS_DOCKER_REPO_MSO/openecomp/mso:$MSO_DOCKER_IMAGE_VERSION openecomp/mso:latest
99 $DOCKER_CMD rmi $NEXUS_DOCKER_REPO_MSO/openecomp/mso:$MSO_DOCKER_IMAGE_VERSION
101 echo "Using Nexus for MARIADB: $NEXUS_DOCKER_REPO_MARIADB (user "$NEXUS_USERNAME_MARIADB")"
102 $DOCKER_CMD pull $NEXUS_DOCKER_REPO_MARIADB/mariadb:10.1.11
103 $DOCKER_CMD tag $NEXUS_DOCKER_REPO_MARIADB/mariadb:10.1.11 mariadb:10.1.11
104 $DOCKER_CMD rmi $NEXUS_DOCKER_REPO_MARIADB/mariadb:10.1.11
108 function wait_for_mariadb() {
113 # wait for the real startup
114 AMOUNT_STARTUP=$($DOCKER_CMD logs ${CONTAINER_NAME} 2>&1 | grep 'mysqld: ready for connections.' | wc -l)
115 while [[ ${AMOUNT_STARTUP} -lt 2 ]];
117 echo "Waiting for '$CONTAINER_NAME' deployment to finish ..."
118 AMOUNT_STARTUP=$($DOCKER_CMD logs ${CONTAINER_NAME} 2>&1 | grep 'mysqld: ready for connections.' | wc -l)
119 if [ "$TIMEOUT" = "0" ];
121 echo "ERROR: Mariadb deployment failed."
129 ################################### Script entry - Starting CODE ################################
130 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
134 if [ ! $NO_NEXUS ]; then
138 # don't remove the containers,no cleanup
139 #$DOCKER_COMPOSE_CMD stop
140 #$DOCKER_COMPOSE_CMD rm -f -v
143 #Running docker-compose up -d starts the containers in the background and leaves them running.
144 #If there are existing containers for a service, and the service’s configuration or image was changed after the container’s creation, docker-compose up picks up the changes by stopping and recreating the containers (preserving mounted volumes). To prevent Compose from picking up changes, use the --no-recreate flag.
145 #If you want to force Compose to stop and recreate all containers, use the --force-recreate flag.
146 $DOCKER_COMPOSE_CMD up -d --no-recreate mariadb
147 CONTAINER_NAME=$(container_name mariadb)
148 wait_for_mariadb $CONTAINER_NAME
149 $DOCKER_COMPOSE_CMD up -d mso