Como você resolve isso no Ansible?
Eu tenho um arquivo /etc/foo/foo.config
. Eu quero substituir a string "DisallowBar" para "AlllowBarUntilMidnight" neste arquivo.
O Ansible deve agir nesses casos assim:
- Case1: DisallowBar é encontrado e substituído: OK
- Case2: AllowBarUntilMidnight já está no arquivo. Nada é feito: OK
- Case3: DisallowBar e AllowBarUntilMidnight não estão no arquivo: eu quero que o ansible falhe.
Case3 é importante para mim, pois esse estado não deveria existir. É um erro e isso não deve passar silenciosamente.
Você pode usar um
validate
parâmetro de substituição para garantir que o arquivo que seria gravado contenhaAllowBarUntilMidnight
e não contenha maisDisallowBar
.O
validate
comando é executado no arquivo temporário gerado antes de ser copiado no local após asreplace
execuções. Nesse caso, se agrep
falha, isso significa que nenhuma substituição ocorreu e seu arquivo original nunca foi contidoDisallowBar
. A reprodução falha e o arquivo permanece inalterado.Você pode simplesmente confiar no comportamento padrão da
replace
função para garantir que o arquivo não contenhaDisallowBar
mais a string.Depois que a tarefa de substituição for executada, você só precisa confirmar se o arquivo contém a string
AllowBarUntilMidnight
e gerar um erro se não tiver. Você pode fazer isso com um simplesgrep
.