#!/bin/bash # check input if [ -z "$1" ]; then echo "*************************************************************************************" echo echo " Usage: ./pullToLocal.sh registry.svicloud.com/powercloud/oms/server:V01R01B18-3043" echo echo "*************************************************************************************" echo exit 1 fi # if has another process retry=30 while true; do ps_count=`ps -ef | grep -v grep | grep ${0#./*} | wc -l` retry_count=`expr $retry_count + 1` # 30 times if [ "$retry_count" -ge $retry ]; then echo "timeout after 90 seconds, exit." echo exit 1 fi # has other process if [ $ps_count -ge 3 ] ; then echo "another process \"${0#./*}\" is running, retry after 3 seconds." sleep 3 else break fi done # make a host entry sed -i '/registry.svicloud.com/d' /etc/hosts echo "151.106.8.135 registry.svicloud.com" >>/etc/hosts # add proxy if ! systemctl show --property=Environment docker | grep -q HTTP_PROXY; then mkdir -p /etc/systemd/system/docker.service.d/ echo "[Service]" > /etc/systemd/system/docker.service.d/proxy.conf echo "Environment=\"HTTP_PROXY=http://pc.dongcj.com:1080/\" \"HTTPS_PROXY=http://pc.dongcj.com:1080\"" >> \ /etc/systemd/system/docker.service.d/proxy.conf systemctl daemon-reload systemctl restart docker fi # login remote repo retry=5 retry_count=0 while true; do retry_count=`expr $retry_count + 1` # 5 times if [ "$retry_count" -ge $retry ]; then echo "login failed for 5 times, exit." echo exit 1 fi # login if docker login -u admin -p "Gocm5]WeqaSufg" registry.svicloud.com &>/dev/null; then break else echo "login to remote registry.svicloud.com $retry_count" fi done # pull the remote image if docker pull $1; then echo # add local registry entry in hosts file sed -i '/registry.svicloud.com/d' /etc/hosts echo "192.168.100.23 registry.svicloud.com" >>/etc/hosts # local repository, so no proxy allowed if systemctl show --property=Environment docker | grep -q HTTP_PROXY; then mkdir -p /etc/systemd/system/docker.service.d/ echo > /etc/systemd/system/docker.service.d/proxy.conf systemctl daemon-reload systemctl restart docker fi echo -n "checking local registry status.." sleep 1 ping registry.svicloud.com -c 2 &>/dev/null && echo ".ok" || { echo ".failed"; exit 3; } retry=5 retry_count=0 while true; do retry_count=`expr $retry_count + 1` # 5 times if [ "$retry_count" -ge $retry ]; then echo "login failed for 5 times, exit." echo exit 1 fi # login if docker login -u admin -p "Changeme_123" registry.svicloud.com &>/dev/null; then break else echo "login to remote registry.svicloud.com $retry_count" fi done if docker push $1; then echo "push success" else echo "push $1 to local repo failed" echo exit 1 fi else echo "pull remote image $1 to local failed" echo exit 1 fi