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
				
			
		BUG
bin
cdist-configcdist-deploy-tocdist-explorer-run-globalcdist-manifest-runcdist-object-allcdist-object-explorer-runcdist-object-gencodecdist-object-manifest-runcdist-object-runcdist-remote-explorer-run
core
__cdist_cache__cdist_dir__cdist_dir_listing__cdist_echo__cdist_exit_err__cdist_explorer_run__cdist_explorer_run_global__cdist_init_deploy__cdist_is_executable__cdist_kill_on_interrupt__cdist_manifest_run__cdist_manifest_run_init__cdist_object_all__cdist_object_code_run__cdist_object_explorer_run__cdist_object_gencode__cdist_object_gencode_run__cdist_object_list__cdist_object_manifest_run__cdist_object_prepare__cdist_object_run__cdist_run__cdist_run_remote__cdist_run_shell__cdist_tmp_removal__cdist_type_build_emulation__cdist_usage
doc
changelog
dev
test
							
								
								
									
										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 |  | ||||||
| __cdist_dst_dir="$1"; shift |  | ||||||
| 
 |  | ||||||
| # This will be the destination directory, so no subdirectories |  | ||||||
| # of the same name are created, if the directory is already existing |  | ||||||
| __cdist_top_dir="${__cdist_dst_dir%/*}" |  | ||||||
| 
 |  | ||||||
| if [ "$__cdist_action" = "push" ]; then |  | ||||||
|       ssh "${__cdist_remote_user}@${__cdist_target_host}" \ |       ssh "${__cdist_remote_user}@${__cdist_target_host}" \ | ||||||
|       "mkdir -p \"${__cdist_dst_dir}\"" |          "mkdir -p \"$3\"" | ||||||
|    scp -qr "$__cdist_src_dir" \ |       scp -qr "$2" \ | ||||||
|       "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_top_dir}" |          "${__cdist_remote_user}@${__cdist_target_host}:${3%/*}" | ||||||
| elif [ "$__cdist_action" = "pull" ]; then |    elif [ "$1" = "pull" ]; then | ||||||
|    mkdir -p "${__cdist_dst_dir}" |       mkdir -p "$3" | ||||||
|    scp -qr "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_src_dir}" \ |       scp -qr "${__cdist_remote_user}@${__cdist_target_host}:$2" \ | ||||||
|       "${__cdist_top_dir}" |          "${3%/*}" | ||||||
| else |    else | ||||||
|    __cdist_exit_err "Unknown action $__cdist_action" |       __cdist_exit_err "Unknown action $1" | ||||||
| fi |    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 |    else | ||||||
|          __cdist_exit_err "$__cdist_code exists, but is not executable." |       __cdist_echo_prefix="core: " | ||||||
|    fi |    fi | ||||||
|    else |    set -u | ||||||
|       __cdist_exit_err "$__cdist_code exists, but is not a file." | 
 | ||||||
|  |    case "$__cdist_echo_type" in | ||||||
|  |       debug) | ||||||
|  |          if [ "$__cdist_debug" = 1 ]; then | ||||||
|  |             echo $__cdist_echo_prefix "DEBUG: $@" | ||||||
|          fi |          fi | ||||||
| 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_echo info "Generating local code " |  | ||||||
| cdist-object-gencode "$__cdist_target_host" "$__cdist_object_self" \ |  | ||||||
|       "${__cdist_name_gencode_local}" |       "${__cdist_name_gencode_local}" | ||||||
| 
 | 
 | ||||||
| __cdist_echo info "Generating remote 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_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}"   \ | ||||||
| 
 |  | ||||||
| ssh "${__cdist_remote_user}@${__cdist_target_host}"   \ |  | ||||||
|       "export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \ |       "export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \ | ||||||
|       "export __cdist_out_object_dir=\"$__cdist_remote_out_object_dir\";" \ |       "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. | ||||||
| # | # | ||||||
|  | @ -18,22 +18,8 @@ | ||||||
| # 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…
	
	Add table
		Add a link
		
	
		Reference in a new issue