109 lines
3.2 KiB
Bash
Executable File
109 lines
3.2 KiB
Bash
Executable File
#!/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 |