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

时间:2019-04-10 21:00:47

标签: ansible vagrant

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

Vagrantfile:

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

local.yml:

- name: Test
  hosts: all
  become: true
  tasks:
    - name: Test debug
      debug:
        msg: "{{ item }}"
      with_fileglob:
        - "/vagrant/*"

我希望获得/ 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

在这里指的是什么预期路径?我已经尝试过使用多个fileglob,但是它们都以这种方式失败了,我还缺少什么?

2 个答案:

答案 0 :(得分:2)

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

- name: Find jar files
  find:
    paths: "{{ install_jar_path }}"
    patterns: "*.jar"
  register: jar_src_file
  changed_when: False

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

- set_fact:
    first_jar: "{{ jar_src_file.files[0].path }}"

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

答案 1 :(得分:1)

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

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

  

查阅插件使Ansible可以从外部源访问数据。这个   除了联系外部,还可以包括读取文件系统   数据存储和服务。像所有模板一样,这些插件是   在Ansible控制机器上进行评估,而不是在目标/遥控器上进行评估。