implement dependency handling at the object level
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
parent
cd1a1347c9
commit
4ee5d74c9f
5 changed files with 93 additions and 84 deletions
|
@ -32,31 +32,16 @@ if [ ! -d "$(__cdist_object_dir "$object")" ]; then
|
|||
__cdist_exit_err "Object $object is missing."
|
||||
fi
|
||||
|
||||
finished="$(__cdist_object_code_finished "$object")"
|
||||
require="$(__cdist_object_require "$object")"
|
||||
|
||||
code="$(__cdist_object_code "$object")-${__cdist_gencode_type}"
|
||||
|
||||
# Do nothing if our work has been done
|
||||
if [ -f "$finished" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Checking code-${__cdist_gencode_type} for $object ..."
|
||||
|
||||
if [ -f "$require" ]; then
|
||||
while read requirement; do
|
||||
echo "Requiring dependency $requirement for $object ..."
|
||||
cdist-code-run "$requirement" "$__cdist_gencode_type"
|
||||
done < "$require"
|
||||
fi
|
||||
|
||||
if [ -e "$code" ]; then
|
||||
if [ -f "$code" ]; then
|
||||
if [ -x "$code" ]; then
|
||||
echo "Executing code-${__cdist_gencode_type} for $object ..."
|
||||
"$code"
|
||||
touch "$finished"
|
||||
else
|
||||
__cdist_exit_err "$code exists, but is not executable."
|
||||
fi
|
||||
|
|
|
@ -42,7 +42,6 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
|
|||
|
||||
: ${__cdist_name_bin:=bin}
|
||||
: ${__cdist_name_code:=code}
|
||||
: ${__cdist_name_code_finished:=codedone}
|
||||
: ${__cdist_name_conf_dir:=conf}
|
||||
: ${__cdist_name_dot_cdist:=.cdist}
|
||||
: ${__cdist_name_explorer:=explorer}
|
||||
|
@ -68,6 +67,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_objects_created:=objects_created}
|
||||
|
||||
# Used for IDs: Allow everything not starting with - and .
|
||||
: ${__cdist_sane_regexp:=[^-\.].*}
|
||||
|
@ -107,6 +107,7 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
|
|||
: ${__cdist_manifest_dir:=$__cdist_conf_dir/$__cdist_name_manifest}
|
||||
: ${__cdist_manifest_init:=$__cdist_manifest_dir/$__cdist_name_init}
|
||||
: ${__cdist_type_dir:=$__cdist_conf_dir/$__cdist_name_type}
|
||||
: ${__cdist_new_objects_created:=$__cdist_local_base_dir/$__cdist_name_objects_created}
|
||||
|
||||
################################################################################
|
||||
# Local output
|
||||
|
@ -176,6 +177,14 @@ __cdist_init_deploy()
|
|||
ln -sf "$__cdist_conf_dir" "$__cdist_local_base_dir/$__cdist_name_conf_dir"
|
||||
}
|
||||
|
||||
__cdist_new_objects_created() {
|
||||
touch "$__cdist_tmp_dir/object_created"
|
||||
}
|
||||
|
||||
__cdist_has_new_objects() {
|
||||
touch "$__cdist_tmp_dir/object_created"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Object
|
||||
#
|
||||
|
@ -185,9 +194,9 @@ __cdist_object_code()
|
|||
echo "$(__cdist_object_dir "$1")/${__cdist_name_code}"
|
||||
}
|
||||
|
||||
__cdist_object_code_finished()
|
||||
__cdist_object_finished()
|
||||
{
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_code_finished}"
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_object_finished}"
|
||||
}
|
||||
|
||||
__cdist_object_dir()
|
||||
|
@ -250,6 +259,7 @@ __cdist_object_type_explorer_dir()
|
|||
echo "$(__cdist_object_dir "$1")/${__cdist_name_explorer}"
|
||||
}
|
||||
|
||||
|
||||
################################################################################
|
||||
# Remote
|
||||
#
|
||||
|
|
|
@ -35,13 +35,12 @@ __cdist_cur_object_dir="$(__cdist_object_dir "$__cdist_object")"
|
|||
# Only the id
|
||||
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object")"
|
||||
|
||||
if [ ! -f "${__cdist_cur_object_dir}/$__cdist_name_object_finished" ]; then
|
||||
echo "Checking manifest for $__cdist_object ..."
|
||||
echo "Checking manifest for $__cdist_object ..."
|
||||
|
||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object")"
|
||||
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
|
||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object")"
|
||||
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
|
||||
|
||||
if [ -f "$__cdist_manifest" ]; then
|
||||
if [ -f "$__cdist_manifest" ]; then
|
||||
if [ -x "$__cdist_manifest" ]; then
|
||||
# Make __cdist_manifest available for cdist-type-emulator
|
||||
export __cdist_manifest
|
||||
|
@ -53,12 +52,10 @@ if [ ! -f "${__cdist_cur_object_dir}/$__cdist_name_object_finished" ]; then
|
|||
export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
|
||||
|
||||
cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest"
|
||||
# Tell cdist that there may be new objects
|
||||
touch "$__cdist_new_objects_created"
|
||||
else
|
||||
__cdist_exit_err "${__cdist_manifest} needs to be executable."
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# done with this object
|
||||
touch "$__cdist_cur_object_dir/$__cdist_name_object_finished"
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#
|
||||
# For the given object:
|
||||
# - run type explorers
|
||||
# - run type manifest
|
||||
# - generate code
|
||||
# - copy object to target
|
||||
# - execute code on target
|
||||
|
@ -35,24 +36,41 @@ __cdist_object="$1"; shift
|
|||
|
||||
|
||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object")"
|
||||
__cdist_types_pushed="$__cdist_tmp_dir/types_pushed"
|
||||
touch "$__cdist_types_pushed"
|
||||
|
||||
# Check if type of object has >= 1 explorer
|
||||
__cdist_has_explorer="$(__cdist_type_has_explorer "$__cdist_type")"
|
||||
__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")"
|
||||
|
||||
# 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
|
||||
|
||||
# Run the type explorers for the current object if any
|
||||
if [ "$__cdist_has_explorer" ]; then
|
||||
cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object"
|
||||
fi
|
||||
|
||||
# Run the manifest for the current object
|
||||
cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
# Run the gencode scripts for the current object
|
||||
cdist-object-gencode-run "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
# Transfer the current object to the target
|
||||
cdist-object-push "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
# Run the code for the current object
|
||||
cdist-object-code-run "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
# Mark this object as done
|
||||
touch "$__cdist_object_finished"
|
||||
|
||||
fi
|
||||
|
||||
# Run the manifest for the current object
|
||||
cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
# Run the gencode scripts for the current object
|
||||
cdist-object-gencode-run "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
# Transfer the current object to the target
|
||||
cdist-object-push "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
# Run the code for the current object
|
||||
cdist-object-code-run "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
|
|
|
@ -29,39 +29,38 @@ set -eu
|
|||
__cdist_target_host="$1"; shift
|
||||
|
||||
__cdist_objects="$__cdist_tmp_dir/objects"
|
||||
__cdist_types_pushed="$__cdist_tmp_dir/types_pushed"
|
||||
touch "$__cdist_types_pushed"
|
||||
|
||||
# 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
|
||||
# Assume we're done after this run
|
||||
rm "$__cdist_new_objects_created"
|
||||
|
||||
# Get listing of objects
|
||||
__cdist_object_list "$__cdist_out_object_dir" > "$__cdist_objects"
|
||||
|
||||
|
||||
# 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
|
||||
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
|
||||
while read __cdist_object; do
|
||||
set -- "$@" "$__cdist_object"
|
||||
done < "$__cdist_objects"
|
||||
done < "$__cdist_objects"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
while [ $# -gt 0 ]; do
|
||||
__cdist_object="$1"; shift
|
||||
|
||||
__cdist_object_require="$(__cdist_object_require "$__cdist_object")"
|
||||
if [ -f "$__cdist_object_require" ]; then
|
||||
echo
|
||||
echo "Running object $__cdist_object"
|
||||
|
||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object")"
|
||||
|
||||
# Check if type of object has >= 1 explorer
|
||||
__cdist_has_explorer="$(__cdist_type_has_explorer "$__cdist_type")"
|
||||
|
||||
# Transfer the type explorers 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
|
||||
while read __cdist_requirement; do
|
||||
echo "Resolving dependency $__cdist_object -> $__cdist_requirement ..."
|
||||
cdist-object-run "$__cdist_target_host" "$__cdist_requirement"
|
||||
done < "$__cdist_object_require"
|
||||
fi
|
||||
|
||||
# Process the given object
|
||||
# Process the object
|
||||
cdist-object-run "$__cdist_target_host" "$__cdist_object"
|
||||
|
||||
done
|
||||
done
|
||||
|
||||
|
|
Loading…
Reference in a new issue