6

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

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

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

ansible-galaxy install -r requirements.yml

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

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

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

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

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

4

2 回答 2

11

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

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

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

于 2019-04-18T16:10:31.373 回答
1

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

但是在 Ansible 角色的作者没有响应或装傻的情况下,还有另一种更简单的方法。

脚步:

1)像你一样执行角色,不要改变任何东西

2) 编写一小段 Ansible 代码来简单地自己覆盖任何文件或模板。

简单的方法,对所有人来说都是显而易见的。

干杯

于 2020-05-07T09:58:54.447 回答