cdist configuration management
Latest manual: https://www.cdi.st/manual/latest/
Home page: https://www.cdi.st
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
6.3 KiB
326 lines
6.3 KiB
#!/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" |
|
# shellcheck disable=SC2086 |
|
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
|
|
|