feat: 新增测试节点,用于测试FTP安装包安装流程;修复写入 /etc/resolv.conf 顺序问题导致dns解析有误;
refs #20
This commit is contained in:
parent
932038ab1d
commit
edf7af30cb
@ -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 文件"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 读取 DNS 配置文件并追加到 resolv.conf
|
# 将 dns.conf 内容转换为 nameserver 添加到临时文件开头
|
||||||
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
|
else
|
||||||
log_info "DNS 服务器已存在,跳过: $line"
|
log_warning "跳过无效 DNS: $line"
|
||||||
fi
|
|
||||||
else
|
|
||||||
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"
|
||||||
|
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 已更新"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 记录同步日志
|
# 记录同步日志
|
||||||
|
6
src/metric/tests/client-test-node/build/Dockerfile
Normal file
6
src/metric/tests/client-test-node/build/Dockerfile
Normal 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
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
|
@ -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] 安装完成'
|
||||||
"
|
"
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user