控制器上的testing paths很简单。例如,给定树
shell> tree /tmp/export/
/tmp/export/
├── dir1
│ ├── a
│ └── b
└── dir2
└── c
2 directories, 3 files
下面的剧本跳过丢失的文件夹
shell> cat pb.yml
- hosts: test_11
vars:
folder_list:
- /tmp/export/dir1
- /tmp/export/dir2
- /tmp/export/dir3
tasks:
- debug:
msg: "synchronize {{ item }}"
loop: "{{ folder_list }}"
when: item is directory
给
shell> ansible-playbook pb.yml
PLAY [test_11] ***********************************************************************************************
TASK [debug] *************************************************************************************************
ok: [test_11] => (item=/tmp/export/dir1) =>
msg: synchronize /tmp/export/dir1
ok: [test_11] => (item=/tmp/export/dir2) =>
msg: synchronize /tmp/export/dir2
skipping: [test_11] => (item=/tmp/export/dir3)
PLAY RECAP ***************************************************************************************************
test_11: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
你可以结合条件。例如,
when: item is directory or item is link
,或者只是简单地测试存在性
when: item is exists
注意:模块stat 检查当前主机上的文件。您必须将此任务委派给本地主机如果你想在这里使用它。注册结果并在下面声明变量
folder_exists: "{{ dict(folder_list_stat.results|
json_query('[].[item, stat.exists]')) }}"
- block:
- stat:
path: "{{ item }}"
loop: "{{ folder_list }}"
register: folder_list_stat
- debug:
var: folder_list_stat
when: debug|d(false)|bool
- debug:
var: folder_exists
when: debug|d(false)|bool
delegate_to: localhost
run_once: true
给出字典
folder_exists:
/tmp/export/dir1: true
/tmp/export/dir2: true
/tmp/export/dir3: false
然后,条件是微不足道的。查看有关其他可用属性的调试文件夹列表统计并根据需要创建其他词典进行测试。
用于测试的完整剧本示例
- hosts: test_11
vars:
folder_list:
- /tmp/export/dir1
- /tmp/export/dir2
- /tmp/export/dir3
folder_exists: "{{ dict(folder_list_stat.results|
json_query('[].[item, stat.exists]')) }}"
tasks:
- block:
- stat:
path: "{{ item }}"
loop: "{{ folder_list }}"
register: folder_list_stat
- debug:
var: folder_list_stat
when: debug|d(false)|bool
- debug:
var: folder_exists
when: debug|d(false)|bool
delegate_to: localhost
run_once: true
- debug:
msg: "synchronize {{ item }}"
loop: "{{ folder_list }}"
when: folder_exists[item]