ansible - 有没有办法覆盖定义为 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
像我想要的那样编辑文件,但我不知道这是否有“更好”的方法来做到这一点:)
解决方案
不幸的是,您的发现是正确的。从调用剧本中覆盖角色中的硬编码模板是不可能的,除非角色的作者将其实现为 feature。请注意,对于目录中的简单文件也是如此files
。
到目前为止我发现的最好方法:假设角色包含默认模板templates/passenger.j2
,添加一个 var并在角色default/main.yml
中passenger_config_template: passenger.j2
使用该 var。然后,用户可以在其 playbook/inventory 中覆盖该 var,并为模板使用不同的名称,该名称将在其他角色中或直接在templates
playbook 级别的目录中获取。
你可以看看我曾经在他的 ansible-role-gitlab 上对@geerlingguy 所做的类似问题和接受的 PR 。他可能会考虑在他的乘客角色上做同样的事情(或者如果你提议,他可能会接受你的 PR)。
推荐阅读
- python - 错误:命令“python setup.py egg_info”失败
- botframework - 如果输入的字符少于 6 个,则提示用户输入超过 6 个字符
- python - 如何在基于 paraview 的 python 脚本中显示 vtkUnstructuredGrid?
- java - 来自与 Apache Camel 交换的具有相同路由密钥的多个队列
- python - psycopg2.OperationalError:致命:客户端身份验证失败
- laravel - 宅基地专用网络突然无法访问
- android - Firebase 远程配置获取失败,用户未授权
- ios - SDK DJI 快速下载图片
- arrays - 为什么从未初始化的阵列打印会使我的计算机崩溃?
- php - 使用 2 个参数 php 获取 cURL