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"

相关内容