#!/bin/bash
set -e

#AI框架镜像版本号
TENSORFLOW_GPU_TAG=2.16.2-cuda12.3-py311-ubuntu22.04-v3.6
PYTORCH_GPU_TAG=2.3.1-cuda12.1-cudnn8-py310-ubuntu22.04-v3.6
PYTORCH_SERVING_GPU_TAG=0.13.0-gpu
PYTORCH_SERVING_TAG=0.10.0
TENSORFLOW_SERVING_GPU_TAG=0.13.0-gpu
TENSORFLOW_SERVING_TAG=0.10.0-tf2.11.0
#CONDA_TAG=cuda12.3-ubuntu20.04-py310-v3.6
#HOROVOD_NVTABULAR_TAG=0.28.0-ubuntu-20.04-py38-v3.6
#LLAMA2_TAG=v7
#PADDLE_GPU_TAG=2.6.1-ubuntu22.04-py310-cuda12.0-v3.6
#PADDLESERVER_TAG=v0.10.0
#STABLEDIFFUSION_TAG=train-v4
#HOROVOD_GPU_TAG=0.25-cuda11.4-py38
#KERAS_GPU_TAG=2.6.0-cuda11.2-cudnn8.1
#MXNET_GPU_TAG=1.9.0-cuda11.2-cudnn8.1
#TENSORFLOW_TAG=2.5.1
AI_EXPLORER_TAG=v1.10
#LABELME_TAG=8eae580062bb
ADAPT_JOB_TAG=v3.6
LABELSTUDIO_TAG=v1.8.0

