Ansible Playbooks与angular色
根据Ansible文档, 手册是:
…这是一个非常简单的configurationpipe理和多机器部署系统的基础,与已经存在的系统pipe理和多机部署系统不同,它非常适合部署复杂的应用程序。
而且,根据同样的文件, angular色是:
…基于已知文件结构自动加载某些vars_files,任务和处理程序的方式。 按angular色分组内容还可以轻松地与其他用户共享angular色。
但是,这些和它们不同的用例之间的区别对于我来说并不明显。 例如,如果我将/etc/ansible/hosts
文件configuration成如下所示:
[databases] mydb01.example.org mydb02.example.org [mail_servers] mymail01.example.org mymail_dr.example.org
…那么这个“ [databases]
”条目是什么? 或者某个地方的剧本的YAML文件的名称? 或者是其他东西?!?
如果有人能向我解释这些差异,我对Ansible的理解就会大大提升!
- Playbook vs Role vs
[databases]
和/etc/ansible/hosts
类似条目 - 如果Playbooks是在YAML文件中定义的,那么angular色定义在哪里?
- 除了Ansible服务器上的ansible.cfg外,如何使用可用的Playbooks / Roles添加/configurationAnsible? 例如,当我运行
ansible-playbook someplaybook.yaml
,ansible-playbook someplaybook.yaml
如何知道在哪里可以find剧本呢?
Playbook vs Role vs [数据库]和/ etc / ansible / hosts中的类似条目
[databases]
是一组主机的单一名称。 它允许您通过一个名称引用多个主机。
angular色是一组任务和附加文件,用于configuration主机为特定angular色服务 。
Playbook是主机和angular色之间的映射。
来自文档的示例描述示例项目。 它包含两件事情:
- 剧本。
site.yml
,webservers.yml
,fooservers.yml
是剧本。 - angular色:
roles/common/
和roles/webservers/
包含common
和webservers
angular色的定义。
内部剧本( webservers.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
如果Playbooks是在YAML文件中定义的,那么angular色定义在哪里?
它们在roles/*
目录中定义。 angular色主要是使用YAML文件定义的,但也可以包含任何types的资源( files/
, templates/
)。 根据文档的angular色定义是这样构造的:
- 如果roles / x / tasks / main.yml存在,其中列出的任务将被添加到游戏中
- 如果roles / x / handlers / main.yml存在,其中列出的处理程序将被添加到该游戏中
- 如果roles / x / vars / main.yml存在,则其中列出的variables将被添加到该播放中
- 如果roles / x / meta / main.yml存在,则其中列出的任何angular色依赖关系将被添加到angular色列表(1.3和更高版本)
- 任何复制任务都可以引用roles / x / files /中的文件,而不必相对或绝对地path化它们
- 任何脚本任务都可以在angular色/ x /文件/中引用脚本,而不必相对或绝对地path
- 任何模板任务都可以在angular色/ x /模板/中引用文件,而不必相对或绝对地path
- 任何包含任务都可以在angular色/ x /任务/中引用文件,而不必相对或绝对地path
最重要的文件是roles/x/tasks/main.yml
,在这里你定义了任务,当执行angular色的时候,这些任务将被执行。
除了Ansible服务器上的ansible.cfg外,如何使用可用的Playbooks / Roles添加/configurationAnsible? 例如,当我运行anplay-playbook someplaybook.yaml时,Ansible如何知道在哪里可以find剧本呢?
$ ansible-playbook someplaybook.yaml
将在当前目录内查找剧本。
$ ansible-playbook somedir/somedir/someplaybook.yaml
将在somedir/somedir/
目录中查找剧本。
您的责任是将您的项目与服务器上的所有剧本和angular色相关联。 Ansible与此无关。
Playbook vs Role vs [数据库]和/ etc / ansible / hosts中的类似条目
angular色是将任务组合成一个容器的一种方式。 你可以有一个设置MySQL的angular色,另一个设置Postfix等
剧本定义了 在哪里发生的事情。 这是您定义主机的地方(主机组,见下文)以及将应用于这些主机的angular色。
[databases]
和清单中的其他条目是主机组。 主机组定义了一组玩家将在其上运行的主机。
剧本是剧本中的一组任务或angular色(或两者兼而有之)。 在大多数情况下(和例子)剧本将只包含一个单一的戏剧。 但是你可以拥有尽可能多的你喜欢的。 这意味着你可以在mail_servers
上运行angular色postfix
,在hostgroup databases
上运行angular色mysql
:
- hosts: mail_servers roles: - postfix - hosts: databases roles: - mysql
如果Playbooks是在YAML文件中定义的,那么angular色定义在哪里?
在Ansible中,几乎所有的东西都是在YAML中定义的,这就是angular色和剧本。
除了Ansible服务器上的ansible.cfg外,如何使用可用的Playbooks / Roles添加/configurationAnsible? 例如,当我运行anplay-playbook someplaybook.yaml时,Ansible如何知道在哪里可以find剧本呢?
AFAIK在调用剧本时必须提供剧本的path。 所以ansible-playbook someplaybook.yaml
会期望someplaybook.yaml
在你当前的目录。 但是你可以提供完整的path: ansible-playbook /path/to/someplaybook.yaml
另外请记住,如果使用元文件来影响不同的angular色,则playbook可以调用多个angular色。
示例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
angular色文件夹和文件scheme如下所示:
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
这是一个术语/语义问题。 即使存在基准定义,也可以是主观的。
我的观点如下:
任何configurationpipe理/部署系统都有:
-
source data
– 用于创build目标主机configuration的数据 -
target data
– 用于识别目标主机的数据 -
config changes
– 根据target data
使用source data
在目标主机上应用的规则/操作的列表/一组规则/操作
在Ansible方面:
-
source data
– 是我们可以放置数据的各种地方 –group_vars
,playbook
vars,role
vars等等,这些地方会影响优先级(如果一个名字相同的variables在不同的位置被重新定义,那么会有什么特定的规则在ansible
/ansible-playbook
执行过程中作为variables的值 -
target data
– 是库存(也可以在库存内定义库存/主机组variables)! -
config changes
– ansible有4个级别的抽象:- 任务 – 单一行动
- 任务列表 – 操作列表
- angular色 – 由同一个“主题”分组的动作列表(或列表列表),通常所有目标都在相同的主机/主机组上运行
- playbook – 剧本列表,每个剧组都可能在不同的主机组上运行,应用几个
role
/task
/task
列表(以及像handlers
这样的特殊任务)
从“软件”angular度来看,angular色应该足够通用,可以重复使用 。
同样在一些(相当大的)组织中,“angular色”由A组运送,而在B组维护的剧本中使用。
概要
以上所有function都允许将相似的configuration组合在一起。 将相关的子系统/组件组合成一个playbook
。 另外,值得一提的是,一个剧本中的YAML项目(包括hosts:
和tasks
, pre_tasks
, post_tasks
, roles
)被称为play
现在为您的问题:
是的,起初很混乱。
您通常将您的source data
连接到angular色的语义,所以当您看到angular色setup_db
被应用于相关db_hosts
(例如db_hosts
)的play
但可以在多个db_hosts
的联合上运行play
。 这只是一个约定与灵活性的问题。
PS
请给我回复,这是否加上了混乱,或澄清。 谢谢。