Ansible剧本vs角色
根据Ansible文档,a 是: …这是一个非常简单的配置管理和多机部署系统的基础,与现有的任何配置管理和多机部署系统不同,它非常适合部署复杂的应用程序 同样,根据这些文件,一个 它们是: …基于已知文件结构自动加载某些vars_文件、任务和处理程序的方法。按角色对内容进行分组还可以方便地与其他用户共享角色 然而,这些用例和它们的不同用例之间的区别对我来说并不明显。例如,如果我将我的Ansible剧本vs角色,ansible,Ansible,根据Ansible文档,a 是: …这是一个非常简单的配置管理和多机部署系统的基础,与现有的任何配置管理和多机部署系统不同,它非常适合部署复杂的应用程序 同样,根据这些文件,一个 它们是: …基于已知文件结构自动加载某些vars_文件、任务和处理程序的方法。按角色对内容进行分组还可以方便地与其他用户共享角色 然而,这些用例和它们的不同用例之间的区别对我来说并不明显。例如,如果我将我的/etc/ansible/hosts文件配置为: [databases] mydb01.example.org m
/etc/ansible/hosts
文件配置为:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
…那么这是什么“[数据库]
”条目…角色?或者某个地方的剧本YAML文件名?还是别的什么
如果有人能向我解释这些差异,我对Ansible的理解将大大提高
- 剧本vs角色vs
以及[数据库]
/etc/ansible/hosts
- 如果剧本是在YAML文件中定义的,那么角色是在哪里定义的
- 除了生活在ansible服务器上的
之外,我如何添加/配置ansible和可用的剧本/角色?例如,当我运行ansible.cfg
时,ansible如何知道在哪里可以找到该playbookansible playbook someplaybook.yaml
[数据库]
是一组主机的单一名称。它允许您通过单个名称引用多个主机
角色是一组任务和附加文件,用于配置主机以服务于特定角色
Playbook是主机和角色之间的映射
来自的示例描述了示例项目。它包含两个方面:
- 剧本
,site.yml
,webserver.yml
都是剧本fooservers.yml
- 角色:
和Roles/common/
包含相应的Roles/webserver/
和common
角色的定义webserver
webserver.yml
)中,您有如下内容:
---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
roles: <- this is list of roles to assign to these hosts
- common
- webservers
将在当前目录中查找剧本
$ ansible-playbook somedir/somedir/someplaybook.yaml
将在somedir/somedir/
目录中查找剧本
$ ansible-playbook somedir/somedir/someplaybook.yaml
您有责任将您的项目以及所有剧本和角色放在服务器上。Ansible与此无关
Playbook vs Role vs[database]和/etc/ansible/hosts中的类似条目
角色是将任务分组到一个容器中的一种方式。您可以有一个用于设置MySQL的角色,另一个用于设置后缀等
剧本定义了在哪里发生的事情。这是您定义主机(主机组,见下文)和将应用于这些主机的角色的地方
[数据库]
和清单中的其他条目是主机组。主机组定义了一组播放的主机
剧本是剧本中的一组任务或角色(或两者兼有)。在大多数情况下(和示例),剧本只包含一个剧本。但是你想要多少就有多少。这意味着您可以拥有一个剧本,该剧本将在主机组邮件服务器上运行角色postfix
,在主机组数据库上运行角色mysql
:
- hosts: mail_servers
roles:
- postfix
- hosts: databases
roles:
- mysql
如果剧本是在YAML文件中定义的,那么角色是在哪里定义的
在Ansible中,几乎所有内容都在YAML中定义,这对角色和剧本都很重要
除了ansible服务器上的ansible.cfg之外,我如何使用可用的剧本/角色添加/配置ansible?例如,当我运行ansible playbook someplaybook.yaml时,ansible如何知道在哪里可以找到该playbook
那么,在调用ansible playbook
时,您必须提供playbook的路径。因此,ansible playbook someplaybook.yaml
希望someplaybook.yaml
在您当前的目录中。但是您可以提供完整的路径:ansible playbook/path/to/someplaybook.yaml
还请记住,如果使用的元文件旨在影响不同的角色,则playbook可以调用多个角色
示例剧本:dual_role-Playbook.yml
- name: Some Action for two roles
hosts: localhost
vars_files:
- roles/dual_role/meta/main.yml
roles:
- dual_role/container-1
- dual_role/container-2
角色文件夹和文件方案如下所示:
dual_role-playbook.yml
-- roles
-- dual_role
-- meta/main.yml
-- container-1
-- tasks/main.yml
-- templates/template.j2
-- container-2
-- tasks/main.yml
-- templates/template.j2
这是一个术语/语义问题。它可能是主观的,即使有一个基线定义
我的看法如下:
任何配置管理/部署系统都具有:
源数据
-用于创建目标主机配置的数据
目标数据
-用于识别目标主机的数据
配置更改
-基于目标数据
用可解释的话来说:
源数据
-是我们可以放置数据的不同位置-组变量
,剧本
变量,角色
变量等,这些位置会影响优先级(如果在不同的位置重新定义了一个名为相同的变量,则在执行ansible
/ansible playbook
期间,变量的值有非常具体的规则
目标数据
-是库存(也可以在库存中定义库存/主机组变量!)
配置更改
-ansible有4个抽象级别:
任务-单个操作
任务列表-操作列表
角色-按同一“主题”分组的操作列表(或列表列表),通常所有目标都在同一主机/主机组上运行
剧本-剧本列表,每个剧本在可能不同的主机组上运行,应用多个角色
s/任务
s/任务列表(以及像处理程序
这样的特殊任务)
从
[web]
web1.example.com
web2.example.com