如果我这样做:
- 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但""未定义的过滤器?
elm*_*edo 25
您必须将默认的第二个参数设置为 true
{{ VARIABLE | default('default', true) }}
Run Code Online (Sandbox Code Playgroud)
小智 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)
Run Code Online (Sandbox Code Playgroud)PLAY [localhost] ******************************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************************** ok: [localhost] TASK [set_fact] ********************************************************************************************************************************************************************************* ok: [localhost] TASK [debug] ************************************************************************************************************************************************************************************ ok: [localhost] => { "msg": "default" }
我假设您的变量将始终被定义为"". 通过假设,可以检查其长度,然后使用三元过滤器。如果大于 0,则使用变量值,如果不大于 0,则设置NEW_VARIABLE为"default"。如果您不知道VARIABLEwill 是否被定义,请when: VARIABLE is defined在您的set_fact任务上加上一个,这应该就是它。
来源:Ansible 过滤器
| 归档时间: |
|
| 查看次数: |
9070 次 |
| 最近记录: |