Ansible fileglob:无法在预期路径中找到...

Nat*_*ara 6 vagrant ansible

我正在尝试使用 ansible 删除目录中的所有文件,同时保留目录。为此,我在with_fileglob任务中使用密钥将所有文件作为item变量从该目录中取出。我创建了一个最小示例,在这里显示了我的问题:

流浪文件:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  config.vm.provision :ansible do |ansible|
    ansible.limit = "all"
    ansible.playbook = "local.yml"
  end
end
Run Code Online (Sandbox Code Playgroud)

本地.yml:

- name: Test
  hosts: all
  become: true
  tasks:
    - name: Test debug
      debug:
        msg: "{{ item }}"
      with_fileglob:
        - "/vagrant/*"
Run Code Online (Sandbox Code Playgroud)

我希望得到 /vagrant 目录中每个文件的调试消息——因为这是通过 Vagrant 与 VM 同步的目录,我应该得到 Vagrantfile 和 local.yml 的消息。相反,我收到以下令人困惑的警告:

PLAY [Test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [default]

TASK [Test debug] **************************************************************
 [WARNING]: Unable to find '/vagrant' in expected paths (use -vvvvv to see
paths)


PLAY RECAP *********************************************************************
default                    : ok=1    changed=0    unreachable=0    failed=0
Run Code Online (Sandbox Code Playgroud)

这里引用了哪些预期路径?我已经用多个文件全局尝试过这个,但它们都以这种方式失败,我错过了什么?

seb*_*ert 10

Ansible 查找插件在本地机器(您启动 Ansible 的地方)上执行,而不是在远程机器上执行。

https://docs.ansible.com/ansible/latest/plugins/lookup.html

查找插件允许 Ansible 访问来自外部来源的数据。除了联系外部数据存储和服务之外,这还包括读取文件系统。像所有模板一样,这些插件在 Ansible 控制机器上进行评估,而不是在目标/远程机器上。


Lio*_*ion 7

由于fileglob仅适用于本地计算机,因此我测试了find其他替代方案并想在此处提供一个示例。如果我们想找到所有*.jar文件,可以这样做:

- name: Find jar files
  find:
    paths: "{{ install_jar_path }}"
    patterns: "*.jar"
  register: jar_src_file
  changed_when: False
Run Code Online (Sandbox Code Playgroud)

jar_src_file现在是一个数组。每个项目都有一个属性path

- set_fact:
    first_jar: "{{ jar_src_file.files[0].path }}"
Run Code Online (Sandbox Code Playgroud)

这将为您提供用于测试目的的第一个 jar 文件的路径。with_items如果需要,您可以使用例如循环遍历项目。