ANSIBLE: функция разделения, не удаляющая возврат каретки ‘r’ из строки

#split #ansible #jinja2 #ansible-facts

Вопрос:

У меня есть локальный txt-файл под названием file-names.txt который содержит список имен файлов

 file1.txt
file2.txt
file3.txt
 

В моем сборнике ansible-play я регистрирую содержимое файла file-name.txt используя модуль slurp.
И установить названный факт files_names .

 tasks:
 - name: Getting the file
   ansible.builtin.slurp:
    src: file-name.txt
   register: file_names
 - name: Saving the file names
   set_fact: 
     file_name_list: "{{ (file_name['content] | b64decode | trim ).split('rn') }}"

 

Я хочу file_name_list , чтобы факт был списком, содержащим только имена файлов. но какая-то функция разделения не может удалить 'r' из имен файлов, и я получаю следующие результаты

 ok: [localhost] => {
  "ansible_facts":{
     "file_name_list": [
       "file1.txtr",
       "file2.txtr",
       "file3.txt"       
      ]
  },
  "changed": false
}
 

Как я могу удалить возврат каретки 'r' из каждого элемента массива, чтобы это file_name_list выглядело так

 ok: [localhost] => {
  "ansible_facts":{
     "file_name_list": [
       "file1.txt",
       "file2.txt",
       "file3.txt"       
      ]
  },
  "changed": false
}
 

PS: file-name.txt было сделано на машине с Windows, поэтому в каждую строку включен возврат каретки.

Ответ №1:

Таким trim образом, фильтр, похоже, удаляет финал r из списка файлов file3.txt . Поэтому вместо использования trim перед разделением мы можем обрезать каждое item из них после разделения имен r файлов .

Что-то вроде приведенного ниже должно сработать:

     - name: saving the file names
      set_fact:
        filename_list: "{{ filename_list|default([])   [ item|trim ] }}"
      with_items: "{{ (filenames.content|b64decode).split('r') }}"
    - name: show the filenames
      debug:
        var: filename_list
 

Это должно привести к:

 ok: [localhost] => {
    "filename_list": [
        "file1.txt",
        "file2.txt",
        "file3.txt"
    ]
}