feat: 新增测试节点,用于测试FTP安装包安装流程;修复写入 /etc/resolv.conf 顺序问题导致dns解析有误;

refs #20
This commit is contained in:
sundapeng.sdp 2025-10-14 17:24:35 +08:00
parent 932038ab1d
commit edf7af30cb
5 changed files with 78 additions and 34 deletions

View File

@ -126,41 +126,54 @@ compare_files() {
fi fi
} }
# 将 DNS 配置追加到 /etc/resolv.conf # 将 DNS 配置添加到 /etc/resolv.conf 开头
update_resolv_conf() { update_resolv_conf() {
local dns_conf_file="$1" local dns_conf_file="$1"
log_info "更新 /etc/resolv.conf 文件..." log_info "更新 /etc/resolv.conf 文件..."
# 备份原始文件 # 创建临时文件
if [[ -f "$RESOLV_CONF" ]]; then local temp_resolv="/tmp/resolv.conf.$$"
cp "$RESOLV_CONF" "${RESOLV_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
log_info "已备份原始 resolv.conf 文件" # 将 dns.conf 内容转换为 nameserver 添加到临时文件开头
fi
# 读取 DNS 配置文件并追加到 resolv.conf
while IFS= read -r line; do while IFS= read -r line; do
# 跳过空行和注释 # 跳过空行和注释
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
# 验证 IP 格式
# 验证是否为有效的 IP 地址 if [[ "$line" =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]]; then
if [[ "$line" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then echo "nameserver $line" >> "$temp_resolv"
# 检查是否已存在相同的 nameserver 行 log_info "添加 DNS 到临时文件: $line"
if ! grep -q "nameserver $line" "$RESOLV_CONF" 2>/dev/null; then
echo "nameserver $line" >> "$RESOLV_CONF"
log_info "添加 DNS 服务器: $line"
else
log_info "DNS 服务器已存在,跳过: $line"
fi
else else
log_warning "跳过无效 DNS 地址: $line" log_warning "跳过无效 DNS: $line"
fi fi
done < "$dns_conf_file" done < "$dns_conf_file"
# 设置文件权限 # 将原 resolv.conf 内容追加到临时文件后面
chmod 644 "$RESOLV_CONF" if [[ -f "$RESOLV_CONF" ]]; then
cat "$RESOLV_CONF" >> "$temp_resolv"
log_success "/etc/resolv.conf 文件更新完成" fi
# 判断是否是 root
if [[ $(id -u) -eq 0 ]]; then
# root 直接写入
tee "$RESOLV_CONF" < "$temp_resolv" >/dev/null
chmod 644 "$RESOLV_CONF"
else
# 非 root 尝试使用 sudo
if command -v sudo >/dev/null 2>&1; then
sudo tee "$RESOLV_CONF" < "$temp_resolv" >/dev/null
sudo chmod 644 "$RESOLV_CONF"
else
log_error "非 root 用户且系统未安装 sudo无法更新 /etc/resolv.conf"
rm -f "$temp_resolv"
exit 1
fi
fi
# 清理临时文件
rm -f "$temp_resolv"
log_success "/etc/resolv.conf 已更新"
} }
# 记录同步日志 # 记录同步日志

View File

@ -0,0 +1,6 @@
FROM ubuntu:22.04
RUN apt-get update -qq && \
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq tzdata && \
rm -rf /var/lib/apt/lists/*
ENV TZ=Asia/Shanghai

View File

@ -15,6 +15,7 @@ services:
container_name: argus-ftp container_name: argus-ftp
restart: unless-stopped restart: unless-stopped
environment: environment:
- TZ=Asia/Shanghai
- FTP_BASE_PATH=/private/argus/ftp - FTP_BASE_PATH=/private/argus/ftp
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!} - FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
- DOMAIN=${FTP_DOMAIN:-prom.ftp.argus.com} - DOMAIN=${FTP_DOMAIN:-prom.ftp.argus.com}
@ -27,6 +28,8 @@ services:
volumes: volumes:
- ${DATA_ROOT:-/private}/argus/metric/ftp:/private/argus/ftp - ${DATA_ROOT:-/private}/argus/metric/ftp:/private/argus/ftp
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc - ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks: networks:
default: default:
ipv4_address: 172.30.0.40 ipv4_address: 172.30.0.40
@ -48,6 +51,7 @@ services:
container_name: argus-prometheus container_name: argus-prometheus
restart: unless-stopped restart: unless-stopped
environment: environment:
- TZ=Asia/Shanghai
- PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus - PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus
- PROMETHEUS_UID=${PROMETHEUS_UID:-2133} - PROMETHEUS_UID=${PROMETHEUS_UID:-2133}
- PROMETHEUS_GID=${PROMETHEUS_GID:-2015} - PROMETHEUS_GID=${PROMETHEUS_GID:-2015}
@ -56,6 +60,8 @@ services:
volumes: volumes:
- ${DATA_ROOT:-/private}/argus/metric/prometheus:/private/argus/metric/prometheus - ${DATA_ROOT:-/private}/argus/metric/prometheus:/private/argus/metric/prometheus
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc - ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks: networks:
default: default:
ipv4_address: 172.30.0.41 ipv4_address: 172.30.0.41
@ -76,6 +82,7 @@ services:
container_name: argus-grafana container_name: argus-grafana
restart: unless-stopped restart: unless-stopped
environment: environment:
- TZ=Asia/Shanghai
- GRAFANA_BASE_PATH=/private/argus/metric/grafana - GRAFANA_BASE_PATH=/private/argus/metric/grafana
- GRAFANA_UID=${GRAFANA_UID:-2133} - GRAFANA_UID=${GRAFANA_UID:-2133}
- GRAFANA_GID=${GRAFANA_GID:-2015} - GRAFANA_GID=${GRAFANA_GID:-2015}
@ -87,6 +94,8 @@ services:
volumes: volumes:
- ${DATA_ROOT:-/private}/argus/metric/grafana:/private/argus/metric/grafana - ${DATA_ROOT:-/private}/argus/metric/grafana:/private/argus/metric/grafana
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc - ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks: networks:
default: default:
ipv4_address: 172.30.0.42 ipv4_address: 172.30.0.42
@ -99,20 +108,29 @@ services:
max-file: "3" max-file: "3"
test-node: test-node:
image: ubuntu:22.04 build:
context: ./client-test-node/build
dockerfile: Dockerfile
image: argus-metric-test-node:latest
container_name: argus-metric-test-node container_name: argus-metric-test-node
hostname: test-metric-node-001 hostname: test-metric-node-001
restart: unless-stopped restart: unless-stopped
privileged: true
depends_on: depends_on:
- ftp - ftp
- prometheus - prometheus
environment: environment:
- TZ=Asia/Shanghai
- DEBIAN_FRONTEND=noninteractive
- FTP_DOMAIN=${FTP_DOMAIN:-ftp.metric.argus.com}
- FTP_SERVER=${FTP_SERVER:-172.30.0.40} - FTP_SERVER=${FTP_SERVER:-172.30.0.40}
- FTP_USER=${FTP_USER:-ftpuser} - FTP_USER=${FTP_USER:-ftpuser}
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!} - FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
- FTP_PORT=${FTP_PORT:-21} - FTP_PORT=${FTP_PORT:-21}
volumes: volumes:
- ${DATA_ROOT:-/private}/argus/agent:/private/argus/agent - ${DATA_ROOT:-/private}/argus/agent:/private/argus/agent
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
command: sleep infinity command: sleep infinity
networks: networks:
default: default:
@ -122,3 +140,4 @@ services:
options: options:
max-size: "10m" max-size: "10m"
max-file: "3" max-file: "3"

View File

@ -1,12 +1,17 @@
#!/bin/bash #!/bin/bash
set -e set -e
FTP_DOMAIN="${FTP_DOMAIN:-ftp.metric.argus.com}"
FTP_SERVER="${FTP_SERVER:-172.30.0.40}" FTP_SERVER="${FTP_SERVER:-172.30.0.40}"
FTP_USER="${FTP_USER:-ftpuser}" FTP_USER="${FTP_USER:-ftpuser}"
FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}" FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}"
FTP_PORT="${FTP_PORT:-21}" FTP_PORT="${FTP_PORT:-21}"
# 优先使用域名,如果域名不可用则使用 IP
FTP_HOST="${FTP_DOMAIN:-$FTP_SERVER}"
echo "[03] 进入测试节点执行安装..." echo "[03] 进入测试节点执行安装..."
echo "[03] 使用 FTP 地址: ${FTP_HOST}:${FTP_PORT}"
docker exec argus-metric-test-node bash -c " docker exec argus-metric-test-node bash -c "
set -e set -e
@ -18,11 +23,11 @@ fi
cd /tmp cd /tmp
echo '[03] 下载 setup.sh...' echo '[03] 下载 setup.sh...'
curl -u ${FTP_USER}:${FTP_PASSWORD} ftp://${FTP_SERVER}:${FTP_PORT}/setup.sh -o setup.sh curl -u ${FTP_USER}:${FTP_PASSWORD} ftp://${FTP_HOST}:${FTP_PORT}/setup.sh -o setup.sh
echo '[03] 执行安装...' echo '[03] 执行安装...'
chmod +x setup.sh chmod +x setup.sh
bash setup.sh --server ${FTP_SERVER} --user ${FTP_USER} --password '${FTP_PASSWORD}' --port ${FTP_PORT} bash setup.sh --server ${FTP_HOST} --user ${FTP_USER} --password '${FTP_PASSWORD}' --port ${FTP_PORT}
echo '[03] 安装完成' echo '[03] 安装完成'
" "

View File

@ -43,6 +43,7 @@ BUILD_DIRS=(
"../ftp/build" "../ftp/build"
"../prometheus/build" "../prometheus/build"
"../grafana/build" "../grafana/build"
"client-test-node/build"
) )
for dir in "${BUILD_DIRS[@]}"; do for dir in "${BUILD_DIRS[@]}"; do
@ -86,7 +87,7 @@ echo "2. 准备 Docker 镜像..."
# 检查镜像是否存在 # 检查镜像是否存在
IMAGE_CACHE_DIR="$TEST_DIR/images-cache" IMAGE_CACHE_DIR="$TEST_DIR/images-cache"
IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest" "ubuntu:22.04") IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest" "argus-metric-test-node:latest")
all_images_exist=true all_images_exist=true
for image in "${IMAGES[@]}"; do for image in "${IMAGES[@]}"; do
@ -122,8 +123,8 @@ else
"argus-metric-grafana:latest") "argus-metric-grafana:latest")
cache_file="${IMAGE_CACHE_DIR}/argus-grafana.tar" cache_file="${IMAGE_CACHE_DIR}/argus-grafana.tar"
;; ;;
"ubuntu:22.04") "argus-metric-test-node:latest")
cache_file="${IMAGE_CACHE_DIR}/test-node.tar" cache_file="${IMAGE_CACHE_DIR}/argus-test-node.tar"
;; ;;
esac esac
@ -170,8 +171,8 @@ else
"argus-metric-grafana:latest") "argus-metric-grafana:latest")
docker save -o "${IMAGE_CACHE_DIR}/argus-grafana.tar" "$image" && echo " 已保存: argus-grafana.tar" docker save -o "${IMAGE_CACHE_DIR}/argus-grafana.tar" "$image" && echo " 已保存: argus-grafana.tar"
;; ;;
"ubuntu:22.04") "argus-metric-test-node:latest")
docker save -o "${IMAGE_CACHE_DIR}/test-node.tar" "$image" && echo " 已保存: test-node.tar" docker save -o "${IMAGE_CACHE_DIR}/argus-test-node.tar" "$image" && echo " 已保存: argus-test-node.tar"
;; ;;
esac esac
done done