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.yamlansible-playbook someplaybook.yaml如何知道在哪里可以find剧本呢?

Playbook vs Role vs [数据库]和/ etc / ansible / hosts中的类似条目

[databases]是一组主机的单一名称。 它允许您通过一个名称引用多个主机。

angular色是一组任务和附加文件,用于configuration主机为特定angular色服务

Playbook是主机和angular色之间的映射。

来自文档的示例描述示例项目。 它包含两件事情:

  • 剧本。 site.ymlwebservers.ymlfooservers.yml是剧本。
  • angular色: roles/common/roles/webservers/包含commonwebserversangular色的定义。

内部剧本( 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理/部署系统都有:

  1. source data – 用于创build目标主机configuration的数据
  2. target data – 用于识别目标主机的数据
  3. config changes – 根据target data使用source data在目标主机上应用的规则/操作的列表/一组规则/操作

在Ansible方面:

  1. source data – 是我们可以放置数据的各种地方 – group_varsplaybook vars, role vars等等,这些地方会影响优先级(如果一个名字相同的variables在不同的位置被重新定义,那么会有什么特定的规则在ansible / ansible-playbook执行过程中作为variables的值
  2. target data – 是库存(也可以在库存内定义库存/主机组variables)!
  3. config changes – ansible有4个级别的抽象:
    1. 任务 – 单一行动
    2. 任务列表 – 操作列表
    3. angular色 – 由同一个“主题”分组的动作列表(或列表列表),通常所有目标都在相同的主机/主机组上运行
    4. playbook – 剧本列表,每个剧组都可能在不同的主机组上运行,应用几个role / task / task列表(以及像handlers这样的特殊任务)

从“软件”angular度来看,angular色应该足够通用,可以重复使用

同样在一些(相当大的)组织中,“angular色”由A组运送,而在B组维护的剧本中使用。

概要

以上所有function都允许将相似的configuration组合在一起。 将相关的子系统/组件组合成一个playbook 。 另外,值得一提的是,一个剧本中的YAML项目(包括hosts:taskspre_taskspost_tasksroles )被称为play

现在为您的问题:

是的,起初很混乱。

您通常将您的source data连接到angular色的语义,所以当您看到angular色setup_db被应用于相关db_hosts (例如db_hosts )的play但可以在多个db_hosts的联合上运行play 。 这只是一个约定与灵活性的问题。

PS

请给我回复,这是否加上了混乱,或澄清。 谢谢。