diff --git a/bin/cdist-config b/bin/cdist-config index 9a00395d..2c751cd8 100755 --- a/bin/cdist-config +++ b/bin/cdist-config @@ -57,6 +57,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname" : ${__cdist_name_object_finished:=done} : ${__cdist_name_object_id:=object_id} : ${__cdist_name_object_source:=source} +: ${__cdist_name_objects_created:=.objects_created} : ${__cdist_name_out_dir:=out} : ${__cdist_name_parameter:=parameter} : ${__cdist_name_parameter_required:=required} @@ -68,6 +69,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname" : ${__cdist_name_type:=type} : ${__cdist_name_type_bin:=type_bin} : ${__cdist_name_type_explorer:=type_explorer} +: ${__cdist_name_type_explorer_pushed:=.explorer_pushed} # Used for IDs: Allow everything not starting with - and . : ${__cdist_sane_regexp:=[^-\.].*} @@ -115,6 +117,7 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX") : ${__cdist_out_dir:=$__cdist_local_base_dir/$__cdist_name_out_dir} : ${__cdist_out_explorer_dir:=$__cdist_out_dir/$__cdist_name_explorer} : ${__cdist_out_object_dir:=$__cdist_out_dir/$__cdist_name_object} +: ${__cdist_out_type_dir:=$__cdist_out_dir/$__cdist_name_type} : ${__cdist_out_type_bin_dir:=$__cdist_out_dir/$__cdist_name_type_bin} ################################################################################ @@ -134,6 +137,11 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX") : ${__cdist_remote_out_explorer_dir:=$__cdist_remote_out_dir/$__cdist_name_explorer} : ${__cdist_remote_out_object_dir:=$__cdist_remote_out_dir/$__cdist_name_object} +################################################################################ +# Global internal variables +# +: ${__cdist_objects_created:=$__cdist_out_object_dir/$__cdist_name_objects_created} + ################################################################################ # Internal functions # @@ -329,6 +337,18 @@ __cdist_type_has_explorer() fi } +__cdist_type_explorer_pushed() +{ + [ -f "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" ] \ + && grep -q "$1" "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" +} + +__cdist_type_explorer_pushed_add() +{ + [ -d "$__cdist_out_type_dir" ] || mkdir "$__cdist_out_type_dir" + echo "$1" >> "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" +} + __cdist_type_gencode() { echo "${__cdist_type_dir}/$1/${__cdist_name_gencode}" diff --git a/bin/cdist-object-explorer-run b/bin/cdist-object-explorer-run index e9a20921..72ca7a1d 100755 --- a/bin/cdist-object-explorer-run +++ b/bin/cdist-object-explorer-run @@ -32,11 +32,19 @@ __object="$1"; shift __object_id="$(__cdist_object_id_from_object "$__object")" __cdist_type="$(__cdist_type_from_object "$__object")" -# Check if type of object has >= 1 explorer -__cdist_has_explorer="$(__cdist_type___cdist_has_explorer "$__cdist_type")" -# If so, run explorers on remote side +# 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")" + echo "Transfering explorers for $__cdist_type ..." + cdist-dir push "$__cdist_target_host" "$src_dir" "$dst_dir" + __cdist_type_explorer_pushed_add "$__cdist_type" + fi + echo "Running explorers for $__object ..." # Copy object parameters cdist-dir push "$__cdist_target_host" \ diff --git a/bin/cdist-object-manifest-run b/bin/cdist-object-manifest-run index a65ed138..25378eb2 100755 --- a/bin/cdist-object-manifest-run +++ b/bin/cdist-object-manifest-run @@ -52,8 +52,8 @@ if [ -f "$__cdist_manifest" ]; then export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")" cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest" - FIXME: Tell cdist that there may be new objects - WHO? Mama? - touch "$__cdist_new_objects_created" + # 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 diff --git a/bin/cdist-object-run b/bin/cdist-object-run index 015d95fa..f5d846e3 100755 --- a/bin/cdist-object-run +++ b/bin/cdist-object-run @@ -40,23 +40,26 @@ touch "$__cdist_types_pushed" __cdist_object_finished="$(__cdist_object_finished "$__cdist_object")" if [ ! -f "$__cdist_object_finished" ]; then - echo - echo "Running object $__cdist_object" - # Check if type of object has >= 1 explorer - __cdist_has_explorer="$(__cdist_type_has_explorer "$__cdist_type")" + # Resolve dependencies if any + __cdist_object_require="$(__cdist_object_require "$__cdist_object")" + if [ -f "$__cdist_object_require" ]; then + echo + # NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP + while read __cdist_requirement; do + set -- "$@" "$__cdist_requirement" + done < "$__cdist_object_require" - FIXME: put into cdist-object-explorer-run - # Run the type explorers for the current object if any - if [ "$__cdist_has_explorer" ]; then - if ! grep -q "$__cdist_type" "$__cdist_types_pushed"; then - cdist-type-explorer-push "$__cdist_target_host" "$__cdist_type" - echo "$__cdist_type" >> "$__cdist_types_pushed" - fi - - cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object" + while [ $# -gt 0 ]; do + __cdist_requirement="$1"; shift + echo "Resolving dependency $__cdist_requirement for $__cdist_object ..." + cdist-object-run "$__cdist_target_host" "$__cdist_requirement" + done fi + echo + echo "Running object $__cdist_object" + cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object" cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object" cdist-object-gencode-run "$__cdist_target_host" "$__cdist_object" cdist-object-push "$__cdist_target_host" "$__cdist_object" diff --git a/bin/cdist-object-run-all b/bin/cdist-object-run-all index 7c87660b..c646ab16 100755 --- a/bin/cdist-object-run-all +++ b/bin/cdist-object-run-all @@ -30,15 +30,12 @@ __cdist_target_host="$1"; shift __cdist_objects="$__cdist_tmp_dir/objects" -FIXME: reuse in subscripts, save in objects_base_dir -export __cdist_objects_created="$__cdist_tmp_dir/objects_created" - # Loop until we do not create new objects anymore # which is equal to all objects have been run -touch "$__cdist_new_objects_created" -while [ -f "$__cdist_new_objects_created" ]; do +touch "$__cdist_objects_created" +while [ -f "$__cdist_objects_created" ]; do # Assume we're done after this run - rm "$__cdist_new_objects_created" + rm "$__cdist_objects_created" # Get listing of objects __cdist_object_list "$__cdist_out_object_dir" > "$__cdist_objects" @@ -50,18 +47,6 @@ while [ -f "$__cdist_new_objects_created" ]; do while [ $# -gt 0 ]; do __cdist_object="$1"; shift - - FIXME: migrate into cdist-object-run - FIXME: take care of SSH foo after migration in while loop - __cdist_object_require="$(__cdist_object_require "$__cdist_object")" - if [ -f "$__cdist_object_require" ]; then - echo - while read __cdist_requirement; do - echo "Resolving dependency $__cdist_requirement for $__cdist_object ..." - cdist-object-run "$__cdist_target_host" "$__cdist_requirement" - done < "$__cdist_object_require" - fi - # Process the object cdist-object-run "$__cdist_target_host" "$__cdist_object" done diff --git a/bin/cdist-type-explorer-push b/bin/cdist-type-explorer-push deleted file mode 100755 index 7ba412ca..00000000 --- a/bin/cdist-type-explorer-push +++ /dev/null @@ -1,40 +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 . -# -# -# Push the given types explorers to the target host -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " - -set -eu - -__cdist_target_host="$1"; shift -__cdist_type="$1"; shift - -src_dir="$(__cdist_type_explorer_dir "$__cdist_type")" -dst_dir="$(__cdist_remote_type_explorer_dir "$__cdist_type")" - -if [ -d "$src_dir" ]; then - echo "Transfering explorers for $__cdist_type ..." - cdist-dir push "$__cdist_target_host" "$src_dir" "$dst_dir" -fi - diff --git a/doc/dev/todo/steven-from-nico b/doc/dev/todo/steven-from-nico index c04e980f..2f0ca2b5 100644 --- a/doc/dev/todo/steven-from-nico +++ b/doc/dev/todo/steven-from-nico @@ -31,28 +31,29 @@ x cdist-object-manifest-run: x general: cdist-object-run-all looks like a good idea! -- export $__cdist_name_var_self=$__cdist_object_self -> non core - -- bin/cdist-object-run: type_explorer stuff: probably put into own binary - - sounds like cdist-object-explorer-run is already the right executable to - place such stuff into - -- cdist-type-explorer-push: wherefore if [ -d "$src_dir" ];? +x cdist-type-explorer-push: wherefore if [ -d "$src_dir" ];? -> does this not even hide bugs? -> not sure whether covering cdist-dir in its own script makes sense, as cdist-dir push is only a one liner -> if cdist-dir does too less, enhance it => merge into cdist-object-explorer-run -- marker for type transferred / pushed goes into out/type/ +x bin/cdist-object-run: type_explorer stuff: probably put into own binary + - sounds like cdist-object-explorer-run is already the right executable to + place such stuff into + +x marker for type transferred / pushed goes into out/type/ -> new variables for out/type -> new variables for out/type/.MARKERFOONAMEMEGOOD -- new function: __cdist_type_explorer_created $name +x new function: __cdist_type_explorer_created $name if ! -d foo -> mkdir foo, echo $name >> foo/$NEW_FANCY_VAR +- export $__cdist_name_var_self=$__cdist_object_self -> non core + - align messages (already in todo for steven, but makes life much easier, thus repeated) -> prefix all object stuff with $__self -> __cdist_echo object string -> $__cdist_object_self :-) + diff --git a/doc/man/cdist-stages.text b/doc/man/cdist-stages.text index 4ab93cff..fbd60cea 100644 --- a/doc/man/cdist-stages.text +++ b/doc/man/cdist-stages.text @@ -51,8 +51,11 @@ Related manpages: - cdist-manifest-run-init(1) -STAGE 3: EXECUTION OF TYPES ---------------------------- +STAGE 3: EXECUTION OF OBJECTS +----------------------------- +Each object in the cconfig database is run through the following stages: +- + Every object is checked whether its type has a manifest file. If the type has a manifest file and it is executable, it will be executed. The manifest script may generate and change the created objects. In other words, one type can reuse