Ansible fileglob: не удалось найти... в ожидаемых путях

Я пытаюсь использовать 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

локальный.yml:

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

Я ожидаю получить отладочное сообщение для каждого файла в каталоге /vagrant — поскольку это каталог, синхронизированный с виртуальной машиной через Vagrant, я должен получить сообщение для 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

О каких ожидаемых путях здесь идет речь? Я пробовал это с несколькими файловыми глобусами, и все они терпят неудачу таким образом, что мне не хватает?

Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
6
0
6 541
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Плагины Ansible для поиска выполняются на локальной машине (где вы запускаете Ansible), а не на удаленной(ых).

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

Lookup plugins allow Ansible to access data from outside sources. This can include reading the filesystem in addition to contacting external datastores and services. Like all templating, these plugins are evaluated on the Ansible control machine, not on the target/remote.

@NateMara Вы можете использовать найти модуль

sebthebert 11.04.2019 20:26

Поскольку 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, если это необходимо.

Другие вопросы по теме