[[linux_wiki:freeipa_report_host_groups_empty]]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

linux_wiki:freeipa_report_host_groups_empty [2019/05/26 03:50]
linux_wiki:freeipa_report_host_groups_empty [2019/05/26 03:50] (current)
Line 1: Line 1:
 +====== FreeIPA Report Host Groups Empty ======
 +
 +**General Information**
 +
 +Report Host Groups that don't have any members. ​
 +
 +**Checklist**
 +  * Distro(s): Enterprise Linux 6/7
 +  * Other: [[http://​www.unixmen.com/​configure-freeipa-server-centos-7/​|FreeIPA Server Installed]] (script runs there)
 +
 +----
 +
 +====== The Script ======
 +
 +<code bash report-hostgroups-empty.sh>​
 +#!/bin/bash
 +# Name: report-hostgroups-empty.sh
 +# Description:​ Report Host Groups that don't have any members
 +# Last Modified: 2018-05-31
 +# Recent Changes:​-Initial release
 +###############################################################################################​
 +
 +##### Customize These Variables #####
 +# IPA admin user
 +admin_user="​admin"​
 +##### End of Customize Variables #####
 +
 +#​=====================================
 +# Functions; Main starts after
 +#​=====================================
 +function show_usage
 +{
 +  echo -e "​\n==== Report: Empty Host Groups ===="
 +  echo -e "​\nDescription:​ Report host groups that don't have any members."​
 +  echo -e "​\n--Usage--"​
 +  echo -e "​./​report-hostgroups-empty.sh [OPTIONS]"​
 +  echo -e "​\n-OPTIONS-"​
 +  echo -e "​-h ​                   => Display usage."​
 +  echo -e "​-v ​                   => Verbose; extra status output."​
 +  echo -e "​\n--Other Requirements--"​
 +  echo -e "-> FreeIPA admin access."​
 +  echo -e
 +}
 +
 +#​=======================
 +# Get Script Arguments
 +#​=======================
 +# Reset POSIX variable in case it has been used previously in this shell
 +OPTIND=1
 +
 +# By default, do not output verbose
 +verbose_mode="​no"​
 +
 +while getopts "​hv"​ opt; do
 +  case "​${opt}"​ in
 +    h) # -h (help) argument
 +      show_usage
 +      exit 0
 +    ;;
 +    v) # -v (verbose) argument
 +      verbose_mode="​yes"​
 +    ;;
 +    *) # invalid argument
 +      show_usage
 +      exit 0
 +    ;;
 +  esac
 +done
 +
 +#​===================
 +# Pre-checks: Make sure we have good options set
 +#​===================
 +# See if we have a kerberos ticket, if not, prompt login
 +/​usr/​bin/​klist -s
 +if [[ $? -ne 0 ]]; then
 +  echo ">>​No kerberos ticket found for (${admin_user}),​ login as ${admin_user} now:"
 +  /​usr/​bin/​kinit ${admin_user}
 +  echo
 +fi
 +
 +#​===================
 +# Main starts here
 +#​===================
 +echo -e "​======================================================"​
 +echo -e "####​========= Report: Empty Host Groups ==========####"​
 +echo -e "​======================================================"​
 +echo
 +echo -e "This script will report all host groups that don't have any members."​
 +if [[ ${verbose_mode} == "​yes"​ ]]; then
 +  echo -e "​Verbose:​ Yes"
 +else
 +  echo -e "​Verbose:​ No"
 +fi
 +echo -e "​=>​Continue?​[y/​n]:​\c"​
 +read run_script
 +
 +if [[ ${run_script} != "​y"​ ]]; then
 +  echo -e "​\n>>​Will not run the script. Exiting..."​
 +  exit 1
 +fi
 +
 +# Get all host groups
 +echo -e ">>​ Getting all host groups."​
 +all_hostgroups="​$(ipa hostgroup-find --sizelimit=0 | awk '/​Host-group/​ {print $2}'​)"​
 +
 +# Initialize lists to nothing
 +hostgroup_nomembers=""​
 +hostgroup_error=""​
 +
 +echo -e ">>​ Checking ($(echo ${all_hostgroups} | wc -w)) hostgroups for members\c"​
 +if [[ ${verbose_mode} == "​yes"​ ]]; then
 +  # Extra newline required if verbose messages (due to \c above)
 +  echo
 +fi
 +
 +# Loop through all hostgroups, add ones with no members to the list
 +for hostgroup in ${all_hostgroups};​ do
 +
 +  if [[ ${verbose_mode} == "​yes"​ ]]; then
 +    echo "​-->​ Hostgroup: ${hostgroup}"​
 +  else
 +    # Not verbose, output a single '​.'​ per hostgroup search
 +    echo -e "​.\c"​
 +  fi
 +
 +  ipa hostgroup-show ${hostgroup} | grep '​Member hosts' &> /dev/null
 +  return_code="​$?"​
 +
 +  if [[ ${return_code} == "​0"​ ]]; then
 +    # Members found
 +    if [[ ${verbose_mode} == "​yes"​ ]]; then
 +      echo "​---Members found."​
 +    else
 +      # Do nothing ':'​ (equivalent to Python'​s '​pass'​)
 +      :
 +    fi
 +
 +  elif [[ ${return_code} == "​1"​ ]]; then
 +    # No members found
 +    if [[ ${verbose_mode} == "​yes"​ ]]; then
 +      echo "---No members. (${hostgroup})"​
 +    fi
 +    hostgroup_nomembers+="​${hostgroup} "
 +
 +  else
 +    # Some other error occurred
 +    if [[ ${verbose_mode} == "​yes"​ ]]; then
 +      echo "​---Warning:​ Some other error occurred. (${hostgroup})"​
 +    fi
 +    hostgroup_error+="​${hostgroup} "
 +  fi
 +done
 +
 +if [[ ${verbose_mode} == "​no"​ ]]; then
 +  # Extra space required if not verbose because of no newlines for '​.'​ status output
 +  echo -e "​[Done]"​
 +fi
 +
 +echo -e "​\n-------------------------------------"​
 +echo -e "---- Host Groups with No Members ----"
 +echo -e "​-------------------------------------"​
 +
 +echo -e "​\n>>​ Host Groups with No Members: $(echo ${hostgroup_nomembers} | wc -w)"
 +for hostgroup in ${hostgroup_nomembers};​ do
 +  echo -e "​${hostgroup}"​
 +done
 +
 +echo -e "​\n>>​ Host Groups that had some type of grep search error: $(echo ${hostgroup_error} | wc -w)"
 +for hostgroup in ${hostgroup_error};​ do
 +  echo -e "​${hostgroup}"​
 +done
 +
 +echo -e "​\n=========================================="​
 +echo -e "=- Report: Empty Host Groups Completed. -="
 +echo -e "​=========================================="​
 +</​code>​
 +
 +----
  
  • linux_wiki/freeipa_report_host_groups_empty.txt
  • Last modified: 2019/05/26 03:50
  • (external edit)