第 3 章 Ansible Playbook 的实际示例
Ansible 可以与许多不同的设备分类通信,从基于云的 REST API 到 Linux 和 Windows 系统、网络硬件等。
以下是两个 Ansible 模块示例,它会自动更新两种类型的服务器。
3.1. Playbook 执行
playbook 运行从上到下的顺序。在每个 play 中,任务也从上到下的顺序运行。具有多个"play"的 playbook 可以编配多计算机部署,在您的 webservers 上运行一个 play,然后在您的数据库服务器上运行另一个 play,然后在网络基础架构上运行第三个 play,等等。
每个 play 至少定义了两个内容:
- 指向目标的受管节点,使用模式
- 至少一个要执行的任务
在 Ansible 2.10 及更高版本中,使用 playbook 中的完全限定集合名称来确保选择了正确的模块,因为多个集合可以包含具有相同名称的模块( 如用户
)。
如需更多信息,请参阅在 playbook 中使用集合。
在本例中,第一个 play 以 web 服务器为目标;第二个 play 以数据库服务器为目标。
--- - name: Update web servers hosts: webservers become: true tasks: - name: Ensure apache is at the latest version ansible.builtin.yum: name: httpd state: latest - name: Write the apache config file ansible.builtin.template: src: /srv/httpd.j2 dest: /etc/httpd.conf mode: "0644" - name: Update db servers hosts: databases become: true tasks: - name: Ensure postgresql is at the latest version ansible.builtin.yum: name: postgresql state: latest - name: Ensure that postgresql is started ansible.builtin.service: name: postgresql state: started
playbook 包含两个 play:
- 首先检查 Web 服务器软件是最新的,并在需要时运行更新。
- 第二个检查数据库服务器软件是否是最新的,并在需要时运行更新。
您的 playbook 不仅仅包含主机行和任务。
例如,此示例 playbook 为每个 play 设置 remote_user。这是 SSH 连接的用户帐户。您可以在 playbook、play 或任务级别添加其他 Playbook 关键字,以影响 Ansible 的行为方式。Playbook 关键字可以控制连接插件,是否使用特权升级、如何处理错误等。
为了支持各种环境,Ansible 可让您将这些参数设置为命令行标志、Ansible 配置或清单中。了解这些数据源的优先规则可帮助您扩展 Ansible 生态系统