首页 > 解决方案 > 无法使 Salt 状态下的 IF OR Jinja 逻辑工作

问题描述

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

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 operator in jinja template on salt-stack (AND, OR)作为参考,所以我觉得我可能走在了正确的轨道上。

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

标签: jinja2salt-stack

解决方案


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

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

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


推荐阅读