当自动设置服务器时,有时你需要用不同的值重复执行同一任务。例如,你可能需要改变多个文件的权限,或创建多个用户。为了避免在你的playbook文件中多次重复任务,最好使用循环来代替。
在编程中,_循环_允许你重复指令,通常直到满足某个条件。Ansible提供了不同的循环方法,其中loop 关键字是最值得推荐的选项,以实现长期的兼容性。
下面的例子在/tmp 这个位置上创建了三个不同的文件。它在一个任务中使用了file 模块,用三个不同的值实现了一个循环。
在你的ansible-practice 目录中创建一个名为playbook-06.yml 的新文件。
nano ~/ansible-practice/playbook-06.yml
然后在新的playbook文件中添加以下几行。
~/ansible-practice/playbook-06.yml
---
- hosts: all
tasks:
- name: creates users files
file:
path: /tmp/ansible-{{ item }}
state: touch
loop:
- sammy
- erika
- brian
完成后保存并关闭该文件。
然后,用前面例子中相同的连接参数运行ansible-playbook 。同样,我们使用一个名为inventory 的库存文件和一个名为sammy 的用户,但你应该相应地改变这些值。
ansible-playbook -i inventory playbook-06.yml -u sammy
你会得到这样的输出,显示在循环中使用的每个单独的项目值。
Output...
TASK [creates users files] ******************************************************************************
changed: [203.0.113.10] => (item=sammy)
changed: [203.0.113.10] => (item=erika)
changed: [203.0.113.10] => (item=brian)
...
关于在编写Ansible playbook时如何使用循环的更多详细信息,请参考官方文档。