有没有办法覆盖定义为ansible星系角色的模板?

时间:2019-04-18 09:18:40

标签: ansible ansible-template ansible-galaxy

我正在尝试使用ansible设置服务器,我想使用this galaxy role

它定义了一个我想自定义的template,但我不知道如何。

现在我将角色定义为requirements.yml,并使用以下命令进行安装:

ansible-galaxy install -r requirements.yml

将角色安装在我系统的某个位置。

我尝试通过将文件夹树重新创建到存储我的剧本的存储库中来

roles
  |- ansible-role-passenger
     |- templates
        |- passenger.j2

但不起作用。当我运行剧本时,ansible从星系角色内部使用passenger.j2文件。

我想我可以在github上派出银河角色,并根据需要编辑文件passenger.j2,但是我不知道这是否有“更好”的方法:)

2 个答案:

答案 0 :(得分:3)

很遗憾,您的发现是真实的。 除非角色的作者将其实现为功能,否则从调用剧本中覆盖角色中的硬编码模板是完全不可能的。

到目前为止,我发现的最好方法是:假设角色包含templates/passenger.j2中的默认模板,请在default/main.yml中添加一个变量,例如passenger_config_template: passenger.j2,然后在角色中使用该变量。然后,用户可以在其剧本/清单中覆盖该var,并为模板使用其他名称,该模板将以其他角色或直接在剧本级别的templates目录中获取。

您可以看看我曾经在他的ansible-role-gitlab上对@geerlingguy进行过采访的similar issuean accepted PR。他可能会考虑在乘客角色上做同样的事情(或者,如果您提出一份建议,可能会接受您的PR)。

答案 1 :(得分:1)

上面@Zeitounator的回复完全合法。

但是,如果Ansible角色的作者没有反应或没有表现出来,那么还有另一种更简单的方法。

步骤:

1)像执行操作一样执行角色,不要更改任何内容

2)编写一小段Ansible代码,以自己直接覆盖任何文件或模板。

简单的方法,对所有人来说都不费吹灰之力。

欢呼

相关问题