mgmt/ansible/run.sh

123 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# Ansible Playbook Runner Script
# Usage: ./run.sh -dev (or any group name)
# Set script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INVENTORY_FILE="$SCRIPT_DIR/inventory.ini"
PLAYBOOK_FILE="$SCRIPT_DIR/system-update.yml"
# Function to display usage
show_usage() {
echo "Usage: $0 -<group_name>"
echo ""
echo "Examples:"
echo " $0 -dev # Run on dev group (dev1, dev2)"
echo " $0 -prod # Run on prod group"
echo " $0 -all # Run on all hosts"
echo ""
echo "Available groups in inventory:"
grep '^\[' "$INVENTORY_FILE" | grep -v ':vars' | sed 's/\[//g' | sed 's/\]//g' | sort
}
# Function to check if group exists in inventory
check_group_exists() {
local group_name="$1"
if [ "$group_name" = "all" ]; then
return 0
fi
if grep -q "^\[$group_name\]" "$INVENTORY_FILE"; then
return 0
else
return 1
fi
}
# Function to run ansible playbook
run_playbook() {
local group_name="$1"
echo "========================================="
echo "Running Ansible Playbook on group: $group_name"
echo "========================================="
echo "Inventory: $INVENTORY_FILE"
echo "Playbook: $PLAYBOOK_FILE"
echo "Target: $group_name"
echo "========================================="
echo ""
# Set environment variables for better output
export LANG=C
export ANSIBLE_HOST_KEY_CHECKING=False
# Run the playbook
cd "$SCRIPT_DIR"
ansible-playbook -i "$INVENTORY_FILE" "$PLAYBOOK_FILE" --limit "$group_name" -v
local exit_code=$?
echo ""
echo "========================================="
if [ $exit_code -eq 0 ]; then
echo "✅ Playbook execution completed successfully!"
else
echo "❌ Playbook execution failed with exit code: $exit_code"
fi
echo "========================================="
return $exit_code
}
# Main script logic
main() {
# Check if argument is provided
if [ $# -eq 0 ]; then
echo "❌ Error: No group specified"
echo ""
show_usage
exit 1
fi
# Parse argument
local arg="$1"
if [[ "$arg" =~ ^-(.+)$ ]]; then
local group_name="${BASH_REMATCH[1]}"
else
echo "❌ Error: Invalid argument format. Use -<group_name>"
echo ""
show_usage
exit 1
fi
# Check if files exist
if [ ! -f "$INVENTORY_FILE" ]; then
echo "❌ Error: Inventory file not found: $INVENTORY_FILE"
exit 1
fi
if [ ! -f "$PLAYBOOK_FILE" ]; then
echo "❌ Error: Playbook file not found: $PLAYBOOK_FILE"
exit 1
fi
# Check if group exists
if ! check_group_exists "$group_name"; then
echo "❌ Error: Group '$group_name' not found in inventory"
echo ""
show_usage
exit 1
fi
# Run the playbook
run_playbook "$group_name"
}
# Handle help argument
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_usage
exit 0
fi
# Run main function
main "$@"