__get_condor_pool_name() { local pool_idx # Find the pool name. pool_idx=1 while [ $pool_idx -le $prev_idx ]; do if [[ "${COMP_WORDS[$pool_idx]}" == -p* ]] ; then pool=${COMP_WORDS[$(($pool_idx+1))]} break fi pool_idx=$(( $pool_idx + 1 )) done if [ $pool_idx -ge $COMP_CWORD ]; then pool=`condor_config_val COLLECTOR_HOST 2>/dev/null` fi #echo "Detected pool name ${pool} at idx $pool_idx (comp cword $COMP_CWORD)" } __is_autoformat() { local idx arg in_af idx=1 in_af=0 while [ $idx -le $COMP_CWORD ]; do arg="${COMP_WORDS[$idx]}" if [ $in_af -eq 1 ]; then if [[ "${arg}" == -* ]]; then in_af=0 fi fi if [ "${arg}" == "-af" ] ; then in_af=1 fi if [ "${arg}" == "-autoformat" ] ; then in_af=1 fi idx=$(( $idx + 1 )) done return $in_af } __contains() { local e for e in "${@:2}"; do [[ "$1" == $e ]] && return 0; done return 1 } __get_status_query_type() { local idx arg istype query_types query_types=( "-sta*" "-sc*" "-subm*" "-gr*" "-ge*" "-col*" "-def*" "-ma*" "-ne*" "-sto" "-an*" ) idx=1 query_type=-startd while [ $idx -lt $COMP_CWORD ]; do arg="${COMP_WORDS[$idx]}" __contains "${arg}" ${query_types[@]} istype=$? if [ $istype -eq 0 ] ; then query_type=${arg} #echo "Query type is ${arg}" return 0 fi idx=$(( $idx + 1 )) done idx=1 while [ $idx -le $prev_idx ]; do if [[ "${COMP_WORDS[$idx]}" == -subs* ]] ; then query_type="-subsystem ${COMP_WORDS[$(($idx+1))]}" #echo "Subsystem query type is $query_type" return 0 fi idx=$(( $idx + 1 )) done #echo "Query type is ${query_type}" } _condor_submit() { local cur prev_idx prev pool COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev_idx=$(( $COMP_CWORD - 1)) prev="${COMP_WORDS[$prev_idx]}" __get_condor_pool_name case "${prev}" in -ap*|-q*|-b*|-m*|-ad*|-pa*) return 0 ;; -d*) _filedir return 0 ;; -n*|-r*) COMPREPLY=( $(compgen -W "$(condor_status -pool $pool -schedd -af Name 2>/dev/null)" -- "${cur}") ) return 0 ;; -po*) _known_hosts_real -- "${cur}" return 0 ;; # I doubt this option is actually functional... -st*) COMPREPLY=( $(compgen -W "stm_use_schedd_only stm_use_transferd" -- "${cur}") ) return 0 ;; esac case "${cur}" in -*) COMPREPLY=( $(compgen -W "-terse -verbose -debug -help -append -queue -batch-name -disable -dry-run -maxjobs -single-cluster -unused -dump -interactive -name -remote -addr -spool -password -pool -stm" -- "${cur}") ) ;; esac _filedir } _condor_config_val() { local cur prev_idx prev pool COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev_idx=$(( $COMP_CWORD - 1)) prev="${COMP_WORDS[$prev_idx]}" __get_condor_pool_name __get_status_query_type case "${prev}" in -po*) _known_hosts_real -- "${cur}" return 0 ;; -n*) COMPREPLY=( $(compgen -W "$(condor_status -pool $pool $query_type -af Name 2>/dev/null)" -- "${cur}") ) return 0 ;; -w*) _filedir return 0 ;; -su*) COMPREPLY=( $(compgen -W "TOOL SCHEDD NEGOTIATOR STARTD MASTER SHADOW STARTER GAHP DAGMAN SHARED_PORT SUBMIT JOB DAEMON" -- "${cur}") ) return 0 ;; -a*|-l*|-se*|-uns*|-rs*|-ru*) return 0 ;; esac case "${cur}" in -*) COMPREPLY=( $(compgen -W "-help -version -negotiator -collector -startd -master -schedd -name -pool -address -subsystem -local-name -mixedcase -writeconfig -config -unused -used -evaluate -debug -verbose -raw -expand -default -dump -runset -rset -unset -set" -- "${cur}") ) ;; *) COMPREPLY=( $(compgen -W "$(condor_config_val -dump 2>/dev/null | grep -v '^#' | awk '{print $1;}')" -- "${cur}") ) ;; esac } _condor_act() { local cur prev_idx prev pool COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev_idx=$(( $COMP_CWORD - 1)) prev="${COMP_WORDS[$prev_idx]}" __get_condor_pool_name case "${prev}" in -po*) _known_hosts_real -- "${cur}" return 0 ;; -n*) # Suggest one of the available schedds COMPREPLY=( $(compgen -W "$(condor_status -pool $pool -schedd -af Name 2>/dev/null)" -- "${cur}") ) return 0 ;; -a*|-r*|-c*|-s*) return 0 ;; esac case "${cur}" in -*) COMPREPLY=( $(compgen -W "-help -version -long -totals -name -pool -addr -constraint -all" -- "${cur}") ) case "${COMP_WORDS[0]}" in condor_hold) COMPREPLY+=( $(compgen -W "-subcode -reason" -- "${cur}" ) ) ;; condor_rm) COMPREPLY+=( $(compgen -W "-forcex -reason" -- "${cur}" ) ) ;; condor_release) COMPREPLY+=( $(compgen -W "-reason" -- "${cur}" ) ) ;; esac ;; *) COMPREPLY=( $(compgen -W "$(condor_status -pool $pool -const 'IdleJobs+RunningJobs+HeldJobs>0' -submitter -af Name 2>/dev/null | tr '@' ' ' | awk '{print $1;}' | tr '.' ' ' | awk '{print $NF;}' | sort | uniq)" -- "${cur}") ) COMPREPLY+=( $(compgen -W "$(condor_q -format '%d.' ClusterId -format '%d\n' ProcId)" -- "${cur}" ) ) esac } _condor_history() { local cur prev_idx prev pool COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev_idx=$(( $COMP_CWORD - 1)) prev="${COMP_WORDS[$prev_idx]}" __is_autoformat if [ $? -eq 1 ]; then return 0 fi __get_condor_pool_name case "${prev}" in -po*) _known_hosts_real -- "${cur}" return 0 ;; -n*) # Suggest one of the available schedds COMPREPLY=( $(compgen -W "$(condor_status -pool $pool -schedd -af Name 2>/dev/null)" -- "${cur}") ) return 0 ;; -fi*|-u*|-print-format) _filedir return 0 ;; -li*|-m*|-f*) return 0 ;; esac case "${cur}" in -*) COMPREPLY=( $(compgen -W "-file -userlog -name -pool -help -backwards -forwards -limit -match -long -wide -format -autoformat -print-format" -- "${cur}") ) return 0 ;; esac } _condor_status() { local cur prev_idx prev pool COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev_idx=$(( $COMP_CWORD - 1)) prev="${COMP_WORDS[$prev_idx]}" __is_autoformat if [ $? -eq 1 ]; then return 0 fi __get_condor_pool_name __get_status_query_type case "${prev}" in -dir*) COMPREPLY=( $(compgen -W "$(condor_status -pool $pool $query_type -af Name 2>/dev/null)" -- "${cur}") ) return 0 ;; -po*) _known_hosts_real -- "${cur}" return 0 ;; -subs*) COMPREPLY=( $(compgen -W "schedd collector negotiator startd master grid generic" -- "${cur}") ) return 0 ;; -ad*|-print-format) _filedir return 0 ;; -so*|-con*|stati*) return 0 ;; esac case "${cur}" in -*) # Some days, it seems like there are too many flags for condor_status... COMPREPLY=( $(compgen -W "-help -version -diagnose -absent -avail -ckptsrvr -claimed -cod -collector -debug -defrag -direct -java -vm -license -master -pool -ads -grid -run -schedd -server -startd -generic -subsystem -negotiator -storage -any -state -submitters -constraint -compact -statistics -target -long -xml -total -sort -natural -total -expert -wide -xml -attributes -format -autoformat -print-format" -- "${cur}") ) ;; *) # Suggest one of the available slots COMPREPLY=( $(compgen -W "$(condor_status -pool $pool $query_type -af Name 2>/dev/null)" -- "${cur}") ) return 0 ;; esac } _condor_q() { local cur prev_idx prev pool COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev_idx=$(( $COMP_CWORD - 1)) prev="${COMP_WORDS[$prev_idx]}" __is_autoformat if [ $? -eq 1 ]; then return 0 fi __get_condor_pool_name # Find out if we requested all users. allusers=1 if [ "`condor_config_val CONDOR_Q_ONLY_MY_JOBS`" = true ]; then idx=1 allusers=0 while [ $idx -lt $COMP_CWORD ]; do arg="${COMP_WORDS[$idx]}" idx=$(( $idx + 1 )) if [[ ${arg} == -all* ]] ; then allusers=1 fi done fi #echo "Value of allusers: $allusers" # Handle cases where we are in an option's argument case "${prev}" in -p*) _known_hosts_real -- "${cur}" return 0 ;; -n*) # Suggest one of the available schedds COMPREPLY=( $(compgen -W "$(condor_status -pool $pool -schedd -af Name 2>/dev/null)" -- "${cur}") ) return 0 ;; -su*) COMPREPLY=( $(compgen -W "$(condor_status -pool $pool -const 'IdleJobs+RunningJobs+HeldJobs>0' -submitter -af Name 2>/dev/null | tr '@' ' ' | awk '{print $1;}' | tr '.' ' ' | awk '{print $NF;}' | sort | uniq)" -- "${cur}") ) return 0 ;; -u*|-slot*|-job*|-print-format) # Suggest a filename for the -userlog argument. _filedir return 0 ;; -co*|-mco*|-li*|-fo*|-at*|-schedd-constraint) return 0 ;; esac case "${cur}" in -*) COMPREPLY=( $(compgen -W "-attributes -long -xml -constraint -cputime -currentrun -expert -globus -goodput -hold -io -batch -nobatch -run -stream-results -wide -autoformat -debug -help -version -global -schedd-constraint -submitter -name -pool -jobads -userlog -autocluster -allusers -totals -analyze -better-analyze -machine -mconstraint -slotads -userprios -nouserprios -reverse -verbose" -- "${cur}") ) return 0 ;; *) # Suggest one of the available users if [ $allusers -eq 1 ]; then COMPREPLY=( $(compgen -W "$(condor_status -pool $pool -const 'IdleJobs+RunningJobs+HeldJobs>0' -submitter -af Name 2>/dev/null | tr '@' ' ' | awk '{print $1;}' | tr '.' ' ' | awk '{print $NF;}' | sort | uniq)" -- "${cur}") ) fi COMPREPLY+=( $(compgen -W "$(condor_q -format '%d.' ClusterId -format '%d\n' ProcId)" -- "${cur}" ) ) return 0 ;; esac } complete -F _condor_q condor_q complete -F _condor_status condor_status complete -F _condor_history condor_history complete -F _condor_submit condor_submit complete -F _condor_config_val condor_config_val complete -F _condor_act condor_rm complete -F _condor_act condor_hold complete -F _condor_act condor_release complete -F _condor_act condor_suspend complete -F _condor_act condor_continue