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。