diff --git a/bin/cdist-manifest-recursive-run b/bin/cdist-manifest-recursive-run index 0a2a885b..9cf3e94d 100755 --- a/bin/cdist-manifest-recursive-run +++ b/bin/cdist-manifest-recursive-run @@ -38,10 +38,17 @@ set -eu __cdist_output_dir="$1"; shift __cdist_object_dir="$1"; shift -__cdist_object_ran_all=0 +# change to directory containing objects +cd "$__cdist_object_dir" -while [ "$__cdist_object_ran_all" = 0 ]; do - cd "$__cdist_object_dir" +# Loop until we do not create new objects anymore +# which is equal to all objects have been run +__cdist_object_created_new=1 + + +while [ "$__cdist_object_created_new" = 1 ]; do + # assume we're done after this run + __cdist_object_created_new=0 # find all objects (every object has the source recorded) find . -name "$__cdist_object_source" | \ @@ -49,43 +56,38 @@ while [ "$__cdist_object_ran_all" = 0 ]; do -e 's;^./;;' \ > "$__cdist_tmp_file" + cat "$__cdist_tmp_file" + while read object; do if [ ! -f "${object}/$__cdist_object_finished" ]; then echo "Running object ${object} ..." - echo "Merging stuff back..." + + manifest="${object}/${__cdist_name_init}" + if [ -x "${manifest}" ]; then + cdist-manifest-run "${manifest}" "${__cdist_tmp_dir}" + + echo "Merging stuff back..." + # FIXME: continue here + # tar, cp, pax? + # - copy if not existing + # fail (abort whole recursive run) if existing + # + # iterate over all new objects and copy each back? + + else + # Be nice, warn user if manifests exists, but is not executable + if [ -f "${manifest}" ]; then + echo "Warning ${manifest} is not executable" + fi + fi + touch "${object}/$__cdist_object_finished" + + # At least one more run needed + __cdist_object_created_new=1 fi done < "$__cdist_tmp_file" -# # FIXME past 1.0: allow multi level ids (/example/id instead of example_id only) -# # OUTER LOOP NEEDED IF GOING OVER ALL OBJECTS WITH FIND? -# for type in *; do -# cd "$__cdist_object_dir/$type" -# -# # find all objects (every object has the source recorded) -# find . -name "$__cdist_object_source" > "$__cdist_tmp_file" -# -# while read object; do -# echo "Running object ${type}/${object} ..." -# done < "$__cdist_tmp_file" -# done -# -# # FIXME: abort on real case only :-) -# __cdist_object_ran_all=1 done exit 0 - -# Ensure binaries exist and are up-to-date -cdist-build-bin - -# prepend our path, so all cdist tools come before other tools -PATH="${__cdist_cache_bin}:$PATH" - -# Force -x, so the user is aware the file is executed -if [ ! -x "${__cdist_manifest_init}" ]; then - __cdist_exit_err "${__cdist_manifest_init} needs to be executable." -fi - -mkdir -p "${__cdist_output_dir}" -"${__cdist_manifest}"