我希望我的 saltstack sls 文件中的条件更少。
到目前为止它看起来是这样的:
foo_package:
pkg.installed:
- pkgs:
{% if grains.os_family == 'Debian' %}
- foo_BAR
{% else %}
- foo-bar
{% endif %}
我希望它像这样:
foo_package:
pkg.installed:
- pkgs:
- {{ foo_BAR | normalize_package_name }}
如何实现normalize_package_name
?
只要我可以使用 Python,我就能帮助自己并非常轻松地实现这一点:下划线应该被替换-
,大写字符应该变为小写。
我知道我可以像这样在 Jinja 中做到这一点:
- {{ foo_BAR | replace... | replace .. }}
但这会被使用几次,这就是为什么我想要一个自定义过滤器。
.... 几天后:也许最好编写自定义状态(mypkg.installed
)并pkg.installed
在规范化包名称后调用。请参阅 salt 文档:https://docs.saltstack.com/en/latest/ref/states/writing.html#cross-calling-state-modules
答案1
就您而言,我认为最好的方法是使用“公式”提供的可能性。您可以在公式中转换独立状态,并使用 map.jinja 根据操作系统或其他粒度值指定包名称。
举个例子,你可以看看https://github.com/saltstack-formulas/template-formula/实现它。查看template/map.jinja
和template/defaults.yaml
文件template/os*.yaml