diff --git a/api.sh b/api.sh new file mode 100755 index 0000000..da347d7 --- /dev/null +++ b/api.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash + +APIKEY="2q2jXBDQ9nq40KEZWoJAUMefV9JvkpRF9Se6JQW9eGceHPtTtsJIeWWp6FeJk5Es" +XI_URL="https://192.168.1.19/nagiosxi" +curl="curl -k -s" +# curl -XGET "https://192.168.1.19/nagiosxi/api/v1/objects/service?apikey=" + +hostgroup="" +api_start="" +api_command="" + +while [ -n "$1" ]; do + case "$1" in + -g|--group|--hostgroup) hostgroup="$2"; shift 2;; + --start) api_start="$2"; shift 2;; + --command) api_command="$2"; shift 2;; + *) shift 1;; + esac +done + +do_api() { + api_start="$1" + api_command="$2" + url="${XI_URL}/nagiosxi/api/v1/${api_start}/${api_command}?apikey=${APIKEY}&pretty=0" + $curl -XGET -k "$url" +} + +# If we were given specific API start/commands, then let's do that and exit +if [ -n "$api_start" -a -n "$api_command" ]; then + do_api ${api_start} ${api_command} + exit +fi + +if [ -z "$hostgroup" ]; then + echo "You did not specify a hostgroup to pull hosts and services for. Please try again." + exit +fi + +# Verify that we were given a valid hostgroup and grab its hosts +# For extracting JSON data into JSON data, use @csv +#members=`do_api config hostgroup | jq -r ".[] | select (.hostgroup_name==\"${hostgroup}\") | .members | @csv"` +members=`do_api config hostgroup | jq -rc ".[] | select (.hostgroup_name==\"${hostgroup}\") | .members | .[]"` +if [ -z "$members" ]; then + echo "Hostgroup: $hostgroup not found." + exit +fi + +# Grab a copy of the hosts.json so we don't have to keep making calls over and over +tmpJSON=`mktemp` + +# Create the hosts file +create_host() { + host="$1" + echo "# Creating $host..." + echo "define host {" + while read key; do + val=`cat $tmpJSON | jq -r ".[] | select (.host_name==\"$host\") .${key} | if type==\"string\" then [.] else . end | .[]" | tr "\n" "," | sed -e "s/,$/\n/"` + echo " $key $val" + done + echo "}" + echo "" +} + +# Create the services file +create_service() { + host="$1" + echo "# Creating $host services..." + echo "define host {" + while read key; do + val=`cat $tmpJSON | jq -r ".[] | select (.host_name==\"$host\") .${key} | if type==\"string\" then [.] else . end | .[]" | tr "\n" "," | sed -e "s/,$/\n/"` + echo " $key $val" + done + echo "}" + echo "" +} + +echo "# Creating new host config file for hostgroup: $hostgroup" +do_api config host > $tmpJSON +for member in $members; do + cat $tmpJSON | jq -r ".[] | select (.host_name==\"$member\") | keys | .[]" | create_host $member +done +echo "# Done with host configuration" +echo "#" +echo "#" +echo "# Creating services" + +do_api object servicestatus > $tmpJSON +for member in $members; do + cat $tmpJSON | jq ".servicestatus[] | select (.host_name==\"$member\")" | create_service $member +done +echo "# Done with services" +echo "# Done" + +rm $tmpJSON