Spec-Zone.ru › Ansible 2.6
  • Включение плагинов поиска
  • Использование плагинов поиска
  • 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', '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.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": ""
}

Ошибка «Fatal» (значение по умолчанию):

- 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.
  • 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 — извлечение секретов из хранилища HashiCorp 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-адреса для сети
  • 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 — поиск шаблонного значения переменных
END_OF_DOCUMENT_MARKER

См. также

О Playbooks
Введение в playbooks
Плагины инвентаризации
Плагины инвентаризации 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.6/plugins/lookup.html

Spec-Zone.ru

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