Ансибельная съемка башни, преобразующая значения строк съемки

#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(',') }}"