2022-01-25 23:54:43 -06:00
|
|
|
#!/usr/bin/bash
|
|
|
|
|
|
|
|
# File: find-bad-ipam
|
|
|
|
#
|
|
|
|
# Description: This file finds bad IPAM entries in an inventory.
|
|
|
|
#
|
|
|
|
# Package: AniNIX/Ubiqtorate
|
|
|
|
# Copyright: WTFPL
|
|
|
|
#
|
|
|
|
# Author: DarkFeather <ircs://aninix.net:6697/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"
|
2022-12-18 22:14:25 -06:00
|
|
|
results="$(grep -i "$term:" "$file" | tr '[[:upper:]]' '[[:lower:]]' | sed 's/\s+'"$term"':\s*//' | sort | uniq -c | grep -vE '^\s+1\s+' )"
|
2022-01-25 23:54:43 -06:00
|
|
|
|
2022-12-18 22:14:25 -06:00
|
|
|
if [ -n "$results" ]; then
|
|
|
|
echo "Some ${term} entries are duplicated. Search for the above terms in your inventory and deduplicate."
|
|
|
|
echo "$results"
|
2022-01-25 23:54:43 -06:00
|
|
|
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
|