Назад | Перейти на главную страницу

Что такое эквивалент Puppet для проверки ввода с использованием stdlib в Ansible?

Проблема

Последующий выпуск появляется в 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:
    that:
      - "my_param <= 100"
      - "my_param >= 0"
    msg: "'my_param' must be between 0 and 100"