Puppet 相當於 Ansible 中使用 stdlib 進行輸入驗證的功能是什麼?

Puppet 相當於 Ansible 中使用 stdlib 進行輸入驗證的功能是什麼?

問題

下列問題出現在 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"

相關內容