SaltStack:规范化软件包名称

SaltStack:规范化软件包名称

我希望我的 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.jinjatemplate/defaults.yaml文件template/os*.yaml

相关内容