cdist configuration management
Latest manual: https://www.cdi.st/manual/latest/
Home page: https://www.cdi.st
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.2 KiB
58 lines
1.2 KiB
#!/bin/sh -e |
|
|
|
if [ -f "$__object/parameter/file" ] |
|
then |
|
file="$( cat "$__object/parameter/file" )" |
|
else |
|
file="/$__object_id" |
|
fi |
|
|
|
script="$( cat "$__object/parameter/script" )" |
|
|
|
if [ "$script" = '-' ] |
|
then |
|
script="$( cat "$__object/stdin" )" |
|
fi |
|
|
|
# since stdin is not available in explorer, we pull file from target with explorer |
|
|
|
file_from_target="$__object/explorer/file" |
|
|
|
sed_cmd='sed' |
|
|
|
if [ -f "$__object/parameter/regexp-extended" ] |
|
then |
|
sed_cmd="$sed_cmd -E" |
|
fi |
|
|
|
# do sed dry run, diff result and if no change, then there's nothing to do |
|
# also redirect diff's output to stderr for debugging purposes |
|
|
|
if echo "$script" | "$sed_cmd" -f - "$file_from_target" | diff -u "$file_from_target" - >&2 |
|
then |
|
exit 0 |
|
fi |
|
|
|
# we can't use -i, because it's not posix, so we fly with tempfile and cp |
|
# and we use cp because we want to preserve destination file's attributes |
|
|
|
# shellcheck disable=SC2016 |
|
echo 'tmp="$__object/tempfile"' |
|
|
|
echo "$sed_cmd -f - '$file' > \"\$tmp\" << EOF" |
|
|
|
echo "$script" |
|
|
|
echo 'EOF' |
|
|
|
echo "cp \"\$tmp\" '$file'" |
|
|
|
# shellcheck disable=SC2016 |
|
echo 'rm -f "$tmp"' |
|
|
|
echo 'change' >> "$__messages_out" |
|
|
|
if [ -f "$__object/parameter/onchange" ] |
|
then |
|
cat "$__object/parameter/onchange" |
|
fi
|
|
|