| #!/bin/bash |
| |
| # Runs VOLTHA using a templatized docker stack file. |
| # We need to use a templatized file to configure a few things that docker doesn't |
| # make configurable through variables right now, namely number of replicas and |
| # volume mounts. This runner script first substites some environment variables |
| # in to the tempated stack file, then runs that stack file. |
| # |
| # Look in the stack file template to see what can be configured through environment |
| # variables - these variable should be set in the environment that runs this script. |
| |
| set -e |
| |
| TAG=${TAG:-latest} |
| STACK_TEMPLATE=${STACK_TEMPLATE:-"voltha-stack.yml.j2"} |
| |
| start () { |
| SWARM_MANAGER_COUNT=$(docker node ls | grep Ready | egrep "(Leader)|(Reachable)" | wc -l | sed -e "s/ //g") |
| if [ $SWARM_MANAGER_COUNT -lt 1 ]; then |
| echo "No swarm managers found. Run 'docker swarm init' to create a new manager" |
| exit 1 |
| fi |
| |
| downloaded=0 |
| if [ ! -f "$STACK_TEMPLATE" ]; then |
| wget https://raw.githubusercontent.com/opencord/voltha/master/compose/voltha-stack.yml.j2 |
| downloaded=1 |
| fi |
| |
| TMP_STACK_FILE=$(mktemp -u) |
| |
| cat $STACK_TEMPLATE 2>&1 | docker run -e CUSTOM_CLI_LABEL=$CUSTOM_CLI_LABEL -e RADIUS_ROOT=$RADIUS_ROOT -e CONSUL_ROOT=$CONSUL_ROOT -e VOLTHA_LOGS=$VOLTHA_LOGS -e SWARM_MANAGER_COUNT=$SWARM_MANAGER_COUNT -e ONOS_CONFIG=$ONOS_CONFIG --rm -i ${REGISTRY}${REPOSITORY}voltha-j2:${TAG} - 2>&1 > $TMP_STACK_FILE |
| docker stack deploy -c $TMP_STACK_FILE voltha |
| |
| rm -f $TMP_STACK_FILE |
| |
| if [ $downloaded -eq 1 ]; then |
| rm -f $STACK_TEMPLATE |
| fi |
| } |
| |
| stop () { |
| docker stack rm voltha |
| } |
| |
| status() { |
| if [ -z "$(docker stack ls | grep voltha)" ]; then |
| echo "Stopped" |
| exit |
| fi |
| |
| STATUS="Running" |
| for i in $(docker service ls --format '{{.Name}}/{{.Replicas}}' | grep "^voltha_" | grep -v voltha_config_push); do |
| NAME=$(echo $i | cut -d/ -f1) |
| HAVE=$(echo $i | cut -d/ -f2) |
| WANT=$(echo $i | cut -d/ -f3) |
| if [ $HAVE -ne $WANT ]; then |
| echo "$NAME not running: $HAVE of $WANT" |
| STATUS="Incomplete" |
| fi |
| done |
| |
| echo $STATUS |
| } |
| |
| case $1 in |
| start) |
| start |
| ;; |
| status) |
| status |
| ;; |
| stop) |
| stop |
| ;; |
| *) |
| echo "Usage: $0 {start|status|stop}" >&2 |
| exit 1 |
| ;; |
| esac |