在 When 条件下转义正斜杠

Escape Forward Slash in When Condition

我正在尝试做一个 Ansible "when compare string not equals"

像这样:

when: "{{ result.stdout }} != '/var'"

我如何转义“/var”中的 / 因为它会抛出 :

The error was: template error while templating string: unexpected '/'.

我尝试用 \ 转义 / 但它抛出错误:

ERROR! Syntax Error while loading YAML.
The offending line appears to be:

shell: rsync -a /var/ "{{ result.stdout }}"
when: "{{ result.stdout }} != '\/var'"
                               ^ here

我试过在默认情况下创建一个变量:

默认值 -> main.yml

var_partition: /var

任务 -> main.yml

when: "{{ result.stdout }} != {{ var_partition }}"

但它抛出错误:

"The conditional check '{{ result.stdout }} != {{ var_partition }}' failed. 
The error was: template error while templating string: unexpected '/'. 
String: {% if /disk1 != /var %}

这个有效:

when: "{{ result.stdout != '/var' }}"

我用破折号替换了斜杠并消除了这个错误:

vars:
    - local_var_name: "{{ var_name | regex_replace('/', '-') }}"
tasks:
  some_task:
    ...
    when: local_var_name

你不应该在 when statement:

中使用大括号

... the when clause, which contains a raw Jinja2 expression without double curly braces ...

在您的示例中,只需使用:

when: result.stdout != '/var'