[[linux_wiki:spacewalk_force_client_check_in]]

Differences

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

Link to this comparison view

linux_wiki:spacewalk_force_client_check_in [2019/05/26 03:50] (current)
Line 1: Line 1:
 +====== Spacewalk Force Client Check In ======
 +
 +**General Information**
 +
 +Force Spacewalk client(s) to check in and pick up scheduled jobs. 
 +
 +**Checklist**
 +  * Spacewalk server configured
 +  * Spacewalk client registered
 +  * System with spacecmd configured
 +  * Execute as user with sudo privileges on target client systems
 +
 +----
 +
 +====== The Script ======
 +
 +Execute on a system that has spacecmd installed and configured.
 +
 +<code bash sw_force-client-checkin.sh>​
 +#!/bin/bash
 +# Name: sw_force-client-checkin.sh
 +# Description:​ Force Spacewalk client(s) to check in and pick up scheduled jobs
 +# Last Updated: 2016-10-07
 +# Recent Changes:​-Improved error checking for groups, removed spacecmd dependency
 +#                 check for single system commands
 +#                -ssh connect timeout 5 seconds added
 +####################################################################################​
 +
 +##### Customize These Variables #####
 +# Spacecmd command and any default arguments
 +spacecmd_cmd="​spacecmd -q"
 +
 +##### End of Customize Variables #####
 +
 +#​=====================================
 +# Functions; Main starts after
 +#​=====================================
 +function show_usage
 +{
 +  echo -e "​\n==== Force Client Check In ===="
 +  echo -e "​\nDescription:​ Force each Spacewalk client to check in and pick up scheduled jobs."
 +  echo -e "​\n--Usage--"​
 +  echo -e "​-h ​                   => Display usage."​
 +  echo -e "-s system ​            => Single system check in."
 +  echo -e "-g system-group ​      => System group check in."
 +  echo -e "​-a ​                   => All systems check in."
 +  echo -e "​\n--Other Requirements--"​
 +  echo -e "-> Spacecmd and config file setup required."​
 +  echo -e "-> Run as a user with admin privileges on the Spacewalk server."​
 +  echo -e "-> Run as a user with sudo privileges on the target server(s) for rhn_check."​
 +  echo -e
 +}
 +
 +#​=======================
 +# Get Script Arguments
 +#​=======================
 +# Reset POSIX variable in case it has been used previously in this shell
 +OPTIND=1
 +
 +## Default settings ##
 +# Do not assume we want all systems to check in
 +all_systems="​no"​
 +
 +## Get command line arguments ##
 +while getopts "​hs:​g:​a"​ opt; do
 +  case "​${opt}"​ in
 +    h) # -h (help) argument
 +      show_usage
 +      exit 0
 +    ;;
 +    s) # -s system
 +      single_system=${OPTARG}
 +      checkin_type="​single"​
 +    ;;
 +    g) # -g system-group
 +      system_group=${OPTARG}
 +      checkin_type="​group"​
 +    ;;
 +    a) # -a (all systems)
 +      all_systems="​yes"​
 +      checkin_type="​all"​
 +    ;;
 +    *) # invalid argument
 +      show_usage
 +      exit 0
 +    ;;
 +  esac
 +done
 +
 +## Argument Sanity Checks ##
 +# Scenario: No arguments set
 +if [[ ${all_systems} == "​no"​ ]]; then
 +  if [[ -z ${single_system} && -z ${system_group} ]]; then
 +    echo -e "​\n>>​ ERROR! You must decide on something to check in."
 +    show_usage
 +    exit 1
 +  fi
 +fi
 +
 +# Scenario: All systems AND single system set
 +if [[ ${all_systems} == "​yes"​ && ${single_system} ]]; then
 +  echo -e "​\n>>​ ERROR! Incompatible arguments (all systems and a single system)."​
 +  show_usage
 +  exit 1
 +fi
 +
 +# Scenario: All systems AND system group set
 +if [[ ${all_systems} == "​yes"​ && ${system_group} ]]; then
 +  echo -e "​\n>>​ ERROR! Incompatible arguments (all systems and a system group)."​
 +  show_usage
 +  exit 1
 +fi
 +
 +# Scenario: Single system AND system group set
 +if [[ ${single_system} && ${system_group} ]]; then
 +  echo -e "​\n>>​ ERROR! Incompatible arguments (single system and a system group)."​
 +  show_usage
 +  exit 1
 +fi
 +
 +#​===================
 +# Pre-checks: Ensure dependencies exist
 +#​===================
 +
 +# Only check for Spacewalk dependencies if NOT sending to a single system
 +if [[ -z ${single_system} ]]; then
 +  # Check for Spacecmd
 +  which spacecmd &> /dev/null
 +  if [[ $? -ne 0 ]]; then
 +    echo "​\n>>​ Error! The command '​spacecmd'​ is not found or not in PATH. Exiting..."​
 +    exit 1
 +  fi
 +
 +  # Check to see if a spacecmd config file exists
 +  if [[ ! -f ${HOME}/​.spacecmd/​config ]]; then
 +    echo -e "​\n>>​ Error! No spacecmd config file found at: ${HOME}/​.spacecmd/​config. Exiting..."​
 +    exit 1
 +  fi
 +fi
 +
 +#​===================
 +# Main starts here
 +#​===================
 +
 +echo -e "​======================================================"​
 +echo -e "####​=== Spacewalk: Force all clients check-in ====####"​
 +echo -e "​======================================================"​
 +echo
 +echo -e "Force clients registered to Spacewalk to check in (rhn_check)."​
 +if [[ ${single_system} ]]; then
 +  echo -e "Force single client to check in: ${single_system}"​
 +elif [[ ${system_group} ]]; then
 +  echo -e "Force clients in group to check in: ${system_group}"​
 +else
 +  echo -e "Force ALL systems to check in."
 +fi
 +echo -e "​\n=>​Continue?​[y/​n]:​\c"​
 +read run_script
 +
 +if [[ ${run_script} != "​y"​ ]]; then
 +  echo -e "​\n>>​Will not run the force client check-in script. Exiting..."​
 +  exit 1
 +fi
 +
 +case ${checkin_type} in
 +  single)
 +  ## Single system ##
 +  echo -e "​\n>>​ Single system check in..."
 +
 +  echo "​->​${single_system}"​
 +  ssh -qt -o ConnectTimeout=5 ${single_system} "sudo /​usr/​sbin/​rhn_check"​
 +
 +  ;;
 +  group)
 +  ## Group of systems (Spacewalk Group) ##
 +  echo -e "​\n>>​ Group check in (${system_group})..."​
 +
 +  # Check to see if the Spacewalk group exists; exit if it does not
 +  ${spacecmd_cmd} group_list | grep ${system_group} > /dev/null
 +  if [[ $? -ne 0 ]]; then
 +    echo -e "-> ERROR! Could not find Spacewalk group: ${system_group}"​
 +    exit 1
 +  fi
 +
 +  for node in $(${spacecmd_cmd} group_listsystems ${system_group});​ do
 +    echo "​->​${node}"​
 +    ssh -qt -o ConnectTimeout=5 ${node} "sudo /​usr/​sbin/​rhn_check"​
 +  done
 +
 +  ;;
 +  all)
 +  ## All Systems ##
 +  echo -e "​\n>>​ All systems check in..."
 +
 +  for node in $(${spacecmd_cmd} system_list);​ do 
 +    echo "​->​${node}"​
 +    ssh -qt -o ConnectTimeout=5 ${node} "sudo /​usr/​sbin/​rhn_check"​
 +  done
 +
 +  ;;
 +esac
 +
 +echo -e "​\n==================================="​
 +echo -e "=- Client Check In(s) Completed. -="
 +echo -e "​==================================="​
 +</​code>​
 +
 +----
  
  • linux_wiki/spacewalk_force_client_check_in.txt
  • Last modified: 2019/05/26 03:50
  • (external edit)