#!/bin/bash #############VARIABLE LAND############# ROOT=(-e 'ansible_become=false') HOSTS_FILE="/root/templates/root.ini" PASSWORD=(-k) PLAYBOOK=/root/playbooks/master.yml PORT=22 ANSIBLE_PORT=() SERVERS_JSON="/root/servers.json" LXC_JSON="/root/porygon_lxc_servers.json" PORYGON_LXC_IP="1.2.3.4" PORYGON_LXC_KEY="/path/2/key" ###########FUNCTIONS############# intro() { cat "/root/templates/porygon.txt" echo "management tool for adding a new server to the porygon monitoring system" echo "assumes by default the ssh port is 22, root is the user and password auth is employed" echo -e "run porygon-management -h to see help and other options\n" } main() { read -p "enter the server's hostname: " HOSTNAME read -p "enter the server's IP: " IP echo "trusting remote ssh host key" ssh-keyscan -H "$IP" >> /root/.ssh/known_hosts || { echo "failed to trust remote host key" exit 1 } check file_making ansible-playbook -i /root/hosts.ini "$PLAYBOOK" "${PASSWORD[@]}" "${ANSIBLE_PORT[@]}" "${ROOT[@]}" "${SUDO[@]}" "${APPEND[@]}" || { echo "failed to run ansible playbook" exit 1 } echo -e "\nansible playbook ran successfully\nporygon monitoring now set up on $HOSTNAME\n\\(^0^)/ LET'S GO\n" json_handling web_handling echo "running scraper.py" /root/scraper.py echo -e "\nall done, all successful\n\\(^0^)/" TO_ADD=$(sed 's/\$HOSTNAME/'"$HOSTNAME"'/g' /root/templates/main-page-paste.html) echo -e "place the following into /var/www/porygon/index.html\n\n$TO_ADD" } check() { echo -e "\nis this correct?\n HOSTNAME = "$HOSTNAME" IP = "$IP" y/n - q to quit" read ANSWER case "$ANSWER" in y) ;; n) main ;; q) echo "exiting...." exit 0 ;; *) check ;; esac } file_making() { REPLACE='s/\$IP/'"$IP"'/g; s/\$USER/'"$USER"'/g' echo "creating hosts.ini file" sed "$REPLACE" "$HOSTS_FILE" > /root/hosts.ini || { echo failed to create hosts.ini exit 1 } } json_handling() { echo "backing up the servers.json file" cp "$SERVERS_JSON" "$SERVERS_JSON".old echo "updating servers.json" jq --arg hostname "$HOSTNAME" \ --arg ip "$IP" \ --arg port "$PORT" \ '. + {($hostname): {"ip": $ip, "port": $port}}' "$SERVERS_JSON" > /tmp/servers.json || { echo "failed to update servers.json file" exit 1 } mv /tmp/servers.json "$SERVERS_JSON" echo "updating the servers.json file for porygon-lxc" jq --arg hostname "$HOSTNAME" \ --arg ip "$IP" \ '. + {$hostname: $ip}' \ "$LXC_JSON" > /tmp/servers.json || { echo "failed to update porygon lxc json file" exit 1 } mv /tmp/servers.json "$LXC_JSON" echo "copying over new json to porygon lxc" ssh -i "$PORYGON_LXC_KEY" root@"$PORYGON_LXC_IP" 'cp /root/servers.json /root/servers.json.old' scp -i "$PORYGON_LXC_KEY" "$LXC_JSON" root@"$PORYGON_LXC_IP":/root/servers.json } web_handling() { echo "making directory for apache" [ -d /var/www/porygon/"$HOSTNAME" ] || mkdir /var/www/porygon/"$HOSTNAME" cp /root/templates/metrics_page.html /var/www/porygon/"$HOSTNAME"/index.html } ######RUNNING INTRO########### intro #######DEFINING FLAGS############ while getopts "udkph" flag; do case "$flag" in u) read -p "enter the username under which ansible with run: " USER ROOT=() HOSTS_FILE="/root/templates/user.ini" SUDO=(--become --ask-become-pass) ;; d) echo -e "ansible debug mode chosen\n" APPEND=(-vvv) ;; k) read -p "enter the path to the SSH key used to connect: " KEY PASSWORD=(--private-key "$KEY") ;; p) read -p "enter the port to connect over ssh with: " PORT ANSIBLE_PORT=(-e ansible_port="$PORT") ;; h) echo -e "Options:\n-d - DEBUG - runs ansible with verbose (-vvv) flags\n\ -h - HELP - displays this help page\n-k - KEY - specifies connecting over ssh with a private key\n\ -p - PORT - specifies which port to connect over ssh with\n\ -u - USER - specifies a user to connect over ssh and run the ansible playbook with" exit 0 ;; *) echo "ILLEGAL OPTION :D" exit 1 ;; esac done ########RUNNING MAIN########## main