| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  | #!/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-* | 
					
						
							| 
									
										
										
										
											2019-04-11 14:10:18 +02:00
										 |  |  |  -d DELIMITER   delimiter used for filename and line number prefix (default: ':') | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  |  -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() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2019-04-09 22:44:40 +02:00
										 |  |  |     if [ "${verbose}" -ge "$1" ] | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  |     then | 
					
						
							|  |  |  |         printf "%s\n" "$2" | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hor_line() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if [ $# -gt 0 ] | 
					
						
							|  |  |  |     then | 
					
						
							| 
									
										
										
										
											2019-04-09 22:44:40 +02:00
										 |  |  |         c="$1" | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  |     else | 
					
						
							|  |  |  |         c='=' | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |     printf "%78s\n" "" | tr ' ' "${c}" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ "${do_global_explorer}" ] | 
					
						
							|  |  |  | then | 
					
						
							|  |  |  |     print_verbose 2 "Dumping global explorers" | 
					
						
							| 
									
										
										
										
											2020-04-22 23:24:34 +02:00
										 |  |  |     # shellcheck disable=SC2086 | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  |     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) | 
					
						
							| 
									
										
										
										
											2019-04-09 22:44:40 +02:00
										 |  |  | cd "${cache_dir}" || exit | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | # 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}") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-09 22:44:40 +02:00
										 |  |  |         print_verbose 0 "target host: $(cat "${dir}/target_host"), host directory: ${dir}" | 
					
						
							|  |  |  |         hor_line '=' | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         PREV_PWD=$(pwd) | 
					
						
							| 
									
										
										
										
											2019-04-09 22:44:40 +02:00
										 |  |  |         cd "${dir}" || exit | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  |         # set -x | 
					
						
							|  |  |  |         find "$@" | 
					
						
							|  |  |  |         # set +x | 
					
						
							| 
									
										
										
										
											2019-04-09 22:44:40 +02:00
										 |  |  |         cd "${PREV_PWD}" || exit | 
					
						
							| 
									
										
										
										
											2019-04-05 12:13:53 +02:00
										 |  |  |     done | 
					
						
							|  |  |  |     IFS="${OLD_IFS}" | 
					
						
							|  |  |  | done | 
					
						
							| 
									
										
										
										
											2019-04-09 22:44:40 +02:00
										 |  |  | cd "${OLD_PWD}" || exit |