一、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过滤器,将会报错。