Problem
Die folgendeAusgabeerscheint im 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"}}
Im Moment muss der Benutzer die Protokollierung des Sensu-Clients debuggen, um das Problem zu finden. Das Problem könnte durch eine Validierung der Eingabe verhindert werden.
Ziel
Um zu verhindern, dass Benutzer dieser Rolle Namen verwenden, die Leerzeichen oder Sonderzeichen enthalten, zB:
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
indem Sie den Ansible-Lauf fehlschlagen lassen und angeben, dass die Eingabe ungültig ist
Diskussion
In Puppet könnte man verwendenStdlibum die Eingabe zu validieren, z. B. ist die Variable X ein String und ist Y gleich Hash? Zum Beispiel indieses Moduldie Version sollte ein String sein. Wenn das nicht der Fall ist, schlägt der Puppet-Lauf fehl:
validate_string($version)
und geben Sie an, dass die Version eine Zeichenfolge sein muss.
Wie validiert man Eingaben auch in Ansible?
Antwort1
Sie könnenbehauptenModul am Anfang Ihrer Rollen, um Variablenwerte zu validieren:
- assert:
that:
- "my_param <= 100"
- "my_param >= 0"
msg: "'my_param' must be between 0 and 100"