#!/bin/bash # Main launcher script for terraform image management tools # This script provides a menu interface to run the other scripts in proper order # Function to display usage usage() { echo "Usage: $0 [options]" echo " options:" echo " -h, --help Display this help message" echo " -y, --yes Automatically answer 'yes' to all prompts" echo " -n, --no Automatically answer 'no' to all prompts" echo "" echo "Example:" echo " $0 # Interactive mode with default 'yes'" echo " $0 -y # Non-interactive mode with auto 'yes'" echo " $0 -n # Non-interactive mode with auto 'no'" exit 1 } # Parse command line arguments AUTO_YES=false AUTO_NO=false while [[ $# -gt 0 ]]; do case $1 in -h|--help) usage ;; -y|--yes) AUTO_YES=true shift ;; -n|--no) AUTO_NO=true shift ;; *) echo "Unknown option: $1" usage ;; esac done # Function to get user confirmation confirm() { local prompt="$1" local default="$2" # "yes" or "no" if [[ "$AUTO_YES" = true ]]; then echo "$prompt [Y/n]: yes" return 0 elif [[ "$AUTO_NO" = true ]]; then echo "$prompt [y/N]: no" return 1 fi # Default behavior - yes is default if [[ "$default" = "no" ]]; then echo -n "$prompt [y/N]: " else echo -n "$prompt [Y/n]: " fi read -r answer # If empty answer, use default if [[ -z "$answer" ]]; then answer="$default" fi # Convert to lowercase for comparison answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]') if [[ "$answer" = "y" || "$answer" = "yes" ]]; then return 0 else return 1 fi } # Function to check if a script exists and is executable check_script() { local script="$1" if [[ ! -f "$script" ]] || [[ ! -x "$script" ]]; then echo "Error: Script '$script' not found or not executable" return 1 fi return 0 } # Function to run a script with proper error handling run_script() { local script="$1" local description="$2" local args="$3" echo "=== $description ===" if check_script "$script"; then if [[ -n "$args" ]]; then echo "Running: $script $args" "$script" "$args" else echo "Running: $script" "$script" fi local exit_code=$? if [[ $exit_code -eq 0 ]]; then echo "✓ $description completed successfully" return 0 else echo "✗ $description failed with exit code $exit_code" return 1 fi else echo "✗ $description skipped due to missing script" return 1 fi } # Function to check if libvirt images directory exists check_images_directory() { local image_dir="/var/lib/libvirt/images" if [[ ! -d "$image_dir" ]]; then echo "Warning: Directory $image_dir does not exist" if confirm "Would you like to create it?" "yes"; then if ! sudo mkdir -p "$image_dir"; then echo "Error: Could not create directory $image_dir" return 1 fi echo "Directory $image_dir created successfully" else echo "Skipping image directory check" fi else echo "Directory $image_dir exists" fi return 0 } # Main execution logic main() { echo "=== Terraform Image Management Launcher ===" echo # Validate image directory if ! check_images_directory; then echo "Exiting due to image directory issues" exit 1 fi echo # Ask if user wants to download images if confirm "Do you want to download OS images?" "yes"; then if ! run_script "./download_images.sh" "Downloading OS Images"; then echo "Image download failed. Proceeding to update script..." fi fi echo # Ask if user wants to update image locations if confirm "Do you want to update image locations to use local files?" "yes"; then if ! run_script "./update_image_locations.sh" "Updating Image Locations"; then echo "Image location update failed" exit 1 fi fi echo # Ask if user wants to update SSH keys if confirm "Do you want to update SSH keys in terraform files?" "yes"; then if ! run_script "./update_ssh_keys.sh" "Updating SSH Keys"; then echo "SSH key update failed" exit 1 fi fi echo echo "=== All operations completed ===" } # Run main function if script is executed directly if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main "$@" fi