“Ansible 是 Red Hat Inc. 的开源工具,用于自动化许多 IT 基础设施任务。 它可用于广泛的任务,例如安装软件包、添加计算节点、资源配置等。 它有许多模块可用于管理多个与配置相关的任务。
Ansible 是无代理的,安装在称为控制器的控制主机上。 控制器的工作是通过 SSH 和其他支持的通信机制管理远程机器。
循环对于一次性执行多个任务很方便,例如创建多个用户、安装多个包或重复执行任务直到条件为真或假。
Ansible 在其剧本中使用 YAML(YAML Ain’t Markup Language),一种数据序列化语言。 Ansible 代码可以通过使用循环来最小化,即迭代序列或映射。”
我们将涵盖什么?
在本指南中,我们将讨论 Ansible 中的循环,并查看在 playbook 中使用它们的一些具体示例。
先决条件
1. Ansible 基础:工作以及如何运行 playbook。
2. 执行本指南的实验室:您可以使用 Vagrant 和 VirtualBox.
Ansible 中的循环
Ansible 提供了三个关键字来执行循环操作:loop、with_
标准或简单循环
标准循环可用于迭代可以直接在任务中定义的简单字符串列表,如下所示。 让我们举一个简单的例子。 创建剧本:
$ nano my-playbook - name: Add multiple users hosts: managed1 become: yes tasks: - name: Add three users using Loops user: name: "{{ item }}" state: present loop: - myuser1 - myuser2
在上面的剧本中,Ansible 使用循环在单个任务中创建多个用户。 此外,它使用“用户”模块来创建上述用户。
对于循环的每次迭代,列表的值都被替换到 item 变量中。
解释剧本
- 在“用户”模块中,我们没有直接给出任何名称; 相反,变量 {{ item }} 与“name”参数一起使用。
- 在“loop”关键字下,列出了要使用的用户名。 当 playbook 实际执行时,这些用户名会替换 {{ item }}。
- 在执行任务时,它只列出一次,但在其下方列出了三个修改。 我们很快就会看到。
遍历哈希列表
循环也可用于迭代哈希。 例如,如果需要将用户分配到不同的附加组,我们需要这样做:
- username: my_user1 groups: production - username: my_user2 groups: development - username: my_user3 groups: staging
在这里,这些组已经存在于远程机器上。 我们只是将它们添加到使用循环的用户中。
“用户”模块使用一个称为“组”的可选参数来列出其他用户。 对于哈希列表,我们可以在循环中引用子键。 为此,我们使用 {{ item }} 关键字。 作为一个例子,考虑下面的剧本片段:
- name: Add multiple users hosts: managed1 become: yes tasks: - name: Add three users using Loops ansible.builtin.user: name: "{{ item.username }}" state: present groups: "{{ item.groups }}" loop: - { username: 'my_user1', groups: 'production' } - { username: 'my_user2', groups: 'development' } - { username: 'my_user3', groups: 'staging' }