shell调用Nacos的API完成配置导入

心已赠人 2024-04-23 15:51 104阅读 0赞

文章目录

  • 1、相关API
    • 获取token
    • 创建你需要的命名空间
    • 导入配置
  • 2、脚本

1、相关API

获取token

  1. curl -X POST http://$nacosPodIp:8848/nacos/v1/auth/users/login -d "message=true&username=nacos&password=nacos"

创建你需要的命名空间

  1. # 注意$token的替换,这里创建个docker的namespace
  2. curl -X POST http://$nacosPodIp:8848/nacos/v1/console/namespaces -d "accessToken=$token&message=true&customNamespaceId=docker&namespaceName=docker&namespaceDesc=docker"

导入配置

  1. # $token替换为第一步获取到的token
  2. # $nacosConfigFile替换为Nacos配置压缩包的绝对路径
  3. curl --location --request POST 'http://$nacosPodIp:8848/nacos/v1/cs/configs?tenant=&accessToken=$token&username=nacos&import=true&namespace=docker&policy=ABORT' --form 'file=@"$nacosConfigFile"'

2、脚本

背景是用K8S部署了Nacos,相关资源有:

  • nacos-headless
  • sts
  • pod

这里先判断nacos的服务是否成功启动:

  1. # 这里每隔20s轮询一次,检测到Nacos启动后开始进行导入
  2. checkNacosPodStatus(){
  3. namespace=$1 # 命名空间
  4. echo -e "\033[32m正在等待Nacos启动....\033[0m"
  5. waitTime=0
  6. while true; do
  7. status=`kubectl get po -n $namespace | grep -i nacos-0 | awk '{print $3}'`
  8. if [[ $status == "Running" ]]; then
  9. echo -e "\033[32mNacos启动成功....\033[0m"
  10. break
  11. fi
  12. if [ $waitTime -gt 300 ]; then
  13. echo -e "\033[31mNacos启动超时,自动取消后续的Nacos配置导入操作,请手动导入....\033[0m"
  14. break
  15. exit 1
  16. fi
  17. sleep 20
  18. waitTime=$((waitTime+20))
  19. done
  20. }

如果Nacos启动成功,则开始导入配置。这里可取k8s服务的IP,但Nacos这里用的无头服务,没有固定IP,直接去获取Pod的IP:

  1. nacosPodIp=`kubectl get po -n dmz nacos-0 -o jsonpath='{.status.podIP}'`

完整脚本:

  1. function importNacosConfig(){
  2. echo -e "\033[32m即将导入Nacos配置,准备中....\033[0m"
  3. # nacos无头服务没有固定IP,这里去取podIP
  4. # nacosServiceIp=$(kubectl get svc -n dmz nacos-headless -o jsonpath='{.spec.clusterIP}')
  5. nacosPodIp=`kubectl get po -n dmz nacos-0 -o jsonpath='{.status.podIP}'`
  6. getTokenResult=`curl -X POST http://$nacosPodIp:8848/nacos/v1/auth/users/login -d "message=true&username=nacos&password=nacos"`
  7. token=`echo $getTokenResult | yq -r '.accessToken'`
  8. createNsResult=`curl -X POST http://$nacosPodIp:8848/nacos/v1/console/namespaces -d "accessToken=$token&message=true&customNamespaceId=docker&namespaceName=docker&namespaceDesc=docker"`
  9. if [[ $createNsResult == "true" ]]; then
  10. echo -e "\033[32mNacos命名空间docker创建成功,请输入配置包的绝对地址:\033[0m"
  11. read nacosConfigFile
  12. importResultJson=`curl --location --request POST 'http://$nacosPodIp:8848/nacos/v1/cs/configs?tenant=&accessToken=$token&username=nacos&import=true&namespace=docker&policy=ABORT' --form 'file=@"$nacosConfigFile"'`
  13. importResult=`echo $importResultJson | yq -r '.message'`
  14. if [[ $importResult == "导入成功" ]]; then
  15. echo -e "\033[32mNacos配置导入完成!可访问https://${YOUR_HOST}:30100/nacos\033[0m"
  16. echo -e "\033[32mNacos请参照部署文档按需修改Nacos配置,键入Y/y表示修改完成:\033[0m"
  17. read editResult
  18. if [[ $editResult == "y" || $editResult == "Y" ]]; then
  19. kubectl delete pod `kubectl get po -n namespace|grep -iEv "web|nacos"|awk '{print$1}'` -n dmz
  20. sleep 60 # 歇60秒,等后端服务重新启动,以加载最新配置
  21. fi
  22. else
  23. echo -e "\033[31mNacos配置导入失败,请手动导入!\033[0m"
  24. fi
  25. else
  26. echo -e "\033[31mNacos命名空间创建失败,请手动创建!\033[0m"
  27. exit 1
  28. fi
  29. echo
  30. }

发表评论

表情:
评论列表 (有 0 条评论,104人围观)

还没有评论,来说两句吧...

相关阅读