Uma maneira de conseguir isso seria usar o protocolo de módulo suportado pelo CFEngine . Com isso, você pode definir classes arbitrárias e variáveis do próprio script. Por exemplo, um script como este (não testado):
#!/bin/bash
if git pull | grep -q 'Already up-to-date.'; then
echo "+no_update"
fi
Armazene em / var / cfengine / modules / update_git, e então você pode fazer algo assim:
commands:
"update_git"
contain => setuidgiddir_sh("$(globals.user)","$(globals.group)","$(target)"),
module => "true";
E, em seguida, atue em no_update
como você fez antes.
Você provavelmente conseguiria algo assim com um corpo de classes usando os atributos mantidos / reparados / failed_returncodes , mas um módulo parece mais limpo e mais expressivo.