From 405aeddf46b7bf4d5abf93d3066146e10d253b01 Mon Sep 17 00:00:00 2001 From: Eric Loyd Date: Mon, 13 May 2024 07:47:29 -0400 Subject: [PATCH] More changes to api.sh --- api.sh | 103 ++++++++++++++++++++++++++------------------------------- 1 file changed, 46 insertions(+), 57 deletions(-) diff --git a/api.sh b/api.sh index da347d7..6c7fa0b 100755 --- a/api.sh +++ b/api.sh @@ -5,13 +5,31 @@ 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="" +myHost="" +myService="" +myHG="" +mySG="" +myFields="" +myCommand="" +mySave="" +myFile="" +tmpJSON="" + api_start="" api_command="" while [ -n "$1" ]; do case "$1" in - -g|--group|--hostgroup) hostgroup="$2"; shift 2;; + --key) APIKEY="$2"; shift 2;; + --url) XI_URL="$2"; shift 2;; + --save) mySave="$2"; shift 2;; + --file) myFile="$2"; shift 2;; + -f|--fields) myFields="$2"; shift 2;; + -h|--host) myHost="$2"; shift 2;; + -s|--service) myService="$2"; shift 2;; + -c|--command) myCommand="$2"; shift 2;; + -hg|--hostgroup) myHG="$2"; shift 2;; + -sg|--servicegroup) mySG="$2"; shift 2;; --start) api_start="$2"; shift 2;; --command) api_command="$2"; shift 2;; *) shift 1;; @@ -31,64 +49,35 @@ if [ -n "$api_start" -a -n "$api_command" ]; then 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 +# Parse our string +jqString='.servicestatus[]' +[ -n "$myHost" ] && jqString="$jqString | select(.host_name | test(\"$myHost\"))" +[ -n "$myService" ] && jqString="$jqString | select(.service_description | test(\"$myService\"))" +[ -n "$myCommand" ] && jqString="$jqString | select(.check_command | test(\"$myCommand\"))" +[ -n "$myHG" ] && jqString="$jqString | select(.hostgroup_name==\"$myHG\")" +[ -n "$mySG" ] && jqString="$jqString | select(.servicegroup_name==\"$mySG\")" +[ -n "$myFields" ] && jqString="$jqString | $myFields" # 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 "" -} +# If we used an existing file, then just use that +if [ -z "$myFile" ]; then + tmpJSON=`mktemp` +else + tmpJSON="$myFile" +fi -# 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 "" -} +# Let's pull everything that matches everything we were given +do_api objects servicestatus > $tmpJSON -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" +# if mySave is not empty, then we're just saving it into the file called $mySave +if [ -n "$mySave" ]; then + cp $tmpJSON $mySave + [ -z "$myFile" ] && rm $tmpJSON + echo "JSON data saved to $mySave" + exit +fi -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" +# Otherwise, let's parse the JSON data here +cat $tmpJSON | jq -r "$jqString" -rm $tmpJSON +[ -z "$myFile" ] && rm $tmpJSON