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

del*_*ber 4 ansible ansible-template ansible-galaxy

我正在尝试使用ansible设置服务器,并且我想使用此银河角色

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

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

ansible-galaxy install -r requirements.yml

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

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

roles
  |- ansible-role-passenger
     |- templates
        |- passenger.j2
Run Code Online (Sandbox Code Playgroud)

但它不起作用。当我运行剧本时,ansible会passenger.j2从银河角色内部使用该文件。

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

Zei*_*tor 5

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

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

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