Ansible 可修改列表的元素

Ansible 可修改列表的元素,ansible,jinja2,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

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

这将提供我的文件列表:

- 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_列表对每个元素都有效,将文件和扩展名剥离,只留下一个路径。我不知道如何在这个过程中创建一个新的列表变量

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

在列表上迭代可能会得到重复的路径。使用“唯一”过滤器可以解决这个问题。我确信有一个合适的jinja风格的过滤器来获得我想要的结果。谢谢您的帮助。

如果我理解正确,您只需要所有目录的列表,而不是文件。如果是这种情况,ansible似乎有
文件类型
参数,可以设置为
目录


在“查找”模块中使用
文件类型:目录是否可行

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

完美的阅读文档很有帮助!谢谢Russtarr和MrName。