Плагины поиска
- Включение плагинов поиска
- Использование плагинов поиска
- Вызов плагинов поиска с
query - Список плагинов
Плагины поиска позволяют Ansible получать данные из внешних источников. Это может включать чтение файловой системы помимо подключения к внешним хранилищам данных и службам. Как и все шаблоны, эти плагины обрабатываются на управляющей машине Ansible, а не на целевом/удалённом узле.
Возвращаемые плагином поиска данные доступны через стандартную систему шаблонов Ansible и обычно используются для загрузки переменных или шаблонов с информацией из этих систем.
Поиск — это специфичное для Ansible расширение языка шаблонов Jinja2.
Примечание
- Поиск выполняется с рабочей директорией, относительной к роли или заданию, в отличие от локальных задач, которые выполняются относительно исполняемого скрипта.
- С версии Ansible 1.9 вы можете передавать wantlist=True в поиски, чтобы использовать их в циклах 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> для просмотра конкретных документов и примеров.
- avi – Поиск
Aviобъектов - aws_account_attribute – Поиск атрибутов учетной записи AWS
- aws_secret – Поиск секретов, хранящихся в AWS Secrets Manager
- 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
- 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 для домена(ов)
- env – чтение значения переменных среды
- etcd – получение информации от сервера etcd
- file – чтение содержимого файла
- fileglob – список файлов, соответствующих шаблону
- filetree – рекурсивный поиск всех файлов в дереве каталогов
- first_found – возврат первого найденного файла из списка
- flattened – возвращает полностью уплощенную единичный список
- gcp_storage_file – Возврат содержимого хранилища GC
- grafana_dashboard – список или поиск панелей управления Grafana
- hashi_vault – извлечение секретов из хранилища HashiCorp’s vault
- hiera – получение информации из данных hiera
- indexed_items – переписывает списки для возврата «индексированных элементов»
- ini – чтение данных из файла ini
- inventory_hostnames – список хостов инвентаря, соответствующих шаблону хоста
- items – список элементов
- k8s – Запрос к API K8s
- keyring – извлечение секретов из хранилища ОС
- laps_password – Извлечение пароля LAPS для сервера
- lastpass – извлечение данных из lastpass
- lines – чтение строк из команды
- list – просто возвращает то, что ему дано
- manifold – извлечение учетных данных от Manifold.co
- mongodb – поиск информации из MongoDB
- nested – составление списка со вложенными элементами других списков
- nios – запрос объектов Infoblox NIOS
- nios_next_ip – Возврат следующего доступного IP-адреса для сети
- nios_next_network – Возврат следующего доступного диапазона сети для контейнера сети
- onepassword – извлечение значений полей из 1Password
- onepassword_raw – извлечение всего элемента из 1Password
- openshift – Запрос к API K8s
- password – извлечение или генерация случайного пароля, хранящегося в файле
- passwordstore – управление паролями с помощью утилиты pass от passwordstore.org
- pipe – чтение вывода из команды
- rabbitmq – Извлечение сообщений из очереди RabbitMQ AMQP/AMQPS
- random_choice – возврат случайного элемента из списка
- redis – извлечение данных из Redis
- sequence – генерация списка на основе числовой последовательности
- shelvefile – чтение ключей из файла Python shelve
- skydive – Запрос объектов Skydive
- subelements – обход вложенных ключей из списка словарей
- template – извлечение содержимого файла после шаблонизации с помощью Jinja2
- together – объединение списков в синхронизированный список
- url – возврат содержимого из URL
- varnames – Поиск совпадающих имен переменных
- vars – Поиск шаблонизированного значения переменных
См. также
- О плейбуках
- Введение в плейбуки
- Плагины инвентаризации
- Плагины инвентаризации 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.9/plugins/lookup.html