Spec-Zone.ru › Ansible 2.7
  • Включение плагинов поиска
  • Использование плагинов поиска
  • query
  • Список плагинов

Плагины поиска

Плагины поиска позволяют Ansible получать данные из внешних источников. Это может включать чтение файловой системы, а также подключение к внешним хранилищам данных и службам. Как и все шаблоны, эти плагины обрабатываются на контрольной машине Ansible, а не на целевом/удалённом узле.

Возвращаемые плагином поиска данные доступны с помощью стандартной системы шаблонов Ansible и обычно используются для загрузки переменных или шаблонов с информацией из этих систем.

Поиск — это специфичное для Ansible расширение языка шаблонов Jinja2.

Примечание

  • Поиск выполняется с рабочей директорией, относительной к роли или воспроизведению, в отличие от локальных задач, которые выполняются относительно исполняемого скрипта.
  • Начиная с версии Ansible 1.9, вы можете передать wantlist=True в поиск, чтобы использовать его в циклах «for» шаблонов Jinja2.
  • Плагины поиска — это расширенная функция; для её эффективного использования вам необходимо хорошо понимать, как использовать воспроизведения Ansible.

Предупреждение

  • Некоторые плагины поиска передают аргументы в оболочку. При использовании переменных из удалённого/ненадёжного источника используйте фильтр |quote, чтобы обеспечить безопасное использование.

Включение плагинов поиска

Вы можете активировать пользовательский плагин поиска, поместив его в директорию lookup_plugins рядом с вашим воспроизведением, внутри роли или поместив его в один из каталогов источников поиска, настроенных в ansible.cfg.

Использование плагинов поиска

Плагины поиска можно использовать везде, где вы можете использовать шаблоны в Ansible: в воспроизведении, в файлах переменных или в шаблоне Jinja2 для модуля шаблона.

vars:
  file_contents: "{{lookup('file', 'path/to/file.txt')}}"

Поиск является неотъемлемой частью циклов. В любом месте, где вы видите with_, часть после нижнего подчеркивания — это имя поиска. Это также причина, по которой большинство поисков выдают списки и принимают списки в качестве входных данных; например, with_items использует поиск items:

tasks:
  - name: count to 3
    debug: msg={{item}}
    with_items: [1, 2, 3]

Вы можете комбинировать поиски с фильтрами, тестами и даже друг с другом для выполнения сложной генерации и обработки данных. Например:

tasks:
  - name: valid but useless and over complicated chained lookups and filters
    debug: msg="find the answer here:\n{{ lookup('url', 'https://google.com/search/?q=' + item|urlencode)|join(' ') }}"
    with_nested:
      - "{{lookup('consul_kv', 'bcs/' + lookup('file', '/the/question') + ', host=localhost, port=2000')|shuffle}}"
      - "{{lookup('sequence', 'end=42 start=2 step=2')|map('log', 4)|list)}}"
      - ['a', 'c', 'd', 'c']

Введено в версии 2.6.

Теперь вы можете контролировать поведение ошибок во всех плагинах поиска, установив errors в ignore, warn, или strict. Значение по умолчанию — strict, что приводит к отказу задачи. Например:

Чтобы проигнорировать ошибки:

- name: file doesnt exist, but i dont care .. file plugin itself warns anyways ...
  debug: msg="{{ lookup('file', '/idontexist', errors='ignore') }}"
[WARNING]: Unable to find '/idontexist' in expected paths (use -vvvvv to see paths)

ok: [localhost] => {
    "msg": ""
}

Чтобы получить предупреждение вместо отказа:

- name: file doesnt exist, let me know, but continue
  debug: msg="{{ lookup('file', '/idontexist', errors='warn') }}"
[WARNING]: Unable to find '/idontexist' in expected paths (use -vvvvv to see paths)

[WARNING]: An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /idontexist

ok: [localhost] => {
    "msg": ""
}

Остановка выполнения (по умолчанию):

- name: file doesnt exist, FAIL (this is the default)
  debug: msg="{{ lookup('file', '/idontexist', errors='strict') }}"
[WARNING]: Unable to find '/idontexist' in expected paths (use -vvvvv to see paths)

fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /idontexist"}

query

Введено в версии 2.5.

В Ansible 2.5 был добавлен новый функцию Jinja2 под названием query для вызова плагинов поиска. Разница между lookup и query в основном заключается в том, что query всегда возвращает список. По умолчанию lookup возвращает строку с перечислением значений через запятую. lookup можно явно настроить на возврат списка с помощью wantlist=True.

