| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/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}
|