58 lines
1.3 KiB
Plaintext
58 lines
1.3 KiB
Plaintext
|
#!/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"
|
||
|
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
|