提交 882b0f31 authored 作者: 陈泽健's avatar 陈泽健

feat(deploy): ARM架构新增电子桌牌色彩型号配置功能

- 为ARM架构部署脚本新增configure_tablecard_color函数
- 实现三色/四色桌牌选择功能,支持交互式和非交互式模式
- 添加jq/python3/awk多工具降级链修改配置文件
- 集成色彩配置到桌牌部署流程中
- 为非交互模式添加默认三色配置支持
- 更新需求文档以反映新的部署脚本架构差异
上级 c5b7b23f
# 主服务端口切换需求文档
## 代码路径
- X86架构:
- 需调用代码路径:[自动化部署脚本/x86架构/新统一平台/auto_check_service_ports.sh]
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh]
- ARM架构:
- 需调用代码路径:[自动化部署脚本/ARM架构/新统一平台/auto_check_service_ports.sh]
- 主脚本:[自动化部署脚本/ARM架构/新统一平台/new_auto.sh]
## 功能需求
### 功能目标
**目标:** middleware脚本
### 需求描述
-
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# 服务部署脚本优化 # 服务部署脚本优化
## 代码路径 ## 代码路径
- deploy服务部署脚本:[自动化部署脚本/x86架构/新统一平台/auto_deploy_services.sh] - X86架构:
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh] - deploy服务部署脚本:[自动化部署脚本/x86架构/新统一平台/auto_deploy_services.sh]
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh]
- ARM架构:
- deploy服务部署脚本:[自动化部署脚本/arm架构/新统一平台/arm_auto_deploy_services.sh]
- 主脚本:[自动化部署脚本/arm架构/新统一平台/arm_new_auto.sh]
## 功能需求 ## 功能需求
### 功能目标 ### 功能目标
......
...@@ -614,6 +614,159 @@ configure_firewall_for_9990() { ...@@ -614,6 +614,159 @@ configure_firewall_for_9990() {
return 0 return 0
} }
# 配置电子桌牌色彩型号(三色/四色)
# 说明:桌牌的显示参数 color/epd_type 配置在 java-meeting(预定系统)的 sensitive-config.json 中,
# 配置修改即时生效,java-meeting 无需重启即可读取新参数。
# 色彩型号对应关系:
# 三色:color=3, epd_type=1(默认,保持不变)
# 四色:color=4, epd_type=9
# 环境变量 CARDTABLE_COLOR_MODE(由 deploy_services 在 "all" 非交互模式设置):
# 非空时直接采用该值("3" 或 "4"),跳过 whiptail 交互菜单。
# 容错策略:
# - 配置文件缺失 → 仅告警,不中断桌牌容器部署
# - 修改工具采用 jq → python3 → awk 降级链,适配统信 UOS / 欧拉 / 麒麟 等不同操作系统
function configure_tablecard_color() {
local config_file="/data/services/api/java-meeting/java-meeting2.0/config/sensitive-config.json"
log "INFO" "🎨 开始配置电子桌牌色彩型号..."
# 1. 校验配置文件是否存在(缺失仅告警,不中断部署)
if [ ! -f "$config_file" ]; then
log "WARN" "⚠️ 未找到桌牌配置文件: $config_file"
log "WARN" " 请确认已部署预定系统(java-meeting);本次跳过色彩配置,继续部署桌牌容器。"
return 0
fi
# 2. 确定色彩型号:非交互模式用 CARDTABLE_COLOR_MODE / 交互模式弹 whiptail 菜单
local color_choice=""
if [ -n "$CARDTABLE_COLOR_MODE" ]; then
# 非交互模式(all 自动部署),直接采用预设型号(默认三色)
color_choice="$CARDTABLE_COLOR_MODE"
log "INFO" "🤖 非交互模式,桌牌色彩采用预设型号:${color_choice} 色"
else
# 交互模式:弹出色彩选择菜单
color_choice=$(whiptail --title "🎨 电子桌牌色彩型号选择" \
--menu "\n请选择电子桌牌的色彩型号:" \
14 60 2 \
"3" "三色 (color=3, epd_type=1) 默认" \
"4" "四色 (color=4, epd_type=9)" \
3>&1 1>&2 2>&3)
local whiptail_rc=$?
# 用户取消或 ESC:默认三色
if [ "$whiptail_rc" -ne 0 ] || [ -z "$color_choice" ]; then
log "WARN" "⚠️ 用户未选择色彩型号,默认采用三色 (color=3, epd_type=1)"
color_choice="3"
fi
fi
# 3. 映射为目标参数值
local target_color="" target_epd=""
case "$color_choice" in
3)
target_color="3"
target_epd="1"
;;
4)
target_color="4"
target_epd="9"
;;
*)
log "WARN" "⚠️ 未知色彩选项: $color_choice,默认采用三色"
target_color="3"
target_epd="1"
;;
esac
log "INFO" "🎯 目标桌牌参数:color=${target_color}, epd_type=${target_epd}"
# 4. 修改前备份配置文件
local backup_file="${config_file}.bak"
if cp "$config_file" "$backup_file"; then
log "INFO" "💾 已备份配置文件: $backup_file"
else
log "WARN" "⚠️ 配置文件备份失败,将继续修改(建议手动备份)"
fi
# 5. 多工具降级链修改 tableCard.color / tableCard.epd_type(适配不同操作系统)
# 优先级:jq → python3 → awk(节点级/块内精确修改,避免误伤其它 color 字段)
local modify_ok=0
# 优先级 1:jq
if [ "$modify_ok" -eq 0 ] && command -v jq >/dev/null 2>&1; then
local jq_tmp="${config_file}.jq.tmp"
if jq --arg c "$target_color" --arg e "$target_epd" \
'(.tableCard.color)=($c|tonumber) | (.tableCard.epd_type)=($e|tonumber)' \
"$config_file" > "$jq_tmp" 2>/dev/null && [ -s "$jq_tmp" ]; then
mv "$jq_tmp" "$config_file"
modify_ok=1
log "INFO" "✅ 已通过 jq 修改桌牌色彩配置"
else
rm -f "$jq_tmp"
log "WARN" "⚠️ jq 不可用或修改失败,尝试下一工具"
fi
fi
# 优先级 2:python3(标准库 json,ensure_ascii=False 保持中文不转义)
if [ "$modify_ok" -eq 0 ] && command -v python3 >/dev/null 2>&1; then
if python3 - "$config_file" "$target_color" "$target_epd" <<'PYEOF' >/dev/null 2>&1
import json, sys
path, color, epd = sys.argv[1], int(sys.argv[2]), int(sys.argv[3])
with open(path, 'r', encoding='utf-8') as f:
data = json.load(f)
tc = data.get("tableCard")
if not isinstance(tc, dict):
sys.exit(1)
tc["color"] = color
tc["epd_type"] = epd
with open(path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
PYEOF
then
modify_ok=1
log "INFO" "✅ 已通过 python3 修改桌牌色彩配置"
else
log "WARN" "⚠️ python3 不可用或修改失败,尝试下一工具"
fi
fi
# 优先级 3:awk 作用域替换(仅在 tableCard 块内替换 color/epd_type,所有 Linux 必有)
if [ "$modify_ok" -eq 0 ]; then
local awk_tmp="${config_file}.awk.tmp"
if awk -v tc="$target_color" -v te="$target_epd" '
BEGIN { in_block = 0 }
{
if ($0 ~ /"tableCard"[[:space:]]*:/) { in_block = 1 }
if (in_block == 1) {
if ($0 ~ /^[[:space:]]*"color"[[:space:]]*:/) {
sub(/:[[:space:]]*[0-9]+/, ": " tc)
} else if ($0 ~ /^[[:space:]]*"epd_type"[[:space:]]*:/) {
sub(/:[[:space:]]*[0-9]+/, ": " te)
}
if ($0 ~ /\}/) { in_block = 0 }
}
print
}' "$config_file" > "$awk_tmp" 2>/dev/null && [ -s "$awk_tmp" ]; then
mv "$awk_tmp" "$config_file"
modify_ok=1
log "INFO" "✅ 已通过 awk 修改桌牌色彩配置"
else
rm -f "$awk_tmp"
log "WARN" "⚠️ awk 修改失败"
fi
fi
# 6. 修改结果处理(失败仅告警,不中断桌牌容器部署)
if [ "$modify_ok" -eq 0 ]; then
log "ERROR" "❌ 桌牌色彩配置修改失败(jq/python3/awk 均不可用或失败)"
log "ERROR" " 请手动修改 $config_file:tableCard.color=${target_color}, tableCard.epd_type=${target_epd}"
return 0
fi
log "INFO" "✅ 桌牌色彩配置完成:color=${target_color}, epd_type=${target_epd}(即时生效,无需重启 java-meeting)"
return 0
}
function cardtable_arm() { function cardtable_arm() {
local service_name="电子桌牌服务 (cardtable)" local service_name="电子桌牌服务 (cardtable)"
local container_name="cardtable" local container_name="cardtable"
...@@ -639,6 +792,10 @@ function cardtable_arm() { ...@@ -639,6 +792,10 @@ function cardtable_arm() {
return 1 return 1
fi fi
# 【新增步骤】选择并配置电子桌牌色彩型号(三色/四色)
# 修改的是预定系统 java-meeting 的桌牌显示参数,配置即时生效、无需重启。
configure_tablecard_color
# 1. 检查镜像压缩包是否存在 # 1. 检查镜像压缩包是否存在
if [ ! -f "$image_tar" ]; then if [ ! -f "$image_tar" ]; then
log "ERROR" "❌ 镜像文件不存在: $image_tar" log "ERROR" "❌ 镜像文件不存在: $image_tar"
...@@ -800,6 +957,10 @@ function deploy_services() { ...@@ -800,6 +957,10 @@ function deploy_services() {
log "INFO" "🤖 收到 'all' 参数,自动部署所有系统" log "INFO" "🤖 收到 'all' 参数,自动部署所有系统"
allowed_numbers=(1 2 3 4 5) allowed_numbers=(1 2 3 4 5)
# 非交互模式:桌牌色彩采用默认三色(跳过 whiptail 交互菜单)
# 说明:bash 动态作用域下,该 local 变量对 cardtable_arm → configure_tablecard_color 可见
local CARDTABLE_COLOR_MODE="3"
# 直接跳到部署流程,跳过所有交互界面 # 直接跳到部署流程,跳过所有交互界面
log "INFO" "==================================================" log "INFO" "=================================================="
log "INFO" "🚀 开始自动部署所有系统" log "INFO" "🚀 开始自动部署所有系统"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论