Плагины поиска
Плагины поиска позволяют 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 — поиск шаблонного значения переменных
См. также
- О 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