123 lines
3.1 KiB
Bash
Executable File
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 "$@" |