Nesting roles and omitting vars

37 views
Skip to first unread message

Arnaud Mazin

unread,
Sep 13, 2015, 7:19:32 AM9/13/15
to Ansible Project
Hi

I'm trying to nest roles using dependencies in order to reuse as much code as possible and get into trouble when trying to omit some parameters

My setup:

# roles/roleA/tasks/main.yml
---
- debug: msg="var var_rolea is set to {{ var_rolea|default('no idea') }}"

# roles/roleB/meta/main.yml
dependencies
:
 
- { role: roleA,
      var_rolea
: "{{ var_roleb }}"
   
}

# playbook
# play1, specify value
- hosts: localhost
  gather_facts
: no
  roles
:
   
- role: roleB
      var_roleb
: plop

# play2, omit value, let defaults apply
- hosts: localhost
  gather_facts
: no
  roles
:
   
- role: roleB



I get a « fatal: [localhost] => One or more undefined variables: 'var_roleb' is undefined » error in this case.

I tried several tricks into the roleB/meta/main.yml, such as:
  • var_rolea: "{{ var_roleb|default(omit) }}"
  • var_rolea: "{{ var_roleb|default(None) }}"
But so far, I haven't found a pretty way to do this.

Any Idea?

Regards,

Arnaud

Trond Hindenes

unread,
Sep 14, 2015, 6:27:54 AM9/14/15
to Ansible Project
In your RoleB role, use a defaults file to handle default variables. That will ensure you always have the var_roleb variable defined.

Arnaud Mazin

unread,
Sep 14, 2015, 7:36:50 AM9/14/15
to Ansible Project
Hello.

It doesn't exactly meet my need, I'd like to be able to write:

# roles/roleA/tasks/main.yml
---
- file: path=/tmp/foo owner="{{ var_rolea|default(omit) }}"

Reply all
Reply to author
Forward
0 new messages