Ansible修改列表

时间:2017-08-11 16:54:22

标签: ansible jinja2

我有一个文件列表。我想迭代文件列表,只提取新列表变量的路径。

这给了我文件列表:

- name: sweep directory /foo/bar recursivly 
find:
  paths: /foo/bar
  recurse: yes
  patterns: "*"
  hidden: True
register: sweep_result

- name: build file list
set_fact: 
 all_list: "{{ sweep_result.files | map(attribute='path') | list }}"

- debug: var=all_list

输出:

TASK [debug] *************************************************
ok: [host] => {
    "all_list": [
        "/foo/bar/.hiddenfile", 
        "/foo/bar/file1", 
        "/foo/bar/folder/file1", 
        "/foo/bar/folder/file2.ext",  
    ]
}

这是我想要的一个例子:

    "paths": [
        "/foo/bar/", 
        "/foo/bar/folder/",   
    ]

我可以看到迭代遍历all_list就像这样可以解决每个元素剥离文件和扩展只留下一条路径。我不知道如何在这个过程中建立一个新的列表变量。

- debug: var=item[:item.rfind('/')]
    with_items:
     - "{{ all_list }}"

迭代列表可能会给我重复的路径。使用' unique'过滤器可以解决。我相信有一个合适的jinja样式过滤器可以让我获得我追求的结果。谢谢你的帮助。

0 个答案:

没有答案