#!/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