Problema
O seguinte problema aparece no ansible-sensu-client:
{"timestamp":"2017-01-19T09:49:14.803754+0000","level":"fatal","message":
"check name cannot contain spaces or special characters","object":{"handlers":
["mailer","sms"],"command":"check-ports.rb -p 234","interval":30,"standalone":
true,"name":"port 234"}}
No momento em que o usuário precisa depurar o log sensu-client para encontrar o problema, o problema pode ser evitado validando a entrada.
Mirar
Para evitar que os usuários que usam esta função usem nomes que contenham espaços ou caracteres especiais, por exemplo:
sensu_client_checks_metrics_common:
- cmd: check-cpu
- cmd: check-memory-percent
- cmd: check-ntp
- cmd: check-swap-percent
handlers:
- mailer
- cmd: metrics-cpu
handlers:
- relay
- cmd: metrics-memory-percent
handlers:
- relay
- cmd: metrics-disk
handlers:
- relay
- cmd: metrics-disk-usage
handlers:
- relay
deixando a execução do Ansible falhar e indicar que a entrada é inválida
Discussão
No Puppet, pode-se usar Stdlib para validar a entrada, por exemplo, a variável X é uma String e Y é igual a Hash? Por exemplo, neste módulo a versão deve ser uma string e se não for o caso a execução do Puppet falhará:
validate_string($version)
e indique que a versão precisa ser uma string.
Como validar a entrada no Ansible também?
Você pode usar o módulo assert no início de suas funções para validar valores de variáveis: