cancel
Showing results for 
Search instead for 
Did you mean: 
Create a Post
Highlighted

Checking a list of IP's for Host Objects; Add or Set Group Membership

This was born out of a one-off customer request that I thought would serve as a good example for how to use a query to provide if/then results. The customer really wanted to do this in bash and not have to work in python.

Use Case:

The customer wanted to be able to take a txt file with IPv4 Address in it and do a check on each IP to see if a host object already existed. If the object already existed they wanted to create a 'set' command to assign it to a group. If the IP did not exist under a host object they wanted to create the host object using a generic name and assign it to the same group.

You can find the full script here: GitHub - WadesWeaponShed/IP-List-Host-Check-Add-or-Set 

The meat of the script is below; Using if statements we search the object database and if the search returns an object [1] then we issue the set command for it, if the search returns nothing [0] then we build the add command for the host.

printf "\nChecking For Existing Hosts\n"
   for line in $(cat ip.txt)
         do
            if [[ $(mgmt_cli -r true -d $DOMAIN show objects type host filter "$line" ip-only true offset $I limit 500 --format json |jq '.total') = 1 ]]
            then
               mgmt_cli -r true -d $DOMAIN show objects type host filter "$line" ip-only true offset $I limit 500 --format json | jq --raw-output '.objects[] | "mgmt_cli -s id.txt set host name " +.name + " groups auto-group"' >> host_set.txt
            elif [[ $(mgmt_cli -r true -d $DOMAIN show objects type host filter "$line" ip-only true offset $I limit 500 --format json |jq '.total') = 0 ]]; then
               printf "mgmt_cli -s id.txt add host name Host-$line ip-address $line groups auto-group\n" >> host_set.txt
      fi
  done

Tags (4)