Files
devops/orchestrate/ansible.sh
T

217 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
#
# Busnet Ansible
# @author Craig McDaniel
#
# This script uses Ansible to provision computers in the BusNet.
#
INCLUDE_DIR="/opt/busnet/git/devops/orchestrate/lib"
# Read in libs
source ${INCLUDE_DIR}/lib.sh
COMMAND=$1
# Show help text
show_help()
{
echo
echo "BusNet ansible script."
echo
echo "Usage: $0 <command>"
echo
echo "General Ansible stuff:"
echo "---------------------------------------------------------------------------------------------------------------"
echo " --build Build the Anisble docker image. We use this everywhere."
echo " --run Start bash shell inside the ansible container."
echo " --bootstrap-server Bootstrap a brand new server for the first time. This executes the Ansible bootstrap"
echo " role on it. Run this once."
echo
echo "scanner.busnet:"
echo "---------------------------------------------------------------------------------------------------------------"
echo " --scanner-ax25 Set up base AX.25 stack with dedicated VHF radio with digirig, etc..."
echo " --scanner-airspy-aprs Set up AirSpy APRS receiver."
echo " --scanner-ft991a Set up udev rules, rigctld and direwolf for the Yaesu FT-991a radio."
echo " --scanner-pat Install and configure pat winlink client."
echo " --scanner-hamlib Install and configure hamlib."
echo " --scanner-pulseaudio Install and configure PulseAudio for network audio streaming."
echo
}
# Main entry point.
main()
{
# Account/billing server
if [ "${COMMAND}" = "--run" ]; then
docker_run_it 'ansible-busnet:latest' runner bash
elif [ "${COMMAND}" = "--bootstrap-server" ]; then
ansible_bootstrap_server
elif [ "${COMMAND}" = "--build" ]; then
ansible_build
elif [ "${COMMAND}" = "--scanner-ax25" ]; then
scanner_ax25
elif [ "${COMMAND}" = "--scanner-airspy-aprs" ]; then
scanner_airspy_aprs
elif [ "${COMMAND}" = "--scanner-ft991a" ]; then
scanner_ft991a
elif [ "${COMMAND}" = "--scanner-hamlib" ]; then
scanner_hamlib
elif [ "${COMMAND}" = "--scanner-pat" ]; then
scanner_pat
elif [ "${COMMAND}" = "--scanner-pulseaudio" ]; then
scanner_pulseaudio
# Show Help
else
show_help
fi
}
ansible_bootstrap_server()
{
# Check if the private key exists before proceeding.
local PRIVATE_KEY_PATH="${HOME}/.ssh/${CONFIG_ANSIBLE_KEY_NAME}"
local PUBLIC_KEY_PATH="${PRIVATE_KEY_PATH}.pub"
if [[ ! -f "$PUBLIC_KEY_PATH" ]]; then
echo "Error: Public key not found at $PUBLIC_KEY_PATH"
echo "The function generate_busnet_key() should have generated one already. Something did not work correctly. Doing nothing."
return 1 # Exit the function with an error code
fi
echo "Bootstrap a new server!"
echo "This will copy the SSH key and execute the ansible bootstrap role."
echo
echo "The hostname you enter below MUST be added to Ansible inventory first. If it's not, go add it now!"
echo
# Prompt for the hostname and the user to connect as.
read -e -p "Enter the hostname of the server: " HOSTNAME
read -e -p "Enter the remote username (e.g., ec2-user): " USERNAME
echo
# Copy the SSH public key to the remote server.
echo "Attempting to copy SSH key to ${USERNAME}@${HOSTNAME}..."
if ssh-copy-id -i "${PRIVATE_KEY_PATH}" "${USERNAME}"@"${HOSTNAME}"; then
echo "SSH key copied successfully."
else
echo "Error: Failed to copy SSH key. Please check the hostname, username, and your SSH connection."
return 1
fi
echo
echo "Running the Ansible playbook..."
ansible_playbook playbooks/general/bootstrap.yml "hostname=${HOSTNAME}"
if [ $? != 0 ]; then
echo
echo "Ansible playbook execution failed."
echo
else
echo
echo "Ansible playbook execution complete."
echo
fi
}
scanner_ax25()
{
ansible_playbook playbooks/scanner/scanner.yml run_ax25=1
if [ $? != 0 ]; then
echo
echo "Ansible playbook execution failed."
echo
else
echo
echo "Ansible playbook execution complete."
echo
fi
}
scanner_airspy_aprs()
{
ansible_playbook playbooks/scanner/scanner.yml run_airspy_aprs=1
if [ $? != 0 ]; then
echo
echo "Ansible playbook execution failed."
echo
else
echo
echo "Ansible playbook execution complete."
echo
fi
}
scanner_ft991a()
{
ansible_playbook playbooks/scanner/scanner.yml run_ft991a=1
if [ $? != 0 ]; then
echo
echo "Ansible playbook execution failed."
echo
else
echo
echo "Ansible playbook execution complete."
echo
fi
}
scanner_hamlib()
{
ansible_playbook playbooks/scanner/scanner.yml run_hamlib=1
if [ $? != 0 ]; then
echo
echo "Ansible playbook execution failed."
echo
else
echo
echo "Ansible playbook execution complete."
echo
fi
}
scanner_pat()
{
ansible_playbook playbooks/scanner/scanner.yml run_pat=1
if [ $? != 0 ]; then
echo
echo "Ansible playbook execution failed."
echo
else
echo
echo "Ansible playbook execution complete."
echo
fi
}
scanner_pulseaudio()
{
ansible_playbook playbooks/scanner/scanner.yml run_pulseaudio=1
if [ $? != 0 ]; then
echo
echo "Ansible playbook execution failed."
echo
else
echo
echo "Ansible playbook execution complete."
echo
fi
}
# Start the script
main