I've gotten in a habit of creating a simple dictionary of expected 
variables when making a role so that it fails early.  Something like this:

- name: "Validate Variables"
  vars:
    required_vars:
      - name: foo
        msg: "var foo must be defined!"
      - name: bar
        msg: "var bar must be defined!"
   fail:
    msg: "{{ item['msg'] }}"
  when: vars[item['name']] is undefined
  loop: "{{ required_vars }}"

This works all and well, but I'd like to up my game:  include a 
requirements attribute so that I can also validate the contents.  The 
problem is the when statement.  So as an example

- name: "Validate Variables"
  vars:
    required_vars:
      - name: foo
        valid: is string
        msg: "var foo must be defined!"
      - name: bar
        valid: is integer
        msg: "var bar must be defined!"
   fail:
    msg: "{{ item['msg'] }}"
  when: 
      - vars[item['name']] is undefined
      - not (vars[item['name']] vars[item['valid']])
  loop: "{{ required_vars }}"

now we have issues.  While I can easily inject a name to check against ... 
the moment I want the check itself to be a variable I have a problem.  I 
could create multiple fail loops for each type of variable, but at that 
point I've build a lot of scaffolding for what should be a simple 
parameters check.

Is there a better way to validate parameters before the run of a role?

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-devel+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to