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
}
# 将 DNS 配置追加到 /etc/resolv.conf
# 将 DNS 配置添加到 /etc/resolv.conf 开头
update_resolv_conf() {
local dns_conf_file="$1"
log_info "更新 /etc/resolv.conf 文件..."
# 备份原始文件
if [[ -f "$RESOLV_CONF" ]]; then
cp "$RESOLV_CONF" "${RESOLV_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
log_info "已备份原始 resolv.conf 文件"
fi
# 创建临时文件
local temp_resolv="/tmp/resolv.conf.$$"
# 读取 DNS 配置文件并追加到 resolv.conf
# 将 dns.conf 内容转换为 nameserver 添加到临时文件开头
while IFS= read -r line; do
# 跳过空行和注释
# 跳过空行和注释
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
# 验证是否为有效的 IP 地址
if [[ "$line" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
# 检查是否已存在相同的 nameserver 行
if ! grep -q "nameserver $line" "$RESOLV_CONF" 2>/dev/null; then
echo "nameserver $line" >> "$RESOLV_CONF"
log_info "添加 DNS 服务器: $line"
# 验证 IP 格式
if [[ "$line" =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]]; then
echo "nameserver $line" >> "$temp_resolv"
log_info "添加 DNS 到临时文件: $line"
else
log_info "DNS 服务器已存在,跳过: $line"
fi
else
log_warning "跳过无效的 DNS 地址: $line"
log_warning "跳过无效 DNS: $line"
fi
done < "$dns_conf_file"
# 设置文件权限
chmod 644 "$RESOLV_CONF"
# 将原 resolv.conf 内容追加到临时文件后面
if [[ -f "$RESOLV_CONF" ]]; then
cat "$RESOLV_CONF" >> "$temp_resolv"
fi
log_success "/etc/resolv.conf 文件更新完成"
# 判断是否是 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
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- FTP_BASE_PATH=/private/argus/ftp
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
- DOMAIN=${FTP_DOMAIN:-prom.ftp.argus.com}
@ -27,6 +28,8 @@ services:
volumes:
- ${DATA_ROOT:-/private}/argus/metric/ftp:/private/argus/ftp
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks:
default:
ipv4_address: 172.30.0.40
@ -48,6 +51,7 @@ services:
container_name: argus-prometheus
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus
- PROMETHEUS_UID=${PROMETHEUS_UID:-2133}
- PROMETHEUS_GID=${PROMETHEUS_GID:-2015}
@ -56,6 +60,8 @@ services:
volumes:
- ${DATA_ROOT:-/private}/argus/metric/prometheus:/private/argus/metric/prometheus
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks:
default:
ipv4_address: 172.30.0.41
@ -76,6 +82,7 @@ services:
container_name: argus-grafana
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- GRAFANA_BASE_PATH=/private/argus/metric/grafana
- GRAFANA_UID=${GRAFANA_UID:-2133}
- GRAFANA_GID=${GRAFANA_GID:-2015}
@ -87,6 +94,8 @@ services:
volumes:
- ${DATA_ROOT:-/private}/argus/metric/grafana:/private/argus/metric/grafana
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks:
default:
ipv4_address: 172.30.0.42
@ -99,20 +108,29 @@ services:
max-file: "3"
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
hostname: test-metric-node-001
restart: unless-stopped
privileged: true
depends_on:
- ftp
- prometheus
environment:
- TZ=Asia/Shanghai
- DEBIAN_FRONTEND=noninteractive
- FTP_DOMAIN=${FTP_DOMAIN:-ftp.metric.argus.com}
- FTP_SERVER=${FTP_SERVER:-172.30.0.40}
- FTP_USER=${FTP_USER:-ftpuser}
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
- FTP_PORT=${FTP_PORT:-21}
volumes:
- ${DATA_ROOT:-/private}/argus/agent:/private/argus/agent
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
command: sleep infinity
networks:
default:
@ -122,3 +140,4 @@ services:
options:
max-size: "10m"
max-file: "3"

View File

@ -1,12 +1,17 @@
#!/bin/bash
set -e
FTP_DOMAIN="${FTP_DOMAIN:-ftp.metric.argus.com}"
FTP_SERVER="${FTP_SERVER:-172.30.0.40}"
FTP_USER="${FTP_USER:-ftpuser}"
FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}"
FTP_PORT="${FTP_PORT:-21}"
# 优先使用域名,如果域名不可用则使用 IP
FTP_HOST="${FTP_DOMAIN:-$FTP_SERVER}"
echo "[03] 进入测试节点执行安装..."
echo "[03] 使用 FTP 地址: ${FTP_HOST}:${FTP_PORT}"
docker exec argus-metric-test-node bash -c "
set -e
@ -18,11 +23,11 @@ fi
cd /tmp
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] 执行安装...'
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] 安装完成'
"

View File

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