325 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			325 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| VERSION="0.0.1"
 | |
| RELEASE=""
 | |
| 
 | |
| set -u
 | |
| # set -x
 | |
| 
 | |
| hosts=
 | |
| cache_dir=~/.cdist/cache
 | |
| 
 | |
| do_all=1
 | |
| do_global_explorer=
 | |
| do_type_explorer=
 | |
| do_script_stdout=
 | |
| do_script_stderr=
 | |
| do_gencode=
 | |
| do_code=
 | |
| do_messages=
 | |
| do_parameter=
 | |
| delimiter=':'
 | |
| ln=
 | |
| filename_prefix=1
 | |
| verbose=0
 | |
| 
 | |
| myname=${0##*/}
 | |
| 
 | |
| print_version()
 | |
| {
 | |
|     printf "%s %s %s\n" "${myname}" "${VERSION}" "${RELEASE}"
 | |
| }
 | |
| 
 | |
| usage()
 | |
| {
 | |
|     cat << eof
 | |
| ${myname}: [options] [host...]
 | |
| eof
 | |
| 
 | |
|     print_version
 | |
| 
 | |
|     cat << eof
 | |
| 
 | |
| Dump data from cache directories.
 | |
| 
 | |
| host      
 | |
|     Dump data for specified hosts. If not specified then all data
 | |
|     from cache directory is dumped.
 | |
| 
 | |
| Options
 | |
|  -a             dump all
 | |
|  -C CACHE-DIR   use specified CACHE-DIR (default: ~/.cdist/cache)
 | |
|  -c             dump code-*
 | |
|  -d DELIMITER   delimiter used for filename and line number prefix (default: ':')
 | |
|  -E             dump global explorers
 | |
|  -e             dump type explorers
 | |
|  -F             disable filename prefix (enabled by default)
 | |
|  -f             enable filename prefix (default)
 | |
|  -g             dump gencode-*
 | |
|  -h             show this help screen and exit
 | |
|  -L             disable line number prefix (default)
 | |
|  -l             enable line number prefix (disabled by default)
 | |
|  -m             dump messages
 | |
|  -o             dump executions' stdout
 | |
|  -p             dump parameters
 | |
|  -r             dump executions' stderr
 | |
|  -V             show version and exit
 | |
|  -v             increase verbosity
 | |
| eof
 | |
| }
 | |
| 
 | |
| exit_err()
 | |
| {
 | |
|     printf "%s\n" "$1"
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| # parse options
 | |
| while [ "$#" -ge 1 ]
 | |
| do
 | |
|     case "$1" in
 | |
|         -a)
 | |
|             do_all=1
 | |
|             ;;
 | |
|         -C)
 | |
|             if [ "$#" -ge 2 ]
 | |
|             then
 | |
|                 case "$2" in
 | |
|                     -*)
 | |
|                         exit_err "Missing cache directory"
 | |
|                         ;;
 | |
|                     *)
 | |
|                         cache_dir="$2"
 | |
|                         shift
 | |
|                         ;;
 | |
|                 esac
 | |
|             else
 | |
|                 exit_err "Missing cache directory"
 | |
|             fi
 | |
|             ;;
 | |
|         -c)
 | |
|             do_code=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -d)
 | |
|             if [ "$#" -ge 2 ]
 | |
|             then
 | |
|                 case "$2" in
 | |
|                     -*)
 | |
|                         exit_err "Missing delimiter"
 | |
|                         ;;
 | |
|                     *)
 | |
|                         delimiter="$2"
 | |
|                         shift
 | |
|                         ;;
 | |
|                 esac
 | |
|             else
 | |
|                 exit_err "Missing delimiter"
 | |
|             fi
 | |
|             ;;
 | |
|         -E)
 | |
|             do_global_explorer=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -e)
 | |
|             do_type_explorer=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -F)
 | |
|             filename_prefix=
 | |
|             ;;
 | |
|         -f)
 | |
|             filename_prefix=1
 | |
|             ;;
 | |
|         -g)
 | |
|             do_gencode=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -h)
 | |
|             usage
 | |
|             exit 0
 | |
|             ;;
 | |
|         -L)
 | |
|             ln=
 | |
|             ;;
 | |
|         -l)
 | |
|             ln=1
 | |
|             ;;
 | |
|         -m)
 | |
|             do_messages=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -o)
 | |
|             do_script_stdout=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -p)
 | |
|             do_parameter=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -r)
 | |
|             do_script_stderr=1
 | |
|             do_all=
 | |
|             ;;
 | |
|         -V)
 | |
|             print_version
 | |
|             exit 0
 | |
|             ;;
 | |
|         -v)
 | |
|             verbose=$((verbose + 1))
 | |
|             ;;
 | |
|         *)
 | |
|             hosts="${hosts} $1"
 | |
