Guys,

 I'm trying to create a top-level playbook, based on "include_role:", 
instead of "roles:", however, the "when:" condition isn't working properly, 
I think.

 Easy to reproduce (the content of "roles/hello-world-X/tasks/main.yml" is 
in the end):

 This works ("include_role:" without the "when:" condition):

$ ansible --version
ansible 2.2.0.0

$ source ~/my-openstack-project-openrc.sh

$ ansible-playbook -i openstack.py hello.yml

---
- hosts: all
  remote_user: ubuntu
  become: yes
  tasks:
    - include_role: name=hello-world-1
---

 Awesome!

 However, if I add the "when:" condition:

---
- hosts: all
  remote_user: ubuntu
  become: yes
  tasks:
    - include_role: name=hello-world-1
      when: ansible_hostname == 'stack-1-web-1'
---

 Then, it tails! With the following error:

---
fatal: [1872cd92-84cf-4ad5-9f1a-52d3b79a5940]: FAILED! => {"failed": true, 
"msg": "The conditional check 'a' failed. The error was: error while 
evaluating conditional (a): 'a' is undefined\n\nThe error appears to have 
been in '/home/tmartins/project/ansible/hello.yml': line 5, column 7, but 
may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe 
offending line appears to be:\n\n  tasks:\n    - include_role: 
name=hello-world-1\n      ^ here\n"}
---

 What's wrong? Ansible bug?

 I tried a "more simple" condition (when: ansible_os_family == "Debian"), 
same error.

 My "when:" condition is right, I can test it, by replacing the 
"include_role:", by "ping:", like this:

---
- hosts: all
  remote_user: ubuntu
  become: yes
  tasks:
    - ping:
      when: ansible_hostname == 'stack-1-web-1'
---

 It works...

 If I also apply the when condition to a "-role:", then, it works as well, 
like this:

---
- hosts: all
  remote_user: ubuntu
  become: yes
  roles:
    - { role: hello-world-1, when: ansible_hostname == 'stack-1-web-1' }
    - { role: hello-world-2, when: ansible_hostname == 'stack-1-sql-1' }
---

 Works, good but, as I said before, I want to use "include_role:", instead 
of "roles:", mostly because of its (broken?) support for "when:" condition.

 Aaaand, I can't use "when:" under "roles:", something about: "ERROR! 
'when' is not a valid attribute for a Play", if I try "when:" under 
"roles:".

 I also noted that "include_roles:" doesn't work with "with_items", this:

---
- hosts: all
  remote_user: ubuntu
  become: yes
  tasks:
    - include_role: name={{item}}
      with_items:
         - hello-world-1
         - hello-world-2
---

 Returns:

 ERROR! 'item' is undefined

 :-(

 My goal is something like this:

---
- hosts: all
  remote_user: ubuntu
  become: yes
  tasks:

    - include_role: name={{item}}
      with_items:
        - hello-world-1
        - hello-world-2
      when: ansible_hostname | search("stack-1-web.*")

    - include_role: name={{item}}
      with_items:
        - hello-world-3
        - hello-world-4
      when: ansible_hostname | search("stack-1-sql.*")
---

 Is it even possible? Apparently, only the *"with_items" with 
"include_role"* isn't really documented here:

 http://docs.ansible.com/ansible/include_role_module.html

 I manage to use "include_role:" only without "when:" or "items", for 
example:

---
- hosts: all
  remote_user: ubuntu
  become: yes
  tasks:
    - include_role: name=hello-world-1
    - include_role: name=hello-world-2
    - include_role: name=hello-world-3
    - include_role: name=hello-world-4
---

 NOTE: Here is the contents of "roles/hello-world-X/tasks/main.yml":

---
- name: Test connection
  ping:

- debug: msg={{ ansible_hostname }}
---

 BTW, the "*when: ansible_hostname | search("stack-1-web.*")*" works like a 
charm, quite awesome! I can easily detect all my "stack-1-web|sql-X" 
instances without using [web|sql-groups], all my instances are under the 
same group "[all]", I also have an inventory file with "[all:vars]" and 
that's it. At least, this is what I'm trying to do...     =P

 Ansible FTW, cheers!

Thanks,
Thiago

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/767af0ad-8079-4056-9be7-d4d111550682%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to