Multiple when statements in loop?

已查看 24 次
跳至第一个未读帖子

John Harmon

未读,
2018年2月22日 17:28:272018/2/22
收件人 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

未读,
2018年2月22日 17:40:312018/2/22
收件人 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

未读,
2018年2月22日 18:24:302018/2/22
收件人 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

未读,
2018年2月22日 18:51:022018/2/22
收件人 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

未读,
2018年2月22日 18:55:592018/2/22
收件人 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

未读,
2018年2月22日 19:09:592018/2/22
收件人 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
回复全部
回复作者
转发
0 个新帖子