azure.azcollection.azure_kql: инвентаризация Azure – плагин инвентаризации Azure Resource Manager с использованием Graph QL
Примечание
Этот плагин инвентаризации входит в коллекцию azure.azcollection (версия 3.18.0).
Возможно, эта коллекция уже установлена, если вы используете пакет ansible. Она не входит в ansible-core. Чтобы проверить, установлена ли она, выполните ansible-galaxy collection list.
Для установки используйте: ansible-galaxy collection install azure.azcollection. Для использования этого плагина инвентаризации требуются дополнительные компоненты; подробности см. в разделе Требования.
Чтобы использовать его в плейбуке, укажите: azure.azcollection.azure_kql.
Добавлено в azure.azcollection 3.7.0
Обзор
- Получение сведений о виртуальных машинах из Azure Resource Manager с помощью Graph QL
- Инструкции по составлению собственного запроса см. на странице https://learn.microsoft.com/en-us/azure/virtual-machines/resource-graph-samples?tabs=azure-cli. Единственное требование — необходимо указать inventory_hostname.
- Требуется файл конфигурации YAML, имя которого заканчивается на ‘azure_kql.(yml|yaml)’
- Обратите внимание, что в настоящее время данные Azure Resource Graph могут не соответствовать фактическому состоянию ресурсов. Распространение обновлений может занимать до 30 минут. Это касается как появления, так и исчезновения ресурсов.
Требования
Следующие требования должны быть выполнены на локальном управляющем узле, на котором запускается этот плагин инвентаризации.
- python >= 2.7
- На узле, выполняющем этот модуль, должна быть установлена коллекция azure.azcollection из Galaxy
- Все пакеты Python, перечисленные в файле requirements.txt коллекции, должны быть установлены с помощью pip на узле, выполняющем модули из azure.azcollection
- Полные инструкции по установке см. на странице https://galaxy.ansible.com/azure/azcollection
Параметры
Параметр | Комментарии |
|---|---|
ad_user string | Имя пользователя Active Directory. Используйте при аутентификации с помощью пользователя Active Directory, а не субъекта-службы. |
adfs_authority_url string добавлено в azure.azcollection 0.0.1 | URL-адрес центра полномочий Azure AD. Используйте при аутентификации с помощью имени пользователя и пароля, если у вас есть собственный центр полномочий ADFS. |
api_profile string добавлено в azure.azcollection 0.0.1 | Выбирает профиль API для взаимодействия со службами Azure. Значение по умолчанию По умолчанию: |
auth_source string добавлено в azure.azcollection 0.0.1 | Определяет источник учетных данных, используемых для аутентификации. Также можно задать с помощью переменной окружения Если задано значение Если задано значение Если задано значение Если задано значение Если задано значение Параметр Варианты:
|
cache boolean | Включает или отключает кэширование исходных данных инвентаря; для работы требуется настроенный плагин кэширования. Варианты:
Конфигурация:
|
cache_connection string | Данные подключения к кэшу или путь к нему; подробные сведения см. в документации плагина кэширования. Конфигурация:
|
cache_plugin string | Плагин кэширования для исходных данных инвентаря. По умолчанию: Конфигурация:
|
cache_prefix string | Префикс для файлов/таблиц плагина кэширования. По умолчанию: Конфигурация:
|
cache_timeout integer | Длительность хранения кэша в секундах. По умолчанию: Конфигурация:
|
cert_validation_mode string добавлено в azure.azcollection 0.0.1 | Управляет проверкой сертификатов для конечных точек Azure. По умолчанию все модули проверяют сертификат сервера, однако при использовании HTTPS-прокси или Azure Stack может потребоваться отключить эту проверку, передав Варианты:
|
client_id string | Идентификатор клиента Azure. Используйте при аутентификации с помощью субъекта-службы или управляемого удостоверения (msi). Также можно задать с помощью переменной окружения |
cloud_environment string добавлено в azure.azcollection 0.0.1 | Для облачных сред, отличных от общедоступного облака США: имя среды (согласно определению в Azure Python SDK, например, По умолчанию: |
compose dictionary | Соответствие имен переменных узлов выражениям Jinja2. Значение для каждого узла определяется результатом выражения Jinja2 (которое может ссылаться на любые существующие переменные узла на момент запуска этого плагина инвентаря). По умолчанию: |
disable_instance_discovery boolean добавлено в azure.azcollection 2.3.0 | Определяет, выполняется ли обнаружение экземпляра при попытке аутентификации. Если задать значение true, обнаружение экземпляра и проверка центра полномочий будут полностью отключены. Эта возможность предназначена для сценариев, в которых конечная точка метаданных недоступна, например в частных облаках или Azure Stack. Процесс обнаружения экземпляра включает получение метаданных центра полномочий с https://login.microsoft.com/ для проверки центра полномочий. Если задать значение **True**, проверка центра полномочий будет отключена. Поэтому крайне важно убедиться, что настроенный хост центра полномочий действителен и заслуживает доверия. Значение можно задать в профиле файла учетных данных или с помощью переменной окружения Варианты:
|
fail_on_template_errors string | Если значение равно false, ошибки шаблонов при обработке групп и фильтров игнорируются без уведомления (например, если фильтр или выражение группы ссылается на неопределенную переменную узла). Варианты:
|
graph_query string | Запрос к графу, который получает интересующий вас инвентарь узлов. Запрос должен возвращать поле inventory_hostname. |
groups dictionary | Соответствие имен групп выражениям Jinja2. Если выражение, указанное в соответствии, истинно, узел добавляется в группу с заданным именем. По умолчанию: |
hostnames list / элементы=string | Список выражений Jinja2, упорядоченных по приоритету, для формирования inventory_hostname. Выражение игнорируется, если результатом является пустая строка или значение None. Выражение Используйте По умолчанию: |
keyed_groups list / элементы=dictionary | Создает группы на основе значения переменной узла. Требуется список словарей, определяющих По умолчанию: |
|
default_value string добавлено в ansible-core 2.12 |
Значение по умолчанию, если значение переменной узла равно Этот параметр нельзя использовать вместе с |
|
key string |
Ключ из входного словаря, используемый для создания групп. |
|
parent_group string |
Родительская группа для группы, создаваемой по ключу. |
|
prefix string |
Имя группы, создаваемой по ключу, будет начинаться с этого префикса. По умолчанию: |
|
separator string |
Разделитель, используемый для формирования имени группы по ключу. По умолчанию: |
|
trailing_separator boolean добавлено в ansible-core 2.12 |
Задайте для этого параметра значение Этот параметр нельзя использовать вместе с Варианты:
|
leading_separator boolean добавлено в ansible-core 2.11 | Используется вместе с По умолчанию группа, создаваемая по ключу и не имеющая заданных префикса или разделителя, будет иметь имя, начинающееся с подчеркивания. Это связано с тем, что префикс по умолчанию — Задайте для этого параметра значение Если имя группы формируется на основе сопоставления, разделитель по-прежнему используется для объединения элементов. Чтобы полностью исключить разделитель из имени группы, задайте для группы, создаваемой по ключу, пустую строку в качестве разделителя. Варианты:
|
log_mode string | Родительский аргумент. |
log_path string | Родительский аргумент. |
oidc_token string добавлено в azure.azcollection 3.17.0 | Токен OpenID Connect (OIDC) (JWT), используемый для аутентификации с удостоверением рабочей нагрузки. Этот токен обменивается с Azure AD с использованием федеративного удостоверения OIDC. Полезен в системах CI (например, GitHub Actions и Azure DevOps), где платформа напрямую предоставляет токен OIDC. Также можно задать с помощью переменной окружения |
oidc_token_file_path path добавлено в azure.azcollection 3.17.0 | Путь к файлу, содержащему токен OpenID Connect (OIDC) (JWT), используемый для аутентификации с удостоверением рабочей нагрузки. Файл должен содержать только необработанный токен. Этот способ обычно используется на платформах, которые сохраняют токены OIDC в виде файлов. Также можно задать с помощью переменной окружения |
password string | Пароль пользователя Active Directory. Используйте при аутентификации с помощью пользователя Active Directory, а не субъекта-службы. |
plugin string / обязательный | указывает, что это экземпляр плагина ‘azure_rm’ Варианты:
|
profile string | Профиль безопасности из файла ~/.azure/credentials. |
secret string | Секрет клиента Azure. Используйте при аутентификации с помощью субъекта-службы. |
strict boolean | Если Поскольку в выражениях можно использовать факты, они могут быть доступны не всегда; по умолчанию такие ошибки игнорируются. Варианты:
|
subscription_id string | Идентификатор вашей подписки Azure. |
tenant string | Идентификатор клиента Azure. Используйте при аутентификации с помощью субъекта-службы. |
thumbprint string добавлено в azure.azcollection 1.14.0 | Отпечаток закрытого ключа, указанного в x509_certificate_path. Используйте при аутентификации с помощью субъекта-службы. Обязателен, если задан x509_certificate_path. |
use_extra_vars boolean добавлено в ansible-core 2.11 | Объединяет дополнительные переменные с доступными переменными для составления значений (наивысший приоритет). Варианты:
Конфигурация:
|
x509_certificate_path path добавлено в azure.azcollection 1.14.0 | Путь к сертификату X509 в формате PEM, используемому для создания субъекта-службы. Сертификат должен быть добавлен к закрытому ключу. Используйте при аутентификации с помощью субъекта-службы. |
Примечание
Перечисленные выше записи конфигурации для каждого типа записи (переменная Ansible, переменная окружения и т. д.) расположены в порядке приоритета от низкого к высокому. Например, переменная, расположенная ниже в списке, переопределит переменную, расположенную выше. Типы записей также упорядочены по приоритету от низкого к высокому. Например, запись в ansible.cfg (расположенная выше в списке) переопределяется переменной Ansible (расположенной ниже в списке).
Примечания
Примечание
- Для аутентификации в Azure можно передать параметры, задать переменные среды, использовать профиль, сохраненный в ~/.azure/credentials, или выполнить вход перед запуском задач или плейбука с помощью
az login. - Аутентификация также возможна с использованием субъекта-службы или пользователя Active Directory.
- Для аутентификации через OIDC передайте client_id, tenant и oidc_token или oidc_token_file_path либо задайте переменные среды AZURE_CLIENT_ID, AZURE_TENANT и AZURE_FEDERATED_TOKEN или AZURE_FEDERATED_TOKEN_FILE.
- Для аутентификации через субъект-службу передайте subscription_id, client_id, secret и tenant либо задайте переменные среды AZURE_SUBSCRIPTION_ID, AZURE_CLIENT_ID, AZURE_SECRET и AZURE_TENANT.
- Для аутентификации пользователя Active Directory передайте ad_user и password либо задайте в среде AZURE_AD_USER и AZURE_PASSWORD.
- Кроме того, учетные данные можно сохранить в ~/.azure/credentials. Это ini-файл, содержащий раздел [default] и следующие ключи: subscription_id, client_id, secret и tenant либо subscription_id, ad_user и password. Также можно добавить дополнительные профили. Укажите профиль, передав profile или задав в среде AZURE_PROFILE.
- На этом этапе инвентаризация еще не завершена, поэтому автоматически заполняемые группы
allиungroupedбудут отражать только то, что в них явно добавили предыдущие источники инвентаризации. - «Магические переменные» времени выполнения недоступны во время построения инвентаризации. Например,
groupsиhostvarsеще не существуют.
См. также
См. также
- Вход с помощью Azure CLI
-
Как выполнить аутентификацию с помощью команды
az login.
Примеры
plugin: azure.azcollection.azure_kql
graph_query: |-
Resources
| where type =~ 'microsoft.compute/virtualmachines'
| project vmId = tolower(tostring(id)),
inventory_hostname = name,
tags,
location,
resourceGroup,
osType = tostring(properties.storageProfile.osDisk.osType),
powerState = tostring(properties.extended.instanceView.powerState.displayStatus),
hostName = properties.osProfile.computerName,
subscription_id = subscriptionId
| join kind=inner (ResourceContainers
| where type=='microsoft.resources/subscriptions'
| extend subscription_name = name,
subscription_id = subscriptionId,
state = properties.state
| where state == 'Enabled'
| project subscription_name,
subscription_id)
on subscription_id
| project-away subscription_id1
| join (Resources
| where type =~ 'microsoft.network/networkinterfaces'
| mv-expand ipconfig=properties.ipConfigurations
| project vmId = tolower(tostring(properties.virtualMachine.id)),
privateIp = ipconfig.properties.privateIPAddress,
publicIpId = tostring(ipconfig.properties.publicIPAddress.id)
| join kind=leftouter (Resources
| where type =~ 'microsoft.network/publicipaddresses'
| project publicIpId = id, publicIp = properties.ipAddress
) on publicIpId
| project-away publicIpId, publicIpId1
| summarize privateIps = make_list(privateIp), publicIps = make_list(publicIp) by vmId
) on vmId
| project-away vmId1
| sort by inventory_hostname asc
# adds variables to each host found by this inventory plugin, whose values are the result of the associated expression
compose:
ansible_host: "(publicIps + privateIps) | first"
ansible_winrm_kerberos_hostname_override: "inventory_name + '.domain.tld'"
ansible_winrm_transport: "'ntlm' if ('AAP_managed' in tags and ('DMZ' in (tags.AAP_Managed|list) or 'Local' in (tags.AAP_Managed|list))) else 'kerberos'"
groups:
AAP_Managed: "'AAP_Managed' in (tags|list)"
ubuntu18: "'AAP_Managed' in (tags|list) and 'ubuntu18' in tags.Ansible_OS"
ubuntu20: "'AAP_Managed' in (tags|list) and 'ubuntu20' in tags.Ansible_OS"
ubuntu22: "'AAP_Managed' in (tags|list) and 'ubuntu22' in tags.Ansible_OS"
rhel7: "'AAP_Managed' in (tags|list) and 'rhel7' in tags.Ansible_OS"
rhel8: "'AAP_Managed' in (tags|list) and 'rhel8' in tags.Ansible_OS"
rhel9: "'AAP_Managed' in (tags|list) and 'rhel9' in tags.Ansible_OS"
windows2012: "'AAP_Managed' in (tags|list) and 'windows2012' in tags.Ansible_OS"
windows2016: "'AAP_Managed' in (tags|list) and 'windows2016' in tags.Ansible_OS"
windows2019: "'AAP_Managed' in (tags|list) and 'windows2019' in tags.Ansible_OS"
windows2022: "'AAP_Managed' in (tags|list) and 'windows2022' in tags.Ansible_OS"
Asia: "'AAP_managed' in (tags|list) and 'Asia' in tags.AAP_Managed"
North_America: "'AAP_managed' in (tags|list) and 'Asia' not in tags.AAP_Managed"
# change how inventory_hostname is generated. Each item is a jinja2 expression similar to hostvar_expressions.
hostnames:
- "tags.vm_name if 'vm_name' in tags"
- default_inventory_hostname + ".domain.tld" # Transfer to fqdn if you use shortnames for VMs
- default # special var that uses the default hashed name
keyed_groups:
- prefix: ""
separator: ""
key: osType
- prefix: ""
separator: ""
key: location
- prefix: ""
separator: ""
key: powerState
Ссылки на коллекцию
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/azure/azcollection/azure_kql_inventory.html