ansible:将空字符串视为未定义的“默认”过滤器

Nat*_*han 5 ansible

如果我这样做:

- set_fact:
    NEW_VARIABLE: "{{ VARIABLE | default('default') }}"
Run Code Online (Sandbox Code Playgroud)

并且VARIABLE是空字符串 ( ""),而不是默认不触发。

我可以这样做:

- set_fact:
    NEW_VARIABLE: "{{ VARIABLE | default('default') }}"
- set_fact:
    NEW_VARIABLE: "default"
   when: VARIABLE == ""
Run Code Online (Sandbox Code Playgroud)

但我实际上想循环执行此操作。所以如果我可以使用 ansible 过滤器而不是条件来做到这一点会容易得多。

这可能吗?是否有类似default""未定义的过滤器?

小智 5

是的,有可能。

不知道它是否是您想要的,但是根据您的描述,这对您有用......

- hosts: localhost
  vars:
    VARIABLE: ""
  tasks:
    - set_fact:
        NEW_VARIABLE: '{{ (VARIABLE |length > 0) | ternary(VARIABLE, "default") }}'
    - debug: msg="{{ NEW_VARIABLE }}"
Run Code Online (Sandbox Code Playgroud)
PLAY [localhost] ********************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************
ok: [localhost]

TASK [set_fact] *********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "default"
}
Run Code Online (Sandbox Code Playgroud)

我假设您的变量将始终被定义为"". 通过假设,可以检查其长度,然后使用三元过滤器。如果大于 0,则使用变量值,如果不大于 0,则设置NEW_VARIABLE"default"。如果您不知道VARIABLEwill 是否被定义,请when: VARIABLE is defined在您的set_fact任务上加上一个,这应该就是它。

来源:Ansible 过滤器