【问题标题】:Can't get IF OR Jinja logic in Salt state to work无法使 Salt 状态下的 IF OR Jinja 逻辑工作
【发布时间】:2020-12-03 03:01:07
【问题描述】:

我需要从获取软件安装盐状态中排除标有这些自定义添加颗粒中的任何一个的某些小兵:

exclude:
  - applications
  - application_xyz

以下语法有效,并防止任何带有“应用程序”颗粒的奴才安装任何东西:

{% if not "applications" in grains.get('exclude', []) %}

但现在我需要更具体一些,这就是我认为使用“或”逻辑的地方。到目前为止,我已经尝试了以下方法,但都不起作用:

{% if not "applications" or "application_xyz" in grains.get('exclude', []) %}

{% if not "applications" in grains.get('exclude', []) or not "application_xyz" in grains.get('exclude', [])  %}

我用How to use logic operators in jinja template on salt-stack (AND, OR)作为参考,所以我觉得我可能是在正确的轨道上。

非常感谢任何帮助或建议!

【问题讨论】:

  • 在我看来,第一种方法在语法上是不正确的。第二个看起来语法正确,但逻辑上有错误。德摩根的一项法律规定:not (A or B) = not A and not B。如需参考,请参阅en.wikipedia.org/wiki/De_Morgan%27s_laws

标签: jinja2 salt-stack


【解决方案1】:

对于遇到相同情况的任何人,我发现以下方法非常有效。

{% if not ['applications','application_xyz'] | intersect(grains.get('exclude', [])) %}

在这里,任何具有应用程序或 application_xyz 的仆从都将被忽略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多