如果使用 'when',ansible jinja2 模板定界符失败

ansible jinja2 template delimiters failed if using 'when'

我有这段代码,其中第一个任务失败,第二个任务产生以下警告:
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ VRF }} == 17

我假设此警告和第一个任务失败的原因相同。据我了解,变量是不同的类型。我该如何解决这个问题?

---
- name: PE_CE
  hosts: localhost

  tasks:

  - include_vars: /opt/netsec/ansible/orchestration/capabilities/PE_CE/PE_CE_1.yml
  
  - name: Build PE config Cisco
    template:
      src=/opt/netsec/ansible/orchestration/cisco_templates/PE_CE_CISCO_config_PE.j2
      dest=/opt/netsec/ansible/orchestration/config_outputs/new/{{PE_HOSTNAME}}
    when: "{{ PX_HOSTNAME }} == None"

  - name: Build CE config Cisco
    template:
      src=/opt/netsec/ansible/orchestration/cisco_templates/PE_CE_CISCO_config_CE.j2
      dest=/opt/netsec/ansible/orchestration/config_outputs/new/{{CE_HOSTNAME}}
    when: "{{ VRF }} == 17"

我真正想做的是when: "{{ VRF }} == 17" and "{{ PX_HOSTNAME }} == None",或者{{ PX_HOSTNAME }}|length < 1"

您不需要 {{}} 以及 when。这样做:
when: PX_HOSTNAME == "None"when: VRF == "17"

这是一些documentation

when: PX_HOSTNAME == "None" 将检查 PX_HOSTNAME 是否包含字符串“None”。
如果你想 运行 任务是空的,做 when: not PX_HOSTNAME 或者如果你想 运行 任务是 而不是 空,做 when: PX_HOSTNAME.

你也可以使用长度:when: PX_HOSTNAME|length > 0