| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 |
- #!/bin/bash
- # Cloudpods 统一初始化脚本
- # 用于全新部署时的完整初始化
- set -e
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- BLUE='\033[0;34m'
- NC='\033[0m'
- # 初始化配置
- INIT_CONFIG_FILE="${INIT_CONFIG_FILE:-init-config.env}"
- # 加载配置文件
- load_config() {
- if [ -f "$INIT_CONFIG_FILE" ]; then
- echo -e "${BLUE}加载配置文件: $INIT_CONFIG_FILE${NC}"
- set -a
- source "$INIT_CONFIG_FILE"
- set +a
- fi
-
- # 加载 .env.local
- if [ -f "../.env.local" ]; then
- set -a
- source ../.env.local
- set +a
- fi
- }
- # 设置默认值
- setup_defaults() {
- # 数据库配置
- DB_HOST=${DB_HOST:-127.0.0.1}
- DB_PORT=${DB_PORT:-3306}
- DB_USER=${DB_USER:-root}
- DB_PASSWORD=${DB_PASSWORD:-}
- DB_NAME=${DB_NAME:-yunioncloud}
-
- # Keystone 配置
- KEYSTONE_HOST=${KEYSTONE_HOST:-127.0.0.1}
- KEYSTONE_PORT=${KEYSTONE_PORT:-30500}
- ADMIN_USER=${ADMIN_USER:-sysadmin}
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin@123}
- ADMIN_PROJECT=${ADMIN_PROJECT:-system}
- ADMIN_DOMAIN=${ADMIN_DOMAIN:-Default}
- REGION_NAME=${REGION_NAME:-region0}
-
- # 服务端口配置
- REGION_PORT=${REGION_PORT:-30889}
- GLANCE_PORT=${GLANCE_PORT:-9292}
- YUNIONCONF_PORT=${YUNIONCONF_PORT:-30888}
- MONITOR_PORT=${MONITOR_PORT:-30900}
- SCHEDULEDTASK_PORT=${SCHEDULEDTASK_PORT:-30950}
- APIGATEWAY_PORT=${APIGATEWAY_PORT:-3000}
- }
- # 打印配置信息
- print_config() {
- echo -e "${GREEN}=== Cloudpods 初始化配置 ===${NC}"
- echo ""
- echo -e "${BLUE}数据库配置:${NC}"
- echo " 主机: ${DB_HOST}:${DB_PORT}"
- echo " 数据库: ${DB_NAME}"
- echo " 用户: ${DB_USER}"
- echo ""
- echo -e "${BLUE}Keystone 配置:${NC}"
- echo " 地址: http://${KEYSTONE_HOST}:${KEYSTONE_PORT}/v3"
- echo " 管理员: ${ADMIN_USER}@${ADMIN_DOMAIN}"
- echo " 项目: ${ADMIN_PROJECT}"
- echo " Region: ${REGION_NAME}"
- echo ""
- echo -e "${BLUE}服务端口配置:${NC}"
- echo " Region: ${REGION_PORT}"
- echo " Glance: ${GLANCE_PORT}"
- echo " YunionConf: ${YUNIONCONF_PORT}"
- echo " Monitor: ${MONITOR_PORT}"
- echo " ScheduledTask: ${SCHEDULEDTASK_PORT}"
- echo " APIGateway: ${APIGATEWAY_PORT}"
- echo ""
- }
- # 初始化阶段 1: 数据库
- init_database() {
- echo -e "${GREEN}=== 阶段 1: 初始化数据库 ===${NC}"
-
- # 构建 mysql 命令
- if [ -z "$DB_PASSWORD" ]; then
- MYSQL_CMD="mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER}"
- else
- MYSQL_CMD="mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD}"
- fi
-
- # 检查 MySQL 连接
- echo -e "${YELLOW}检查 MySQL 连接...${NC}"
- if ! $MYSQL_CMD -e "SELECT 1" > /dev/null 2>&1; then
- echo -e "${RED}错误: 无法连接到 MySQL${NC}"
- exit 1
- fi
- echo -e "${GREEN}✓ MySQL 连接正常${NC}"
-
- # 删除已存在的数据库
- echo -e "${YELLOW}删除已存在的数据库 ${DB_NAME}...${NC}"
- $MYSQL_CMD -e "DROP DATABASE IF EXISTS ${DB_NAME};" 2>/dev/null || true
-
- # 创建新数据库
- echo -e "${YELLOW}创建数据库 ${DB_NAME}...${NC}"
- $MYSQL_CMD -e "CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
- echo -e "${GREEN}✓ 数据库创建成功${NC}"
-
- # 创建用户(如果不存在)
- if [ -n "$DB_PASSWORD" ]; then
- echo -e "${YELLOW}创建数据库用户...${NC}"
- $MYSQL_CMD -e "CREATE USER IF NOT EXISTS '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASSWORD}';" 2>/dev/null || true
- $MYSQL_CMD -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'%';" 2>/dev/null || true
- $MYSQL_CMD -e "FLUSH PRIVILEGES;" 2>/dev/null || true
- echo -e "${GREEN}✓ 数据库用户权限设置完成${NC}"
- fi
- }
- # 初始化阶段 2: 启动基础服务
- init_services() {
- echo -e "${GREEN}=== 阶段 2: 启动基础服务 ===${NC}"
-
- # 构建数据库连接字符串
- if [ -z "$DB_PASSWORD" ]; then
- SQL_CONNECTION="mysql+pymysql://${DB_USER}@${DB_HOST}:${DB_PORT}/${DB_NAME}?charset=utf8mb4"
- else
- SQL_CONNECTION="mysql+pymysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?charset=utf8mb4"
- fi
-
- # 创建日志目录
- mkdir -p logs
-
- # 启动 Keystone
- echo -e "${YELLOW}启动 Keystone...${NC}"
- if [ ! -f "_output/bin/keystone" ]; then
- echo -e "${YELLOW}编译 Keystone...${NC}"
- GOOS=darwin CGO_ENABLED=0 go build -mod vendor -o _output/bin/keystone yunion.io/x/onecloud/cmd/keystone
- fi
-
- ./_output/bin/keystone \
- --config /dev/null \
- --sql-connection "$SQL_CONNECTION" \
- --auto-sync-table \
- --port ${KEYSTONE_PORT} \
- --admin-port 35357 \
- --bootstrap-admin-user-password ${ADMIN_PASSWORD} \
- > logs/keystone.log 2>&1 &
- echo $! > logs/keystone.pid
- echo -e "${GREEN}✓ Keystone 已启动${NC}"
-
- # 等待 Keystone 就绪
- echo -e "${YELLOW}等待 Keystone 就绪...${NC}"
- for i in {1..30}; do
- if curl -s http://127.0.0.1:${KEYSTONE_PORT}/v3 > /dev/null 2>&1; then
- echo -e "${GREEN}✓ Keystone 已就绪${NC}"
- break
- fi
- sleep 1
- if [ $i -eq 30 ]; then
- echo -e "${RED}错误: Keystone 启动超时${NC}"
- exit 1
- fi
- done
-
- # 设置环境变量
- export OS_AUTH_URL=http://127.0.0.1:${KEYSTONE_PORT}/v3
- export OS_USERNAME=${ADMIN_USER}
- export OS_PASSWORD=${ADMIN_PASSWORD}
- export OS_DOMAIN_NAME=${ADMIN_DOMAIN}
- export OS_PROJECT_NAME=${ADMIN_PROJECT}
- export OS_REGION_NAME=${REGION_NAME}
- }
- # 初始化阶段 3: 注册服务和 Endpoint
- init_keystone() {
- echo -e "${GREEN}=== 阶段 3: 注册服务和 Endpoint ===${NC}"
-
- # 编译 climc
- if [ ! -f "_output/bin/climc" ]; then
- echo -e "${YELLOW}编译 climc...${NC}"
- GOOS=darwin CGO_ENABLED=0 go build -mod vendor -o _output/bin/climc yunion.io/x/onecloud/cmd/climc
- fi
-
- # 创建 Region
- echo -e "${YELLOW}创建 Region...${NC}"
- if ! ./_output/bin/climc region-list 2>/dev/null | grep -q "| ${REGION_NAME} "; then
- ./_output/bin/climc region-create ${REGION_NAME} 2>/dev/null
- echo -e "${GREEN}✓ Region ${REGION_NAME} 创建成功${NC}"
- else
- echo -e "${GREEN}✓ Region ${REGION_NAME} 已存在${NC}"
- fi
-
- # 创建 Zone
- echo -e "${YELLOW}创建 Zone...${NC}"
- if ! ./_output/bin/climc zone-list 2>/dev/null | grep -q "| zone0 "; then
- ./_output/bin/climc zone-create zone0 2>/dev/null
- echo -e "${GREEN}✓ Zone zone0 创建成功${NC}"
- else
- echo -e "${GREEN}✓ Zone zone0 已存在${NC}"
- fi
-
- # 定义服务和端口
- declare -A SERVICES=(
- ["region"]=${REGION_PORT}
- ["glance"]=${GLANCE_PORT}
- ["yunionconf"]=${YUNIONCONF_PORT}
- ["monitor"]=${MONITOR_PORT}
- ["scheduledtask"]=${SCHEDULEDTASK_PORT}
- ["compute_v2"]=${REGION_PORT}
- ["common"]=${REGION_PORT}
- ["yunionapi"]=${REGION_PORT}
- ["meter"]=${REGION_PORT}
- ["yunionagent"]=${REGION_PORT}
- )
-
- # 注册服务和 Endpoint
- for service_name in "${!SERVICES[@]}"; do
- port=${SERVICES[$service_name]}
- service_type=$service_name
-
- echo -e "${YELLOW}注册服务: ${service_name}${NC}"
-
- # 检查服务是否存在
- if ! ./_output/bin/climc service-list 2>/dev/null | grep -q "| ${service_name} "; then
- ./_output/bin/climc service-create ${service_type} ${service_name} 2>/dev/null
- echo -e "${GREEN} ✓ 服务 ${service_name} 创建成功${NC}"
- else
- echo -e "${GREEN} ✓ 服务 ${service_name} 已存在${NC}"
- fi
-
- # 获取服务 ID
- service_id=$(./_output/bin/climc service-show ${service_name} 2>/dev/null | grep "^| id" | awk '{print $4}')
-
- # 创建 Endpoints
- for interface in public internal admin; do
- endpoint_name="${service_name}-${interface}"
- if ! ./_output/bin/climc endpoint-list --service ${service_id} 2>/dev/null | grep -q "| ${endpoint_name} "; then
- ./_output/bin/climc endpoint-create ${service_id} ${REGION_NAME} ${interface} "http://127.0.0.1:${port}" 2>/dev/null
- echo -e "${GREEN} ✓ Endpoint ${interface} 创建成功${NC}"
- fi
- done
- done
-
- # 为 Keystone 创建 slave endpoint
- echo -e "${YELLOW}注册 Keystone slave endpoint...${NC}"
- keystone_id=$(./_output/bin/climc service-show keystone 2>/dev/null | grep "^| id" | awk '{print $4}')
- if [ -n "$keystone_id" ]; then
- if ! ./_output/bin/climc endpoint-list --service ${keystone_id} 2>/dev/null | grep -q "slave"; then
- ./_output/bin/climc endpoint-create ${keystone_id} ${REGION_NAME} slave "http://127.0.0.1:35357" 2>/dev/null
- echo -e "${GREEN}✓ Keystone slave endpoint 创建成功${NC}"
- fi
- fi
- }
- # 初始化阶段 4: 启动其他服务
- start_other_services() {
- echo -e "${GREEN}=== 阶段 4: 启动其他服务 ===${NC}"
-
- # 构建数据库连接字符串
- if [ -z "$DB_PASSWORD" ]; then
- SQL_CONNECTION="mysql+pymysql://${DB_USER}@${DB_HOST}:${DB_PORT}/${DB_NAME}?charset=utf8mb4"
- else
- SQL_CONNECTION="mysql+pymysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?charset=utf8mb4"
- fi
-
- # 通用服务启动参数
- COMMON_ARGS="--auth-url http://127.0.0.1:${KEYSTONE_PORT}/v3 --admin-user ${ADMIN_USER} --admin-password ${ADMIN_PASSWORD} --admin-project ${ADMIN_PROJECT} --admin-domain ${ADMIN_DOMAIN}"
-
- # 启动 Region
- echo -e "${YELLOW}启动 Region...${NC}"
- if [ ! -f "_output/bin/region" ]; then
- GOOS=darwin CGO_ENABLED=0 go build -mod vendor -o _output/bin/region yunion.io/x/onecloud/cmd/region
- fi
- ./_output/bin/region \
- --config /dev/null \
- --sql-connection "$SQL_CONNECTION" \
- --auto-sync-table \
- --port ${REGION_PORT} \
- ${COMMON_ARGS} \
- > logs/region.log 2>&1 &
- echo $! > logs/region.pid
- echo -e "${GREEN}✓ Region 已启动${NC}"
-
- # 创建 glance 数据目录
- mkdir -p /tmp/glance_data
-
- # 启动 Glance
- echo -e "${YELLOW}启动 Glance...${NC}"
- if [ ! -f "_output/bin/glance" ]; then
- GOOS=darwin CGO_ENABLED=0 go build -mod vendor -o _output/bin/glance yunion.io/x/onecloud/cmd/glance
- fi
- ./_output/bin/glance \
- --config /dev/null \
- --sql-connection "$SQL_CONNECTION" \
- --auto-sync-table \
- --port ${GLANCE_PORT} \
- --filesystem-store-datadir /tmp/glance_data \
- ${COMMON_ARGS} \
- > logs/glance.log 2>&1 &
- echo $! > logs/glance.pid
- echo -e "${GREEN}✓ Glance 已启动${NC}"
-
- # 启动 YunionConf
- echo -e "${YELLOW}启动 YunionConf...${NC}"
- if [ ! -f "_output/bin/yunionconf" ]; then
- GOOS=darwin CGO_ENABLED=0 go build -mod vendor -o _output/bin/yunionconf yunion.io/x/onecloud/cmd/yunionconf
- fi
- ./_output/bin/yunionconf \
- --config /dev/null \
- --sql-connection "$SQL_CONNECTION" \
- --auto-sync-table \
- --port ${YUNIONCONF_PORT} \
- ${COMMON_ARGS} \
- > logs/yunionconf.log 2>&1 &
- echo $! > logs/yunionconf.pid
- echo -e "${GREEN}✓ YunionConf 已启动${NC}"
-
- # 启动 ScheduledTask
- echo -e "${YELLOW}启动 ScheduledTask...${NC}"
- if [ ! -f "_output/bin/scheduledtask" ]; then
- GOOS=darwin CGO_ENABLED=0 go build -mod vendor -o _output/bin/scheduledtask yunion.io/x/onecloud/cmd/scheduledtask
- fi
- ./_output/bin/scheduledtask \
- --config /dev/null \
- --sql-connection "$SQL_CONNECTION" \
- --auto-sync-table \
- --port ${SCHEDULEDTASK_PORT} \
- ${COMMON_ARGS} \
- > logs/scheduledtask.log 2>&1 &
- echo $! > logs/scheduledtask.pid
- echo -e "${GREEN}✓ ScheduledTask 已启动${NC}"
-
- # 启动 APIGateway
- echo -e "${YELLOW}启动 APIGateway...${NC}"
- if [ ! -f "_output/bin/apigateway" ]; then
- GOOS=darwin CGO_ENABLED=0 go build -mod vendor -o _output/bin/apigateway yunion.io/x/onecloud/cmd/apigateway
- fi
- ./_output/bin/apigateway \
- --config /dev/null \
- --port ${APIGATEWAY_PORT} \
- ${COMMON_ARGS} \
- --default-region ${REGION_NAME} \
- > logs/apigateway.log 2>&1 &
- echo $! > logs/apigateway.pid
- echo -e "${GREEN}✓ APIGateway 已启动${NC}"
-
- # 等待所有服务就绪
- echo -e "${YELLOW}等待所有服务就绪...${NC}"
- sleep 5
- }
- # 初始化阶段 5: 初始化数据
- init_data() {
- echo -e "${GREEN}=== 阶段 5: 初始化基础数据 ===${NC}"
-
- # 等待服务完全就绪
- echo -e "${YELLOW}等待服务就绪...${NC}"
- for i in {1..30}; do
- if ./_output/bin/climc region-list > /dev/null 2>&1; then
- echo -e "${GREEN}✓ 服务已就绪${NC}"
- break
- fi
- sleep 2
- if [ $i -eq 30 ]; then
- echo -e "${RED}警告: 服务未完全就绪,继续初始化...${NC}"
- fi
- done
-
- # 创建参数
- echo -e "${YELLOW}创建系统参数...${NC}"
-
- # dashboard-system-default
- if ! ./_output/bin/climc parameter-show dashboard-system-default > /dev/null 2>&1; then
- ./_output/bin/climc parameter-create dashboard-system-default '[{"layout":{"component":"NumberCard","h":6,"w":20,"x":0,"y":0},"params":{"name":"虚拟机数量","regionAccountType":"region","usage_key":"all.servers"}},{"layout":{"component":"NumberCard","h":6,"w":20,"x":20,"y":0},"params":{"name":"宿主机数量","regionAccountType":"region","usage_key":"hosts"}},{"layout":{"component":"NumberCard","h":6,"w":20,"x":40,"y":0},"params":{"name":"物理机数量","regionAccountType":"region","usage_key":"baremetals"}},{"layout":{"component":"NumberCard","h":6,"w":20,"x":60,"y":0},"params":{"name":"存储桶数量","regionAccountType":"region","usage_key":"buckets"}}]' 2>/dev/null
- echo -e "${GREEN}✓ dashboard-system-default 创建成功${NC}"
- fi
-
- # global-settings
- if ! ./_output/bin/climc parameter-show global-settings > /dev/null 2>&1; then
- ./_output/bin/climc parameter-create global-settings '{"setupKeys":["zh-CN","en"]}' 2>/dev/null
- echo -e "${GREEN}✓ global-settings 创建成功${NC}"
- fi
-
- # widget-settings
- if ! ./_output/bin/climc parameter-show widget-settings > /dev/null 2>&1; then
- ./_output/bin/climc parameter-create widget-settings '{}' 2>/dev/null
- echo -e "${GREEN}✓ widget-settings 创建成功${NC}"
- fi
-
- # profile
- if ! ./_output/bin/climc parameter-show profile > /dev/null 2>&1; then
- ./_output/bin/climc parameter-create profile '{}' 2>/dev/null
- echo -e "${GREEN}✓ profile 创建成功${NC}"
- fi
-
- # 更新 sysadmin 用户
- echo -e "${YELLOW}更新 sysadmin 用户配置...${NC}"
- user_id=$(./_output/bin/climc user-show ${ADMIN_USER} 2>/dev/null | grep "^| id" | awk '{print $4}')
- if [ -n "$user_id" ]; then
- # 允许 Web 控制台登录
- ./_output/bin/climc user-update --allow-web-console ${ADMIN_USER} 2>/dev/null || true
-
- # 分配 admin 角色
- project_id=$(./_output/bin/climc project-show ${ADMIN_PROJECT} 2>/dev/null | grep "^| id" | awk '{print $4}')
- if [ -n "$project_id" ]; then
- ./_output/bin/climc project-add-user ${ADMIN_PROJECT} ${ADMIN_USER} admin 2>/dev/null || true
- fi
- echo -e "${GREEN}✓ sysadmin 用户配置更新成功${NC}"
- fi
- }
- # 初始化阶段 6: 初始化 RBAC 策略
- init_policies() {
- echo -e "${GREEN}=== 阶段 6: 初始化 RBAC 策略 ===${NC}"
-
- # 检查 policy 表是否为空
- policy_count=$(./_output/bin/climc policy-list 2>/dev/null | grep -c "^| " || echo "0")
- if [ "$policy_count" -gt "2" ]; then
- echo -e "${GREEN}✓ 策略已存在,跳过初始化${NC}"
- return
- fi
-
- echo -e "${YELLOW}创建默认策略...${NC}"
-
- # 创建系统管理员策略
- sysadmin_policy='{"policy":{"compute":{"servers":"allow","hosts":"allow","zones":"allow","cloudregions":"allow"},"identity":{"users":"allow","projects":"allow","roles":"allow","policies":"allow","domains":"allow"},"image":{"images":"allow"},"yunionconf":{"parameters":"allow"}}}'
-
- if ! ./_output/bin/climc policy-show sysadmin-system-policy > /dev/null 2>&1; then
- ./_output/bin/climc policy-create --type admin --scope system sysadmin-system-policy "${sysadmin_policy}" 2>/dev/null
- echo -e "${GREEN}✓ sysadmin-system-policy 创建成功${NC}"
- fi
-
- # 绑定策略到角色
- admin_role_id=$(./_output/bin/climc role-show admin 2>/dev/null | grep "^| id" | awk '{print $4}')
- if [ -n "$admin_role_id" ]; then
- # 检查是否已绑定
- if ! ./_output/bin/climc policy-binding-list --role ${admin_role_id} 2>/dev/null | grep -q "sysadmin-system-policy"; then
- ./_output/bin/climc policy-binding-create --role ${admin_role_id} sysadmin-system-policy 2>/dev/null || true
- echo -e "${GREEN}✓ 策略绑定成功${NC}"
- fi
- fi
- }
- # 打印完成信息
- print_completion() {
- echo ""
- echo -e "${GREEN}========================================${NC}"
- echo -e "${GREEN} Cloudpods 初始化完成!${NC}"
- echo -e "${GREEN}========================================${NC}"
- echo ""
- echo -e "${BLUE}服务地址:${NC}"
- echo " Keystone: http://127.0.0.1:${KEYSTONE_PORT}"
- echo " Region: http://127.0.0.1:${REGION_PORT}"
- echo " Glance: http://127.0.0.1:${GLANCE_PORT}"
- echo " YunionConf: http://127.0.0.1:${YUNIONCONF_PORT}"
- echo " ScheduledTask:http://127.0.0.1:${SCHEDULEDTASK_PORT}"
- echo " APIGateway: http://127.0.0.1:${APIGATEWAY_PORT}"
- echo ""
- echo -e "${BLUE}管理信息:${NC}"
- echo " 管理员账号: ${ADMIN_USER}"
- echo " 管理员密码: ${ADMIN_PASSWORD}"
- echo " 项目: ${ADMIN_PROJECT}"
- echo " Domain: ${ADMIN_DOMAIN}"
- echo ""
- echo -e "${BLUE}前端访问:${NC}"
- echo " http://localhost:8080"
- echo ""
- echo -e "${BLUE}常用命令:${NC}"
- echo " 查看日志: tail -f backend/logs/*.log"
- echo " 停止服务: ./backend/stop-backend.sh"
- echo " 服务状态: ps aux | grep -E 'keystone|region|glance|yunionconf|scheduledtask|apigateway'"
- echo ""
- }
- # 主流程
- main() {
- echo -e "${GREEN}========================================${NC}"
- echo -e "${GREEN} Cloudpods 统一初始化脚本${NC}"
- echo -e "${GREEN}========================================${NC}"
- echo ""
-
- # 加载配置
- load_config
- setup_defaults
- print_config
-
- # 确认初始化
- if [ "$SKIP_CONFIRM" != "true" ]; then
- echo -e "${YELLOW}警告: 这将删除现有的数据库并重新初始化所有数据!${NC}"
- read -p "是否继续? (y/N): " confirm
- if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
- echo -e "${YELLOW}已取消初始化${NC}"
- exit 0
- fi
- fi
-
- # 执行初始化阶段
- init_database
- init_services
- init_keystone
- start_other_services
- init_data
- init_policies
-
- # 打印完成信息
- print_completion
- }
- # 处理命令行参数
- while [[ $# -gt 0 ]]; do
- case $1 in
- --config)
- INIT_CONFIG_FILE="$2"
- shift 2
- ;;
- --skip-confirm)
- SKIP_CONFIRM="true"
- shift
- ;;
- --help)
- echo "Cloudpods 统一初始化脚本"
- echo ""
- echo "用法: $0 [选项]"
- echo ""
- echo "选项:"
- echo " --config <文件> 指定配置文件 (默认: init-config.env)"
- echo " --skip-confirm 跳过确认提示"
- echo " --help 显示帮助信息"
- echo ""
- echo "环境变量:"
- echo " DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME"
- echo " ADMIN_USER, ADMIN_PASSWORD, ADMIN_PROJECT, ADMIN_DOMAIN"
- echo " REGION_NAME, KEYSTONE_PORT, etc."
- echo ""
- exit 0
- ;;
- *)
- echo "未知选项: $1"
- echo "使用 --help 查看帮助"
- exit 1
- ;;
- esac
- done
- # 运行主流程
- main
|