修正接口参数
This commit is contained in:
parent
30a901b13d
commit
baa5613e83
@ -47,6 +47,7 @@ description: 基于 PAM HOME/NODE 流程执行软件发布、下载、升级、
|
||||
7. 用户要求“只生成脚本”“先给我文件”“不要执行”时,不要触发真实部署。
|
||||
8. Windows 脚本模式默认优先 `deploy.ps1`,不要默认使用 `deploy.bat`。
|
||||
9. 当前目录如果只有文档而没有真实脚本文件,先根据参考实现落地脚本,再决定是否执行。
|
||||
10. `download-cloud` 只负责触发云下载任务;后续必须异步调用进度接口并持续展示状态/进度,直到成功、失败或超时。
|
||||
|
||||
## 统一部署流程
|
||||
|
||||
@ -59,14 +60,14 @@ description: 基于 PAM HOME/NODE 流程执行软件发布、下载、升级、
|
||||
| 2.2 | 上传软件包 | `POST {HOME_BASE_URL}/api/version/upgrade/upload` |
|
||||
| 2.3 | 发布版本 | `PUT {HOME_BASE_URL}/api/version/upgrade/profile?...` |
|
||||
| 3.1 | 获取 Node 地址 | `GET {HOME_BASE_URL}/api/mcp/airport/target-node?airportCode={airportCode}` |
|
||||
| 3.2 | 获取在线工作站 IP | `GET {HOME_BASE_URL}/node_proxy/{airportCode}/api/mcp/version/upgrade/ips?...` |
|
||||
| 3.3 | 下载软件包到 Node | `GET {HOME_BASE_URL}/node_proxy/{airportCode}/api/mcp/version/upgrade/download-cloud?...` |
|
||||
| 3.3b | 轮询下载进度 | `GET .../download-cloud/progress?...` |
|
||||
| 4.1 | 对每个 IP 执行升级 | `POST {HOME_BASE_URL}/node_proxy/{airportCode}/api/mcp/version/upgrade` |
|
||||
| 4.2 | 启动应用 | `POST {HOME_BASE_URL}/node_proxy/{airportCode}/api/mcp/version/upgrade/start-stop` |
|
||||
| 4.3 | 健康检测 | `GET {HOME_BASE_URL}/node_proxy/{airportCode}/api/mcp/version/upgrade/verify?...` |
|
||||
| 4.4 | 下载日志 | `GET {HOME_BASE_URL}/node_proxy/{airportCode}/api/mcp/version/upgrade/log-download?...` |
|
||||
| 4.x | 失败回滚 | `POST {HOME_BASE_URL}/node_proxy/{airportCode}/api/mcp/version/upgrade/rollback` |
|
||||
| 3.2 | 获取在线工作站 IP | `GET {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade/ips?...` |
|
||||
| 3.3 | 下载软件包到 Node | `GET {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade/download-cloud?...` |
|
||||
| 3.3b | 异步轮询并展示下载进度 | `GET {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade/download-cloud/progress?...&versionNumer={versionNumber}` |
|
||||
| 4.1 | 对每个 IP 执行升级 | `POST {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade` |
|
||||
| 4.2 | 启动应用 | `POST {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade/start-stop` |
|
||||
| 4.3 | 健康检测 | `GET {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade/verify?...` |
|
||||
| 4.4 | 下载日志 | `GET {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade/log-download?...` |
|
||||
| 4.x | 失败回滚 | `POST {HOME_BASE_URL}/node-proxy/{airportCode}/api/mcp/version/upgrade/rollback` |
|
||||
|
||||
调用 NODE 侧接口时,始终携带:
|
||||
|
||||
@ -74,6 +75,14 @@ description: 基于 PAM HOME/NODE 流程执行软件发布、下载、升级、
|
||||
- `Target-Node: {NODE_URL}`
|
||||
- `airport-code: {airportCode}`,仅在下载到 NODE 等需要时携带
|
||||
|
||||
`download-cloud/progress` 响应优先读取以下字段:
|
||||
|
||||
- `msg`
|
||||
- `step`
|
||||
- `rateOfProgress`
|
||||
|
||||
当 `msg=success`、`step=DONE`、`rateOfProgress=100` 时,判定云下载完成;其中 `rateOfProgress` 就是下载进度值,应持续展示。
|
||||
|
||||
## MCP 模式
|
||||
|
||||
1. 直接调用 PAM MCP 提供的能力完成上述流程,不生成本地脚本文件。
|
||||
|
||||
@ -28,6 +28,8 @@
|
||||
- `config.txt`
|
||||
- `deploy.sh` 或 `deploy.ps1`
|
||||
- 仅在用户明确要求时再提供 `deploy.bat`
|
||||
7. NODE 侧接口路径统一使用 `node-proxy`;`download-cloud/progress` 需额外携带 `versionNumer`,并以异步轮询方式持续展示下载进度。
|
||||
8. `download-cloud/progress` 的完成判定优先读取 `msg`、`step`、`rateOfProgress`;当 `msg=success`、`step=DONE`、`rateOfProgress=100` 时代表下载完成,其中 `rateOfProgress` 即下载进度值。
|
||||
|
||||
## 0.1 当前实现边界
|
||||
|
||||
@ -213,23 +215,34 @@ poll_progress() {
|
||||
local interval=${3:-2}
|
||||
local retry=0
|
||||
|
||||
log_info "开始轮询进度..."
|
||||
log_info "开始异步轮询下载进度..."
|
||||
|
||||
while [ $retry -lt $max_retries ]; do
|
||||
local response
|
||||
response=$(http_request "GET" "$url")
|
||||
|
||||
local step
|
||||
local msg
|
||||
local progress
|
||||
local status
|
||||
# 尝试解析 JSON,如果失败则可能是网络错误
|
||||
status=$(echo $response | jq -r '.status // .success // ""' 2>/dev/null)
|
||||
local success_flag
|
||||
step=$(echo $response | jq -r '.step // ""' 2>/dev/null)
|
||||
msg=$(echo $response | jq -r '.msg // .message // ""' 2>/dev/null)
|
||||
progress=$(echo $response | jq -r '.rateOfProgress // .progress // .percent // ""' 2>/dev/null)
|
||||
status=$(echo $response | jq -r '.status // ""' 2>/dev/null)
|
||||
success_flag=$(echo $response | jq -r '.success // ""' 2>/dev/null)
|
||||
|
||||
if [ "$status" == "completed" ] || [ "$status" == "true" ]; then
|
||||
if [ -n "$msg" ] || [ -n "$step" ] || [ -n "$progress" ] || [ -n "$status" ] || [ -n "$success_flag" ]; then
|
||||
log_info "异步下载进度: msg=${msg} step=${step} rateOfProgress=${progress} status=${status} success=${success_flag}"
|
||||
fi
|
||||
|
||||
if [ "$step" == "DONE" ] || [ "$status" == "completed" ] || [ "$success_flag" == "true" ] || { [ "$msg" == "success" ] && [ "$progress" == "100" ]; }; then
|
||||
log_info "操作完成"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local error_msg
|
||||
error_msg=$(echo $response | jq -r '.message // ""' 2>/dev/null)
|
||||
error_msg="$msg"
|
||||
|
||||
# 如果 jq 解析失败,说明返回的可能不是 JSON,而是 HTTP 错误页或 curl 错误
|
||||
if [ -z "$error_msg" ] && ! echo "$response" | grep -q "success"; then
|
||||
@ -263,7 +276,7 @@ download_log() {
|
||||
log_info "正在下载 ${ip} 的日志: ${log_name}..."
|
||||
|
||||
# 使用 -o 保存文件,同时保留 stderr 信息以便调试
|
||||
http_request "GET" "${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/log-download?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}&logName=${log_name}" \
|
||||
http_request "GET" "${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/log-download?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}&logName=${log_name}" \
|
||||
"" \
|
||||
"Target-Node:${NODE_URL}" > "$log_file" 2>>"${log_dir}/error_${ip}.log"
|
||||
|
||||
@ -347,7 +360,7 @@ main() {
|
||||
|
||||
# Step 3.2: 获取在线工作站 IP (动态获取)
|
||||
log_info "Step 3.2: 获取在线工作站列表..."
|
||||
local ips_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/ips?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}"
|
||||
local ips_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/ips?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}"
|
||||
|
||||
local ips_response
|
||||
ips_response=$(http_request "GET" "$ips_url" "" "Target-Node:${NODE_URL}")
|
||||
@ -368,7 +381,7 @@ main() {
|
||||
|
||||
# Step 3.3: 下载软件包到 Node
|
||||
log_info "Step 3.3: 下载软件包到 Node..."
|
||||
local download_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud"
|
||||
local download_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud"
|
||||
local download_params="?versionNumber=${VERSION_NUMBER}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&timeOut=${TIMEOUT}"
|
||||
|
||||
http_request "GET" "${download_url}${download_params}" \
|
||||
@ -376,7 +389,7 @@ main() {
|
||||
"airport-code:${AIRPORT_CODE},Target-Node:${NODE_URL}" > /dev/null
|
||||
|
||||
# 轮询下载进度
|
||||
local progress_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud/progress?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}"
|
||||
local progress_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud/progress?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&versionNumer=${VERSION_NUMBER}"
|
||||
poll_progress "$progress_url" 60 2
|
||||
if [ $? -ne 0 ]; then
|
||||
log_error "软件包下载失败"
|
||||
@ -394,7 +407,7 @@ main() {
|
||||
|
||||
# 4.1: 执行升级
|
||||
log_info "Step 4.1: 执行升级..."
|
||||
local upgrade_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade"
|
||||
local upgrade_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade"
|
||||
local upgrade_data="airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&versionNumber=${VERSION_NUMBER}&action=${ACTION_TYPE}&autoStart=false&timeOut=${TIMEOUT}"
|
||||
|
||||
local upgrade_response
|
||||
@ -410,20 +423,20 @@ main() {
|
||||
log_warn "尝试回滚..."
|
||||
|
||||
# 回滚逻辑
|
||||
local rollback_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/rollback"
|
||||
local rollback_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/rollback"
|
||||
local rollback_data="airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&timeOut=${TIMEOUT}"
|
||||
http_request "POST" "$rollback_url" "$rollback_data" "Target-Node:${NODE_URL}" > /dev/null
|
||||
log_warn "已触发回滚"
|
||||
else
|
||||
# 4.2: 启动应用
|
||||
log_info "Step 4.2: 启动应用..."
|
||||
local start_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/start-stop"
|
||||
local start_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/start-stop"
|
||||
local start_data="airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&runstart=true"
|
||||
http_request "POST" "$start_url" "$start_data" "Target-Node:${NODE_URL}" > /dev/null
|
||||
|
||||
# 4.3: 健康检测
|
||||
log_info "Step 4.3: 健康检测..."
|
||||
local verify_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/verify?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}"
|
||||
local verify_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/verify?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}"
|
||||
local verify_response
|
||||
verify_response=$(http_request "GET" "$verify_url" "" "Target-Node:${NODE_URL}")
|
||||
|
||||
@ -437,7 +450,7 @@ main() {
|
||||
|
||||
# 健康检测失败也可触发回滚(可选)
|
||||
log_warn "尝试回滚..."
|
||||
local rollback_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/rollback"
|
||||
local rollback_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/rollback"
|
||||
local rollback_data="airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&timeOut=${TIMEOUT}"
|
||||
http_request "POST" "$rollback_url" "$rollback_data" "Target-Node:${NODE_URL}" > /dev/null
|
||||
else
|
||||
|
||||
@ -386,7 +386,7 @@ function Get-OnlineIps {
|
||||
airportCode = $Config.AIRPORT_CODE
|
||||
})
|
||||
|
||||
$response = Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/ips?$query" -Token $Token -Headers @{
|
||||
$response = Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/ips?$query" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
}
|
||||
|
||||
@ -411,8 +411,9 @@ function Wait-DownloadProgress {
|
||||
applicationName = $Config.APP_NAME
|
||||
moduleName = $Config.MODULE_NAME
|
||||
airportCode = $Config.AIRPORT_CODE
|
||||
versionNumer = $Config.VERSION_NUMBER
|
||||
})
|
||||
$progressUrl = "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/download-cloud/progress?$query"
|
||||
$progressUrl = "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/download-cloud/progress?$query"
|
||||
|
||||
for ($attempt = 0; $attempt -lt 60; $attempt++) {
|
||||
$response = Invoke-PamWebRequest -Method GET -Url $progressUrl -Token $Token -Headers @{
|
||||
@ -421,12 +422,33 @@ function Wait-DownloadProgress {
|
||||
|
||||
$status = Get-ResponseValue -Response $response -Candidates @('status')
|
||||
$successFlag = Get-ResponseValue -Response $response -Candidates @('success')
|
||||
if ($status -eq 'completed' -or $successFlag -eq 'true') {
|
||||
$step = Get-ResponseValue -Response $response -Candidates @('step')
|
||||
$msg = Get-ResponseValue -Response $response -Candidates @('msg')
|
||||
$progressValue = Get-ResponseValue -Response $response -Candidates @('rateOfProgress', 'progress', 'percent', 'data.rateOfProgress', 'data.progress', 'data.percent')
|
||||
$message = Get-ResponseValue -Response $response -Candidates @('message')
|
||||
if (-not $message) { $message = $msg }
|
||||
|
||||
$progressParts = [System.Collections.Generic.List[string]]::new()
|
||||
if ($msg) { $progressParts.Add("msg=$msg") }
|
||||
if ($step) { $progressParts.Add("step=$step") }
|
||||
if ($progressValue) { $progressParts.Add("rateOfProgress=$progressValue") }
|
||||
if ($status) { $progressParts.Add("status=$status") }
|
||||
if ($successFlag) { $progressParts.Add("success=$successFlag") }
|
||||
if ($message -and $message -ne $msg) { $progressParts.Add("message=$message") }
|
||||
|
||||
if ($progressParts.Count -gt 0) {
|
||||
Write-Info ("Step 3.3b: async download progress -> {0}" -f ($progressParts -join ', '))
|
||||
} else {
|
||||
Write-Info ("Step 3.3b: async download progress polling... ({0}/60)" -f ($attempt + 1))
|
||||
}
|
||||
|
||||
if ($step -eq 'DONE' -or $status -eq 'completed' -or $successFlag -eq 'true' -or (($msg -eq 'success') -and ($progressValue -eq '100'))) {
|
||||
return
|
||||
}
|
||||
|
||||
$message = Get-ResponseValue -Response $response -Candidates @('message')
|
||||
if ($message -and $message -match '(?i)fail|error') {
|
||||
if ((@($step, $message, $msg) -join ' ') -match '(?i)fail|error') {
|
||||
if (-not $message) { $message = $step }
|
||||
if (-not $message) { $message = $msg }
|
||||
throw "Node download failed: $message"
|
||||
}
|
||||
|
||||
@ -447,7 +469,7 @@ function Download-CloudToNode {
|
||||
timeOut = $Config.TIMEOUT
|
||||
})
|
||||
|
||||
[void](Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/download-cloud?$query" -Token $Token -Headers @{
|
||||
[void](Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/download-cloud?$query" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
'airport-code' = $Config.AIRPORT_CODE
|
||||
})
|
||||
@ -469,7 +491,7 @@ function Invoke-UpgradeRequest {
|
||||
timeOut = $Config.TIMEOUT
|
||||
})
|
||||
|
||||
Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade" -Token $Token -Headers @{
|
||||
Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
} -Body $body -ContentType 'application/x-www-form-urlencoded'
|
||||
}
|
||||
@ -485,7 +507,7 @@ function Start-Application {
|
||||
runstart = 'true'
|
||||
})
|
||||
|
||||
[void](Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/start-stop" -Token $Token -Headers @{
|
||||
[void](Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/start-stop" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
} -Body $body -ContentType 'application/x-www-form-urlencoded')
|
||||
}
|
||||
@ -501,7 +523,7 @@ function Stop-Application {
|
||||
runstart = 'false'
|
||||
})
|
||||
|
||||
[void](Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/start-stop" -Token $Token -Headers @{
|
||||
[void](Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/start-stop" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
} -Body $body -ContentType 'application/x-www-form-urlencoded')
|
||||
}
|
||||
@ -516,7 +538,7 @@ function Verify-Ip {
|
||||
targetIp = $Ip
|
||||
})
|
||||
|
||||
Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/verify?$query" -Token $Token -Headers @{
|
||||
Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/verify?$query" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
}
|
||||
}
|
||||
@ -540,7 +562,7 @@ function Download-DeployLog {
|
||||
})
|
||||
|
||||
try {
|
||||
[void](Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/log-download?$query" -Token $Token -Headers @{
|
||||
[void](Invoke-PamWebRequest -Method GET -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/log-download?$query" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
} -OutFile $logFile)
|
||||
|
||||
@ -576,7 +598,7 @@ function Invoke-Rollback {
|
||||
moduleName = $Config.MODULE_NAME
|
||||
timeOut = $Config.TIMEOUT
|
||||
})
|
||||
$response = Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node_proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/rollback" -Token $Token -Headers @{
|
||||
$response = Invoke-PamWebRequest -Method POST -Url "$($Config.HOME_BASE_URL)/node-proxy/$($Config.AIRPORT_CODE)/api/mcp/version/upgrade/rollback" -Token $Token -Headers @{
|
||||
'Target-Node' = $NodeUrl
|
||||
} -Body $body -ContentType 'application/x-www-form-urlencoded'
|
||||
|
||||
|
||||
@ -305,6 +305,27 @@ json_value() {
|
||||
'.message')
|
||||
json_get_string_by_key "$input" "message"
|
||||
;;
|
||||
'.msg')
|
||||
json_get_string_by_key "$input" "msg"
|
||||
;;
|
||||
'.step')
|
||||
json_get_string_by_key "$input" "step"
|
||||
;;
|
||||
'.rateOfProgress')
|
||||
json_get_scalar_by_key "$input" "rateOfProgress"
|
||||
;;
|
||||
'.progress')
|
||||
json_get_scalar_by_key "$input" "progress"
|
||||
;;
|
||||
'.percent')
|
||||
json_get_scalar_by_key "$input" "percent"
|
||||
;;
|
||||
'.data.progress')
|
||||
json_get_nested_string_by_key "$input" "data" "progress"
|
||||
;;
|
||||
'.data.percent')
|
||||
json_get_nested_string_by_key "$input" "data" "percent"
|
||||
;;
|
||||
'.hashCode // .data.hashCode')
|
||||
local value
|
||||
value="$(json_get_string_by_key "$input" "hashCode")"
|
||||
@ -624,7 +645,7 @@ get_online_ips() {
|
||||
local response
|
||||
local ip_lines
|
||||
response=$(http_request "GET" \
|
||||
"${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/ips?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}" \
|
||||
"${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/ips?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}" \
|
||||
"" \
|
||||
"" \
|
||||
"Target-Node: ${NODE_URL}") || return 1
|
||||
@ -643,7 +664,7 @@ get_online_ips() {
|
||||
}
|
||||
|
||||
poll_download_progress() {
|
||||
local progress_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud/progress?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}"
|
||||
local progress_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud/progress?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&versionNumer=${VERSION_NUMBER}"
|
||||
local attempt=0
|
||||
local max_attempts=60
|
||||
local error_regex='[Ff]ail|[Ee]rror'
|
||||
@ -656,14 +677,44 @@ poll_download_progress() {
|
||||
status="$(json_value "$response" '.status')"
|
||||
local success_flag
|
||||
success_flag="$(json_value "$response" '.success')"
|
||||
local step_value
|
||||
step_value="$(json_value "$response" '.step')"
|
||||
local msg_value
|
||||
msg_value="$(json_value "$response" '.msg')"
|
||||
local message
|
||||
message="$(json_value "$response" '.message')"
|
||||
local progress_value
|
||||
progress_value="$(json_value "$response" '.rateOfProgress')"
|
||||
[[ -z "$progress_value" ]] && progress_value="$(json_value "$response" '.progress')"
|
||||
[[ -z "$progress_value" ]] && progress_value="$(json_value "$response" '.percent')"
|
||||
[[ -z "$progress_value" ]] && progress_value="$(json_value "$response" '.data.progress')"
|
||||
[[ -z "$progress_value" ]] && progress_value="$(json_value "$response" '.data.percent')"
|
||||
[[ -z "$message" ]] && message="$msg_value"
|
||||
|
||||
if [[ "$status" == "completed" || "$success_flag" == "true" ]]; then
|
||||
if [[ -n "$msg_value" || -n "$step_value" || -n "$progress_value" || -n "$status" || -n "$success_flag" || -n "$message" ]]; then
|
||||
local -a progress_parts=()
|
||||
[[ -n "$msg_value" ]] && progress_parts+=("msg=${msg_value}")
|
||||
[[ -n "$step_value" ]] && progress_parts+=("step=${step_value}")
|
||||
[[ -n "$progress_value" ]] && progress_parts+=("rateOfProgress=${progress_value}")
|
||||
[[ -n "$status" ]] && progress_parts+=("status=${status}")
|
||||
[[ -n "$success_flag" ]] && progress_parts+=("success=${success_flag}")
|
||||
[[ -n "$message" && "$message" != "$msg_value" ]] && progress_parts+=("message=${message}")
|
||||
log_info "Step 3.3b: 异步下载进度 -> ${progress_parts[*]}"
|
||||
else
|
||||
log_info "Step 3.3b: 异步下载进度轮询中... ($((attempt + 1))/${max_attempts})"
|
||||
fi
|
||||
|
||||
if [[ "$step_value" == "DONE" || "$status" == "completed" || "$success_flag" == "true" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local message
|
||||
message="$(json_value "$response" '.message')"
|
||||
if [[ "$message" =~ $error_regex ]]; then
|
||||
if [[ "$msg_value" == "success" && "$progress_value" == "100" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "${step_value} ${message} ${msg_value}" =~ $error_regex ]]; then
|
||||
[[ -z "$message" ]] && message="$step_value"
|
||||
[[ -z "$message" ]] && message="$msg_value"
|
||||
log_error "Node 下载失败: $message"
|
||||
return 1
|
||||
fi
|
||||
@ -679,7 +730,7 @@ poll_download_progress() {
|
||||
download_cloud_to_node() {
|
||||
log_info "Step 3.3: 下载软件包到 Node..."
|
||||
http_request "GET" \
|
||||
"${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud?versionNumber=${VERSION_NUMBER}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&timeOut=${TIMEOUT}" \
|
||||
"${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/download-cloud?versionNumber=${VERSION_NUMBER}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&timeOut=${TIMEOUT}" \
|
||||
"" \
|
||||
"" \
|
||||
"Target-Node: ${NODE_URL}" \
|
||||
@ -691,7 +742,7 @@ download_cloud_to_node() {
|
||||
upgrade_ip() {
|
||||
local ip="$1"
|
||||
http_request "POST" \
|
||||
"${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade" \
|
||||
"${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade" \
|
||||
"airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&versionNumber=${VERSION_NUMBER}&action=${ACTION_TYPE}&autoStart=false&timeOut=${TIMEOUT}" \
|
||||
"application/x-www-form-urlencoded" \
|
||||
"Target-Node: ${NODE_URL}"
|
||||
@ -700,7 +751,7 @@ upgrade_ip() {
|
||||
start_application() {
|
||||
local ip="$1"
|
||||
http_request "POST" \
|
||||
"${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/start-stop" \
|
||||
"${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/start-stop" \
|
||||
"airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&runstart=true" \
|
||||
"application/x-www-form-urlencoded" \
|
||||
"Target-Node: ${NODE_URL}" >/dev/null
|
||||
@ -709,7 +760,7 @@ start_application() {
|
||||
stop_application() {
|
||||
local ip="$1"
|
||||
http_request "POST" \
|
||||
"${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/start-stop" \
|
||||
"${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/start-stop" \
|
||||
"airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&runstart=false" \
|
||||
"application/x-www-form-urlencoded" \
|
||||
"Target-Node: ${NODE_URL}" >/dev/null
|
||||
@ -718,7 +769,7 @@ stop_application() {
|
||||
verify_ip() {
|
||||
local ip="$1"
|
||||
http_request "GET" \
|
||||
"${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/verify?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}" \
|
||||
"${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/verify?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}" \
|
||||
"" \
|
||||
"" \
|
||||
"Target-Node: ${NODE_URL}"
|
||||
@ -730,7 +781,7 @@ download_log() {
|
||||
local log_file="${logs_dir}/deploy_${ip}.log"
|
||||
local err_file="${logs_dir}/error_${ip}.log"
|
||||
local request_id
|
||||
local trace_url="${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/log-download?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}&logName=${LOG_NAME}"
|
||||
local trace_url="${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/log-download?applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&airportCode=${AIRPORT_CODE}&targetIp=${ip}&logName=${LOG_NAME}"
|
||||
local curl_exit=0
|
||||
local http_code=""
|
||||
local trace_error=""
|
||||
@ -786,7 +837,7 @@ rollback_ip() {
|
||||
|
||||
local response
|
||||
if ! response=$(http_request "POST" \
|
||||
"${HOME_BASE_URL}/node_proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/rollback" \
|
||||
"${HOME_BASE_URL}/node-proxy/${AIRPORT_CODE}/api/mcp/version/upgrade/rollback" \
|
||||
"airportCode=${AIRPORT_CODE}&targetIp=${ip}&applicationName=${APP_NAME}&moduleName=${MODULE_NAME}&timeOut=${TIMEOUT}" \
|
||||
"application/x-www-form-urlencoded" \
|
||||
"Target-Node: ${NODE_URL}"); then
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user