問題
次の問題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では標準ライブラリ入力を検証する、例えば変数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"