Ansible剧本vs角色

Ansible剧本vs角色,ansible,Ansible,根据Ansible文档,a 是: …这是一个非常简单的配置管理和多机部署系统的基础,与现有的任何配置管理和多机部署系统不同,它非常适合部署复杂的应用程序 同样,根据这些文件,一个 它们是: …基于已知文件结构自动加载某些vars_文件、任务和处理程序的方法。按角色对内容进行分组还可以方便地与其他用户共享角色 然而,这些用例和它们的不同用例之间的区别对我来说并不明显。例如,如果我将我的/etc/ansible/hosts文件配置为: [databases] mydb01.example.org m

根据Ansible文档,a 是:

…这是一个非常简单的配置管理和多机部署系统的基础,与现有的任何配置管理和多机部署系统不同,它非常适合部署复杂的应用程序

同样,根据这些文件,一个 它们是:

…基于已知文件结构自动加载某些vars_文件、任务和处理程序的方法。按角色对内容进行分组还可以方便地与其他用户共享角色

然而,这些用例和它们的不同用例之间的区别对我来说并不明显。例如,如果我将我的
/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.cfg
    之外,我如何添加/配置ansible和可用的剧本/角色?例如,当我运行
    ansible playbook someplaybook.yaml
    时,ansible如何知道在哪里可以找到该playbook
Playbook vs Role vs[database]和/etc/ansible/hosts中的类似条目

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

角色是一组任务和附加文件,用于配置主机以服务于特定角色

Playbook是主机和角色之间的映射

来自的示例描述了示例项目。它包含两个方面:

  • 剧本
    site.yml
    webserver.yml
    fooservers.yml
    都是剧本
  • 角色:
    Roles/common/
    Roles/webserver/
    包含相应的
    common
    webserver
    角色的定义
在playbook(
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