首页 > 解决方案 > 有没有办法覆盖定义为 ansible Galaxy 角色的模板?

问题描述

我正在尝试使用 ansible 设置服务器,并且我想使用这个 Galaxy 角色

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

现在我将角色定义为requirements.yml并使用以下方法安装它:

ansible-galaxy install -r requirements.yml

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

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

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

但它不起作用。当我运行我的剧本时,ansible 使用passenger.j2来自 Galaxy 角色的文件。

我想我可以在 github 上分叉银河角色,然后passenger.j2像我想要的那样编​​辑文件,但我不知道这是否有“更好”的方法来做到这一点:)

标签: ansibleansible-templateansible-galaxy

解决方案


不幸的是,您的发现是正确的。从调用剧本中覆盖角色中的硬编码模板是不可能的,除非角色的作者将其实现为 feature。请注意,对于目录中的简单文件也是如此files

到目前为止我发现的最好方法:假设角色包含默认模板templates/passenger.j2,添加一个 var并在角色default/main.ymlpassenger_config_template: passenger.j2使用该 var。然后,用户可以在其 playbook/inventory 中覆盖该 var,并为模板使用不同的名称,该名称将在其他角色中或直接在templatesplaybook 级别的目录中获取。

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


推荐阅读