¿Cuál es el equivalente de Puppet a la validación de entrada usando stdlib en Ansible?

¿Cuál es el equivalente de Puppet a la validación de entrada usando stdlib en Ansible?

Problema

La siguienteasuntoaparece en 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"}}

En este momento, el usuario necesita depurar el registro de sensu-client para encontrar el problema. ¿Se podría evitar el problema validando la entrada?

Apuntar

Para evitar que los usuarios que utilizan este rol utilicen nombres que contengan espacios o caracteres especiales, por ejemplo:

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

dejando que la ejecución de Ansible falle e indique que la entrada no es válida

Discusión

En Puppet se podría usarbiblioteca estándarpara validar la entrada, por ejemplo, ¿la variable X es una cadena y Y es igual a Hash? Por ejemplo, eneste módulola versión debe ser una cadena y, si ese no es el caso, la ejecución de Puppet fallará:

validate_string($version)

e indique que la versión debe ser una cadena.

¿Cómo validar la entrada en Ansible también?

Respuesta1

Puedes usarafirmarmódulo al comienzo de sus roles para validar valores de variables:

- assert:
    that:
      - "my_param <= 100"
      - "my_param >= 0"
    msg: "'my_param' must be between 0 and 100"

información relacionada