Я пытаюсь добиться здесь, как показано ниже:
- Разархивировать код из tar.gz - работает
- Найти имена файлов в разархивированном каталоге - работает
- Поиск имен файлов в каталоге кодов на основе имен файлов, выбранных на шаге 2 - ошибка
- Копирование файлов из источника: (Шаг 2) место назначения: (Шаг 3) - работает, если я использую жестко закодированный имена файлов в разделе шаблона на шаге 3
Ниже упоминается роль Ansible, которую я использовал:
- name: Unarchive config files to server
unarchive:
src: "{{ config_dir }}/config.tar.gz"
dest: /tmp
list_files: yes
register: tar_path
- name: Find file names in unarchived config files
find:
paths: "{{ tar_path.dest }}"
file_type: file
recurse: yes
register: tmp_file_path
- name: Find file names in code base
find:
paths: /opt
file_type: file
recurse: yes
patterns:
#Search for file names with the values in tmp_file_path
register: code_file_path
- set_fact:
code_files: "{{ code_files|default([]) +
[{'path': item, 'name': item|basename}] }}"
loop: "{{ code_file_path.files|map(attribute='path')|list }}"
- name: copy files
command: cp "{{ item.0 }}" "{{ item.1.path }}"
with_together:
- "{{ tmp_file_path.files|map(attribute='path')|list|sort }}"
- "{{ code_files|sort(attribute='name') }}"
Здесь мне нужно использовать поиск, чтобы найти файлы в каталоге / opt, основанные на шаблоне (имя файла), который я разархивировал в / tmp
И, наконец, замените файлы из / tmp в / opt на основе имен файлов и путей (это я способен сделать). Структура каталогов выглядит следующим образом:
shell> tree tmp
tmp
├── file1
├── file2
└── file3
shell> tree opt
opt
├── bar
│ └── file2
├── baz
│ └── file3
└── foo
└── file1
Здесь, если я использую приведенный ниже код, в котором я вручную упоминаю имена файлов, то это работает. Однако я не хочу этого делать
- name: Find file names in code base
find:
paths: /opt
file_type: file
recurse: yes
patterns:
- file1
- file2
- file3
register: code_file_path
Мне нужно решение, чтобы заменить жесткое кодирование для шаблонов: file1, file2 и file3 и использовать некоторую переменную для этого. Имена файлов в / tmp и / opt, которые мне нужно заменить, точно такие же