Files
OpenStackScripts/3.2.sh
T

129 lines
4.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# OpenStack 控制节点(Rocky) KeyStone 服务部署检查脚本
# 适用于: 3.2 KeyStone服务部署
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
CYAN='\033[0;36m'
NC='\033[0m' # 恢复默认颜色
PASS_CNT=0
FAIL_CNT=0
pass() { echo -e "${GREEN}[✔ 通过] $1${NC}"; ((PASS_CNT++)); }
fail() { echo -e "${RED}[✘ 失败] $1${NC}"; ((FAIL_CNT++)); }
info() { echo -e "${CYAN}[➜] $1${NC}"; }
echo -e "${YELLOW}====================================================${NC}"
echo -e "${YELLOW} OpenStack KeyStone 身份认证部署自测脚本 ${NC}"
echo -e "${YELLOW}====================================================${NC}"
# 0. 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}请使用 root 权限执行此脚本!${NC}"
exit 1
fi
# 1. 检查数据库配置与授权
info "1. 检查 MariaDB 数据库创建与授权"
if mysql -ukeystone -pkeystone -e "SHOW DATABASES;" 2>/dev/null | grep -q "keystone"; then
pass "keystone 数据库已创建"
else
fail "keystone 数据库未创建"
fi
if mysql -ukeystone -pkeystone -e "SHOW DATABASES;" &>/dev/null; then
pass "keystone 数据库用户授权正确 (可正常登录)"
# 顺便检查 DB_SYNC 是否成功
if [ $(mysql -ukeystone -pkeystone -e "USE keystone; SHOW TABLES;" 2>/dev/null | wc -l) -gt 2 ]; then
pass "keystone 数据库表结构已成功同步 (db_sync)"
else
fail "keystone 数据库表为空,未执行同步或同步失败"
fi
else
fail "keystone 数据库用户授权失败或密码不匹配"
fi
# 2. 检查软件包安装
info "2. 检查依赖软件包安装"
if rpm -q openstack-keystone httpd mod_wsgi &>/dev/null; then
pass "相关软件包 (keystone, httpd, mod_wsgi) 已全部安装"
else
fail "部分软件包未安装,请检查是否遗漏"
fi
# 3. 检查 KeyStone 配置文件
info "3. 检查 keystone.conf 配置文件"
if grep -q "^connection.*=.*mysql+pymysql://keystone:keystone@controller/keystone" /etc/keystone/keystone.conf 2>/dev/null; then
pass "数据库连接 [database] 配置正确"
else
fail "数据库连接 [database] 配置不匹配"
fi
if grep -q "^provider.*=.*fernet" /etc/keystone/keystone.conf 2>/dev/null; then
pass "令牌 [token] 认证类型已按要求设置为 fernet"
else
fail "令牌 [token] 的 provider 未设置为 fernet"
fi
# 4. 检查 Fernet 密钥
info "4. 检查 Fernet 密钥库初始化"
if [ "$(ls -A /etc/keystone/fernet-keys 2>/dev/null)" ] && [ "$(ls -A /etc/keystone/credential-keys 2>/dev/null)" ]; then
pass "Fernet 与 Credential 密钥库已初始化"
else
fail "Fernet 密钥目录为空,未执行 fernet_setup"
fi
# 5. 检查 Apache HTTP 状态
info "5. 检查 Apache (HTTPD) 服务状态"
if grep -iq "^ServerName controller" /etc/httpd/conf/httpd.conf 2>/dev/null; then
pass "Apache ServerName 已配置为 controller"
else
fail "Apache ServerName 未配置正确"
fi
if [ -L /etc/httpd/conf.d/wsgi-keystone.conf ]; then
pass "WSGI 虚拟主机链接已创建"
else
fail "wsgi-keystone.conf 的软链接不存在"
fi
if systemctl is-active httpd &>/dev/null; then pass "httpd 服务正在运行"; else fail "httpd 服务未运行"; fi
if systemctl is-enabled httpd &>/dev/null; then pass "httpd 服务已允许开机自启"; else fail "httpd 未设置开机自启"; fi
# 导入临时管理员环境变量用于后续 API 测试
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export NO_PROXY=localhost,127.0.0.1,controller
# 6. Admin 身份令牌签发测试 (Bootstrap 验证)
info "6. 检查 KeyStone Bootstrap 及管理员权限"
if openstack token issue >/dev/null 2>&1; then
pass "管理员 (admin) 成功签发 Token (Bootstrap 初始化成功)"
else
fail "管理员 (admin) 无法签发 Token,Bootstrap 可能失败或 Apache 未响应"
echo -e "${RED}后续针对域、项目、用户的检查由于无法认证,将跳过!${NC}"
FAIL_CNT=$((FAIL_CNT+5))
goto_end=1
fi
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}"