Ansible中如何返回find模块找到的文件的完整路径

109次阅读
没有评论

问题描述

在使用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变量中的目录路径。

以上是两种解决方案,你可以根据自己的需求选择其中一种。希望能帮助到你!

正文完