在 Ansible 2.5 之前,循环语法曾经是
with_x
。从 2.5 开始,loop
受到青睐,with_x
基本上从文档中消失了。
尽管如此,文档还是提到了如何用
with_x
替换 loop
的示例。但我不知道我们现在应该如何循环文件目录。
假设我需要上传给定目录中的所有文件,我曾经使用
with_fileglob
。
- name: Install local checks
copy:
src: "{{ item }}"
dest: /etc/sensu/plugins/
owner: sensu
group: sensu
mode: 0744
with_fileglob:
- plugins/*
那么现代的对应词是什么?有可能吗?我知道我仍然可以使用
with_fileglob
,但当我正在编写新角色时,我最好让它们面向未来。
loop: "{{ lookup('fileglob', 'plugins/*', wantlist=True) }}"
lookup和query之间的区别很大程度上在于query将始终返回一个列表。 lookup 的默认行为是返回一串以逗号分隔的值。可以使用 wantlist=True 显式配置 lookup 返回列表。
loop: "{{ query('fileglob', 'plugins/*') }}"
loop: "{{ q('fileglob', 'plugins/*') }}"
所有三个选项都给出相同的结果。请参阅查找插件。
Ansible 循环文档:
任何需要在循环中使用
with_*
的lookup
语句都应该 不会转换为使用loop
关键字。例如,代替 正在做:保持更干净:
loop: "{{ lookup('fileglob', '*.txt', wantlist=True) }}"
with_fileglob: '*.txt'