#!/usr/bin/bash # File: find-bad-ipam # # Description: This file finds bad IPAM entries in an inventory. # # Package: AniNIX/Ubiqtorate # Copyright: WTFPL # # Author: DarkFeather file="examples/msn0.yml" function findBadTerm() { ### Check for a term to be duplicated. # param file: the file # param term: the term to search for duplicates file="$1" term="$2" results="$(grep -i "$term:" "$file" | tr '[[:upper:]]' '[[:lower:]]' | sed 's/\s+'"$term"':\s*//' | sort | uniq -c | grep -vE '^\s+1\s+' )" if [ -n "$results" ]; then echo "Some ${term} entries are duplicated. Search for the above terms in your inventory and deduplicate." echo "$results" exit 2 fi } function Usage() { ### Helptext # param retcode: what to return retcode="$1" echo "Usage: $0 -f SOMEFILE" echo " $0 -h" echo "Add -v for verbosity." exit $retcode } while getopts 'f:hv' OPTION; do ### Parse arguments case "$OPTION" in f) file="$OPTARG" ;; h) echo "Find bad IPAM entries in an inventory." ; Usage 0 ;; v) set -x ;; *) Usage 1 ;; esac done # Sanity check if [ -z "$file" ] || [ ! -f "$file" ]; then echo Need an inventory to process. Usage 3; fi # Check for the unique attributes. for i in ip vnc mac; do findBadTerm "$file" "$i" done