59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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 -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
 |