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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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', 'http://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.5.

Теперь вы можете контролировать поведение ошибок во всех плагинах поиска, установив 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 — Поиск текущих значений конфигурации Ansilbe
  • conjur_variable — Получение учетных данных из CyberArk Conjur.
  • consul_kv — Получение метаданных из хранилища Consul ключ-значение.
  • credstash — извлечение секретов из Credstash в AWS
  • csvfile — чтение данных из файла TSV или CSV
  • cyberarkpassword — получение секретов из CyberArk AIM
  • dict — возвращает элементы пар ключ/значение из словарей
  • dig — запрос DNS с помощью библиотеки dnspython
  • dnstxt — запрос текстовых полей DNS домена(ов)
  • env — чтение значений переменных среды
  • etcd — получение информации от сервера etcd
  • file — чтение содержимого файла
  • fileglob — список файлов, соответствующих шаблону
  • filetree — рекурсивный поиск всех файлов в дереве каталогов
  • first_found — возвращение первого найденного файла из списка
  • flattened — возврат полностью сплющенного списка
  • hashi_vault — извлечение секретов из vault HashiCorp
  • 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-адрес для сети
  • openshift — Запрос к API OpenShift
  • 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
Пользовательская почтовая рассылка
Есть вопросы? Заходите на форум Google!
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.5/plugins/lookup.html

Spec-Zone.ru

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