#!/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 "$term:" "$file" | sed 's/\s\+'"$term"':\s*//' | sort)" if ! diff <(echo "$results") <(echo "$results" | uniq); then echo "Some ${term^^} entries are duplicated. Search for the above terms in your inventory and deduplicate." 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