一、default过滤器能让变量未定义时返回指定的值
举例:
# vim /tmp/default1.yaml
---
- hosts: web1
vars:
test1: test1
tasks:
- debug:
msg: "{{ test1 | default('a') }}"
- debug:
msg: "{{ test2 | default('a') }}"
TASK [Gathering Facts] *********************************************************
ok: [ansible2]
TASK [debug] *******************************************************************
ok: [ansible2] => {
"msg": "test1"
}
TASK [debug] *******************************************************************
ok: [ansible2] => {
"msg": "a"
}
default过滤器能让模块的参数变得”可有可无”
# vim /tmp/default2.yaml
---
- hosts: web1
vars:
- paths:
- path: /tmp/a.txt
mode: "0600"
- path: /tmp/b.txt
- path: /tmp/c.txt
tasks:
- file:
path: "{{ item.path }}"
state: touch
mode: "{{ item.mode | default('omit') }}"
#omit是忽略的意思,也可以直接赋值0666
loop: "{{ paths }}"
被控端:
[root@ansible2 ~]# ll /tmp
total 0
-rw------- 1 root root 0 May 13 21:05 a.txt
-rw-r--r-- 1 root root 0 May 13 21:05 b.txt
-rw-r--r-- 1 root root 0 May 13 21:05 c.txt
从上例就可以看到,有些mode并没有定义,而是直接调用了file模块的mode参数,将mode参数的值设定为了"{{item.mode | default(omit)}}",
简单来讲就是mode定义了就使用,没有定义就使用default,当然,假设不加上default过滤器,将会报错。