pullToLocal.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/bin/bash
  2. # check input
  3. if [ -z "$1" ]; then
  4. echo "*************************************************************************************"
  5. echo
  6. echo " Usage: ./pullToLocal.sh registry.svicloud.com/powercloud/oms/server:V01R01B18-3043"
  7. echo
  8. echo "*************************************************************************************"
  9. echo
  10. exit 1
  11. fi
  12. # if has another process
  13. retry=30
  14. while true; do
  15. ps_count=`ps -ef | grep -v grep | grep ${0#./*} | wc -l`
  16. retry_count=`expr $retry_count + 1`
  17. # 30 times
  18. if [ "$retry_count" -ge $retry ]; then
  19. echo "timeout after 90 seconds, exit."
  20. echo
  21. exit 1
  22. fi
  23. # has other process
  24. if [ $ps_count -ge 3 ] ; then
  25. echo "another process \"${0#./*}\" is running, retry after 3 seconds."
  26. sleep 3
  27. else
  28. break
  29. fi
  30. done
  31. # make a host entry
  32. sed -i '/registry.svicloud.com/d' /etc/hosts
  33. echo "151.106.8.135 registry.svicloud.com" >>/etc/hosts
  34. # add proxy
  35. if ! systemctl show --property=Environment docker | grep -q HTTP_PROXY; then
  36. mkdir -p /etc/systemd/system/docker.service.d/
  37. echo "[Service]" > /etc/systemd/system/docker.service.d/proxy.conf
  38. echo "Environment=\"HTTP_PROXY=http://pc.dongcj.com:1080/\" \"HTTPS_PROXY=http://pc.dongcj.com:1080\"" >> \
  39. /etc/systemd/system/docker.service.d/proxy.conf
  40. systemctl daemon-reload
  41. systemctl restart docker
  42. fi
  43. # login remote repo
  44. retry=5
  45. retry_count=0
  46. while true; do
  47. retry_count=`expr $retry_count + 1`
  48. # 5 times
  49. if [ "$retry_count" -ge $retry ]; then
  50. echo "login failed for 5 times, exit."
  51. echo
  52. exit 1
  53. fi
  54. # login
  55. if docker login -u admin -p "Gocm5]WeqaSufg" registry.svicloud.com &>/dev/null; then
  56. break
  57. else
  58. echo "login to remote registry.svicloud.com $retry_count"
  59. fi
  60. done
  61. # pull the remote image
  62. if docker pull $1; then
  63. echo
  64. # add local registry entry in hosts file
  65. sed -i '/registry.svicloud.com/d' /etc/hosts
  66. echo "192.168.100.23 registry.svicloud.com" >>/etc/hosts
  67. # local repository, so no proxy allowed
  68. if systemctl show --property=Environment docker | grep -q HTTP_PROXY; then
  69. mkdir -p /etc/systemd/system/docker.service.d/
  70. echo > /etc/systemd/system/docker.service.d/proxy.conf
  71. systemctl daemon-reload
  72. systemctl restart docker
  73. fi
  74. echo -n "checking local registry status.."
  75. sleep 1
  76. ping registry.svicloud.com -c 2 &>/dev/null && echo ".ok" || { echo ".failed"; exit 3; }
  77. retry=5
  78. retry_count=0
  79. while true; do
  80. retry_count=`expr $retry_count + 1`
  81. # 5 times
  82. if [ "$retry_count" -ge $retry ]; then
  83. echo "login failed for 5 times, exit."
  84. echo
  85. exit 1
  86. fi
  87. # login
  88. if docker login -u admin -p "Changeme_123" registry.svicloud.com &>/dev/null; then
  89. break
  90. else
  91. echo "login to remote registry.svicloud.com $retry_count"
  92. fi
  93. done
  94. if docker push $1; then
  95. echo "push success"
  96. else
  97. echo "push $1 to local repo failed"
  98. echo
  99. exit 1
  100. fi
  101. else
  102. echo "pull remote image $1 to local failed"
  103. echo
  104. exit 1
  105. fi