标准循环with_items:

[root@master circle]# vim c1.yml 

#练习循环with_items
---
 - name: create file
   hosts: web
   gather_facts: false
   tasks:
    - name: running
      file: path=/tmp/{{ item }} state=touch mode=0644 owner=wang group=wang
      with_items:
        - test
        - lianxi
        - hello
[root@master circle]# ansible-playbook c1.yml


使用字典的形式:

#练习循环with_items,删除c1创建的文件
---
 - name: create file
   hosts: web
   gather_facts: false
   tasks:
    - name: running
      file: path=/tmp/{{ item.key }} state=absent
      with_items:
        - {key: test}
        - {key: lianxi}
        - {key: hello}


嵌套循环with_nested:

#练习使用嵌套循环,例子是拷贝的,with_nested.
---
 - name: test
   hosts: web
   tasks:
    - name: create user which are used in mysql
      mysql_user: name={{ item[0] }} priv={{ item[1] }}
      with_nested:
        - [ 'wang1', 'wang2' ]
        - [ 'clientdb', 'employed', 'providerdb' ]

在这个嵌套循环的例子中,我们创建了两个mysql用户,给每一个用户赋予三种权限。



对文件列表使用循环with_fileglob:

with_fileglob可以以非递归的方式来模式匹配单个目录中的文件。

#使用with_fileglob,把circle中的文件拷贝到客户端的/tmp/circle目录中
---
 - name: test
   hosts: web
   gather_facts: false
   tasks:
    - name: create directory
      file: path=/tmp/circle state=directory owner=wang group=wang

   tasks:
    - name: cp file
      copy: src={{ item }} dest=/tmp/circle/
      
      with_fileglob:
        - /root/circle/*

执行:

[root@master circle]# ansible-playbook c4.yml

在客户端查看一下结果:

[root@slave tmp]# ls
circle
[root@slave tmp]# cd circle/
[root@slave circle]# ls
c1.yml  c2.yml  c3.yml  c4.yml
[root@slave circle]#


对哈希表使用循环:

假如你有以下变量:

---
users:
  alice:
    name: Alice Appleworth
    telephone: 123-456-7890
  bob:
    name: Bob Bananarama
    telephone: 987-654-3210

你想打印出每个用户的名称和电话号码.你可以使用 with_dict 来循环哈希表中的元素:

tasks:
  - name: Print phone records
    debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
    with_dict: "`users`"