首页 > 解决方案 > 在 Ansible 中使用通配符查找远程文件

问题描述

我使用 shell 模块运行 java 命令,该模块创建一个带有后缀的随机字符串的文件。

我需要随后使用 uri 模块发布此文件。

我正在尝试使用stat 模块和通配符查找文件,但没有找到。

- stat:
    path: "{{ my_dir }}/info-*"
  register: info

- debug:
    msg: "info isn't defined (path doesn't exist)"
  when: info.stat.exists == False

我还能如何找到文件名?

标签: ansible

解决方案


stat 模块需要完整路径。

但是,可以通过使用 find模块来实现所需的效果,因为它允许使用通配符。

path要搜索的目录路径列表。

patterns一个或多个(shell 或 regex)模式,其类型由 use_regex 选项控制。这些模式将要返回的文件列表限制为那些基本名称至少与指定模式之一匹配的文件。可以使用列表指定多个模式。此参数需要一个列表,...

- find:
    paths:
      - "{{ my_dir }}"
    patterns:
      - "info-*"
  register: info

- debug:
    msg: "{{ info.files }}"

问题。" I run a java command using the shell module which creates a file with a random string suffixed to this. I need to subsequently POST this file using the uri module."

回答。可以使用找到的第一个文件

- debug:
    var: info.files.0.path

,但可能有更多文件与模式匹配info-*。一个强大的解决方案是使java command ... which creates a file with a random string suffixed返回文件名。或者,也可以改用tempfile模块。


推荐阅读