csvfile#

Расширение поиска ansible.builtin.csvfile используется для выборки данных из файлов в форматах TSV (tab-separated values; значения, разделенные табуляцией) и CSV (comma-separated values; значения, разделенные запятыми).

Особенности использования#

Расширение поиска ansible.builtin.csvfile имеет следующие особенности:

  • По умолчанию модуль работает с файлами формата TSV, а не CSV.

  • Нумерация столбцов начинается с нуля.

  • Значения возвращаются в виде словаря, где ключ и его значение берутся из первого и второго столбцов файла соответственно.

  • В позиционных аргументах должно быть указано название хотя бы одного ключа.

  • В позиционном аргументе можно указать шаблон строки, которой должно соответствовать значение в первом столбце файла. Это позволяет выбрать только нужные строки.

Именованные параметры#

Расширение принимает следующие именованные параметры:

col#

Номер столбца со значением.

Значение по умолчанию: 1.

default#

Значение по умолчанию. Возвращается, если в файле CSV значение нужного столбца не заполнено.

delimiter#

Разделитель значений в файле. Если в качестве разделителя используется табуляция, используйте значение TAB или \t.

Значение по умолчанию: TAB.

encoding#

Кодировка файла.

Значение по умолчанию: utf-8.

file#

Путь к файлу.

Значение по умолчанию: ansible.csv.

Примеры#

Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.

Во всех примерах используется один и тот же файл source.csv:

source.csv#
username,email,department
John Dow,jdow@example.com,IT
Julia Smith,jsmith@example.com,HR
Alice Green,agreen@example.com,Finance

Получение всех записей#

Следующий пример демонстрирует загрузку из файла CSV всех имеющихся записей.

---
# ...
  tasks:
    - name: Load all rows from CSV
      ansible.builtin.set_fact:
        users: "{{ lookup('ansible.builtin.csvfile', file='./source.csv', delimiter=',') }}"

    - name: Print all loaded rows
      ansible.builtin.debug:
        msg: "Username: {{ item[0] }} | Email: {{ item[1] }} | Dept: {{ item[2] }}"
      loop: "{{ users }}"

Получение адреса электронной почты конкретного пользователя#

Следующий пример демонстрирует поиск адреса электронной почты пользователя Julia Smith. Здесь значение Julia Smith задано как позиционный параметр.

---
# ...
  tasks:
    - name: Lookup email by username
      ansible.builtin.debug:
        msg: "Email for Julia Smith is {{ lookup('ansible.builtin.csvfile', 'Julia Smith', file='./source.csv', delimiter=',', col=1) }}"