#!/bin/bash # Copyright (c) 2024 xx.Co.Ltd. All rights reserved. # @Author: Muzhi # @Date: 2024-07-28 11:06:31 # @Last Modified by: Muzhi # @Last Modified time: 2024-07-28 11:06:31 LOG_ERROR() { local content=${1} echo -e "\033[31m${content}\033[0m" } LOG_INFO() { local content=${1} echo -e "\033[32m${content}\033[0m" } LOG_WARN() { local content=${1} echo -e "\033[33m${content}\033[0m" } LOG_LINK() { local content=${1} echo -e "\033[4m${content}\033[0m" } LOG_DEBUG() { local content=${1} echo -e "\033[34m${content}\033[0m" } # 顯示指令碼的用法 usage() { echo "Usage: $0 [OPTIONS] --namespace NAMESPACE" echo "Options:" echo "example: bash $0 -e test -s http://192.168.60.49:38848 -n nvpc-apps-01 -u test -p Nvx@1024 -g DEFAULT_GROUP" echo " bash $0 -e test -c nacos.conf" echo " -s | --server NACOS_ADDRESS Specify server address" echo " -n | --namespace NACOS_NAMESPACE Specify namespace" echo " -u | --username NACOS_USERNAME Specify username" echo " -p | --password NACOS_PASSWORD Specify password" echo " -g | --group NACOS_GROUP Specify group" echo " -d | --date DATA_ID Specify data id" echo " -c | --config CONFIG_FILE Specify config file" echo " -e | --env NACOS_ENV Specify env" echo " -v | --verbose Print log" echo " -h | --help Display this help message" exit 1 } # 解析引數 while [[ "$1" != "" ]]; do case $1 in -s | --server ) shift; NACOS_SERVER=$1 ;; -n | --namespace ) shift; NACOS_NAMESPACE=$1 ;; -u | --username ) shift; NACOS_USERNAME=$1 ;; -p | --password ) shift; NACOS_PASSWORD=$1 ;; -g | --group ) shift; NACOS_GROUP=$1 ;; -d | --data ) shift; DATA_ID=$1 ;; -c | --config ) shift; CONFIG_FILE=$1 ;; -e | --env ) shift; NACOS_ENV=$1 ;; -v | --verbose ) VERBOSE=1 ;; -h | --help ) usage ;; * ) echo "Unknown option: $1"; usage ;; esac shift done WORK_PATH=$(cd -P $(dirname $0); pwd) if [ "${NACOS_ENV}" = "" ]; then LOG_ERROR "env not specify" exit 1; fi if [ -n "${CONFIG_FILE}" ]; then if [ ! -f "${WORK_PATH}/env/${NACOS_ENV}/${CONFIG_FILE}" ]; then LOG_ERROR "${CONFIG_FILE} does not exist." exit 1 else source "${WORK_PATH}/env/${NACOS_ENV}/${CONFIG_FILE}" fi fi if [ "${NACOS_SERVER}" = "" -o "${NACOS_USERNAME}" = "" -o "${NACOS_PASSWORD}" = "" -o "${NACOS_GROUP}" = "" ]; then LOG_ERROR "Nacos server param not specify" exit 1; fi LOG_DEBUG "Nacos server: ${NACOS_SERVER}, username: ${NACOS_USERNAME}, namespace: ${NACOS_NAMESPACE}" request_login_result=$(curl -s -X POST "$NACOS_SERVER/nacos/v1/auth/login" -d "username=$NACOS_USERNAME&password=$NACOS_PASSWORD") request_access_token=$(jq -r '.accessToken' <<<"$request_login_result") push_nacos_content(){ data_id=$(basename "$1") nacos_local_content=$(cat "$1") nacos_remote_content=$(curl -s -X GET "$NACOS_SERVER/nacos/v1/cs/configs?accessToken=$request_access_token&tenant=$NACOS_NAMESPACE&dataId=$data_id&group=$NACOS_GROUP") if [ "$nacos_remote_content" != "$nacos_local_content" ]; then request_push_result=$(curl -m 10 -s -X POST "$NACOS_SERVER/nacos/v1/cs/configs" \ -d "accessToken=$request_access_token&tenant=$NACOS_NAMESPACE&dataId=$data_id&group=$NACOS_GROUP&type=yaml" \ --data-urlencode "content=$nacos_local_content") if [ "$request_push_result" != "true" ]; then LOG_ERROR "Nacos 配置推送失敗: ${request_push_result}" exit 1 fi else LOG_INFO "Nacos 配置沒有變動" fi } if [ -n "$request_access_token" ]; then data_id_array=$(find "${WORK_PATH}/templates/" -type f -name "*.yml" -exec realpath {} \;) for item in $data_id_array ; do push_nacos_content $item done else LOG_ERROR "Nacos 登陸失敗: ${NACOS_SERVER}, username: ${NACOS_USERNAME}" exit 1 fi