#!/bin/bash tm=`date +%Y%m%d-%H%M%S` echo "=====================================================" echo "Starting <${tm}>" # set constant variables pmodule=zuul pvport=15100 pport=15100 pnetwork="bridge" pdelete="" pstop="" pip="192.168.3.221" pipmask=24 pmask="192.168.3.1" pnum=2 show_usage="args: [-m, -v, -p, -pn, -d, -s, -ip, -im, -mk, -n]\ [--pmodule, --pvport=, --pport=, --pnetwork=, --pdelete=, --pstop=, --pip=, --pipmask=, --pmask=, --pnum=]" GETOPT_ARGS=`getopt -o m:v:p:d:s:ip:im:mk:pn:n: -al pmodule:,pvport:,pport:,pnetwork:,pdelete:,pstop:,pip:,pipmask:,pmask:,pnum: -- "$@"` # echo "$GETOPT_ARGS" eval set -- "$GETOPT_ARGS" while [ -n "$1" ] do case "$1" in -m|--pmodule) pmodule=$2; shift 2;; -v|--pvport) pvport=$2; shift 2;; -p|--pport) pport=$2; shift 2;; -d|--pdelete) pdelete=$2; shift 2;; -s|--pstop) pstop=$2; shift 2;; -ip|--pip) pip=$2; shift 2;; -im|--pipmask) pipmask=$2; shift 2;; -mk|--pmask) pmask=$2; shift 2;; -pn|--pnetwork) pnetwork=$2; shift 2;; -n|--pnum) pnum=$2; shift 2;; --) break ;; *) echo $1,$2,$show_usage; break ;; esac done if [[ -z $pmodule ]]; then echo $show_usage exit 0 fi base_container_name=${pmodule}-${pport} # get container sn sn=`sudo docker ps -a | grep ${pmodule} | wc -l` echo "Has ${sn} container of ${pmodule}" # get container id # container_id=`sudo docker ps -a | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $1}'` all_container_id=`sudo docker ps -a | grep ${pmodule} | awk -F '[ ]+' '{print $1}' | tr "\n" " " | sed -e 's/,$/\n/'` echo "All container id is ${all_container_id}" gt_container_id=`sudo docker ps -a | grep ${pmodule} | awk 'NR>2' | awk -F '[ ]+' '{print $1}' | tr "\n" " " | sed -e 's/,$/\n/'` echo "Great ${pnum} container id is ${gt_container_id}" # get image name isn=`sudo docker images | grep ${pmodule} | wc -l` echo "Has ${isn} image of ${pmodule}" image_name=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $1}'` # get image latest tag image_tag=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $2}'` # get image latest tag id image_id=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $3}'` all_image_id=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' '{print $3}' | tr "\n" " " | sed -e 's/,$/\n/'` echo "All image id is ${all_image_id}" gt_image_id=`sudo docker images | grep ${pmodule} | awk 'NR>2' | awk -F '[ ]+' '{print $3}' | tr "\n" " " | sed -e 's/,$/\n/'` echo "Great ${pnum} images id is ${gt_image_id}" if [ -n "$pstop" ] && [ -n "$all_container_id" ]; then echo "stop container ${all_container_id}" sudo docker stop ${all_container_id} fi if [ -n "$pdelete" ] && [ -n "$gt_container_id" ]; then echo "remove container ${gt_container_id}" sudo docker rm -f ${gt_container_id} fi if [ -n "$pdelete" ] && [ -n "$gt_image_id" ]; then echo "remove image ${gt_image_id}" sudo docker rmi -f ${gt_image_id} fi # genate docker container start command container_name=${base_container_name}-`cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "` echo "Starting container ${container_name} of image ${image_name}:${image_tag}" if [ "bridge" == "${pnetwork}" ]; then echo "New container's network is bridge." sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network bridge ${image_name}:${image_tag} elif [ "host" == "${pnetwork}" ]; then echo "New container's network is host." sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network host ${image_name}:${image_tag} elif [ "overlay" == "${pnetwork}" ]; then echo "New container's network is overlay." sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network overlay ${image_name}:${image_tag} else echo "New container's network is bridge." sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network bridge ${image_name}:${image_tag} fi container_ip=`sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${container_name}` echo "${container_name} ip $container_ip" # create vnet # sudo pipework br0 ${container_name} ${ip}/${pipmask}@${pmask} # sudo pipework br0 ${container_name} dhcp # sudo docker restart ${container_name}