Ansible 循环文件

问题描述 投票:0回答:2

在 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
,但当我正在编写新角色时,我最好让它们面向未来。

loops plugins ansible ansible-2.x
2个回答
25
投票
  loop: "{{ lookup('fileglob', 'plugins/*', wantlist=True) }}"

lookupquery之间的区别很大程度上在于query将始终返回一个列表。 lookup 的默认行为是返回一串以逗号分隔的值。可以使用 wantlist=True 显式配置 lookup 返回列表。

loop: "{{ query('fileglob', 'plugins/*') }}"

    此外,
  • q 是作为 query 的缩写形式引入的
loop: "{{ q('fileglob', 'plugins/*') }}"
所有三个选项都给出相同的结果。请参阅

查找插件


13
投票
来自当前的

Ansible 循环文档

任何需要在循环中使用

with_*

lookup
 语句都应该
  不会转换为使用 
loop
 关键字。例如,代替
  正在做:

loop: "{{ lookup('fileglob', '*.txt', wantlist=True) }}"


  
  

保持更干净:

with_fileglob: '*.txt'


最新问题
© www.soinside.com 2019 - 2024. All rights reserved.