[#29] lm2测试非GPU节点通过,新增宿主机空闲端口检测,遗留网页超链接使用静态端口问题

This commit is contained in:
2025-10-27 15:46:59 +08:00
parent 23f0f4fca4
commit cc0f9e5fed
16 changed files with 225 additions and 79 deletions

View File

@@ -139,6 +139,77 @@ else
fi
echo "[INFO] Writing .env with UID/GID and metric configuration"
#############################################
# 动态分配宿主机端口并写入 .env
#############################################
# 读取现有 .env(若存在),用于保留密码/域名等
EXIST_DOTENV="$TEST_ROOT/.env"
if [[ -f "$EXIST_DOTENV" ]]; then
EXISTING_FTP_PASSWORD="$(grep -E '^FTP_PASSWORD=' "$EXIST_DOTENV" | tail -n1 | sed 's/^FTP_PASSWORD=//')"
EXISTING_FTP_DOMAIN="$(grep -E '^FTP_DOMAIN=' "$EXIST_DOTENV" | tail -n1 | sed 's/^FTP_DOMAIN=//')"
EXISTING_USE_INTRANET="$(grep -E '^USE_INTRANET=' "$EXIST_DOTENV" | tail -n1 | sed 's/^USE_INTRANET=//')"
else
EXISTING_FTP_PASSWORD=""
EXISTING_FTP_DOMAIN=""
EXISTING_USE_INTRANET=""
fi
is_port_free() {
local p="$1"
ss -ltnH 2>/dev/null | awk -v pat=":${p}$" '$4 ~ pat{f=1} END{exit f?1:0}'
}
find_free_port() {
local prefer="$1"; local start_scan="${2:-20000}"; local max="${3:-65000}"
if is_port_free "$prefer"; then echo "$prefer"; return 0; fi
local p
for (( p=start_scan; p<=max; p++ )); do
if is_port_free "$p"; then echo "$p"; return 0; fi
done
return 1
}
find_free_range() {
local begin="$1"; local end="$2"; local need_count=$((end-begin+1))
local try_start="$begin"
while (( try_start + need_count - 1 <= 65000 )); do
local ok=1
for (( p=try_start; p<try_start+need_count; p++ )); do
if ! is_port_free "$p"; then ok=0; break; fi
done
if (( ok==1 )); then
echo "${try_start}-$((try_start+need_count-1))"; return 0
fi
((try_start++))
done
return 1
}
# 优先端口(若占用则回退到 20000+ 的空闲)
MASTER_PORT_VAL=$(find_free_port 32300)
ES_HTTP_PORT_VAL=$(find_free_port 9200)
KIBANA_PORT_VAL=$(find_free_port 5601)
NODE_A_PORT_VAL=$(find_free_port 2020)
NODE_B_PORT_VAL=$(find_free_port 2021)
PROMETHEUS_PORT_VAL=$(find_free_port 9090)
GRAFANA_PORT_VAL=$(find_free_port 3000)
ALERTMANAGER_PORT_VAL=$(find_free_port 9093)
WEB_PROXY_PORT_8080_VAL=$(find_free_port 8080 18080 65000)
WEB_PROXY_PORT_8081_VAL=$(find_free_port 8081 18081 65000)
WEB_PROXY_PORT_8082_VAL=$(find_free_port 8082 18082 65000)
WEB_PROXY_PORT_8083_VAL=$(find_free_port 8083 18083 65000)
WEB_PROXY_PORT_8084_VAL=$(find_free_port 8084 18084 65000)
WEB_PROXY_PORT_8085_VAL=$(find_free_port 8085 18085 65000)
# FTP 控制/数据端口:若 21/20 被占用则回退到空闲
FTP_PORT_VAL=$(find_free_port 21 2121 65000)
FTP_DATA_PORT_VAL=$(find_free_port 20 2120 65000)
# FTP 被动端口范围:优先 21100-21110,若被占用则向后平移
FTP_PASV_RANGE_VAL="$(find_free_range 21100 21110 || echo 22100-22110)"
# 变量持久化到 .env
cat > "$TEST_ROOT/.env" <<EOF
ARGUS_BUILD_UID=$ARGUS_BUILD_UID
ARGUS_BUILD_GID=$ARGUS_BUILD_GID
@@ -146,20 +217,31 @@ ARGUS_BUILD_GID=$ARGUS_BUILD_GID
# GPU 配置
ENABLE_GPU=$GPU_AVAILABLE
# FTP 配置
FTP_PORT=21
FTP_DATA_PORT=20
FTP_PASSWORD=ZGClab1234!
FTP_DOMAIN=ftp.metric.argus.com
# Master/日志/监控等服务的宿主机端口(自动分配)
MASTER_PORT=$MASTER_PORT_VAL
ES_HTTP_PORT=$ES_HTTP_PORT_VAL
KIBANA_PORT=$KIBANA_PORT_VAL
NODE_A_PORT=$NODE_A_PORT_VAL
NODE_B_PORT=$NODE_B_PORT_VAL
PROMETHEUS_PORT=$PROMETHEUS_PORT_VAL
GRAFANA_PORT=$GRAFANA_PORT_VAL
ALERTMANAGER_PORT=$ALERTMANAGER_PORT_VAL
WEB_PROXY_PORT_8080=$WEB_PROXY_PORT_8080_VAL
WEB_PROXY_PORT_8081=$WEB_PROXY_PORT_8081_VAL
WEB_PROXY_PORT_8082=$WEB_PROXY_PORT_8082_VAL
WEB_PROXY_PORT_8083=$WEB_PROXY_PORT_8083_VAL
WEB_PROXY_PORT_8084=$WEB_PROXY_PORT_8084_VAL
WEB_PROXY_PORT_8085=$WEB_PROXY_PORT_8085_VAL
# Prometheus 配置
PROMETHEUS_PORT=9090
# Grafana 配置
GRAFANA_PORT=3000
# FTP 配置(自动分配:若21/20占用则使用高位端口)
FTP_PORT=$FTP_PORT_VAL
FTP_DATA_PORT=$FTP_DATA_PORT_VAL
FTP_PASSIVE_HOST_RANGE=$FTP_PASV_RANGE_VAL
FTP_PASSWORD=${EXISTING_FTP_PASSWORD:-ZGClab1234!}
FTP_DOMAIN=${EXISTING_FTP_DOMAIN:-ftp.metric.argus.com}
# 网络配置
USE_INTRANET=false
USE_INTRANET=${EXISTING_USE_INTRANET:-false}
EOF
echo "[OK] Bootstrap completed"
echo "[OK] Bootstrap completed. Ports written to $TEST_ROOT/.env"