forked from ungleich-public/cdist
Compare commits
115 commits
master
...
archive_sh
Author | SHA1 | Date | |
---|---|---|---|
|
159ac76134 | ||
|
0ec3c2d017 | ||
|
0b5e7b5855 | ||
|
279d519dda | ||
|
adf2e05a08 | ||
|
44586bc6f9 | ||
|
512ff69574 | ||
|
06a6bf1a0d | ||
|
68a51da380 | ||
|
bd85d22a89 | ||
|
c3bf34bf3d | ||
|
74418c77e0 | ||
|
fe68c5b556 | ||
|
2b955b09bc | ||
|
a5564850ce | ||
|
368ea87b89 | ||
|
f7f2194b8f | ||
|
bea7d5f828 | ||
|
4440838650 | ||
|
86e30c7a8a | ||
|
cdc6f0d0c0 | ||
|
f65b61ee8f | ||
|
6886c2e6f1 | ||
|
8dbe6f9c77 | ||
|
8fe9e86254 | ||
|
160d85dee1 | ||
|
97e8c431af | ||
|
c9f4455677 | ||
|
b5b8bdc016 | ||
|
f8595793c1 | ||
|
c70bfb2e20 | ||
|
a4f45dfcf4 | ||
|
cb3b16d63f | ||
|
49bad52715 | ||
|
4ab6c5bbc9 | ||
|
765c3d152a | ||
|
f6fac37f1d | ||
|
5c35cad477 | ||
|
8daa07acbf | ||
|
bd39d5c185 | ||
|
f6d7a3e478 | ||
|
07dc79410a | ||
|
2926532560 | ||
|
6bf1680f2d | ||
|
7fab1c9dd9 | ||
|
39f1c8a242 | ||
|
5bb177eef9 | ||
|
76a796103c | ||
|
815de25d9a | ||
|
0c00e4a0d2 | ||
|
3a1bf25398 | ||
|
6d3053a9bc | ||
|
8ad8ce162f | ||
|
67ba0f7e9f | ||
|
41a0c1dc8a | ||
|
197fa583b5 | ||
|
cfd0f776c9 | ||
|
4a5c161e96 | ||
|
666744209e | ||
|
b06f6be5a6 | ||
|
5b9881bef6 | ||
|
a53782805d | ||
|
eeaab438c2 | ||
|
f544fc5c42 | ||
|
bb06a69bd5 | ||
|
390d527515 | ||
|
29e029a2eb | ||
|
e9fe915519 | ||
|
a5b9713986 | ||
|
83e75666c3 | ||
|
3c903fae67 | ||
|
141b808603 | ||
|
6d0cdc9456 | ||
|
6a37d58cc8 | ||
|
4fbe2a2676 | ||
|
a277d5a4d4 | ||
|
29450e5e99 | ||
|
c474317a6a | ||
|
f3a88ef98d | ||
|
75bff0b13f | ||
|
7d6b1b5236 | ||
|
d680c8a5f1 | ||
|
1132ec8756 | ||
|
7050342d90 | ||
|
0fa95a5adc | ||
|
0e7d822d16 | ||
|
cda6c24799 | ||
|
022db22924 | ||
|
00bbadef78 | ||
|
9e94bb56a2 | ||
|
188afa2777 | ||
|
2f5b416a33 | ||
|
1565c73559 | ||
|
9a86b392dc | ||
|
47c32d1b53 | ||
|
da9974b9ce | ||
|
0167f4a9f3 | ||
|
5dff2157e2 | ||
|
f7138c2921 | ||
|
5c378dcb1b | ||
|
95ce60637c | ||
|
0e2c221b43 | ||
|
cc7da0c264 | ||
|
ef2336cb1e | ||
|
27a810705e | ||
|
9e246b18ed | ||
|
580b5da688 | ||
|
152cc930e1 | ||
|
0603322bbd | ||
|
cf88f9cacb | ||
|
6a500d5570 | ||
|
7fbc4b8b77 | ||
|
e6d2a301c9 | ||
|
abe6e695bc | ||
|
630fced69d |
47 changed files with 1139 additions and 752 deletions
1
BUG
Normal file
1
BUG
Normal file
|
@ -0,0 +1 @@
|
||||||
|
See core/__cdist_object_run.
|
139
bin/cdist-config
139
bin/cdist-config
|
@ -19,7 +19,18 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
__cdist_version="1.7.0"
|
__cdist_version="1.8.0"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable debugging:
|
||||||
|
#
|
||||||
|
# __cdist_debug unset -> no debug
|
||||||
|
# __cdist_debug = 1 -> debug via __cdist_echo
|
||||||
|
# __cdist_debug = 2 -> debug via set -x
|
||||||
|
#
|
||||||
|
|
||||||
|
: ${__cdist_debug:=0}
|
||||||
|
[ "$__cdist_debug" = 2 ] && set -x
|
||||||
|
|
||||||
# Fail if something bogus is going on
|
# Fail if something bogus is going on
|
||||||
set -u
|
set -u
|
||||||
|
@ -44,6 +55,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
|
||||||
: ${__cdist_name_cache:=cache}
|
: ${__cdist_name_cache:=cache}
|
||||||
: ${__cdist_name_code:=code}
|
: ${__cdist_name_code:=code}
|
||||||
: ${__cdist_name_conf_dir:=conf}
|
: ${__cdist_name_conf_dir:=conf}
|
||||||
|
: ${__cdist_name_core_dir:=core}
|
||||||
: ${__cdist_name_dot_cdist:=.cdist}
|
: ${__cdist_name_dot_cdist:=.cdist}
|
||||||
: ${__cdist_name_explorer:=explorer}
|
: ${__cdist_name_explorer:=explorer}
|
||||||
: ${__cdist_name_gencode:=gencode}
|
: ${__cdist_name_gencode:=gencode}
|
||||||
|
@ -81,7 +93,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Exported variable names (usable for non core
|
# Exported variable names (usable for non core)
|
||||||
#
|
#
|
||||||
: ${__cdist_name_var_explorer:=__$__cdist_name_explorer}
|
: ${__cdist_name_var_explorer:=__$__cdist_name_explorer}
|
||||||
: ${__cdist_name_var_type_explorer:=__$__cdist_name_type_explorer}
|
: ${__cdist_name_var_type_explorer:=__$__cdist_name_type_explorer}
|
||||||
|
@ -111,6 +123,7 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
|
||||||
: ${__cdist_local_base_cache_dir:=$__cdist_abs_mydir/../$__cdist_name_cache}
|
: ${__cdist_local_base_cache_dir:=$__cdist_abs_mydir/../$__cdist_name_cache}
|
||||||
|
|
||||||
: ${__cdist_conf_dir:="$(cd "$__cdist_abs_mydir/../conf" && pwd -P)"}
|
: ${__cdist_conf_dir:="$(cd "$__cdist_abs_mydir/../conf" && pwd -P)"}
|
||||||
|
: ${__cdist_core_dir:="$(cd "$__cdist_abs_mydir/../$__cdist_name_core_dir" && pwd -P)"}
|
||||||
|
|
||||||
: ${__cdist_explorer_dir:=$__cdist_conf_dir/$__cdist_name_explorer}
|
: ${__cdist_explorer_dir:=$__cdist_conf_dir/$__cdist_name_explorer}
|
||||||
: ${__cdist_manifest_dir:=$__cdist_conf_dir/$__cdist_name_manifest}
|
: ${__cdist_manifest_dir:=$__cdist_conf_dir/$__cdist_name_manifest}
|
||||||
|
@ -134,6 +147,7 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
|
||||||
: ${__cdist_remote_base_dir:=/var/lib/cdist}
|
: ${__cdist_remote_base_dir:=/var/lib/cdist}
|
||||||
: ${__cdist_remote_bin_dir:=$__cdist_remote_base_dir/$__cdist_name_bin}
|
: ${__cdist_remote_bin_dir:=$__cdist_remote_base_dir/$__cdist_name_bin}
|
||||||
: ${__cdist_remote_conf_dir:=$__cdist_remote_base_dir/$__cdist_name_conf_dir}
|
: ${__cdist_remote_conf_dir:=$__cdist_remote_base_dir/$__cdist_name_conf_dir}
|
||||||
|
: ${__cdist_remote_core_dir:=$__cdist_remote_base_dir/$__cdist_name_core_dir}
|
||||||
|
|
||||||
: ${__cdist_remote_explorer_dir:=$__cdist_remote_conf_dir/$__cdist_name_explorer}
|
: ${__cdist_remote_explorer_dir:=$__cdist_remote_conf_dir/$__cdist_name_explorer}
|
||||||
: ${__cdist_remote_type_dir:=$__cdist_remote_conf_dir/$__cdist_name_type}
|
: ${__cdist_remote_type_dir:=$__cdist_remote_conf_dir/$__cdist_name_type}
|
||||||
|
@ -149,80 +163,13 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
|
||||||
################################################################################
|
################################################################################
|
||||||
# Internal functions
|
# Internal functions
|
||||||
#
|
#
|
||||||
__cdist_echo()
|
|
||||||
{
|
|
||||||
__cdist_echo_type="$1"; shift
|
|
||||||
|
|
||||||
set +u
|
# *NEW* Load functions from library
|
||||||
if [ "$__cdist_object_self" ]; then
|
for __cdist_lib in $__cdist_core_dir/*; do
|
||||||
__cdist_echo_prefix="${__cdist_object_self}:"
|
# echo Loading $__cdist_lib ...
|
||||||
else
|
. "$__cdist_lib"
|
||||||
__cdist_echo_prefix="core: "
|
done
|
||||||
fi
|
|
||||||
set -u
|
|
||||||
|
|
||||||
case "$__cdist_echo_type" in
|
|
||||||
debug)
|
|
||||||
set +u
|
|
||||||
if [ "$__cdist_debug" ]; then
|
|
||||||
echo $__cdist_echo_prefix "Debug: $@"
|
|
||||||
fi
|
|
||||||
set -u
|
|
||||||
;;
|
|
||||||
info)
|
|
||||||
echo $__cdist_echo_prefix "$@"
|
|
||||||
;;
|
|
||||||
warn)
|
|
||||||
echo $__cdist_echo_prefix "Warning: $@"
|
|
||||||
;;
|
|
||||||
error)
|
|
||||||
echo $__cdist_echo_prefix "Error: $@" >&2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "CORE BUG, who created the broken commit in $0?" >&2
|
|
||||||
exit 23
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
__cdist_exec_fail_on_error()
|
|
||||||
{
|
|
||||||
set +e
|
|
||||||
sh -e "$@"
|
|
||||||
if [ "$?" -ne 0 ]; then
|
|
||||||
__cdist_echo error "$1 exited non-zero"
|
|
||||||
__cdist_echo warn "Faulty code:"
|
|
||||||
cat "$1"
|
|
||||||
__cdist_exit_err "Aborting due to non-zero exit code."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
__cdist_exit_err()
|
|
||||||
{
|
|
||||||
__cdist_echo error "$@"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
__cdist_usage()
|
|
||||||
{
|
|
||||||
__cdist_exit_err "$__cdist_myname: $@"
|
|
||||||
}
|
|
||||||
|
|
||||||
__cdist_init_deploy()
|
|
||||||
{
|
|
||||||
__cdist_echo info "Creating clean directory structure "
|
|
||||||
|
|
||||||
# Ensure there is no old stuff, neither local nor remote
|
|
||||||
rm -rf "$__cdist_local_base_dir"
|
|
||||||
ssh "${__cdist_remote_user}@$1" "rm -rf ${__cdist_remote_base_dir}"
|
|
||||||
|
|
||||||
# Init base
|
|
||||||
mkdir -p "$__cdist_local_base_dir"
|
|
||||||
ssh "${__cdist_remote_user}@$1" "mkdir -p ${__cdist_remote_base_dir}"
|
|
||||||
|
|
||||||
# Link configuration source directory - consistent with remote
|
|
||||||
ln -sf "$__cdist_conf_dir" "$__cdist_local_base_dir/$__cdist_name_conf_dir"
|
|
||||||
}
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Cache
|
# Cache
|
||||||
|
@ -266,26 +213,11 @@ __cdist_object_base_dir()
|
||||||
echo "${__cdist_out_object_dir}/$1"
|
echo "${__cdist_out_object_dir}/$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
__cdist_object_id_from_object()
|
__cdist_object_id_from_object()
|
||||||
{
|
{
|
||||||
echo "${1#*/}"
|
echo "${1#*/}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Find objects, remove ./ and /MARKER
|
|
||||||
__cdist_object_list()
|
|
||||||
{
|
|
||||||
local basedir="$1"; shift
|
|
||||||
|
|
||||||
# Use subshell to prevent changing cwd in program
|
|
||||||
(
|
|
||||||
cd "${basedir}"
|
|
||||||
|
|
||||||
find . -name "$__cdist_name_dot_cdist" | \
|
|
||||||
sed -e 's;^./;;' -e "s;/${__cdist_name_dot_cdist}\$;;"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
__cdist_object_parameter_dir()
|
__cdist_object_parameter_dir()
|
||||||
{
|
{
|
||||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_parameter}"
|
echo "$(__cdist_object_dir "$1")/${__cdist_name_parameter}"
|
||||||
|
@ -330,6 +262,13 @@ __cdist_remote_object_dir()
|
||||||
echo "$(__cdist_remote_object_base_dir "$1")/${__cdist_name_dot_cdist}"
|
echo "$(__cdist_remote_object_base_dir "$1")/${__cdist_name_dot_cdist}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__cdist_remote_object_code()
|
||||||
|
{
|
||||||
|
# FIXME: this should probably be __cdist_name_CODE_remote instead, although
|
||||||
|
# they have the same name always
|
||||||
|
echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_code}-${__cdist_name_gencode_remote}"
|
||||||
|
}
|
||||||
|
|
||||||
__cdist_remote_object_parameter_dir()
|
__cdist_remote_object_parameter_dir()
|
||||||
{
|
{
|
||||||
echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_parameter}"
|
echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_parameter}"
|
||||||
|
@ -350,19 +289,6 @@ __cdist_remote_type_explorer_dir()
|
||||||
################################################################################
|
################################################################################
|
||||||
# Traps
|
# Traps
|
||||||
#
|
#
|
||||||
__cdist_tmp_removal()
|
|
||||||
{
|
|
||||||
rm -rf "${__cdist_tmp_dir}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Does not work in children, will be called again in every script!
|
|
||||||
# Use only in interactive "front end" scripts
|
|
||||||
__cdist_kill_on_interrupt()
|
|
||||||
{
|
|
||||||
__cdist_tmp_removal
|
|
||||||
kill 0
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Remove tempfiles at normal exit
|
# Remove tempfiles at normal exit
|
||||||
trap __cdist_tmp_removal EXIT
|
trap __cdist_tmp_removal EXIT
|
||||||
|
@ -386,15 +312,6 @@ __cdist_type_from_object()
|
||||||
echo "${1%%/*}"
|
echo "${1%%/*}"
|
||||||
}
|
}
|
||||||
|
|
||||||
__cdist_type_has_explorer()
|
|
||||||
{
|
|
||||||
# We only create output, if there's at least one explorer
|
|
||||||
# and can thus be used as a boolean ;-)
|
|
||||||
if [ -d "$(__cdist_type_explorer_dir "$1")" ]; then
|
|
||||||
ls -1 "$(__cdist_type_explorer_dir "$1")"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
__cdist_type_explorer_pushed()
|
__cdist_type_explorer_pushed()
|
||||||
{
|
{
|
||||||
[ -f "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" ] \
|
[ -f "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" ] \
|
||||||
|
|
|
@ -36,6 +36,7 @@ export $__cdist_name_var_target_user="$__cdist_remote_user"
|
||||||
|
|
||||||
# Export variables for core, which others do not reset
|
# Export variables for core, which others do not reset
|
||||||
export __cdist_local_base_dir
|
export __cdist_local_base_dir
|
||||||
|
export __cdist_core_dir
|
||||||
|
|
||||||
__cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host "
|
__cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host "
|
||||||
|
|
||||||
|
@ -47,13 +48,16 @@ __cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host "
|
||||||
__cdist_init_deploy "$__cdist_target_host"
|
__cdist_init_deploy "$__cdist_target_host"
|
||||||
|
|
||||||
# Transfer cdist executables
|
# Transfer cdist executables
|
||||||
__cdist_echo info "Transferring cdist binaries to the target host "
|
__cdist_echo info "Transferring cdist binaries/functions to the target host "
|
||||||
cdist-dir push "$__cdist_target_host" \
|
__cdist_dir push "${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}"
|
||||||
"${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}"
|
__cdist_dir push "${__cdist_core_dir}" "${__cdist_remote_core_dir}"
|
||||||
cdist-explorer-run-global "$__cdist_target_host"
|
|
||||||
cdist-manifest-run-init "$__cdist_target_host"
|
__cdist_explorer_run_global
|
||||||
cdist-object-all "$__cdist_target_host" cdist-object-prepare
|
__cdist_manifest_run_init
|
||||||
cdist-object-all "$__cdist_target_host" cdist-object-run
|
__cdist_object_all __cdist_object_prepare
|
||||||
cdist-cache "$__cdist_target_host"
|
__cdist_object_all __cdist_object_run
|
||||||
|
unset __cdist_object_self
|
||||||
|
|
||||||
|
__cdist_cache
|
||||||
|
|
||||||
__cdist_echo info "cdist $__cdist_version: Successfully finished run"
|
__cdist_echo info "cdist $__cdist_version: Successfully finished run"
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Copy & run the global explorers, i.e. not bound to types
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 1 ] || __cdist_usage "<target_host>"
|
|
||||||
set -ue
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
|
||||||
|
|
||||||
__cdist_echo info "Running global explorers "
|
|
||||||
|
|
||||||
# copy the explorers
|
|
||||||
cdist-dir push "$__cdist_target_host" \
|
|
||||||
"${__cdist_explorer_dir}" "${__cdist_remote_explorer_dir}"
|
|
||||||
|
|
||||||
# run the initial explorers remotely
|
|
||||||
cdist-run-remote "${__cdist_target_host}" cdist-remote-explorer-run \
|
|
||||||
"$__cdist_name_var_explorer" "$__cdist_remote_explorer_dir" \
|
|
||||||
"$__cdist_remote_out_explorer_dir"
|
|
||||||
|
|
||||||
# retrieve the results
|
|
||||||
cdist-dir pull "$__cdist_target_host" \
|
|
||||||
"${__cdist_remote_out_explorer_dir}" "${__cdist_out_explorer_dir}"
|
|
|
@ -1,56 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Let's build a cconfig tree from a configuration
|
|
||||||
# And save it into the cache tree
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <manifest>"
|
|
||||||
set -u
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
|
||||||
__cdist_manifest="$1"; shift
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Export information for cdist-type-emulator or manifest
|
|
||||||
#
|
|
||||||
|
|
||||||
# Config dir should not get reset - FIXME: why did I do this?
|
|
||||||
export __cdist_conf_dir
|
|
||||||
|
|
||||||
# Used to record the source in the object
|
|
||||||
export __cdist_manifest
|
|
||||||
|
|
||||||
# Export information for manifests - __cdist_out_dir comes from cdist-config
|
|
||||||
export __global="$__cdist_out_dir"
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# The actual run
|
|
||||||
#
|
|
||||||
|
|
||||||
# Ensure binaries exist and are up-to-date
|
|
||||||
cdist-type-build-emulation "${__cdist_out_type_bin_dir}" \
|
|
||||||
|| __cdist_exit_err "Failed to build type emulation binaries"
|
|
||||||
|
|
||||||
# prepend our path, so all cdist tools come before other tools
|
|
||||||
export PATH="${__cdist_out_type_bin_dir}:$PATH"
|
|
||||||
|
|
||||||
__cdist_exec_fail_on_error "${__cdist_manifest}"
|
|
|
@ -1,56 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Run the given command for each created object.
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <command>"
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
|
||||||
__cdist_command="$1"; shift
|
|
||||||
|
|
||||||
__cdist_objects="$__cdist_tmp_dir/objects"
|
|
||||||
|
|
||||||
# Ensure object dir exists, so marker can be created
|
|
||||||
mkdir -p "${__cdist_out_object_dir}"
|
|
||||||
|
|
||||||
# Loop until we do not create new objects anymore
|
|
||||||
# which is equal to all objects have been run
|
|
||||||
touch "$__cdist_objects_created"
|
|
||||||
while [ -f "$__cdist_objects_created" ]; do
|
|
||||||
# Assume we're done after this run
|
|
||||||
rm "$__cdist_objects_created"
|
|
||||||
|
|
||||||
# Get listing of objects
|
|
||||||
__cdist_object_list "$__cdist_out_object_dir" > "$__cdist_objects"
|
|
||||||
|
|
||||||
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
|
|
||||||
while read __cdist_object; do
|
|
||||||
set -- "$@" "$__cdist_object"
|
|
||||||
done < "$__cdist_objects"
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
__cdist_object="$1"; shift
|
|
||||||
$__cdist_command "$__cdist_target_host" "$__cdist_object"
|
|
||||||
done
|
|
||||||
done
|
|
|
@ -1,67 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Run the explorers for the given object on the target host.
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
|
||||||
__cdist_object_self="$1"; shift
|
|
||||||
|
|
||||||
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
|
||||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
|
||||||
|
|
||||||
# Check if type of object has >= 1 explorer
|
|
||||||
__cdist_has_explorer="$(__cdist_type_has_explorer "$__cdist_type")"
|
|
||||||
# Run the type explorers for the current object if any
|
|
||||||
if [ "$__cdist_has_explorer" ]; then
|
|
||||||
if ! __cdist_type_explorer_pushed "$__cdist_type"; then
|
|
||||||
src_dir="$(__cdist_type_explorer_dir "$__cdist_type")"
|
|
||||||
dst_dir="$(__cdist_remote_type_explorer_dir "$__cdist_type")"
|
|
||||||
__cdist_echo info "Transfering explorers for $__cdist_type "
|
|
||||||
cdist-dir push "$__cdist_target_host" "$src_dir" "$dst_dir"
|
|
||||||
__cdist_type_explorer_pushed_add "$__cdist_type"
|
|
||||||
fi
|
|
||||||
|
|
||||||
__cdist_echo info "Running explorers"
|
|
||||||
# Copy object parameters
|
|
||||||
cdist-dir push "$__cdist_target_host" \
|
|
||||||
"$(__cdist_object_parameter_dir "$__cdist_object_self")" \
|
|
||||||
"$(__cdist_remote_object_parameter_dir "$__cdist_object_self")"
|
|
||||||
|
|
||||||
# Execute explorers
|
|
||||||
cdist-run-remote "$__cdist_target_host" \
|
|
||||||
"$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
|
|
||||||
"$__cdist_name_var_object_id=\"$__cdist_object_id\"" \
|
|
||||||
"$__cdist_name_var_self=\"$__cdist_object_self\"" \
|
|
||||||
cdist-remote-explorer-run \
|
|
||||||
"$__cdist_name_var_type_explorer" \
|
|
||||||
"$(__cdist_remote_type_explorer_dir "$__cdist_type")" \
|
|
||||||
"$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
|
|
||||||
|
|
||||||
# Copy back results
|
|
||||||
cdist-dir pull "$__cdist_target_host" \
|
|
||||||
"$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")" \
|
|
||||||
"$(__cdist_object_type_explorer_dir "$__cdist_object_self")"
|
|
||||||
fi
|
|
|
@ -1,62 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Generate code from one object (object must be relative path!)
|
|
||||||
# WARNING: OUTPUT ON STDOUT, ERRORS NEED TO BE ON STDERR!
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 3 ] || __cdist_usage "<target host>" "<object>" "<type>"
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
|
||||||
__cdist_object_self="$1"; shift
|
|
||||||
__cdist_gencode_type="$1"; shift
|
|
||||||
|
|
||||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
|
||||||
__cdist_type_gencode="$(__cdist_type_gencode "$__cdist_type" "$__cdist_gencode_type")"
|
|
||||||
__cdist_code_output="$(__cdist_object_code "$__cdist_object_self" "$__cdist_gencode_type")"
|
|
||||||
|
|
||||||
# export variables for the gencode script
|
|
||||||
export __object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
|
||||||
export __object="$(__cdist_object_dir "$__cdist_object_self")"
|
|
||||||
export __global="$__cdist_out_dir"
|
|
||||||
|
|
||||||
if [ -x "$__cdist_type_gencode" ]; then
|
|
||||||
__cdist_exec_fail_on_error "$__cdist_type_gencode" > "$__cdist_tmp_file"
|
|
||||||
else
|
|
||||||
if [ -e "$__cdist_type_gencode" ]; then
|
|
||||||
__cdist_exit_err "$__cdist_type_gencode exists, but is not executable"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ensure it's empty, if there is no gencode
|
|
||||||
: > "$__cdist_tmp_file"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Only create code, if gencode created output
|
|
||||||
if [ "$(wc -l < "$__cdist_tmp_file")" -gt 0 ]; then
|
|
||||||
cat - "$__cdist_tmp_file" << eof > "$__cdist_code_output"
|
|
||||||
#
|
|
||||||
# The following code was generated by $__cdist_type_gencode
|
|
||||||
#
|
|
||||||
|
|
||||||
eof
|
|
||||||
chmod u+x "${__cdist_code_output}"
|
|
||||||
fi
|
|
|
@ -1,58 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Run the manifest for the given object.
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
|
||||||
__cdist_object_self="$1"; shift
|
|
||||||
|
|
||||||
# FIXME: rename to __cdist_object_dir (everywhere!)
|
|
||||||
__cdist_cur_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
|
||||||
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
|
||||||
|
|
||||||
__cdist_echo info "Checking manifest "
|
|
||||||
|
|
||||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
|
||||||
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
|
|
||||||
|
|
||||||
if [ -f "$__cdist_manifest" ]; then
|
|
||||||
if [ -x "$__cdist_manifest" ]; then
|
|
||||||
# Make __cdist_manifest available for cdist-type-emulator
|
|
||||||
export __cdist_manifest
|
|
||||||
|
|
||||||
__cdist_echo info "Executing manifest "
|
|
||||||
export $__cdist_name_var_object="$__cdist_cur_object_dir"
|
|
||||||
export $__cdist_name_var_object_id="$__cdist_object_id"
|
|
||||||
export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
|
|
||||||
|
|
||||||
cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest"
|
|
||||||
|
|
||||||
# Tell cdist-object-run-all that there may be new objects
|
|
||||||
touch "$__cdist_objects_created"
|
|
||||||
else
|
|
||||||
__cdist_exit_err "${__cdist_manifest} needs to be executable."
|
|
||||||
fi
|
|
||||||
fi
|
|
|
@ -1,65 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# For the given object:
|
|
||||||
# - run type explorers
|
|
||||||
# - run type manifest
|
|
||||||
# - generate code
|
|
||||||
# - copy object to target
|
|
||||||
# - execute code on target
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
|
||||||
__cdist_object_self="$1"; shift
|
|
||||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
|
||||||
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
|
|
||||||
|
|
||||||
# Export to non-core for use in manifest and gencode scripts
|
|
||||||
export $__cdist_name_var_self=$__cdist_object_self
|
|
||||||
|
|
||||||
__cdist_object_finished="$(__cdist_object_finished "$__cdist_object_self")"
|
|
||||||
if [ ! -f "$__cdist_object_finished" ]; then
|
|
||||||
# Resolve dependencies, if any
|
|
||||||
__cdist_object_require="$(__cdist_object_require "$__cdist_object_self")"
|
|
||||||
if [ -f "$__cdist_object_require" ]; then
|
|
||||||
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
|
|
||||||
while read __cdist_requirement; do
|
|
||||||
set -- "$@" "$__cdist_requirement"
|
|
||||||
done < "$__cdist_object_require"
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
__cdist_requirement="$1"; shift
|
|
||||||
__cdist_echo info "Resolving requirement $__cdist_requirement"
|
|
||||||
cdist-object-run "$__cdist_target_host" "$__cdist_requirement"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
cdist-object-gencode-run "$__cdist_target_host" "$__cdist_object_self"
|
|
||||||
cdist-object-push "$__cdist_target_host" "$__cdist_object_self"
|
|
||||||
cdist-object-code-run "$__cdist_target_host" "$__cdist_object_self"
|
|
||||||
|
|
||||||
# Mark this object as done
|
|
||||||
touch "$__cdist_object_finished"
|
|
||||||
fi
|
|
|
@ -1,68 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
|
||||||
#
|
|
||||||
# This file is part of cdist.
|
|
||||||
#
|
|
||||||
# cdist is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# cdist is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# This binary is executed on the remote side to execute explorers
|
|
||||||
#
|
|
||||||
# It supports different variables names to be used, so __explorers
|
|
||||||
# and __type_explorers can be submitted :-)
|
|
||||||
#
|
|
||||||
|
|
||||||
. cdist-config
|
|
||||||
[ $# -eq 3 ] || __cdist_usage "<variable name> <explorer dir> <out dir>"
|
|
||||||
set -ue
|
|
||||||
|
|
||||||
# Variable that defines the home of the explorers
|
|
||||||
__cdist_variable_name="$1"; shift
|
|
||||||
|
|
||||||
# Find explorers here
|
|
||||||
__cdist_explorer_dir="$1"; shift
|
|
||||||
|
|
||||||
# Write output here
|
|
||||||
__cdist_my_out_dir="$1"; shift
|
|
||||||
|
|
||||||
# Setup environment
|
|
||||||
export $__cdist_variable_name="$__cdist_explorer_dir"
|
|
||||||
export __global="$__cdist_remote_out_dir"
|
|
||||||
|
|
||||||
mkdir -p "$__cdist_my_out_dir"
|
|
||||||
|
|
||||||
# Ensure there is at least one explorer
|
|
||||||
num="$(ls -1 "$__cdist_explorer_dir" | wc -l)"
|
|
||||||
if [ "$num" -lt 1 ]; then
|
|
||||||
__cdist_exit_err "${__cdist_explorer_dir}: Contains no explorers"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Execute all explorers
|
|
||||||
for explorer in "$__cdist_explorer_dir/"*; do
|
|
||||||
explorer_name="${explorer##*/}"
|
|
||||||
|
|
||||||
if [ -f "$explorer" ]; then
|
|
||||||
if [ ! -x "$explorer" ]; then
|
|
||||||
__cdist_exit_err "Explorer \"$explorer\" exists, but is not executable."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Execute explorers and save results in remote destination directory
|
|
||||||
"$explorer" > "${__cdist_my_out_dir}/$explorer_name"
|
|
||||||
else
|
|
||||||
if [ -e "$explorer" ]; then
|
|
||||||
__cdist_exit_err "Explorer \"$explorer\" exists, but is not a file."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
|
@ -1,7 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
|
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -19,17 +18,17 @@
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Transfer the given object to the target host.
|
# Save the configuration tree into the local cache
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_cache()
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
{
|
||||||
set -eu
|
# Create base to move into
|
||||||
|
mkdir -p "${__cdist_local_base_cache_dir}"
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
__cdist_echo info \
|
||||||
__cdist_object_self="$1"; shift
|
"Caching to $(__cdist_host_cache_dir "$__cdist_target_host")"
|
||||||
|
rm -rf "$(__cdist_host_cache_dir "$__cdist_target_host")"
|
||||||
__cdist_echo info "Transferring object"
|
mv "$__cdist_local_base_dir" \
|
||||||
cdist-dir push "$__cdist_target_host" \
|
"$(__cdist_host_cache_dir "$__cdist_target_host")"
|
||||||
"$(__cdist_object_dir "$__cdist_object_self")" \
|
}
|
||||||
"$(__cdist_remote_object_dir "$__cdist_object_self")"
|
|
|
@ -23,29 +23,24 @@
|
||||||
# Pull a directory from a target, both sides have the same name (i.e. explorers)
|
# Pull a directory from a target, both sides have the same name (i.e. explorers)
|
||||||
#
|
#
|
||||||
|
|
||||||
|
__cdist_dir()
|
||||||
|
{
|
||||||
|
[ $# -eq 3 ] || __cdist_usage "<push|pull> <src dir> <dst dir>"
|
||||||
|
|
||||||
. cdist-config
|
# ${3%/*} will be the destination directory, so no subdirectories
|
||||||
[ $# -eq 4 ] || __cdist_usage "<push|pull> <target host> <src dir> <dst dir>"
|
# of the same name are created, if the directory is already existing
|
||||||
set -ue
|
|
||||||
|
|
||||||
__cdist_action="$1"; shift
|
if [ "$1" = "push" ]; then
|
||||||
__cdist_target_host="$1"; shift
|
# FIXME: add error handling with __cdist_run_remote_... or so
|
||||||
__cdist_src_dir="$1"; shift
|
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
||||||
__cdist_dst_dir="$1"; shift
|
"mkdir -p \"$3\""
|
||||||
|
scp -qr "$2" \
|
||||||
# This will be the destination directory, so no subdirectories
|
"${__cdist_remote_user}@${__cdist_target_host}:${3%/*}"
|
||||||
# of the same name are created, if the directory is already existing
|
elif [ "$1" = "pull" ]; then
|
||||||
__cdist_top_dir="${__cdist_dst_dir%/*}"
|
mkdir -p "$3"
|
||||||
|
scp -qr "${__cdist_remote_user}@${__cdist_target_host}:$2" \
|
||||||
if [ "$__cdist_action" = "push" ]; then
|
"${3%/*}"
|
||||||
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
else
|
||||||
"mkdir -p \"${__cdist_dst_dir}\""
|
__cdist_exit_err "Unknown action $1"
|
||||||
scp -qr "$__cdist_src_dir" \
|
fi
|
||||||
"${__cdist_remote_user}@${__cdist_target_host}:${__cdist_top_dir}"
|
}
|
||||||
elif [ "$__cdist_action" = "pull" ]; then
|
|
||||||
mkdir -p "${__cdist_dst_dir}"
|
|
||||||
scp -qr "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_src_dir}" \
|
|
||||||
"${__cdist_top_dir}"
|
|
||||||
else
|
|
||||||
__cdist_exit_err "Unknown action $__cdist_action"
|
|
||||||
fi
|
|
30
core/__cdist_dir_listing
Executable file
30
core/__cdist_dir_listing
Executable file
|
@ -0,0 +1,30 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# List files in a directory, if it exists
|
||||||
|
#
|
||||||
|
# We only create output, if there's at least one entry
|
||||||
|
# and can thus be used as a boolean ;-)
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_dir_listing()
|
||||||
|
{
|
||||||
|
[ -d "$1" ] && ls -1 "$1"
|
||||||
|
}
|
|
@ -18,33 +18,39 @@
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# This binary is executed on the remote side to execute code
|
# echo / syslog alike function
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_echo()
|
||||||
[ $# -eq 2 ] || __cdist_usage "<object> <type>"
|
{
|
||||||
set -ue
|
__cdist_echo_type="$1"; shift
|
||||||
|
|
||||||
__cdist_object_self="$1"; shift
|
set +u
|
||||||
__cdist_code_type="$1"; shift
|
if [ "$__cdist_object_self" ]; then
|
||||||
|
__cdist_echo_prefix="${__cdist_object_self}:"
|
||||||
if [ ! -d "$(__cdist_object_dir "$__cdist_object_self")" ]; then
|
|
||||||
__cdist_exit_err "Object undefined"
|
|
||||||
fi
|
|
||||||
|
|
||||||
__cdist_code="$(__cdist_object_code "$__cdist_object_self" "${__cdist_code_type}")"
|
|
||||||
|
|
||||||
__cdist_echo info "Checking code-${__cdist_code_type}"
|
|
||||||
|
|
||||||
if [ -e "$__cdist_code" ]; then
|
|
||||||
if [ -f "$__cdist_code" ]; then
|
|
||||||
if [ -x "$__cdist_code" ]; then
|
|
||||||
__cdist_echo info "Executing code-${__cdist_code_type}"
|
|
||||||
__cdist_exec_fail_on_error "$__cdist_code"
|
|
||||||
else
|
|
||||||
__cdist_exit_err "$__cdist_code exists, but is not executable."
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
__cdist_exit_err "$__cdist_code exists, but is not a file."
|
__cdist_echo_prefix="core: "
|
||||||
fi
|
fi
|
||||||
fi
|
set -u
|
||||||
|
|
||||||
|
case "$__cdist_echo_type" in
|
||||||
|
debug)
|
||||||
|
if [ "$__cdist_debug" = 1 ]; then
|
||||||
|
echo $__cdist_echo_prefix "DEBUG: $@"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
info)
|
||||||
|
echo $__cdist_echo_prefix "$@"
|
||||||
|
;;
|
||||||
|
warn)
|
||||||
|
echo $__cdist_echo_prefix "Warning: $@"
|
||||||
|
;;
|
||||||
|
error)
|
||||||
|
echo $__cdist_echo_prefix "Error: $@" >&2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "CORE BUG, who created the broken commit in $0?" >&2
|
||||||
|
exit 23
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
28
core/__cdist_exit_err
Executable file
28
core/__cdist_exit_err
Executable file
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Print error and exit (perror() alike)
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_exit_err()
|
||||||
|
{
|
||||||
|
__cdist_echo error "$@"
|
||||||
|
exit 1
|
||||||
|
}
|
79
core/__cdist_explorer_run
Executable file
79
core/__cdist_explorer_run
Executable file
|
@ -0,0 +1,79 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Run explorers - FIXME: this function is ugly
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_explorer_run()
|
||||||
|
{
|
||||||
|
[ $# -eq 5 ] || __cdist_usage "<global|type> <local explorer dir> <remote explorer dir> <remote out dir> <local out dir>"
|
||||||
|
|
||||||
|
# Ensure there is at least one explorer
|
||||||
|
num="$(ls -1 "$__cdist_explorer_dir" | wc -l)"
|
||||||
|
if [ "$num" -lt 1 ]; then
|
||||||
|
__cdist_exit_err "${__cdist_explorer_dir}: Contains no explorers"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check whether to setup variable for type explorer
|
||||||
|
case "$1" in
|
||||||
|
global)
|
||||||
|
;;
|
||||||
|
type)
|
||||||
|
# FIXME: think about how and where this gets setup!
|
||||||
|
"$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Transfer explorers
|
||||||
|
__cdist_dir push "$2" "$3"
|
||||||
|
|
||||||
|
# Create output directory
|
||||||
|
__cdist_run_remote mkdir -p "$4"
|
||||||
|
|
||||||
|
# Execute all explorers - FIXME: isolate cd call?
|
||||||
|
cd "$2";
|
||||||
|
# FIXME: cleanup double variable, no need when in directory
|
||||||
|
for __cdist_explorer_run_explorer in *; do
|
||||||
|
__cdist_explorer_explorer_name="${__cdist_explorer_run_explorer##*/}"
|
||||||
|
|
||||||
|
if [ -f "$__cdist_explorer_run_explorer" ]; then
|
||||||
|
if [ ! -x "$__cdist_explorer_run_explorer" ]; then
|
||||||
|
__cdist_exit_err "Explorer \"$__cdist_explorer_run_explorer\" exists, but is not executable."
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
if [ -e "$__cdist_explorer_run_explorer" ]; then
|
||||||
|
__cdist_exit_err "Explorer \"$__cdist_explorer_run_explorer\" exists, but is not a file."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# FIXME: no need for remote out dir probably?
|
||||||
|
# or should we leave it and continue using __cdist_dir pull?
|
||||||
|
__cdist_run_remote \
|
||||||
|
"export $__cdist_name_var_explorer=\"$__cdist_remote_explorer_dir\";" \
|
||||||
|
"export $__cdist_name_var_global=\"$__cdist_remote_out_dir\";" \
|
||||||
|
"$3/$__cdist_explorer_run_explorer" ">" \
|
||||||
|
"$4/$__cdist_explorer_run_explorer" || \
|
||||||
|
__cdist_exit_err "Explorer $__cdist_explorer_run_explorer failed."
|
||||||
|
done
|
||||||
|
|
||||||
|
# Transfer results back
|
||||||
|
__cdist_dir pull "$4" "$5"
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -19,20 +18,15 @@
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Exec the code for the given object locally and remote
|
# Copy & run the global explorers, i.e. not bound to types
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_explorer_run_global()
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
{
|
||||||
set -e
|
__cdist_echo info "Running global explorers "
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
# run the global explorers remotely
|
||||||
__cdist_object="$1"; shift
|
__cdist_explorer_run global \
|
||||||
|
"$__cdist_explorer_dir" "$__cdist_remote_explorer_dir" \
|
||||||
# Code local
|
"$__cdist_remote_out_explorer_dir" "$__cdist_out_explorer_dir"
|
||||||
export __cdist_out_object_dir="$__cdist_out_object_dir"
|
}
|
||||||
cdist-code-run "$__cdist_object" "${__cdist_name_gencode_local}"
|
|
||||||
|
|
||||||
# Code remote
|
|
||||||
cdist-run-remote "$__cdist_target_host" \
|
|
||||||
"cdist-code-run" "$__cdist_object" "${__cdist_name_gencode_remote}"
|
|
40
core/__cdist_init_deploy
Executable file
40
core/__cdist_init_deploy
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Prepare deployment
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_init_deploy()
|
||||||
|
{
|
||||||
|
__cdist_echo info "Creating clean directory structure "
|
||||||
|
|
||||||
|
# Ensure there is no old stuff, neither local nor remote
|
||||||
|
rm -rf "$__cdist_local_base_dir"
|
||||||
|
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
||||||
|
"rm -rf ${__cdist_remote_base_dir}"
|
||||||
|
|
||||||
|
# Init base
|
||||||
|
mkdir -p "$__cdist_local_base_dir"
|
||||||
|
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
||||||
|
"mkdir -p ${__cdist_remote_base_dir}"
|
||||||
|
|
||||||
|
# Link configuration source directory - consistent with remote
|
||||||
|
ln -sf "$__cdist_conf_dir" "$__cdist_local_base_dir/$__cdist_name_conf_dir"
|
||||||
|
}
|
44
core/__cdist_is_executable
Executable file
44
core/__cdist_is_executable
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Test whether something is executable (that should be executable) or
|
||||||
|
# is missing
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_is_executable()
|
||||||
|
{
|
||||||
|
[ $# -eq 1 ] || __cdist_exit_err "<executable>"
|
||||||
|
|
||||||
|
if [ -e "$1" ]; then
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
if [ -x "$1" ]; then
|
||||||
|
# Exists and is a correct executable
|
||||||
|
true
|
||||||
|
else
|
||||||
|
__cdist_exit_err "$1 exists, but is not executable."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
__cdist_exit_err "$1 exists, but is not a file."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Does not exist
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
}
|
31
core/__cdist_kill_on_interrupt
Normal file
31
core/__cdist_kill_on_interrupt
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Run the given command for each created object.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Does not work in children, will be called again in every script!
|
||||||
|
# Use only in interactive "front end" scripts
|
||||||
|
__cdist_kill_on_interrupt()
|
||||||
|
{
|
||||||
|
__cdist_tmp_removal
|
||||||
|
kill 0
|
||||||
|
exit 1
|
||||||
|
}
|
53
core/__cdist_manifest_run
Executable file
53
core/__cdist_manifest_run
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Let's build a cconfig tree from a configuration
|
||||||
|
# And save it into the cache tree
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_manifest_run()
|
||||||
|
{
|
||||||
|
[ $# -eq 1 ] || __cdist_usage "<manifest>"
|
||||||
|
|
||||||
|
__cdist_manifest="$1"; shift
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Export information for cdist-type-emulator or manifest
|
||||||
|
#
|
||||||
|
|
||||||
|
# Config dir should not get reset - FIXME: why did I do this?
|
||||||
|
export __cdist_conf_dir
|
||||||
|
|
||||||
|
# Used to record the source in the object
|
||||||
|
export __cdist_manifest
|
||||||
|
|
||||||
|
# Export information for manifests - __cdist_out_dir comes from cdist-config
|
||||||
|
export $__cdist_name_var_global="$__cdist_out_dir"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# The actual run
|
||||||
|
#
|
||||||
|
|
||||||
|
# Ensure binaries are existing - FIXME: move error handling into __cdist_type_build_emulation
|
||||||
|
__cdist_type_build_emulation \
|
||||||
|
|| __cdist_exit_err "Failed to build type emulation binaries"
|
||||||
|
|
||||||
|
__cdist_run_shell "${__cdist_manifest}"
|
||||||
|
}
|
|
@ -22,13 +22,11 @@
|
||||||
# And save it into the cache tree
|
# And save it into the cache tree
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_manifest_run_init()
|
||||||
[ $# -eq 1 ] || __cdist_usage "<target host>"
|
{
|
||||||
set -e
|
# FIXME: probably do not export but always set explicitly?
|
||||||
|
export $__cdist_name_var_manifest="$__cdist_manifest_dir"
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
__cdist_echo info "Running initial manifest for $__cdist_target_host "
|
||||||
|
__cdist_manifest_run "$__cdist_manifest_init"
|
||||||
eval export $__cdist_name_var_manifest=\"\$__cdist_manifest_dir\"
|
}
|
||||||
|
|
||||||
__cdist_echo info "Running initial manifest for $__cdist_target_host "
|
|
||||||
cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest_init"
|
|
60
core/__cdist_object_all
Executable file
60
core/__cdist_object_all
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Run the given command for each created object.
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_object_all()
|
||||||
|
{
|
||||||
|
[ $# -eq 1 ] || __cdist_usage "<command>"
|
||||||
|
|
||||||
|
__cdist_object_all_object_all_command="$1"; shift
|
||||||
|
|
||||||
|
__cdist_object_all_object_all_objects="$__cdist_tmp_dir/objects"
|
||||||
|
|
||||||
|
# Ensure object dir exists, so marker can be created
|
||||||
|
mkdir -p "${__cdist_out_object_dir}"
|
||||||
|
|
||||||
|
# FIXME: : - why do we use a file?
|
||||||
|
# core/__cdist_object_manifest_run: touch "$__cdist_objects_created"
|
||||||
|
|
||||||
|
# Loop until we do not create new objects anymore
|
||||||
|
# which is equal to all objects have been run
|
||||||
|
touch "$__cdist_objects_created"
|
||||||
|
while [ -f "$__cdist_objects_created" ]; do
|
||||||
|
# Assume we're done after this run
|
||||||
|
rm "$__cdist_objects_created"
|
||||||
|
|
||||||
|
# Get listing of objects
|
||||||
|
__cdist_object_list "$__cdist_out_object_dir" > \
|
||||||
|
"$__cdist_object_all_object_all_objects"
|
||||||
|
|
||||||
|
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
|
||||||
|
while read __cdist_object_all_object; do
|
||||||
|
set -- "$@" "$__cdist_object_all_object"
|
||||||
|
done < "$__cdist_object_all_object_all_objects"
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
__cdist_object_all_object="$1"; shift
|
||||||
|
$__cdist_object_all_object_all_command "$__cdist_object_all_object"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
54
core/__cdist_object_code_run
Executable file
54
core/__cdist_object_code_run
Executable file
|
@ -0,0 +1,54 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Exec the code for the given object locally and remote
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_object_code_run()
|
||||||
|
{
|
||||||
|
[ $# -eq 1 ] || __cdist_exit_err "<object>"
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -d "$(__cdist_object_dir "$1")" ]; then
|
||||||
|
__cdist_exit_err "Object undefined"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Code local
|
||||||
|
export __cdist_out_object_dir="$__cdist_out_object_dir"
|
||||||
|
__cdist_echo debug "Trying to run local code"
|
||||||
|
if __cdist_is_executable \
|
||||||
|
"$(__cdist_object_code "$1" "${__cdist_name_gencode_local}")"; then
|
||||||
|
__cdist_run_shell \
|
||||||
|
"$(__cdist_object_code "$1" "${__cdist_name_gencode_local}")"
|
||||||
|
else
|
||||||
|
__cdist_echo debug "Local code: none"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Code remote
|
||||||
|
__cdist_echo debug "Trying to run remote code"
|
||||||
|
if __cdist_is_executable \
|
||||||
|
"$(__cdist_object_code "$1" "${__cdist_name_gencode_remote}")"; then
|
||||||
|
|
||||||
|
__cdist_run_remote $(__cdist_remote_object_code "$1")
|
||||||
|
else
|
||||||
|
__cdist_echo debug "Remote code: none"
|
||||||
|
fi
|
||||||
|
}
|
89
core/__cdist_object_explorer_run
Executable file
89
core/__cdist_object_explorer_run
Executable file
|
@ -0,0 +1,89 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Run the explorers for the given object on the target host.
|
||||||
|
#
|
||||||
|
|
||||||
|
# FIXME: many cleanups needed before going production!
|
||||||
|
|
||||||
|
__cdist_object_explorer_run()
|
||||||
|
{
|
||||||
|
__cdist_object_self="$1"; shift
|
||||||
|
|
||||||
|
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
||||||
|
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
||||||
|
|
||||||
|
# Check if type of object has >= 1 explorer
|
||||||
|
__cdist_has_explorer="$(__cdist_dir_listing "$(__cdist_type_explorer_dir "$__cdist_type")" | wc -l)"
|
||||||
|
# Run the type explorers for the current object if any
|
||||||
|
if [ "$__cdist_has_explorer" -ge 1 ]; then
|
||||||
|
if ! __cdist_type_explorer_pushed "$__cdist_type"; then
|
||||||
|
# FIXME: variables!
|
||||||
|
src_dir="$(__cdist_type_explorer_dir "$__cdist_type")"
|
||||||
|
dst_dir="$(__cdist_remote_type_explorer_dir "$__cdist_type")"
|
||||||
|
__cdist_echo info "Transfering explorers for $__cdist_type "
|
||||||
|
__cdist_dir push "$src_dir" "$dst_dir"
|
||||||
|
__cdist_type_explorer_pushed_add "$__cdist_type"
|
||||||
|
fi
|
||||||
|
|
||||||
|
__cdist_echo info "Running explorers"
|
||||||
|
# Copy object parameters
|
||||||
|
__cdist_dir push \
|
||||||
|
"$(__cdist_object_parameter_dir "$__cdist_object_self")" \
|
||||||
|
"$(__cdist_remote_object_parameter_dir "$__cdist_object_self")"
|
||||||
|
|
||||||
|
# Execute explorers
|
||||||
|
# FIXME: STOPPED:
|
||||||
|
# - remove cdist-remote-explorer-run
|
||||||
|
# - problem: new variables / need to run explorer directly?
|
||||||
|
# -> or put logic into __cdist_explorer_run
|
||||||
|
# -> think about having _one_ wrapper script for remote to execute
|
||||||
|
# shell functions
|
||||||
|
|
||||||
|
# Create remote output directory
|
||||||
|
__cdist_run_remote mkdir -p "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
|
||||||
|
|
||||||
|
cd "$(__cdist_type_explorer_dir "$__cdist_type")"
|
||||||
|
|
||||||
|
|
||||||
|
for __cdist_object_explorer_run_explorer in *; do
|
||||||
|
__cdist_run_remote \
|
||||||
|
"$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
|
||||||
|
"$__cdist_name_var_object_id=\"$__cdist_object_id\"" \
|
||||||
|
"$__cdist_name_var_self=\"$__cdist_object_self\"" \
|
||||||
|
"$(__cdist_remote_type_explorer_dir "$__cdist_type")/$__cdist_object_explorer_run_explorer" \
|
||||||
|
">" "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")/$__cdist_object_explorer_run_explorer"
|
||||||
|
done
|
||||||
|
|
||||||
|
# __cdist_run_remote \
|
||||||
|
# "$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
|
||||||
|
# "$__cdist_name_var_object_id=\"$__cdist_object_id\"" \
|
||||||
|
# "$__cdist_name_var_self=\"$__cdist_object_self\"" \
|
||||||
|
# cdist-remote-explorer-run \
|
||||||
|
# "$__cdist_name_var_type_explorer" \
|
||||||
|
# "$(__cdist_remote_type_explorer_dir "$__cdist_type")" \
|
||||||
|
# "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
|
||||||
|
|
||||||
|
# Copy back results
|
||||||
|
__cdist_dir pull "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")" \
|
||||||
|
"$(__cdist_object_type_explorer_dir "$__cdist_object_self")"
|
||||||
|
fi
|
||||||
|
}
|
66
core/__cdist_object_gencode
Executable file
66
core/__cdist_object_gencode
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Generate code from one object (object must be relative path!)
|
||||||
|
# WARNING: OUTPUT ON STDOUT, ERRORS NEED TO BE ON STDERR!
|
||||||
|
#
|
||||||
|
|
||||||
|
# FIXME: check variable names:
|
||||||
|
# either prefix or use global or use functions directly
|
||||||
|
# functions looks good, they are cheap anyway!
|
||||||
|
|
||||||
|
__cdist_object_gencode()
|
||||||
|
{
|
||||||
|
[ $# -eq 2 ] || __cdist_usage "<object>" "<type>"
|
||||||
|
|
||||||
|
__cdist_object_self="$1"; shift
|
||||||
|
__cdist_gencode_type="$1"; shift
|
||||||
|
|
||||||
|
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
||||||
|
__cdist_type_gencode="$(__cdist_type_gencode "$__cdist_type" "$__cdist_gencode_type")"
|
||||||
|
__cdist_code_output="$(__cdist_object_code "$__cdist_object_self" "$__cdist_gencode_type")"
|
||||||
|
|
||||||
|
# export variables for the gencode script
|
||||||
|
export __object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
||||||
|
export __object="$(__cdist_object_dir "$__cdist_object_self")"
|
||||||
|
export __global="$__cdist_out_dir"
|
||||||
|
|
||||||
|
if [ -x "$__cdist_type_gencode" ]; then
|
||||||
|
__cdist_run_shell "$__cdist_type_gencode" > "$__cdist_tmp_file"
|
||||||
|
else
|
||||||
|
if [ -e "$__cdist_type_gencode" ]; then
|
||||||
|
__cdist_exit_err "$__cdist_type_gencode exists, but is not executable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure it's empty, if there is no gencode
|
||||||
|
: > "$__cdist_tmp_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Only create code, if gencode created output
|
||||||
|
if [ "$(wc -l < "$__cdist_tmp_file")" -gt 0 ]; then
|
||||||
|
cat - "$__cdist_tmp_file" << eof > "$__cdist_code_output"
|
||||||
|
#
|
||||||
|
# The following code was generated by $__cdist_type_gencode
|
||||||
|
#
|
||||||
|
|
||||||
|
eof
|
||||||
|
chmod u+x "${__cdist_code_output}"
|
||||||
|
fi
|
||||||
|
}
|
|
@ -22,17 +22,15 @@
|
||||||
# For the given object create the code to be executed on the target.
|
# For the given object create the code to be executed on the target.
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_object_gencode_run()
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
{
|
||||||
set -eu
|
__cdist_object_gencode_run_object="$1"; shift
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
__cdist_echo info "Generating local code "
|
||||||
__cdist_object_self="$1"; shift
|
__cdist_object_gencode "$__cdist_object_gencode_run_object" \
|
||||||
|
"${__cdist_name_gencode_local}"
|
||||||
|
|
||||||
__cdist_echo info "Generating local code "
|
__cdist_echo info "Generating remote code "
|
||||||
cdist-object-gencode "$__cdist_target_host" "$__cdist_object_self" \
|
__cdist_object_gencode "$__cdist_object_gencode_run_object" \
|
||||||
"${__cdist_name_gencode_local}"
|
|
||||||
|
|
||||||
__cdist_echo info "Generating remote code "
|
|
||||||
cdist-object-gencode "$__cdist_target_host" "$__cdist_object_self" \
|
|
||||||
"${__cdist_name_gencode_remote}"
|
"${__cdist_name_gencode_remote}"
|
||||||
|
}
|
36
core/__cdist_object_list
Executable file
36
core/__cdist_object_list
Executable file
|
@ -0,0 +1,36 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Print error and exit (perror() alike)
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_object_list()
|
||||||
|
{
|
||||||
|
# FIXME: no local in posix
|
||||||
|
local basedir="$1"; shift
|
||||||
|
|
||||||
|
# Use subshell to prevent changing cwd in program
|
||||||
|
(
|
||||||
|
cd "${basedir}"
|
||||||
|
|
||||||
|
find . -name "$__cdist_name_dot_cdist" | \
|
||||||
|
sed -e 's;^./;;' -e "s;/${__cdist_name_dot_cdist}\$;;"
|
||||||
|
)
|
||||||
|
}
|
59
core/__cdist_object_manifest_run
Executable file
59
core/__cdist_object_manifest_run
Executable file
|
@ -0,0 +1,59 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Run the manifest for the given object.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
__cdist_object_manifest_run()
|
||||||
|
{
|
||||||
|
[ $# -eq 1 ] || __cdist_usage "<object>"
|
||||||
|
|
||||||
|
__cdist_object_self="$1"; shift
|
||||||
|
|
||||||
|
# FIXME: rename to __cdist_object_dir (everywhere!)
|
||||||
|
__cdist_cur_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||||
|
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
||||||
|
|
||||||
|
__cdist_echo info "Checking manifest "
|
||||||
|
|
||||||
|
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
||||||
|
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
|
||||||
|
|
||||||
|
if [ -f "$__cdist_manifest" ]; then
|
||||||
|
if [ -x "$__cdist_manifest" ]; then
|
||||||
|
# Make __cdist_manifest available for cdist-type-emulator
|
||||||
|
export __cdist_manifest
|
||||||
|
|
||||||
|
__cdist_echo info "Executing manifest "
|
||||||
|
export $__cdist_name_var_object="$__cdist_cur_object_dir"
|
||||||
|
export $__cdist_name_var_object_id="$__cdist_object_id"
|
||||||
|
export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
|
||||||
|
|
||||||
|
__cdist_manifest_run "$__cdist_manifest"
|
||||||
|
|
||||||
|
# Tell cdist-object-run-all that there may be new objects
|
||||||
|
touch "$__cdist_objects_created"
|
||||||
|
else
|
||||||
|
__cdist_exit_err "${__cdist_manifest} needs to be executable."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
|
@ -24,24 +24,24 @@
|
||||||
# - run type manifest
|
# - run type manifest
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_object_prepare()
|
||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
{
|
||||||
set -eu
|
[ $# -eq 1 ] || __cdist_usage "<object>"
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
__cdist_object_self="$1"; shift
|
||||||
__cdist_object_self="$1"; shift
|
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
|
||||||
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
|
|
||||||
|
|
||||||
# Export to non-core for use in manifest and gencode scripts
|
# Export to non-core for use in manifest and gencode scripts
|
||||||
export $__cdist_name_var_self=$__cdist_object_self
|
export $__cdist_name_var_self=$__cdist_object_self
|
||||||
|
|
||||||
__cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object_self")"
|
__cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object_self")"
|
||||||
if [ ! -f "$__cdist_object_prepared" ]; then
|
if [ ! -f "$__cdist_object_prepared" ]; then
|
||||||
__cdist_echo info "Preparing object"
|
__cdist_echo info "Preparing object"
|
||||||
cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object_self"
|
__cdist_object_explorer_run "$__cdist_object_self"
|
||||||
cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object_self"
|
__cdist_object_manifest_run "$__cdist_object_self"
|
||||||
|
|
||||||
# Mark this object as prepared
|
# Mark this object as prepared
|
||||||
touch "$__cdist_object_prepared"
|
touch "$__cdist_object_prepared"
|
||||||
fi
|
fi
|
||||||
|
}
|
74
core/__cdist_object_run
Executable file
74
core/__cdist_object_run
Executable file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# For the given object:
|
||||||
|
# - run type explorers
|
||||||
|
# - run type manifest
|
||||||
|
# - generate code
|
||||||
|
# - copy object to target
|
||||||
|
# - execute code on target
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_object_run()
|
||||||
|
{
|
||||||
|
[ $# -eq 1 ] || __cdist_usage "<object>"
|
||||||
|
|
||||||
|
__cdist_object_self="$1"; shift
|
||||||
|
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||||
|
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
|
||||||
|
|
||||||
|
# Export to non-core for use in manifest and gencode scripts
|
||||||
|
export $__cdist_name_var_self=$__cdist_object_self
|
||||||
|
|
||||||
|
# FIXME: BUG: should be named differently!
|
||||||
|
# FIXME: BUG: I can be called recursively! -> variables are probably already set / overwritten!
|
||||||
|
__cdist_object_finished="$(__cdist_object_finished "$__cdist_object_self")"
|
||||||
|
if [ ! -f "$__cdist_object_finished" ]; then
|
||||||
|
# Resolve dependencies, if any
|
||||||
|
__cdist_object_require="$(__cdist_object_require "$__cdist_object_self")"
|
||||||
|
if [ -f "$__cdist_object_require" ]; then
|
||||||
|
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
|
||||||
|
while read __cdist_requirement; do
|
||||||
|
set -- "$@" "$__cdist_requirement"
|
||||||
|
done < "$__cdist_object_require"
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
__cdist_requirement="$1"; shift
|
||||||
|
__cdist_echo info "Resolving requirement $__cdist_requirement"
|
||||||
|
# FIXME: BUG: at this point, the other __cdist_object_run may have
|
||||||
|
# overwritten all our variables!
|
||||||
|
__cdist_object_run "$__cdist_requirement"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
__cdist_echo debug "Before gencode"
|
||||||
|
__cdist_object_gencode_run "$__cdist_object_self"
|
||||||
|
__cdist_echo debug "Before push"
|
||||||
|
__cdist_dir push "$(__cdist_object_dir "$__cdist_object_self")" \
|
||||||
|
"$(__cdist_remote_object_dir "$__cdist_object_self")"
|
||||||
|
__cdist_echo debug "Before run"
|
||||||
|
__cdist_object_code_run "$__cdist_object_self"
|
||||||
|
__cdist_echo debug "Object run done"
|
||||||
|
|
||||||
|
# Mark this object as done
|
||||||
|
touch "$__cdist_object_finished"
|
||||||
|
fi
|
||||||
|
}
|
27
core/__cdist_run
Executable file
27
core/__cdist_run
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Exit if an error occurs running something
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_run()
|
||||||
|
{
|
||||||
|
"$@" || __cdist_echo error "$1 exited non-zero, aborting."
|
||||||
|
}
|
|
@ -21,13 +21,12 @@
|
||||||
# Run a cdist binary on the remote side
|
# Run a cdist binary on the remote side
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_run_remote()
|
||||||
[ $# -ge 2 ] || __cdist_usage "<target_host> <binary> [opts]"
|
{
|
||||||
set -ue
|
[ $# -ge 1 ] || __cdist_usage "<binary> [opts]"
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
||||||
|
"export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \
|
||||||
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
"export __cdist_out_object_dir=\"$__cdist_remote_out_object_dir\";" \
|
||||||
"export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \
|
"$@"
|
||||||
"export __cdist_out_object_dir=\"$__cdist_remote_out_object_dir\";" \
|
}
|
||||||
"$@"
|
|
34
core/__cdist_run_shell
Executable file
34
core/__cdist_run_shell
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Exit if an error occurs when running a shell script
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_run_shell()
|
||||||
|
{
|
||||||
|
# Prepend our path, so all cdist tools come before other tools
|
||||||
|
PATH="${__cdist_out_type_bin_dir}:$PATH" sh -e "$@"
|
||||||
|
if [ "$?" -ne 0 ]; then
|
||||||
|
__cdist_echo error "$1 exited non-zero"
|
||||||
|
__cdist_echo warn "Faulty code:"
|
||||||
|
cat "$1"
|
||||||
|
__cdist_exit_err "Aborting due to non-zero exit code."
|
||||||
|
fi
|
||||||
|
}
|
27
core/__cdist_tmp_removal
Executable file
27
core/__cdist_tmp_removal
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Remove tmp dir
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_tmp_removal()
|
||||||
|
{
|
||||||
|
rm -rf "${__cdist_tmp_dir}"
|
||||||
|
}
|
|
@ -20,24 +20,30 @@
|
||||||
# Build pseudo binaries for type emulation
|
# Build pseudo binaries for type emulation
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
__cdist_type_build_emulation()
|
||||||
[ $# -eq 1 ] || __cdist_usage "<out dir>"
|
{
|
||||||
set -eu
|
[ $# -eq 0 ] || __cdist_usage "No arguments"
|
||||||
|
|
||||||
__cdist_output_dir="$1"; shift
|
[ -f "${__cdist_out_type_bin_dir}/.marker" ] && return 0
|
||||||
|
|
||||||
__cdist_type_emulator="$__cdist_abs_mydir/cdist-type-emulator"
|
__cdist_type_emulator="$__cdist_abs_mydir/cdist-type-emulator"
|
||||||
|
|
||||||
if [ ! -d "${__cdist_type_dir}" ]; then
|
if [ ! -d "${__cdist_type_dir}" ]; then
|
||||||
__cdist_exit_err "$__cdist_type_dir must exist and contain available types"
|
__cdist_exit_err "$__cdist_type_dir must exist and contain available types"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get Types
|
# Get Types
|
||||||
cd "${__cdist_type_dir}"
|
(
|
||||||
ls -1 > "${__cdist_tmp_file}"
|
cd "${__cdist_type_dir}"
|
||||||
|
ls -1 > "${__cdist_tmp_file}"
|
||||||
|
)
|
||||||
|
|
||||||
# Create binaries
|
# Create binaries
|
||||||
mkdir -p "${__cdist_output_dir}"
|
mkdir -p "${__cdist_out_type_bin_dir}"
|
||||||
while read type; do
|
while read __cdist_type_build_emulation_type; do
|
||||||
ln -sf "${__cdist_type_emulator}" "${__cdist_output_dir}/${type}"
|
ln -sf "${__cdist_type_emulator}" \
|
||||||
done < "${__cdist_tmp_file}"
|
"${__cdist_out_type_bin_dir}/${__cdist_type_build_emulation_type}"
|
||||||
|
done < "${__cdist_tmp_file}"
|
||||||
|
|
||||||
|
touch "${__cdist_out_type_bin_dir}/.marker"
|
||||||
|
}
|
27
core/__cdist_usage
Executable file
27
core/__cdist_usage
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Print error and exit (perror() alike)
|
||||||
|
#
|
||||||
|
|
||||||
|
__cdist_usage()
|
||||||
|
{
|
||||||
|
__cdist_exit_err "$__cdist_myname: $@"
|
||||||
|
}
|
|
@ -1,3 +1,7 @@
|
||||||
|
1.8.0:
|
||||||
|
* Added debug (via __cdist_debug={1,2} environment variable)
|
||||||
|
* Transformed shell script based approach to shell functions (performance improvement)
|
||||||
|
|
||||||
1.7.1: 2011-07-26
|
1.7.1: 2011-07-26
|
||||||
* Documentation: Add explorers to reference
|
* Documentation: Add explorers to reference
|
||||||
* Documentation: Typo cleanup (Derek Brost)
|
* Documentation: Typo cleanup (Derek Brost)
|
||||||
|
|
|
@ -17,3 +17,6 @@ run_code_from_user()
|
||||||
load_lib
|
load_lib
|
||||||
. file_from_user
|
. file_from_user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Introduce global variables:
|
||||||
|
__cdist_target_host
|
||||||
|
|
6
doc/dev/logs/2011-06-14.timing
Normal file
6
doc/dev/logs/2011-06-14.timing
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
ikq04:
|
||||||
|
|
||||||
|
cdist-deploy-to ikq04.ethz.ch 35.44s user 30.65s system 34% cpu 3:11.45 total # also migrate cdist-object-gencode
|
||||||
|
cdist-deploy-to ikq04.ethz.ch 23.56s user 22.44s system 35% cpu 2:09.78 total # ../bin/cdist-object-all -> __cdist_object_all
|
||||||
|
cdist-deploy-to ikq04.ethz.ch 17.35s user 16.83s system 30% cpu 1:53.69 total # bin/cdist-object-manifest-run -> core/__cdist_object_manifest_run
|
||||||
|
cdist-deploy-to ikq04.ethz.ch 19.76s user 23.58s system 35% cpu 2:03.33 total # ../core/__cdist_manifest_run_init
|
9
doc/dev/logs/2011-06-17.design-ideas
Normal file
9
doc/dev/logs/2011-06-17.design-ideas
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Should __run_remote be used or should the workflow more be
|
||||||
|
"I'm working here, part of it is executed remote?"
|
||||||
|
|
||||||
|
Indirect call to functions like __cdist_remote_explorer_run are
|
||||||
|
partly hard to debug / think about.
|
||||||
|
|
||||||
|
Setting up variables is needed for non-core (i.e. explorers)
|
||||||
|
|
||||||
|
|
61
doc/dev/logs/2011-06-21.execute_remote
Normal file
61
doc/dev/logs/2011-06-21.execute_remote
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
Steven, Nico:
|
||||||
|
|
||||||
|
Problem:
|
||||||
|
How to execute a function instead of binary
|
||||||
|
|
||||||
|
Solutions:
|
||||||
|
|
||||||
|
1)
|
||||||
|
(
|
||||||
|
cat $lib/*
|
||||||
|
cat bin/cdist-config
|
||||||
|
echo $function $args
|
||||||
|
) | ssh foo
|
||||||
|
|
||||||
|
Works partly, does not work for export = ...
|
||||||
|
Needs to copy over lib every time again!
|
||||||
|
|
||||||
|
2)
|
||||||
|
scp $dir/lib.sh root@foo:/tmp/lib.sh
|
||||||
|
cat << DONE | ssh root@foo sh
|
||||||
|
source /tmp/lib.sh
|
||||||
|
export foo=bla
|
||||||
|
function args
|
||||||
|
DONE
|
||||||
|
|
||||||
|
Caches lib directory
|
||||||
|
|
||||||
|
3) follow up to 1)
|
||||||
|
__run_remote()
|
||||||
|
{
|
||||||
|
cat << eof | ssh foo
|
||||||
|
|
||||||
|
. /cdist-config
|
||||||
|
"$@" # NOT USABLE, no export = export = lines possible!
|
||||||
|
|
||||||
|
eof
|
||||||
|
|
||||||
|
4) final solution
|
||||||
|
- write for every remote job a new function
|
||||||
|
- this functions prepares env + reuses ssh header
|
||||||
|
|
||||||
|
__cdist_remote_explorer()
|
||||||
|
{
|
||||||
|
cat << eof
|
||||||
|
$__cdist_remote_header
|
||||||
|
export foo1=bar
|
||||||
|
export foo2=bar
|
||||||
|
export foo3=bar
|
||||||
|
|
||||||
|
"$@"
|
||||||
|
eof | __cdist_ssh
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Problems found and solved:
|
||||||
|
|
||||||
|
- remote shell cannot work due to multi line variable export
|
||||||
|
- caching library directory with scp
|
||||||
|
- create function for every remote action
|
||||||
|
-> prepares environment
|
||||||
|
|
|
@ -5,6 +5,8 @@ Feel free to pick one!
|
||||||
|
|
||||||
CORE
|
CORE
|
||||||
----
|
----
|
||||||
|
- Fix warnings / __cdist_usage in core/*
|
||||||
|
-> __cdist_usage prints $0! not function name!
|
||||||
- Inconsistent error messages if object is not existing!
|
- Inconsistent error messages if object is not existing!
|
||||||
-> always use "Object undefined"
|
-> always use "Object undefined"
|
||||||
- Add echo function / beautify output
|
- Add echo function / beautify output
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Catch broken instances in cdist-mass-deploy -p and report broken deployements at the end!
|
BUG in core/__cdist_object_run: each recursive call overwrites the variables!
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
Bug with requirements when indirect requires is scheduled late:
|
Bug with requirements when indirect requires is scheduled late:
|
||||||
|
|
||||||
__package/collectd: Generating local code
|
__package/collectd: Generating local code
|
||||||
|
@ -24,3 +24,15 @@ __file/etc/collectd/collectd.conf: Warning: Faulty code:
|
||||||
scp /home/users/nico/oeffentlich/rechner/projekte/cdist-nutzung/conf/type/__ethz_collectd/files/collectd.conf.client root@shrek08:/etc/collectd/collectd.conf
|
scp /home/users/nico/oeffentlich/rechner/projekte/cdist-nutzung/conf/type/__ethz_collectd/files/collectd.conf.client root@shrek08:/etc/collectd/collectd.conf
|
||||||
__file/etc/collectd/collectd.conf: Error: Aborting due to non-zero exit code.
|
__file/etc/collectd/collectd.conf: Error: Aborting due to non-zero exit code.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Bad error reporting in functions:
|
||||||
|
|
||||||
|
[15:15] ikn:cdist-nutzung% cdist-deploy-to ikn
|
||||||
|
core: cdist 1.8.0: Configuring ikn
|
||||||
|
core: Creating clean directory structure
|
||||||
|
core: Transferring cdist binaries/functions to the target host
|
||||||
|
core: Running global explorers
|
||||||
|
core: Running initial manifest for ikn
|
||||||
|
core: Error: cdist-deploy-to: No arguments
|
||||||
|
|
||||||
|
|
4
test/README
Normal file
4
test/README
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
This directory should contain unit tests.
|
||||||
|
|
||||||
|
I have not yet searched (or found) a good way to implement this for cdist,
|
||||||
|
feel free to take the hat.
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -17,23 +17,9 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
# Let's build a cconfig tree from a configuration
|
|
||||||
# And save it into the cache tree
|
|
||||||
#
|
#
|
||||||
|
|
||||||
. cdist-config
|
. cdist-config
|
||||||
[ $# -eq 1 ] || __cdist_usage "<target host>"
|
|
||||||
set -u
|
|
||||||
|
|
||||||
__cdist_target_host="$1"; shift
|
mkdir -p /tmp/cdist/...
|
||||||
|
__cdist_explorer_run global
|
||||||
# Create base to move into
|
|
||||||
mkdir -p "${__cdist_local_base_cache_dir}"
|
|
||||||
|
|
||||||
# Now determine absolute path
|
|
||||||
__cdist_ddir="$(__cdist_host_cache_dir "$__cdist_target_host")"
|
|
||||||
|
|
||||||
__cdist_echo info "Saving cache to $__cdist_ddir "
|
|
||||||
rm -rf "$__cdist_ddir"
|
|
||||||
mv "$__cdist_local_base_dir" "$__cdist_ddir"
|
|
Loading…
Reference in a new issue