Проблема
Следующеепроблемапоявляется в 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"}}
На данный момент пользователю необходимо отладить ведение журнала Sensu-Client, чтобы найти проблему. Можно ли предотвратить ее возникновение, проверив входные данные?
Цель
Чтобы избежать ситуации, когда пользователи, использующие эту роль, будут использовать имена, содержащие пробелы или специальные символы, например:
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
позволяя Ansible выполниться с ошибкой и указывая, что входные данные недействительны
Обсуждение
В Puppet можно было бы использоватьStdlibдля проверки ввода, например, является ли переменная X строкой и равен ли Y хэшу? Например, вэтот модульверсия должна быть строкой, если это не так, запуск Puppet завершится ошибкой:
validate_string($version)
и укажите, что версия должна быть строкой.
Как также проверить ввод в Ansible?
решение1
Вы можете использоватьутверждатьмодуль в начале ваших ролей для проверки значений переменных:
- assert:
that:
- "my_param <= 100"
- "my_param >= 0"
msg: "'my_param' must be between 0 and 100"