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/25 23: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/25 23:50
  • (external edit)