gpt4 book ai didi

Ansible 列出目录文件(ansible 2.9.10)

转载 作者:行者123 更新时间:2023-12-03 19:00:36 24 4
gpt4 key购买 nike

因此,我最近对使用 Ansible 对文件列表进行简单的查找和更改权限有多么困难感到沮丧。我以两种方式实现了它,两者都有效,但我想知道是否有人有更好的方法。
我的第一种方法,我只是要求 Ansible 做和我在 bash 中做的一样的事情,就像这样:

tasks:
- shell: ls -1 "{{ SomeDir }}"
register: file_names
- command: chmod 754 "{{ SomeDir }}/{{ item }}"
loop: "{{ file_names.stdout_lines }}"
我今天回到它,试图找到一种更 Ansible 的本地方式来完成这项任务,并想出了这个,但对于这样一个简单的任务来说,它似乎太笨重了:
tasks:
- name: "Find all files in the directory"
find:
paths: "{{ SomeDir }}"
file_type: file
register : find_output

- name: "loop through the .files output and then pick out the .path attribute"
file:
path: "{{ item.path }}"
mode: '0754'
loop:
"{{ find_output.files }}"
如您所见,我不擅长输出操作。如果我能做 {{ find_output.files.path }} 之类的事情,我会喜欢的。 ,但我无法进行查找或展平操作,也许有人可以让我直截了当。

最佳答案

只是您简化它的一个想法,因为如果我理解正确,您只是希望以非递归方式更改文件夹中的所有文件权限。
为此,您还可以使用 fileglob 查找及其等效 with_fileglob结构体。
有效地将您的两项任务合二为一:

- file:
path: "{{ item }}"
mode: "0754"
with_fileglob: "{{ SomeDir }}/*"

如果您想从复杂的字典列表中创建一个简单的列表,例如 file模块正在让步,您可以使用 map 的组合和 list 过滤器。
这是实现此目的的示例剧本:
- hosts: all
gather_facts: no

tasks:
- debug:
msg: "{{ faked_find_output.files | map(attribute='path') | list }}"
vars:
faked_find_output:
changed: false
failed: false
files:
- gid: 0
uid: 0
path: /path/to/file1
size: 0
- gid: 0
uid: 0
path: /path/to/file2
size: 0
这产生:
PLAY [all] ********************************************************************************************************

TASK [debug] ******************************************************************************************************
ok: [localhost] => {
"msg": [
"/path/to/file1",
"/path/to/file2"
]
}

PLAY RECAP ********************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

但请注意 ,这不适用于您的用例,因为 file模块不接受 path 的列表.
所以在你的情况下,你能做的最好的就是:
- file:
path: "{{ item }}"
mode: "0754"
loop: "{{ find_output.files | map(attribute='path') | list }}"
但是,老实说,这只是无缘无故地增加了复杂性。

关于Ansible 列出目录文件(ansible 2.9.10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64916443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com