[type/__uci] Apply all commands in a single batch
This commit is contained in:
parent
ec984f81b5
commit
3e5f18d409
3 changed files with 51 additions and 0 deletions
43
cdist/conf/type/__uci/files/uci_apply.sh
Normal file
43
cdist/conf/type/__uci/files/uci_apply.sh
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
changes=$(uci changes)
|
||||||
|
|
||||||
|
if test -n "${changes}"
|
||||||
|
then
|
||||||
|
echo 'Uncommited UCI changes were found on the target:'
|
||||||
|
printf '%s\n\n' "${changes}"
|
||||||
|
echo 'This can be caused by manual changes or due to a previous failed run.'
|
||||||
|
echo 'Please investigate the situation, revert or commit the changes, and try again.'
|
||||||
|
exit 1
|
||||||
|
fi >&2
|
||||||
|
|
||||||
|
check_errors() {
|
||||||
|
# reads stdin and forwards non-empty lines to stderr.
|
||||||
|
# returns 0 if stdin is empty, else 1.
|
||||||
|
! grep -e . >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
commit() {
|
||||||
|
uci commit
|
||||||
|
}
|
||||||
|
|
||||||
|
rollback() {
|
||||||
|
printf '\nAn error occurred when trying to commit UCI transaction!\n' >&2
|
||||||
|
|
||||||
|
uci changes \
|
||||||
|
| sed -e 's/^-//' -e 's/\..*\$//' \
|
||||||
|
| sort -u \
|
||||||
|
| while read -r _package
|
||||||
|
do
|
||||||
|
uci revert "${_package}"
|
||||||
|
echo "${_package}" # for logging
|
||||||
|
done \
|
||||||
|
| awk '
|
||||||
|
BEGIN { printf "Reverted changes in: " }
|
||||||
|
{ printf "%s%s", (FNR > 1 ? ", " : ""), $0 }
|
||||||
|
END { printf "\n" }' >&2
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
uci_apply() {
|
||||||
|
uci batch 2>&1 | check_errors && commit || rollback
|
||||||
|
}
|
|
@ -91,3 +91,11 @@ in
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if test -s "${__object:?}/files/uci_batch.txt"
|
||||||
|
then
|
||||||
|
cat "${__type:?}/files/uci_apply.sh"
|
||||||
|
printf "uci_apply <<'EOF'\n"
|
||||||
|
cat "${__object:?}/files/uci_batch.txt"
|
||||||
|
printf '\nEOF\n'
|
||||||
|
fi
|
||||||
|
|
0
cdist/conf/type/__uci/nonparallel
Normal file
0
cdist/conf/type/__uci/nonparallel
Normal file
Loading…
Reference in a new issue