问题
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 中验证输入?
您可以在角色开始时使用assert模块来验证变量值: