shell调用Nacos的API完成配置导入
文章目录
- 1、相关API
- 获取token
- 创建你需要的命名空间
- 导入配置
- 2、脚本
1、相关API
获取token
curl -X POST http://$nacosPodIp:8848/nacos/v1/auth/users/login -d "message=true&username=nacos&password=nacos"
创建你需要的命名空间
# 注意$token的替换,这里创建个docker的namespace
curl -X POST http://$nacosPodIp:8848/nacos/v1/console/namespaces -d "accessToken=$token&message=true&customNamespaceId=docker&namespaceName=docker&namespaceDesc=docker"
导入配置
# $token替换为第一步获取到的token
# $nacosConfigFile替换为Nacos配置压缩包的绝对路径
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的服务是否成功启动:
# 这里每隔20s轮询一次,检测到Nacos启动后开始进行导入
checkNacosPodStatus(){
namespace=$1 # 命名空间
echo -e "\033[32m正在等待Nacos启动....\033[0m"
waitTime=0
while true; do
status=`kubectl get po -n $namespace | grep -i nacos-0 | awk '{print $3}'`
if [[ $status == "Running" ]]; then
echo -e "\033[32mNacos启动成功....\033[0m"
break
fi
if [ $waitTime -gt 300 ]; then
echo -e "\033[31mNacos启动超时,自动取消后续的Nacos配置导入操作,请手动导入....\033[0m"
break
exit 1
fi
sleep 20
waitTime=$((waitTime+20))
done
}
如果Nacos启动成功,则开始导入配置。这里可取k8s服务的IP,但Nacos这里用的无头服务,没有固定IP,直接去获取Pod的IP:
nacosPodIp=`kubectl get po -n dmz nacos-0 -o jsonpath='{.status.podIP}'`
完整脚本:
function importNacosConfig(){
echo -e "\033[32m即将导入Nacos配置,准备中....\033[0m"
# nacos无头服务没有固定IP,这里去取podIP
# nacosServiceIp=$(kubectl get svc -n dmz nacos-headless -o jsonpath='{.spec.clusterIP}')
nacosPodIp=`kubectl get po -n dmz nacos-0 -o jsonpath='{.status.podIP}'`
getTokenResult=`curl -X POST http://$nacosPodIp:8848/nacos/v1/auth/users/login -d "message=true&username=nacos&password=nacos"`
token=`echo $getTokenResult | yq -r '.accessToken'`
createNsResult=`curl -X POST http://$nacosPodIp:8848/nacos/v1/console/namespaces -d "accessToken=$token&message=true&customNamespaceId=docker&namespaceName=docker&namespaceDesc=docker"`
if [[ $createNsResult == "true" ]]; then
echo -e "\033[32mNacos命名空间docker创建成功,请输入配置包的绝对地址:\033[0m"
read nacosConfigFile
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"'`
importResult=`echo $importResultJson | yq -r '.message'`
if [[ $importResult == "导入成功" ]]; then
echo -e "\033[32mNacos配置导入完成!可访问https://${YOUR_HOST}:30100/nacos\033[0m"
echo -e "\033[32mNacos请参照部署文档按需修改Nacos配置,键入Y/y表示修改完成:\033[0m"
read editResult
if [[ $editResult == "y" || $editResult == "Y" ]]; then
kubectl delete pod `kubectl get po -n namespace|grep -iEv "web|nacos"|awk '{print$1}'` -n dmz
sleep 60 # 歇60秒,等后端服务重新启动,以加载最新配置
fi
else
echo -e "\033[31mNacos配置导入失败,请手动导入!\033[0m"
fi
else
echo -e "\033[31mNacos命名空间创建失败,请手动创建!\033[0m"
exit 1
fi
echo
}
还没有评论,来说两句吧...