|             break
 | |
|             ;;
 | |
|     esac
 | |
|     shift
 | |
| done
 | |
| 
 | |
| if [ "${ln}" = "1" ]
 | |
| then
 | |
|     ln="NR \"${delimiter}\""
 | |
| fi
 | |
| 
 | |
| if [ "${filename_prefix}" = "1" ]
 | |
| then
 | |
|     filename_prefix="{}${delimiter}"
 | |
| fi
 | |
| 
 | |
| if [ "${do_all}" = "1" ]
 | |
| then
 | |
|     do_global_explorer=1
 | |
|     do_type_explorer=1
 | |
|     do_script_stdout=1
 | |
|     do_script_stderr=1
 | |
|     do_gencode=1
 | |
|     do_code=1
 | |
|     do_messages=1
 | |
|     do_parameter=1
 | |
| fi
 | |
| 
 | |
| set -- -size +0
 | |
| set -- "$@" \(
 | |
| or=
 | |
| 
 | |
| print_verbose()
 | |
| {
 | |
|     if [ "${verbose}" -ge "$1" ]
 | |
|     then
 | |
|         printf "%s\n" "$2"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| hor_line()
 | |
| {
 | |
|     if [ $# -gt 0 ]
 | |
|     then
 | |
|         c="$1"
 | |
|     else
 | |
|         c='='
 | |
|     fi
 | |
|     printf "%78s\n" "" | tr ' ' "${c}"
 | |
| }
 | |
| 
 | |
| if [ "${do_global_explorer}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping global explorers"
 | |
|     set -- "$@" ${or} \( \
 | |
|                 -path "*/explorer/*" -a \
 | |
|                 ! -path "*/conf/*" -a \
 | |
|                 ! -path "*/object/*/explorer/*" \
 | |
|             \)
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| if [ "${do_type_explorer}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping type explorers"
 | |
|     set -- "$@" ${or} -path "*/object/*/explorer/*"
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| if [ "${do_script_stdout}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping execution's stdout"
 | |
|     set -- "$@" ${or} -path "*/stdout/*"
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| if [ "${do_script_stderr}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping execution's stderr"
 | |
|     set -- "$@" ${or} -path "*/stderr/*"
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| if [ "${do_gencode}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping gencode-*"
 | |
|     set -- "$@" ${or} \( -name "gencode-*" -a ! -path "*/stdout/*" -a ! -path "*/stderr/*" \)
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| if [ "${do_code}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping code-*"
 | |
|     set -- "$@" ${or} \( -name "code-*" -a ! -path "*/stdout/*" -a ! -path "*/stderr/*" \)
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| if [ "${do_messages}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping messages"
 | |
|     set -- "$@" ${or} -name "messages"
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| if [ "${do_parameter}" ]
 | |
| then
 | |
|     print_verbose 2 "Dumping parameters"
 | |
|     set -- "$@" ${or} -path "*/parameter/*"
 | |
|     or="-o"
 | |
| fi
 | |
| 
 | |
| set -- "$@" \)
 | |
| set -- '.' "$@" -exec awk -v prefix="${filename_prefix}" "{print prefix ${ln} \$0}" {} \;
 | |
| 
 | |
| # printf "+ %s\n" "$*"
 | |
| 
 | |
| print_verbose 2 "Using cache dir: ${cache_dir}"
 | |
| 
 | |
| OLD_PWD=$(pwd)
 | |
| cd "${cache_dir}" || exit
 | |
| 
 | |
| # If no host is specified then search all.
 | |
| [ -z "${hosts}" ] && hosts="-"
 | |
| 
 | |
| for host in ${hosts}
 | |
| do
 | |
|     [ "${host}" = "-" ] && host=
 | |
|     # find host cache directory
 | |
|     host_dir=$(find . -name target_host -exec grep -l "${host}" {} +)
 | |
|     print_verbose 3 "found host directory files:"
 | |
|     print_verbose 3 "${host_dir}"
 | |
| 
 | |
|     OLD_IFS="${IFS}"
 | |
|     IFS="
 | |
|     "
 | |
| 
 | |
|     for d in ${host_dir}
 | |
|     do
 | |
|         dir=$(dirname "${d}")
 | |
| 
 | |
|         print_verbose 0 "target host: $(cat "${dir}/target_host"), host directory: ${dir}"
 | |
|         hor_line '='
 | |
| 
 | |
|         PREV_PWD=$(pwd)
 | |
|         cd "${dir}" || exit
 | |
|         # set -x
 | |
|         find "$@"
 | |
|         # set +x
 | |
|         cd "${PREV_PWD}" || exit
 | |
|     done
 | |
|     IFS="${OLD_IFS}"
 | |
| done
 | |
| cd "${OLD_PWD}" || exit
 |