#!/bin/bash # Ansible Playbooks 分类运行脚本 # 使用方法: ./run-playbook.sh [category] [playbook] [hosts] set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PLAYBOOKS_DIR="$SCRIPT_DIR/playbooks" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 显示使用帮助 show_help() { echo -e "${BLUE}Ansible Playbooks 分类运行脚本${NC}" echo "" echo "使用方法:" echo " $0 [category] [playbook] [hosts]" echo "" echo "可用分类:" echo -e " ${GREEN}01-system${NC} - 系统管理 (更新、清理、定时任务)" echo -e " ${GREEN}02-security${NC} - 安全管理 (安全加固、证书管理)" echo -e " ${GREEN}03-services${NC} - 服务管理 (Docker、容器服务)" echo -e " ${GREEN}04-monitoring${NC} - 监控检查 (健康检查、网络连接)" echo -e " ${GREEN}05-cloud${NC} - 云服务商专用" echo -e " ${GREEN}99-tools${NC} - 工具和集成" echo "" echo "示例:" echo " $0 list # 列出所有可用的 playbooks" echo " $0 01-system system-update.yml all # 在所有主机上运行系统更新" echo " $0 03-services docker-status-check.yml hcp # 在 hcp 组上检查 Docker 状态" echo " $0 04-monitoring network-connectivity.yml dev1 # 在 dev1 主机上检查网络连接" } # 列出所有可用的 playbooks list_playbooks() { echo -e "${BLUE}可用的 Ansible Playbooks:${NC}" echo "" for category in $(ls -1 "$PLAYBOOKS_DIR" | sort); do if [ -d "$PLAYBOOKS_DIR/$category" ]; then echo -e "${GREEN}📁 $category${NC}" for playbook in $(ls -1 "$PLAYBOOKS_DIR/$category"/*.yml 2>/dev/null | sort); do if [ -f "$playbook" ]; then basename_playbook=$(basename "$playbook") echo -e " └── ${YELLOW}$basename_playbook${NC}" fi done echo "" fi done } # 运行指定的 playbook run_playbook() { local category="$1" local playbook="$2" local hosts="$3" local playbook_path="$PLAYBOOKS_DIR/$category/$playbook" if [ ! -f "$playbook_path" ]; then echo -e "${RED}错误: Playbook 文件不存在: $playbook_path${NC}" exit 1 fi echo -e "${GREEN}运行 Playbook:${NC} $category/$playbook" echo -e "${GREEN}目标主机:${NC} $hosts" echo "" # 运行 ansible-playbook ansible-playbook -i inventory.ini "$playbook_path" --limit "$hosts" } # 主逻辑 case "${1:-}" in "help"|"-h"|"--help"|"") show_help ;; "list"|"ls") list_playbooks ;; *) if [ $# -lt 3 ]; then echo -e "${RED}错误: 参数不足${NC}" echo "" show_help exit 1 fi category="$1" playbook="$2" hosts="$3" if [ ! -d "$PLAYBOOKS_DIR/$category" ]; then echo -e "${RED}错误: 分类目录不存在: $category${NC}" echo "" list_playbooks exit 1 fi run_playbook "$category" "$playbook" "$hosts" ;; esac