#工作目录
BASE=/opt/ai-deployer
#线上镜像仓库地址
REGISTRY_URL=$(grep -E 'REGISTRY_URL' $BASE/ai.config|cut -d'=' -f2)
REGISTRY_DOMAIN=${REGISTRY_URL#*//}

#本地镜像仓库地址
HARBOR_IP=$(grep -r 'HARBOR_DOMAIN' $BASE/ai.config |cut -d'=' -f2|awk '{print $1}')
HARBOR_PORT=$(grep -r 'HARBOR_NODE_PORT' $BASE/ai.config |cut -d'=' -f2|awk '{print $1}')
HARBOR_ADMIN_PASSWORD=$(grep -r 'HARBOR_ADMIN_PASSWORD' $BASE/ai.config |cut -d'=' -f2|awk '{print $1}')
REGISTRY_LOCAL="$HARBOR_IP:$HARBOR_PORT"
#从线上镜像仓库拉取镜像并推送至本地镜像仓库
docker pull $REGISTRY_DOMAIN/ai/ai-explorer:$AI_EXPLORER_TAG
docker tag $REGISTRY_DOMAIN/ai/ai-explorer:$AI_EXPLORER_TAG  $REGISTRY_LOCAL/ai/ai-explorer:$AI_EXPLORER_TAG
docker push $REGISTRY_LOCAL/ai/ai-explorer:$AI_EXPLORER_TAG

docker pull $REGISTRY_DOMAIN/ai/label-studio:$LABELSTUDIO_TAG
docker tag $REGISTRY_DOMAIN/ai/label-studio:$LABELSTUDIO_TAG $REGISTRY_LOCAL/ai/label-studio:$LABELSTUDIO_TAG
docker push $REGISTRY_LOCAL/ai/label-studio:$LABELSTUDIO_TAG

docker pull $REGISTRY_DOMAIN/ai/adapt-job:$ADAPT_JOB_TAG
docker tag $REGISTRY_DOMAIN/ai/adapt-job:$ADAPT_JOB_TAG $REGISTRY_LOCAL/ai/adapt-job:$ADAPT_JOB_TAG
docker push $REGISTRY_LOCAL/ai/adapt-job:$ADAPT_JOB_TAG

docker pull $REGISTRY_DOMAIN/frame_system/tensorflow-gpu:$TENSORFLOW_GPU_TAG
docker tag $REGISTRY_DOMAIN/frame_system/tensorflow-gpu:$TENSORFLOW_GPU_TAG  $REGISTRY_LOCAL/frame_system/tensorflow-gpu:$TENSORFLOW_GPU_TAG
docker push $REGISTRY_LOCAL/frame_system/tensorflow-gpu:$TENSORFLOW_GPU_TAG

docker pull $REGISTRY_DOMAIN/frame_system/pytorch-gpu:$PYTORCH_GPU_TAG
docker tag $REGISTRY_DOMAIN/frame_system/pytorch-gpu:$PYTORCH_GPU_TAG  $REGISTRY_LOCAL/frame_system/pytorch-gpu:$PYTORCH_GPU_TAG
docker push $REGISTRY_LOCAL/frame_system/pytorch-gpu:$PYTORCH_GPU_TAG

docker pull $REGISTRY_DOMAIN/frame_system/pytorch-serving:$PYTORCH_SERVING_GPU_TAG
docker tag $REGISTRY_DOMAIN/frame_system/pytorch-serving:$PYTORCH_SERVING_GPU_TAG $REGISTRY_LOCAL/frame_system/pytorch-serving:$PYTORCH_SERVING_GPU_TAG
docker push $REGISTRY_LOCAL/frame_system/pytorch-serving:$PYTORCH_SERVING_GPU_TAG

docker pull $REGISTRY_DOMAIN/frame_system/pytorch-serving:$PYTORCH_SERVING_TAG
docker tag $REGISTRY_DOMAIN/frame_system/pytorch-serving:$PYTORCH_SERVING_TAG $REGISTRY_LOCAL/frame_system/pytorch-serving:$PYTORCH_SERVING_TAG
docker push $REGISTRY_LOCAL/frame_system/pytorch-serving:$PYTORCH_SERVING_TAG

docker pull $REGISTRY_DOMAIN/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_GPU_TAG
docker tag $REGISTRY_DOMAIN/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_GPU_TAG $REGISTRY_LOCAL/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_GPU_TAG
docker push $REGISTRY_LOCAL/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_GPU_TAG

docker pull $REGISTRY_DOMAIN/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_TAG
docker tag $REGISTRY_DOMAIN/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_TAG $REGISTRY_LOCAL/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_TAG
docker push $REGISTRY_LOCAL/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_TAG

#docker pull $REGISTRY_DOMAIN/frame_system/conda:$CONDA_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/conda:$CONDA_TAG $REGISTRY_LOCAL/frame_system/conda:$CONDA_TAG
#docker push $REGISTRY_LOCAL/frame_system/conda:$CONDA_TAG

#docker pull $REGISTRY_DOMAIN/frame_system/horovod-nvtabular:$HOROVOD_NVTABULAR_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/horovod-nvtabular:$HOROVOD_NVTABULAR_TAG $REGISTRY_LOCAL/frame_system/horovod-nvtabular:$HOROVOD_NVTABULAR_TAG
#docker push $REGISTRY_LOCAL/frame_system/horovod-nvtabular:$HOROVOD_NVTABULAR_TAG

#docker pull $REGISTRY_DOMAIN/frame_system/llama2:$LLAMA2_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/llama2:$LLAMA2_TAG $REGISTRY_LOCAL/frame_system/llama2:$LLAMA2_TAG
#docker push $REGISTRY_LOCAL/frame_system/llama2:$LLAMA2_TAG

#docker pull $REGISTRY_DOMAIN/frame_system/paddle-gpu:$PADDLE_GPU_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/paddle-gpu:$PADDLE_GPU_TAG $REGISTRY_LOCAL/frame_system/paddle-gpu:$PADDLE_GPU_TAG
#docker push $REGISTRY_LOCAL/frame_system/paddle-gpu:$PADDLE_GPU_TAG

#docker pull $REGISTRY_DOMAIN/frame_system/paddleserver:$PADDLESERVER_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/paddleserver:$PADDLESERVER_TAG $REGISTRY_LOCAL/frame_system/paddleserver:$PADDLESERVER_TAG
#docker push $REGISTRY_LOCAL/frame_system/paddleserver:$PADDLESERVER_TAG

#docker pull $REGISTRY_DOMAIN/frame_system/stablediffusion:$STABLEDIFFUSION_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/stablediffusion:$STABLEDIFFUSION_TAG $REGISTRY_LOCAL/frame_system/stablediffusion:$STABLEDIFFUSION_TAG
#docker push $REGISTRY_LOCAL/frame_system/stablediffusion:$STABLEDIFFUSION_TAG

#从线上镜像仓库拉取镜像
#docker pull $REGISTRY_DOMAIN/ai/labelme:$LABELME_TAG
#docker pull $REGISTRY_DOMAIN/frame_system/horovod-gpu:$HOROVOD_GPU_TAG
#docker pull $REGISTRY_DOMAIN/frame_system/keras-gpu:$KERAS_GPU_TAG
#docker pull $REGISTRY_DOMAIN/frame_system/mxnet-gpu:$MXNET_GPU_TAG
#docker pull $REGISTRY_DOMAIN/frame_system/tensorflow:$TENSORFLOW_TAG

#将镜像标记为本地镜像仓库
#docker tag $REGISTRY_DOMAIN/ai/labelme:$LABELME_TAG  $REGISTRY_LOCAL/ai/labelme:$LABELME_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/horovod-gpu:$HOROVOD_GPU_TAG  $REGISTRY_LOCAL/frame_system/horovod-gpu:$HOROVOD_GPU_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/keras-gpu:$KERAS_GPU_TAG  $REGISTRY_LOCAL/frame_system/keras-gpu:$KERAS_GPU_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/mxnet-gpu:$MXNET_GPU_TAG  $REGISTRY_LOCAL/frame_system/mxnet-gpu:$MXNET_GPU_TAG
#docker tag $REGISTRY_DOMAIN/frame_system/tensorflow:$TENSORFLOW_TAG  $REGISTRY_LOCAL/frame_system/tensorflow:$TENSORFLOW_TAG

#登录本地镜像仓库
docker login $REGISTRY_LOCAL -u admin -p $HARBOR_ADMIN_PASSWORD

#推送镜像至本地镜像仓库
#docker push $REGISTRY_LOCAL/ai/labelme:$LABELME_TAG
#docker push $REGISTRY_LOCAL/frame_system/horovod-gpu:$HOROVOD_GPU_TAG
#docker push $REGISTRY_LOCAL/frame_system/keras-gpu:$KERAS_GPU_TAG
#docker push $REGISTRY_LOCAL/frame_system/mxnet-gpu:$MXNET_GPU_TAG
#docker push $REGISTRY_LOCAL/frame_system/tensorflow:$TENSORFLOW_TAG

docker rmi $REGISTRY_DOMAIN/frame_system/tensorflow-gpu:$TENSORFLOW_GPU_TAG
docker rmi $REGISTRY_DOMAIN/frame_system/pytorch-gpu:$PYTORCH_GPU_TAG
docker rmi $REGISTRY_DOMAIN/frame_system/pytorch-serving:$PYTORCH_SERVING_GPU_TAG
docker rmi $REGISTRY_DOMAIN/frame_system/pytorch-serving:$PYTORCH_SERVING_TAG
docker rmi $REGISTRY_DOMAIN/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_GPU_TAG
docker rmi $REGISTRY_DOMAIN/frame_system/tensorflow-serving:$TENSORFLOW_SERVING_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/conda:$CONDA_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/horovod-nvtabular:$HOROVOD_NVTABULAR_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/llama2:$LLAMA2_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/paddle-gpu:$PADDLE_GPU_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/paddleserver:$PADDLESERVER_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/stablediffusion:$STABLEDIFFUSION_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/horovod-gpu:$HOROVOD_GPU_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/keras-gpu:$KERAS_GPU_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/mxnet-gpu:$MXNET_GPU_TAG
#docker rmi $REGISTRY_DOMAIN/frame_system/tensorflow:$TENSORFLOW_TAG
docker rmi $REGISTRY_DOMAIN/ai/ai-explorer:$AI_EXPLORER_TAG
#docker rmi $REGISTRY_DOMAIN/ai/labelme:$LABELME_TAG
docker rmi $REGISTRY_DOMAIN/ai/label-studio:$LABELSTUDIO_TAG
docker rmi $REGISTRY_DOMAIN/ai/adapt-job:$ADAPT_JOB_TAG

#完成
echo "######已拉取镜像至本地仓库并设置标签######\n"
touch /mnt/got-frame-images
#杀死后台进程
ps -ef | grep "get-frame-images" | grep -v grep | awk '{print $2}' | xargs kill -s 9