Это было сделано в основном для обеспечения более простого и согласованного интерфейса взаимодействия с новым ключевым словом loop, сохраняя обратную совместимость с другими использованиями lookup.

Следующие примеры эквивалентны:

lookup('dict', dict_variable, wantlist=True)

query('dict', dict_variable)

Как показано выше, поведение wantlist=True подразумевается при использовании query.

Кроме того, q была введена в качестве сокращённого обозначения для query:

q('dict', dict_variable)

Список плагинов

Вы можете использовать ansible-doc -t lookup -l для просмотра списка доступных плагинов. Используйте ansible-doc -t lookup <plugin name> для просмотра конкретных документов и примеров.

  • aws_account_attribute – Получение атрибутов учетной записи AWS.
  • aws_service_ip_ranges – Получение диапазонов IP-адресов для служб AWS, таких как EC2 и S3.
  • aws_ssm – Получение значения параметра SSM или всех параметров по пути.
  • cartesian – возвращает декартово произведение списков
  • chef_databag – извлечение данных из Chef Databag
  • config – Получение текущих значений конфигурации Ansible
  • conjur_variable – Извлечение учетных данных из CyberArk Conjur.
  • consul_kv – Извлечение метаданных из хранилища Consul key-value.
  • cpm_metering – Получение данных о мощности и токе от устройств WTI OOB/Combo и PDU.
  • cpm_status – Получение статуса и параметров от устройств WTI OOB и PDU.
  • credstash – извлечение секретов из Credstash в AWS
  • csvfile – чтение данных из TSV или CSV файла
  • cyberarkpassword – получение секретов из CyberArk AIM
  • dict – возвращает пары ключ/значение из словарей
  • dig – запрос DNS с использованием библиотеки dnspython
  • dnstxt – запрос DNS-полей txt домена(ов)
  • env – чтение значений переменных среды
  • etcd – получение информации от сервера etcd
  • file – чтение содержимого файла
  • fileglob – вывод файлов, соответствующих шаблону
  • filetree – рекурсивный поиск всех файлов в дереве каталогов
  • first_found – возврат первого найденного файла из списка
  • flattened – возврат полностью сплющенного списка
  • grafana_dashboard – список или поиск панелей Grafana
  • hashi_vault – получение секретов из хранилища HashiCorp’s vault
  • hiera – получение информации из данных hiera
  • indexed_items – переписывает списки для возврата «индексированных элементов»
  • ini – чтение данных из файла ini
  • inventory_hostnames – список хостов инвентаризации, соответствующих шаблону хоста
  • items – список элементов
  • k8s – Запрос к API K8s
  • keyring – извлечение секретов из хранилища ОС
  • lastpass – получение данных из lastpass
  • lines – чтение строк из команды
  • list – просто возвращает то, что ему передано.
  • mongodb – получение информации из MongoDB
  • nested – формирует список с вложенными элементами из других списков
  • nios – Запрос к объектам Infoblox NIOS
  • nios_next_ip – Возврат следующего доступного IP-адреса для сети
  • nios_next_network – Возврат следующего доступного диапазона сети для сети-контейнера
  • onepassword – получение значений полей из 1Password
  • onepassword_raw – получение сырых JSON-данных из 1Password
  • password – извлечение или генерация случайного пароля, хранящегося в файле
  • passwordstore – управление паролями с помощью утилиты pass passwordstore.org
  • pipe – чтение вывода команды
  • random_choice – возвращает случайный элемент из списка
  • redis – извлечение данных из Redis
  • redis_kv – извлечение данных из Redis
  • sequence – генерация списка на основе числовой последовательности
  • shelvefile – чтение ключей из файла Python shelve
  • subelements – проход по вложенным ключам из списка словарей
  • template – извлечение содержимого файла после применения шаблонизации с помощью Jinja2
  • together – объединяет списки в синхронизированный список
  • url – возвращает содержимое из URL
  • vars – Поиск шаблонизированного значения переменных

См. также

О Playbook
Введение в Playbook
Плагины инвентаризации
Плагины инвентаризации Ansible
Плагины обратного вызова
Плагины обратного вызова Ansible
Фильтры
Плагины фильтра Jinja2
Тесты
Плагины тестов Jinja2
Поиск
Плагины поиска Jinja2
Список рассылки пользователей
Есть вопрос? Зайдите на форум!
irc.freenode.net
Канал IRC-чата #ansible

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.7/plugins/lookup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API