如何在Ansible Playbooks中使用循环系统

158 阅读1分钟

当自动设置服务器时,有时你需要用不同的值重复执行同一任务。例如,你可能需要改变多个文件的权限,或创建多个用户。为了避免在你的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时如何使用循环的更多详细信息,请参考官方文档