开发人员将提供一个 yaml 文件,其中主机按特定顺序排列(每个部署可能有所不同,具体取决于需求),并且 yaml 文件中的每个字段都将包含说明,例如安装 yum 包。我将获取此信息并针对 yaml 文件中给出的特定标志的每个主机运行 ansible。遍历 yaml 文件的最佳实践是什么?我应该针对每个字段执行 ansible-playbook 还是应该使用 ansible 中的查找功能?
答案1
Ansible 的常用模式是让玩家循环遍历清单中的主机模式并在其上运行角色。使用可能特定于组的变量。
首先,确定主机和其他数据的真实来源。静态文件很好,但通过存货和查找插件,你可以参考一些系统。例如,NetBox。
您更喜欢 YAML,这很好,因为 Ansible 使用了很多 YAML。用户可以直接提供这些。静态库存来自文档中的示例:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
创建角色来包含要执行的任务。将大多数任务变为变量,以便可以轻松更改或覆盖它们。
---
- name: Web server software
package:
name: "{{ httpd_packages }}"
剧本是主持人模式到角色的映射。
---
- name: Web server deploy
hosts: webservers
roles:
- www
肯定目录布局提供一种逻辑的方式来组织事物,并允许某些事物自动加载。
inventory/deployA.yml
inventory/deployB.yml
inventory/group_vars/vars.yml
roles/www/defaults/main.yml
roles/www/tasks/main.yml
web.yml
这样的游戏可以在环境 A 和 B 上运行,ansible-playbook -i inventory/ web.yml
注意将要做什么与适用于哪些主机分开,从而实现角色和库存的重用。
也许开发人员会帮助编写角色和剧本。也许不会,开发人员只需要通过将主机标记为特定组来使用它们。或者完全自动化,并通过 CI/CD 管道在版本控制中提交时进行部署。取决于谁在您的组织中运行操作。
还有很多其他的方式,这些包含短剧的静态文件只是最基本的。