如何从 Ansible Jinja 过滤器返回“省略”

时间:2021-07-05 06:48:33

标签: ansible jinja2

我创建了一个过滤器,它首先可以返回 Python None 对象/值。当时的想法是将 default(omit) 与此过滤器一起使用。例如


- name: Execute script
  command: "{{ item }}"
  with_items: "{{ some_list }}"
  notify: "{{ item|my_filter|default(omit) }}"

现在我注意到在我的代码中返回 None 或不使用 return 会被 Jinja 转换为空字符串。因此,Ansible 将通知一个不存在的空字符串处理程序,然后失败。

在变量上使用 Jinja 过滤器时,是否可以使用 default(omit) 省略该变量?怎么样?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您只想在过滤器返回某些内容时触发处理程序。但是ansible,会在任务状态为changed时触发处理程序。据我所知,此行为无法修改,并且正如您已经经历过的那样,仅返回空字符串是行不通的。

你有几种可能:

  • 如果您想触发处理程序,您可以编写一个返回 changed_whentrue 条件,否则返回 false
  • 您可以定义一个“空”处理程序,该处理程序不执行任何操作并默认触发该处理程序(例如,当您不想触发实际处理程序时:default("empty handler"))。

{{}} 之间的所有内容都是模板,在评估语句后将替换为结果。因此,它不能“删除”notify 本身,它只能决定将要通知的内容。