#!/usr/bin/env bash clear # Test if jq is installed if type jq &>/dev/null; then # Config file config="config.json" # Set config parameters to assign to variables config_token=$(jq .token $config | sed -e 's/\"//g') config_server_port=$(jq .server_port $config | sed -e 's/\"//g') config_ssl=$(jq .ssl $config | sed -e 's/\"//g') config_web_connect=$(jq .web_connect $config | sed -e 's/\"//g') hb(){ clear echo "Heartbeat is now checking....." if [ "${config_ssl}" == "true" ]; then curl -s "https://${config_web_connect}:${config_server_port}/hb?token=${config_token}" else curl -s "http://${config_web_connect}:${config_server_port}/hb?token=${config_token}" fi logs } nodes(){ clear echo "Active Nodes:" if [ "${config_ssl}" == "true" ]; then echo;curl -s "https://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq -r '.data[] | "\(.hostname)"';echo else echo;curl -s "http://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq -r '.data[] | "\(.hostname)"';echo fi } metrics(){ clear echo "Nodes Metrics" if [ "${config_ssl}" == "true" ]; then echo;curl -s "https://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq -r '.data[] | "\(.hostname) CPU: \(.cpu_percent) Memory: \(.memory_percentage) Disk: \(.disk_percentage) Running: \(.total_running_containers) "' else echo;curl -s "http://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq -r '.data[] | "\(.hostname) CPU: \(.cpu_percent) Memory: \(.memory_percentage) Disk: \(.disk_percentage) Running: \(.total_running_containers) Network In : \(.network_rx) Network Out : \(.network_tx)"';echo fi } stop(){ clear echo "Stopping the container(s)....." if [ "${config_ssl}" == "true" ]; then curl -s -G -d "token=${config_token}&container=$1&operation=stop" "https://${config_web_connect}:${config_server_port}/manage" else curl -s -G -d "token=${config_token}&container=$1&operation=stop" "http://${config_web_connect}:${config_server_port}/manage" fi } images(){ clear echo "Gathering a list of images....." if [ "${config_ssl}" == "true" ]; then curl -s "https://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq -r '.data[] | "\(.hostname) \(.images)"' else curl -s "http://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq -r '.data[] | "\(.hostname) \(.images)"' fi } addimage(){ clear if [ "${config_ssl}" == "true" ]; then echo "Uploading container zip file to Server......." curl -X POST -F "file=@$1" -F "token=${config_token}" "https://${config_web_connect}:${config_server_port}/receive-file" echo else echo "Uploading container Zip file to Server......." curl -X POST -F "file=@$1" -F "token=${config_token}" "http://${config_web_connect}:${config_server_port}/receive-file" echo fi } shell(){ clear echo "Running the command....." if [ "${config_ssl}" == "true" ]; then curl -H "Content-Type: application/json" -X POST -d '{"command":"'"$1"'","token":"'"${config_token}"'"}' "https://${config_web_connect}:${config_server_port}/exec" else curl -H "Content-Type: application/json" -X POST -d '{"command":"'"$1"'","token":"'"${config_token}"'"}' "http://${config_web_connect}:${config_server_port}/exec" fi } clean(){ clear echo "Cleaning stale Docker images and containers...." if [ "${config_ssl}" == "true" ]; then curl -s "https://${config_web_connect}:${config_server_port}/prune?token=${config_token}" else curl -H "Content-Type: application/json" -X POST -d '{"token":"'"${config_token}"'"}' "http://${config_web_connect}:${config_server_port}/prune" fi } build() { clear echo "Building the container(s). This may take a while......" if [ "${config_ssl}" == "true" ]; then curl -s -G -d "token=${config_token}&container=$1&no_cache=1&operation=build" "https://${config_web_connect}:${config_server_port}/manage-image" else curl -s -G -d "token=${config_token}&container=$1&no_cache=1&operation=build" "http://${config_web_connect}:${config_server_port}/manage-image" fi } logs(){ sleep 5 clear echo "Checking the logs....." if [ "${config_ssl}" == "true" ]; then curl -s "https://${config_web_connect}:${config_server_port}/log?token=${config_token}" else curl -s "http://${config_web_connect}:${config_server_port}/log?token=${config_token}" fi } create() { clear echo "Running the container(s)....." if [ "${config_ssl}" == "true" ]; then curl -s -G -d "token=${config_token}&container=$1&operation=create" "https://${config_web_connect}:${config_server_port}/manage" else curl -s -G -d "token=${config_token}&container=$1&operation=create" "http://${config_web_connect}:${config_server_port}/manage" fi } start(){ clear echo "Starting the container(s)....." if [ "${config_ssl}" == "true" ]; then curl -s -G -d "token=${config_token}&container=$1&operation=start" "https://${config_web_connect}:${config_server_port}/manage" else curl -s -G -d "token=${config_token}&container=$1&operation=start" "http://${config_web_connect}:${config_server_port}/manage" fi } restart(){ clear echo "Restarting the container(s)....." if [ "${config_ssl}" == "true" ]; then curl -s -G -d "token=${config_token}&container=$1&operation=restart" "https://${config_web_connect}:${config_server_port}/manage" else curl -s -G -d "token=${config_token}&container=$1&operation=restart" "http://${config_web_connect}:${config_server_port}/manage" fi } changehost(){ clear echo "Changing the host....." if [ "${config_ssl}" == "true" ]; then curl -s -G -d "token=${config_token}&newhost=$2&container=$1" "https://${config_web_connect}:${config_server_port}/changehost" else curl -s -G -d "token=${config_token}&newhost=$2&container=$1" "http://${config_web_connect}:${config_server_port}/changehost" fi } delete(){ clear echo "Deleting the container(s)....." if [ "${config_ssl}" == "true" ]; then curl -s -G -d "token=${config_token}&container=$1&operation=rm" "https://${config_web_connect}:${config_server_port}/manage" else curl -s -G -d "token=${config_token}&container=$1&operation=rm" "http://${config_web_connect}:${config_server_port}/manage" fi } status() { clear echo "Checking the status....." if [ "${config_ssl}" == "true" ]; then curl -s "http://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq ".data[].running_containers" else curl -s "http://${config_web_connect}:${config_server_port}/nodes?token=${config_token}" | jq -r '.data[] | "\(.hostname) \(.running_containers)"' fi } if [ -z "$1" ]; then echo "Error, no args specified!" echo arguments="build metrics addimage nodes images start create status exec start stop clean " echo "Valid arguments are: $arguments" echo exit fi; if [ "$1" = "hb" ]; then hb;exit; fi; if [ "$1" = "exec" ]; then shell "$2";exit; fi; if [ "$1" = "metrics" ]; then metrics "$2";exit; fi; if [ "$1" = "status" ]; then echo "Gathering Cluster Status....";status;exit; fi; if [ "$1" = "nodes" ]; then nodes;exit; fi; if [ "$1" = "addimage" ]; then addimage "$2";exit; fi; if [ "$1" = "clean" ]; then clean;exit; fi; if [ "$1" = "images" ]; then images;exit; fi; if [ "$1" = "log" ]; then echo "Gathering Logs....";logs;exit; fi; if [ "$1" = "restart" ]; then restart "$2";exit; fi; if [ "$1" = "changehost" ]; then changehost "$2" "$3";exit; fi; if [ "$1" = "delete" ]; then delete "$2";exit; fi; if [ "$1" = "build" ]; then echo "Building Images....";build "$2"; fi; if [ "$1" = "start" ]; then echo "Running container(s)....";start "$2"; fi; if [ "$1" = "stop" ]; then echo "Stopping container(s)....";stop "$2"; fi; if [ "$1" = "create" ]; then echo "Creating container(s)....";create "$2"; fi; else echo "Please install jq" fi