当有需要重复性执行某个任务时,可以使用迭代机制,其使用格式为将需要迭代的内容定义为item,并通过with_items语句来表明迭代的元素列表即可
~~~
---
- hosts: webserver
user: admin
become: yes
tasks:
- name: add users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: 'testuser01', groups: 'wheel' }
- { name: 'testuser02', groups: 'root' }
~~~
嵌套循环
~~~
- name: give users access to multiple databases
mysql_user: name={{ item[0] }} priv={{ item[1] }}.*:ALL append_privs=yes password=foo
with_nested:
- [ 'alice', 'bob' ]
- [ 'clientdb', 'employeedb', 'providerdb' ]
~~~
遍历字典
~~~
---
- hosts: webserver
user: admin
become: yes
tasks:
- name: print phone records
debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: {'alice':{'name':'Alice Appleworth', 'telephone':'123-456-789'},'bob':{'name':'Bob Bananarama', 'telephone':'987-654-3210'} }
~~~
遍历文件
~~~
---
- hosts: all
tasks:
- debug: "msg={{ item }}"
with_file:
- first_example_file
- second_example_file
~~~
遍历目录 (文件匹配循环)
~~~
---
- hosts: all
tasks:
- file: dest=/etc/fooapp state=directory
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*
~~~
重试循环until
~~~
- action: shell /usr/bin/foo
register: result
until: result.stdout.find("all systems go") != -1
retries: 5 重试此时
delay: 10 间隔时间
~~~
- 第一章:Ansible基础入门
- 第二章:Ansible系列手册
- 第一节:Ansible系列之主机清单
- 第二节:Ansible系列之变量
- 第三节:Ansible系列之YAML
- 第四节:Ansible系列之条件判断
- 第五节:Ansible系列之循环
- 第六节: Ansible系列之tags
- 第七节:Ansible系列之Jinja2
- 第三章:Ansible系列之模块
- 第一节:user模块
- 第二节:group模块
- 第三节:cron模块
- 第四节:copy模块
- 第五节: file模块
- 第六节:yum模块
- 第七节:service模块
- 第八节:shell模块
- 第九节:script模块
- 第十节:setup模块
- 第十一节:filesystem和mount模块
- 第十二节:synchronize模块
- 第十三节: get_url模块
- 第十四节: package模块
- 第十五节:stat模块
- 第十六节:unarchive模块
- 第十七节: commang模块
- 第四章:Ansible-playbook介绍
- 第五章:Ansible系统环境
- 第一节:Ansible Role 系统环境之epel设置