Multiple when statements in loop?

24 views
Skip to first unread message

John Harmon

unread,
Feb 22, 2018, 5:28:27 PM2/22/18
to Ansible Project
For reference, this is a continuation of: https://groups.google.com/forum/#!topic/ansible-project/XhU9iPXjjcw

Can you use multiple when statements in a loop? or is there a different way to approach this without having to write out a task for each item?  Take the following for example.  I know the syntax is wrong, but it gives you a better idea of what I mean.

    - name: Insert audit rules
      lineinfile
:
        path
: "/etc/audit/audit.rules"
        line
: "{{ item.line }}"
        regexp
: "{{ item.regexp }}"
        state
: present
        insertafter
: EOF
      notify
: Restart auditd
      with_items
:
       
- { line: '-w /home/GOMER/Scripts -p w -k copperfield', regexp: '.*GOMER.*Scripts.*' }
         
when: directories.results.0.stat.exists
       
- { line: '-w /home/PYLE/Scripts -p w -k copperfield', regexp: '.*PYLE*Scripts.*' }  
         
when: directories.results.1.stat.exists


Matt Martz

unread,
Feb 22, 2018, 5:40:31 PM2/22/18
to ansible...@googlegroups.com
I think instead of doing that, you should use `with_together` and a single `when` statement that meets your needs

...
    line: "{{ item.1.line }}"
    regexp: "{{ item1.regexp }}"
...
  when: item.0.stat.exists
  with_together:
    - "{{ directories.results }}"
    -
      - { line: '-w /home/GOMER/Scripts -p w -k copperfield', regexp: '.*GOMER.*Scripts.*' }
      - { line: '-w /home/PYLE/Scripts -p w -k copperfield', regexp: '.*PYLE*Scripts.*' }

--
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 ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/d5c1708b-13f8-4dd0-858c-dfacd40cdc2a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Matt Martz
@sivel
sivel.net

John Harmon

unread,
Feb 22, 2018, 6:24:30 PM2/22/18
to Ansible Project
Thanks.  with_together is new to me.  I am having a hard time wrapping my mind around the example you gave.  Can you explain it to me?
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.

John Harmon

unread,
Feb 22, 2018, 6:51:02 PM2/22/18
to Ansible Project
I created the following playbook, and this works as expected, but I don't understand it in context to what you recommended:
---
- hosts: localhost

  vars
:
    x
: ['a','b','c']
    y
: ['1','2','3']
    z
: ['first','second','third']

  tasks
:
   
- name: Testing
      debug
: msg="x is {{ item.0 }}, y is {{ item.1 }} and z is {{ item.2 }}"
      with_together
:
       
- "{{ x }}"
       
- "{{ y }}"
       
- "{{ z }}"


Results:
PLAY [localhost] *************************************************************************************************************************************************************************************************************************

TASK
[Gathering Facts] *******************************************************************************************************************************************************************************************************************
ok
: [localhost]

TASK
[Testing] ***************************************************************************************************************************************************************************************************************************
ok
: [localhost] => (item=[u'a', u'1', u'first']) => {
   
"changed": false,
   
"item": [
       
"a",
       
"1",
       
"first"
   
],
   
"msg": "x is a, y is 1 and z is first"
}
ok
: [localhost] => (item=[u'b', u'2', u'second']) => {
   
"changed": false,
   
"item": [
       
"b",
       
"2",
       
"second"
   
],
   
"msg": "x is b, y is 2 and z is second"
}
ok
: [localhost] => (item=[u'c', u'3', u'third']) => {
   
"changed": false,
   
"item": [
       
"c",
       
"3",
       
"third"
   
],
   
"msg": "x is c, y is 3 and z is third"
}




Matt Martz

unread,
Feb 22, 2018, 6:55:59 PM2/22/18
to ansible...@googlegroups.com

To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/c0d13b53-c95d-4a73-84c1-8f2777067766%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

John Harmon

unread,
Feb 22, 2018, 7:09:59 PM2/22/18
to Ansible Project
Right, I saw that....  I don't understand why in the example you gave you are referencing item.1.* and then using a when statement of item.0
Reply all
Reply to author
Forward
0 new messages