问题描述
在使用Ansible的find模块时,想要找到$PATH环境变量中Linux管理节点上的软链接文件。他已经编写了一个使用find模块的playbook,其中包含了一些潜在的目录路径。他想要提取找到的文件的路径,但不知道如何实现。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据用户的需求,可以使用Ansible的shell模块来代替lookup模块。lookup模块在本地计算机上执行,而不是在远程计算机上执行。以下是如何使用shell模块来查找软链接文件的示例:
- name: 查找匹配 "goodfile" 模式的文件
shell: find {{ item }} -type l -name "goodfile"
register: files_found
loop: "{{ result_from_prev }}"
- name: 获取完整路径
set_fact:
files_found_path: "{{ files_found.stdout_lines }}"
- debug:
var: files_found_path
在上面的示例中,我们使用shell模块执行了一个find命令,查找匹配”goodfile”模式的软链接文件。我们将找到的文件路径存储在变量files_found中,并使用set_fact模块将其赋值给变量files_found_path。最后,我们使用debug模块打印出files_found_path的值。
方案2
根据回答1,你可以使用find模块的返回值files_found.files来查看完整路径。以下是如何实现的步骤:
- name: 查找匹配 "goodfile" 模式的文件
find:
paths: "{{ some_path }}"
patterns: "goodfile"
file_type: link
register: files_found
- name: 获取完整路径
set_fact:
files_found_path: "{{ files_found.files }}"
- debug:
var: files_found_path
在上面的示例中,我们使用find模块查找匹配”goodfile”模式的软链接文件。我们将找到的文件路径存储在变量files_found中,并使用set_fact模块将其赋值给变量files_found_path。最后,我们使用debug模块打印出files_found_path的值。
请注意,根据你的描述,你想要在循环中使用find模块,但是你的代码中并没有使用循环。如果你需要在多个目录中查找文件,你可以使用循环来遍历result_from_prev变量中的目录路径。
以上是两种解决方案,你可以根据自己的需求选择其中一种。希望能帮助到你!