Ansible:查找文件并循环路径

时间:2017-10-18 21:34:21

标签: ansible

使用Ansible角色。我想循环一个文件路径列表,但是我收到一个错误:

template error while templating string: unexpected '/'.
String: {{/home/xyz/download.log}}

这是" list_log_files"的main.yml。作用:

- name: "find logs"
  find:
    paths: /
    patterns: 'download.log'
    recurse: yes
  register: find_logs

- name: "list log files"
  debug: var="{{ item.path }}"
  with_items: "{{ find_logs.files }}"

find返回一个数组" files&#34 ;,每个都是一个字典。字典包含一个路径条目,这是我感兴趣的。

2 个答案:

答案 0 :(得分:3)

var模块的debug参数的正确语法(带有用例的值)是:

  • 用Ansible表示法:

    debug: var=item.path
    
  • 以YAML表示法:

    debug:
      var: item.path
    

Ansible模块'用法很精彩,文章的例子涵盖了大多数用户。需要。对于debug模块也是如此,因此refer to the examples检查基本语法。

答案 1 :(得分:1)

我遇到了同样的问题,并且我想在每个文件的路径列表中插入行的情况也相同。我使用Jinja2过滤器:

- name: fetch files
  find: paths=/var/tmp/ patterns='*.log'
  register: find_logs

- name: insert line
  lineinfile: dest={{ item }} line='my line' insertafter=EOF
  with_items: "{{ find_logs.files | map(attribute='path') | list }}"

{{find_logs.files | map(attribute ='path')|列表}}

Helpful Link

map()

Applies a filter on a sequence of objects or looks up an attribute. 
This is useful when dealing with lists of objects but you are really 
only interested in a certain value of it.