[#29] lm2测试非GPU节点通过,新增宿主机空闲端口检测,遗留网页超链接使用静态端口问题
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user