Копирование определенных файлов из файла, содержащего определенные имена файлов, с помощью Ansible

#ansible

#ansible

Вопрос:

У меня есть файл, который содержит разные имена файлов. Какие имена файлов находятся в этом файле, меняется каждый раз, когда я запускаю playbook.

Хотя я нашел только способы либо скопировать все файлы в каталог, либо скопировать определенные файлы, которые определены как статические.

filenames.txt:

 file1
file4
 

Каталог, содержащий файлы:

 file1
file2
file3
file4
file5
 

Мой план состоял в том, чтобы создать переменную в моей таблице vars, в которой я сохраняю файл, а затем использую его в своей роли.
copy-files: path/filenames.txt

Роль для копирования файлов:

 ---
- name: Copy Files 
  copy:
    src: "{{ item }}"
    dest: "{{path2}}" 
  with_fileglob:
   - "/pathtofiles/{{copy-files}}"
 

К сожалению, это не работает. Кто-нибудь еще знает другой подход?

Ответ №1:

Если я вас правильно понял, вы хотите скопировать файлы, перечисленные в path/filenames.txt . Вы можете сделать это с помощью следующей задачи:

 - name: Copy Files to /tmp
  copy:
    src: "{{ item }}"
    dest: "{{ hqlname_sys2 }}"
  loop: "{{ lookup('file', 'path/filenames.txt').split('n') }}"
 

Содержимое path/filenames.txt считывается с помощью плагина lookup file в строку, и эта строка разбивается функцией split на 'n' разделитель, так что вы получаете массив с именами файлов, который передается в цикл.

Комментарии:

1. Спасибо за ваш ответ. Можете ли вы объяснить мне, как именно работает код?

2. Я не уверен, правильно ли вы поняли мой вопрос. path/filenames.txt содержит только имена файлов. Сами файлы находятся в другом месте на том же хосте.

3. В другом месте означает в другом месте в том же каталоге? Если это так, вы можете добавить src: "{{ item }}" путь, например src: "/path/to/{{ item }}"

4. В другом месте означает в другом каталоге. но с src: «path / to{{item}}» я думаю, это должно сработать. Спасибо за вашу помощь

5. Привет, у меня вопрос о вашем решении. Atm я сталкиваюсь с проблемой, что если, например, в filenames.txt тогда ваше решение скопирует все файлы в этом каталоге, а не 0. Знаете ли вы способ убедиться, что этого не произойдет?