As for the punchline:
dos-make-addr-conf | dosctr set template_vars -
> This cron job is implemented using a small Bash script. If you’re unfamiliar with Bash (particularly shell pipelining), here’s what it does:> First, the dos-make-addr-conf executable runs. Its job is to query the Addressing API for various bits of JSON data and serialize it into a Toml document. Afterward, that Toml is “piped” as input into the dosctl executable, whose job is to simply write it into a Quicksilver key called template_vars.
> Can you spot the bug? Here’s a hint: what happens if dos-make-addr-conf fails for some reason and exits with a non-zero error code? It turns out that, by default, the shell pipeline ignores the error code and continues executing the next command! This means that the output of dos-make-addr-conf (which could be empty) gets unconditionally piped into dosctl and used as the value of the template_vars key, regardless of whether dos-make-addr-conf succeeded or failed.
The 'fix' from the post is to add to this script:
set -e -u -o pipefail
I would suggest that choosing a pipe communication format where no content is valid input isn't very wise. There's a reason why we have machine-readable vs human-readable favoured formats.At least have the dosctr program recognise empty input as a special case and reject it, if it's never what you want. This post seems to be a long 'first cause' analysis rather than root cause(s).