#ansible #ansible-template
Вопрос:
В настоящее время я передаю параметры в свой сценарий, который вызывает шаблон/роль задания ansible tower. Чтобы сделать его более удобным для пользователя, я решил использовать для этого опрос. Сценарий принимает имена файлов в качестве параметров.
Скрипт принимает параметры в этом формате
'file1.txt','file2.txt','file3.txt'
Однако вот в чем проблема
Файл может быть одним, может быть 2 или три, возможно, до 5.
Я подумал о решении, и я думаю, что лучший дизайн-это список файлов, разделенных запятыми, поступающих из опроса ansible, например file1, file2, file3
Как у меня может быть логика, согласно которой со списком файлов их можно разделить и использовать цикл для копирования их по одному, если в списке представлено более одного файла, а затем иметь переменную, которая добавит одинарные кавычки и запятую в список файлов. Например, в опросе указанные значения, такие как file1.txt, file2.txt, file3.txt
, затем будут преобразованы в переменную, содержащую следующее
'file1.txt','file2.txt','file3.txt'
Другая проблема заключается в следующем.
Роль ansible копирует данное имя файла в каталог, я знаю, что функция разделения может использоваться для разделения списка, разделенного запятыми, как я могу затем скопировать их в папку в цикле ? Если мы посмотрим на приведенный ниже пример, он работает только для одного файла.
Редактировать.
Я посмотрел на функцию разделения и объединил ее с циклом. Я получаю сообщение об ошибке, когда запускаю его. Ошибка шаблона при создании шаблона строки
---
- name: Set file name
set_fact:
file1: "file1.txt"
file_list: "file1.txt"
- name: Set working directory
set_fact:
standard_path: "{{ansible_user_dir}}\execution"
content_file: "{{standard_path}}\{{file1}}"
- name: Copy file to working directory
win_copy:
src: "file1.txt"
dest: "{{content_file}}"
- name: Set parameters for script
set_fact:
params: "-filenames '{{content_file}}'"
- name: Run a loop to copy the files.
win_copy:
src: "{{ item }}"
dest: "{{standard_path \ item }}"
with_items: "{{file_list.split(',') }}"
Комментарии:
1. Тип опроса с множественным выбором возвращает список. Вы можете зациклиться на этом, чтобы скопировать и использовать
join
фильтр для создания строки параметров.2. Спасибо за комментарий, я отредактировал вопрос, чтобы использовать одно текстовое поле и предоставить список файлов, разделенных запятыми. это будет легче трансформировать на основе моих исследований.
3. Тип text survrey возвращает строку.
your_var.split(',')
эта строка, чтобы получить список, затем вернитесь ко второй части моего первого комментария.4. Пожалуйста, у вас есть пример, как я искал в Интернете, чтобы найти, как использовать разделение и петлю.
5. Спасибо @Zeitounator, я разобрался в проблеме и исправил ее.
Ответ №1:
Раздел в коде, который создавал исключение, теперь исправлен. Стандарт jinja2 требует, чтобы переменные находились в отдельных {{}}, как показано ниже.
- name: Run a loop to copy the files.
win_copy:
src: "{{ item }}"
dest: "{{standard_path}}\{{item }}"
with_items: "{{file_list.split(',') }}"