refactor: 优化 OpenStack Keystone 服务部署检查脚本的输出格式

This commit is contained in:
seahi committed 2026-09-30 15:23:55 +08:00
1 parent 9226e2522d
commit 89b0f1e68e
1 file changed
+55 -31
+55 -31
View File
@@ -2,32 +2,69 @@
# OpenStack 控制节点(Rocky) KeyStone 服务部署检查脚本 # OpenStack 控制节点(Rocky) KeyStone 服务部署检查脚本
# 适用于: 3.2 KeyStone服务部署 # 适用于: 3.2 KeyStone服务部署
# 颜色定义 # 学生可见输出:每组一行,失败时列出原因;仅统计实际检查结果。
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
YELLOW='\033[0;33m'
CYAN='\033[0;36m' CYAN='\033[0;36m'
NC='\033[0m' # 恢复默认颜色 NC='\033[0m'
PASS_CNT=0 PASS_CNT=0
FAIL_CNT=0 FAIL_CNT=0
SECTION_TITLE=''
SECTION_PASS=0
SECTION_FAIL=0
SECTION_DETAILS=()
pass() { echo -e "${GREEN}[✔ 通过] $1${NC}"; ((PASS_CNT++)); } pass() { PASS_CNT=$((PASS_CNT+1)); }
fail() { echo -e "${RED}[✘ 失败] $1${NC}"; ((FAIL_CNT++)); } fail() {
info() { echo -e "${CYAN}[➜] $1${NC}"; } FAIL_CNT=$((FAIL_CNT+1))
if [ -n "$SECTION_TITLE" ]; then
SECTION_DETAILS+=("$1")
else
printf '%b[✘ 失败] %s%b\n' "$RED" "$1" "$NC"
fi
}
section_summary() {
[ -n "$SECTION_TITLE" ] || return 0
local passed=$((PASS_CNT-SECTION_PASS)) failed=$((FAIL_CNT-SECTION_FAIL)) message
# 没有实际检查结果的分组不显示,也不记为通过。
if [ "$failed" -gt 0 ]; then
printf '%b[✘ 失败] %s:通过 %s,失败 %s%b\n' "$RED" "$SECTION_TITLE" "$passed" "$failed" "$NC"
for message in "${SECTION_DETAILS[@]}"; do
printf '%b · %s%b\n' "$RED" "$message" "$NC"
done
elif [ "$passed" -gt 0 ]; then
printf '%b[✔ 通过] %s(%s 项)%b\n' "$GREEN" "$SECTION_TITLE" "$passed" "$NC"
fi
}
info() {
section_summary
SECTION_TITLE=$1
SECTION_PASS=$PASS_CNT
SECTION_FAIL=$FAIL_CNT
SECTION_DETAILS=()
}
finish() {
section_summary
printf '\n检查完毕:通过 %b%s%b 项,失败 %b%s%b 项。\n' \
"$GREEN" "$PASS_CNT" "$NC" "$RED" "$FAIL_CNT" "$NC"
if [ "$FAIL_CNT" -gt 0 ]; then
printf '%b请按失败提示修正后重试。%b\n' "$RED" "$NC"
exit 1
fi
printf '%b本次检查项全部通过。%b\n' "$GREEN" "$NC"
exit 0
}
echo -e "${YELLOW}====================================================${NC}" printf '%bOpenStack Keystone 身份认证自测%b\n' "$CYAN" "$NC"
echo -e "${YELLOW} OpenStack KeyStone 身份认证部署自测脚本 ${NC}"
echo -e "${YELLOW}====================================================${NC}"
# 0. 检查是否为 root 用户 # 0. 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
echo -e "${RED}请使用 root 权限执行此脚本!${NC}" fail "请使用 root 权限执行此脚本"
exit 1 exit 1
fi fi
# 1. 检查数据库配置与授权 # 1. 检查数据库配置与授权
info "1. 检查 MariaDB 数据库创建与授权" info "MariaDB 数据库创建与授权"
if mysql -ukeystone -pkeystone -e "SHOW DATABASES;" 2>/dev/null | grep -q "keystone"; then if mysql -ukeystone -pkeystone -e "SHOW DATABASES;" 2>/dev/null | grep -q "keystone"; then
pass "keystone 数据库已创建" pass "keystone 数据库已创建"
else else
@@ -48,7 +85,7 @@ else
fi fi
# 2. 检查软件包安装 # 2. 检查软件包安装
info "2. 检查依赖软件包安装" info "依赖软件包安装"
if rpm -q openstack-keystone httpd mod_wsgi &>/dev/null; then if rpm -q openstack-keystone httpd mod_wsgi &>/dev/null; then
pass "相关软件包 (keystone, httpd, mod_wsgi) 已全部安装" pass "相关软件包 (keystone, httpd, mod_wsgi) 已全部安装"
else else
@@ -56,7 +93,7 @@ else
fi fi
# 3. 检查 KeyStone 配置文件 # 3. 检查 KeyStone 配置文件
info "3. 检查 keystone.conf 配置文件" info "keystone.conf 配置文件"
if grep -q "^connection.*=.*mysql+pymysql://keystone:keystone@controller/keystone" /etc/keystone/keystone.conf 2>/dev/null; then if grep -q "^connection.*=.*mysql+pymysql://keystone:keystone@controller/keystone" /etc/keystone/keystone.conf 2>/dev/null; then
pass "数据库连接 [database] 配置正确" pass "数据库连接 [database] 配置正确"
else else
@@ -70,7 +107,7 @@ else
fi fi
# 4. 检查 Fernet 密钥 # 4. 检查 Fernet 密钥
info "4. 检查 Fernet 密钥库初始化" info "Fernet 密钥库初始化"
if [ "$(ls -A /etc/keystone/fernet-keys 2>/dev/null)" ] && [ "$(ls -A /etc/keystone/credential-keys 2>/dev/null)" ]; then if [ "$(ls -A /etc/keystone/fernet-keys 2>/dev/null)" ] && [ "$(ls -A /etc/keystone/credential-keys 2>/dev/null)" ]; then
pass "Fernet 与 Credential 密钥库已初始化" pass "Fernet 与 Credential 密钥库已初始化"
else else
@@ -78,7 +115,7 @@ else
fi fi
# 5. 检查 Apache HTTP 状态 # 5. 检查 Apache HTTP 状态
info "5. 检查 Apache (HTTPD) 服务状态" info "Apache (HTTPD) 服务状态"
if grep -iq "^ServerName controller" /etc/httpd/conf/httpd.conf 2>/dev/null; then if grep -iq "^ServerName controller" /etc/httpd/conf/httpd.conf 2>/dev/null; then
pass "Apache ServerName 已配置为 controller" pass "Apache ServerName 已配置为 controller"
else else
@@ -105,24 +142,11 @@ export OS_IDENTITY_API_VERSION=3
export NO_PROXY=localhost,127.0.0.1,controller export NO_PROXY=localhost,127.0.0.1,controller
# 6. Admin 身份令牌签发测试 (Bootstrap 验证) # 6. Admin 身份令牌签发测试 (Bootstrap 验证)
info "6. 检查 KeyStone Bootstrap 及管理员权限" info "KeyStone Bootstrap 及管理员权限"
if openstack token issue >/dev/null 2>&1; then if openstack token issue >/dev/null 2>&1; then
pass "管理员 (admin) 成功签发 Token (Bootstrap 初始化成功)" pass "管理员 (admin) 成功签发 Token (Bootstrap 初始化成功)"
else else
fail "管理员 (admin) 无法签发 Token,Bootstrap 可能失败或 Apache 未响应" fail "管理员 (admin) 无法签发 Token,Bootstrap 可能失败或 Apache 未响应"
echo -e "${RED}后续针对域、项目、用户的检查由于无法认证,将跳过!${NC}"
FAIL_CNT=$((FAIL_CNT+5))
goto_end=1
fi fi
finish
echo ""
echo -e "${YELLOW}====================================================${NC}"
echo -e "检查完毕!通过项: ${GREEN}${PASS_CNT}${NC},失败项: ${RED}${FAIL_CNT}${NC}"
if [ ${FAIL_CNT} -eq 0 ]; then
echo -e "${GREEN}太棒了!KeyStone 服务已完美搭建且工作正常!${NC}"
else
echo -e "${RED}你有 ${FAIL_CNT} 处配置未达标,请对照 [✘ 失败] 的提示,参考手册检查数据库或相关配置文件。${NC}"
fi
echo -e "${YELLOW}====================================================${NC}"