Ansible-每个分组更改的角色默认值

时间:2019-01-17 16:54:42

标签: ansible

我对Ansible还是陌生的,所以到目前为止,一切都是非常丰富的学习经验。.请放轻松!

我希望以最佳实践的方式实现以下目标,但是我似乎不太愿意为此而做,或者,我希望有一种更有效的方法来实现相同的目标。 / p>

具体来说,我正在尝试应用一个设置了多个默认参数的角色。例如,一些特定于是否需要xinet的东西。通常,答案是否定的,所以它是默认值。在我们的环境中某些系统确实依赖于此,因此当它属于指定组的一部分时,我想将默认值设置为true。

我已经想到了一些实现基本目标的方法,但是我不确定在Ansible文化的核心中,什么是最佳实践?

选项:

A-创建并复制整个角色,仅将复制的角色应用于xinetd服务器   -对此并不忠实,因为这需要维护基本相同角色的多个副本。

B-修改基础任务以在定义特定组变量时排除运行作业   -级别太低了,我担心这些更改会随着时间的推移而被忽略。

C-也许使用组变量是正确的方法吗?我一直在做一些研究,并提供了一些例子,但我还没有到那里...寻找任何好的建议/建议,谢谢!

1 个答案:

答案 0 :(得分:2)

常见的模式将出现在您的角色默认文件中:

some_feature_enabled: false

然后,将该变量重新定义为组变量,设置为true。有两种方法:

1)在库存托管文件中:

[somegroup]
somehost

[somegroup:vars]
some_feature_enabled: true

2)在该组的专用group_vars文件中。在包含您的剧本的目录或包含清单文件的目录中创建一个名为group_vars的目录,并在其中创建与您的组somegroup相同的文件。在此文件中:

some_feature_enabled: true

最后为您的任务添加一个条件:

- debug:
    msg: "Only print this message when somefeature is enabled
  when: some_feature_enabled

如果您有一堆相关任务可以组合在一起并基于一个值进行切换,则可以将它们包装在一个块中:

- block:
    - debug:
        msg: "First task"
    - debug:
        msg: "Second task"
  when: some_feature_enabled

如果整个角色都是有条件的,则可以将测试放在角色级别:

roles:
  - { role: somerole, when: some_feature_enabled }

This doc为您提供了有关Ansible变量的所有详细信息,至关重要的是包括有关重复变量优先级的信息。要让Ansible团队了解最佳做法,请check out this doc(如果您还没有这样做的话)。