【问题标题】:How to organise Ansible roles?如何组织 Ansible 角色?
【发布时间】:2016-10-15 09:56:36
【问题描述】:

假设我的结构中有 2 组具有相似需求的主机,但它们并不共享所有安装的相同软件包,例如。像这样:

发电机(主机组)需求:

  • rpm A
  • rpm B
  • rpm C

执行者(另一个主机组)需要:

  • rpm A
  • rpm B

我应该如何组织我的 Ansible 角色?一种方法是:

generators-role
    - main.yml
        - package install
            - rpm A
            - rpm B
            - rpm C

executors-role
    - main.yml
        - package install
            - rpm A
            - rpm B

问题在于,如果我需要更改有关 packa 安装的某些内容,我必须在 2 个地方进行更改。我可以选择类似的东西:

packages1-role
    - main.yml
        - package install
            - rpm A
            - rpm B

packages2-role
    - main.yml
        - package install
            - rpm C

然后:

generators-playbook
    - roles:
        - packages1-role
        - packages2-role

executors-playbook
    - roles:
        - packages2-role

但在这种情况下,我确实需要有充分的理由将 RPM 分组,而不是“它们属于同一组主机”。而且我仍然会遇到与第一个示例相同的问题。

我也考虑过使用基于传递给角色的变量的标签或条件,但这似乎有点 hacky,或者至少这是我从 Ansible 文档中理解的。

那么,有什么提示最好的方法是什么?

谢谢!

【问题讨论】:

标签: ansible roles


【解决方案1】:

我相信还有其他两种方法可以做到这一点:

1) 使用通用的packages 角色并将 rpm 作为 var 传递给角色

generators-playbook
   - roles:
       - { role: packages, packages: ["rpmA","rpmB"] }
executor-playbook
   - roles:
       - { role: packages, packages: ["rpmC"] }

2) 每个包使用 1 个角色,然后在每个主机组中包含正确的角色

generators-playbook
   - roles: 
       - rpmA
       - rpmB
executors-playbook
   - roles:
       - rpmC

希望这会有所帮助!

【讨论】:

  • 方式 1 或多或少是我写“基于传递给角色的变量的条件”时的意思。它可能运作良好,但我认为这不会改变这样一个事实,即如果我需要从我的剧本中添加/删除包,我需要更改安装在多个位置的包列表。
  • 我倾向于不将角色视为单个软件包安装,对我而言,角色是一种更大的实体(例如,nginx 角色将安装 ngnix 软件包并根据组/主机对其进行配置变量)。我可能会尝试将“包”角色扩展到更大的角色,以有效地对已安装的包执行某些操作。否则包角色是有意义的
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2012-10-18
相关资源
最近更新 更多