返回介绍

9.11 循环

发布于 2024-01-29 22:54:23 字数 1249 浏览 0 评论 0 收藏 0

通常一个任务会做很多事情,如创建大量的用户、安装很多包,或重复轮询特定的步骤,直到某种结果条件为止,Ansible为我们提供了此支持。下面是一个简单的示例:

- name: add several users
 user: name={{ item }} state=present groups=wheel
 with_items:
   - testuser1
   - testuser2

这个示例实现了一个批量创建系统用户的功能,with_items会自动循环执行上面的语句“user:name={{item}}state=present groups=wheel”,循环的次数为with_items的元素个数,这里有2个元素,分别为testuser1、testuser2,会分别替换{{item}}项。这个示例与下面的示例是等价的:

- name: add user testuser1
 user: name=testuser1 state=present groups=wheel
- name: add user testuser2
 user: name=testuser2 state=present groups=wheel

当然,元素也支持字典的形式,如下:

- name: add several users
 user: name={{ item.name }} state=present groups={{ item.groups }}
 with_items:
  - { name: 'testuser1', groups: 'wheel' }
  - { name: 'testuser2', groups: 'root' }

循环也支持列表(List)的形式,不过是通过with_flattened语句来实现的,例如:

----
# file: roles/foo/vars/main.yml
packages_base:
 - [ 'foo-package', 'bar-package' ]
packages_apps:
 - [ ['one-package', 'two-package' ]]
 - [ ['red-package'], ['blue-package']]

以上定义了两个列表变量,分别是需要安装的软件包名,以便后面进行如下引用:

- name: flattened loop demo
 yum: name={{ item }} state=installed
 with_flattened:
   - packages_base
   - packages_apps

通过使用with_flattened语句循环引用定义好的列表变量。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文