Spec-Zone.ru › Ansible

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. Значение по умолчанию latest подходит для общедоступных облаков; в будущем другие значения позволят использовать Azure Stack.

По умолчанию: "latest"

auth_source

string

добавлено в azure.azcollection 0.0.1

Определяет источник учетных данных, используемых для аутентификации.

Также можно задать с помощью переменной окружения ANSIBLE_AZURE_AUTH_SOURCE.

Если задано значение auto (по умолчанию), используется следующий порядок приоритета: параметры модуля -> env -> credential_file -> cli.

Если задано значение env, учетные данные будут прочитаны из переменных окружения.

Если задано значение credential_file, профиль будет прочитан из ~/.azure/credentials.

Если задано значение cli, учетные данные будут получены из профиля Azure CLI. Для указания идентификатора подписки, если их несколько, можно использовать subscription_id или переменную окружения AZURE_SUBSCRIPTION_ID; в противном случае будет использована подписка az cli по умолчанию.

Если задано значение msi, хост-компьютер должен быть ресурсом Azure с включенным расширением MSI. Для указания идентификатора подписки, если ресурсу предоставлен доступ к нескольким подпискам, можно использовать subscription_id или переменную окружения AZURE_SUBSCRIPTION_ID; в противном случае будет выбрана первая подписка.

Параметр msi добавлен в Ansible 2.6.

Варианты:

  • "auto" ← (по умолчанию)
  • "cli"
  • "credential_file"
  • "env"
  • "msi"

cache

boolean

Включает или отключает кэширование исходных данных инвентаря; для работы требуется настроенный плагин кэширования.

Варианты:

  • false ← (по умолчанию)
  • true

Конфигурация:

  • Запись INI:

    [inventory]
    cache = false
    
  • Переменная окружения: ANSIBLE_INVENTORY_CACHE

cache_connection

string

Данные подключения к кэшу или путь к нему; подробные сведения см. в документации плагина кэширования.

Конфигурация:

  • Записи INI:

    [defaults]
    fact_caching_connection = VALUE
    
    [inventory]
    cache_connection = VALUE
    
  • Переменная окружения: ANSIBLE_CACHE_PLUGIN_CONNECTION
  • Переменная окружения: ANSIBLE_INVENTORY_CACHE_CONNECTION

cache_plugin

string

Плагин кэширования для исходных данных инвентаря.

По умолчанию: "memory"

Конфигурация:

  • Записи INI:

    [defaults]
    fact_caching = memory
    
    [inventory]
    cache_plugin = memory
    
  • Переменная окружения: ANSIBLE_CACHE_PLUGIN
  • Переменная окружения: ANSIBLE_INVENTORY_CACHE_PLUGIN

cache_prefix

string

Префикс для файлов/таблиц плагина кэширования.

По умолчанию: "ansible_inventory_"

Конфигурация:

  • Записи INI:

    [defaults]
    fact_caching_prefix = ansible_inventory_
    
    [inventory]
    cache_prefix = ansible_inventory_
    
  • Переменная окружения: ANSIBLE_CACHE_PLUGIN_PREFIX
  • Переменная окружения: ANSIBLE_INVENTORY_CACHE_PLUGIN_PREFIX

cache_timeout

integer

Длительность хранения кэша в секундах.

По умолчанию: 3600

Конфигурация:

  • Записи INI:

    [defaults]
    fact_caching_timeout = 3600
    
    [inventory]
    cache_timeout = 3600
    
  • Переменная окружения: ANSIBLE_CACHE_PLUGIN_TIMEOUT
  • Переменная окружения: ANSIBLE_INVENTORY_CACHE_TIMEOUT

cert_validation_mode

string

добавлено в azure.azcollection 0.0.1

Управляет проверкой сертификатов для конечных точек Azure. По умолчанию все модули проверяют сертификат сервера, однако при использовании HTTPS-прокси или Azure Stack может потребоваться отключить эту проверку, передав ignore. Значение также можно задать в профиле файла учетных данных или с помощью переменной окружения AZURE_CERT_VALIDATION.

Варианты:

  • "ignore"
  • "validate"

client_id

string

Идентификатор клиента Azure. Используйте при аутентификации с помощью субъекта-службы или управляемого удостоверения (msi).

Также можно задать с помощью переменной окружения AZURE_CLIENT_ID.

cloud_environment

string

добавлено в azure.azcollection 0.0.1

Для облачных сред, отличных от общедоступного облака США: имя среды (согласно определению в Azure Python SDK, например, AzureChinaCloud, AzureUSGovernment) или URL-адрес конечной точки обнаружения метаданных (обязателен для Azure Stack). Значение также можно задать в профиле файла учетных данных или с помощью переменной окружения AZURE_CLOUD_ENVIRONMENT.

По умолчанию: "AzureCloud"

compose

dictionary

Соответствие имен переменных узлов выражениям Jinja2. Значение для каждого узла определяется результатом выражения Jinja2 (которое может ссылаться на любые существующие переменные узла на момент запуска этого плагина инвентаря).

По умолчанию: {}

disable_instance_discovery

boolean

добавлено в azure.azcollection 2.3.0

Определяет, выполняется ли обнаружение экземпляра при попытке аутентификации. Если задать значение true, обнаружение экземпляра и проверка центра полномочий будут полностью отключены. Эта возможность предназначена для сценариев, в которых конечная точка метаданных недоступна, например в частных облаках или Azure Stack. Процесс обнаружения экземпляра включает получение метаданных центра полномочий с https://login.microsoft.com/ для проверки центра полномочий. Если задать значение **True**, проверка центра полномочий будет отключена. Поэтому крайне важно убедиться, что настроенный хост центра полномочий действителен и заслуживает доверия.

Значение можно задать в профиле файла учетных данных или с помощью переменной окружения AZURE_DISABLE_INSTANCE_DISCOVERY.

Варианты:

  • false ← (по умолчанию)
  • true

fail_on_template_errors

string

Если значение равно false, ошибки шаблонов при обработке групп и фильтров игнорируются без уведомления (например, если фильтр или выражение группы ссылается на неопределенную переменную узла).

Варианты:

  • true ← (по умолчанию)
  • false

graph_query

string

Запрос к графу, который получает интересующий вас инвентарь узлов. Запрос должен возвращать поле inventory_hostname.

groups

dictionary

Соответствие имен групп выражениям Jinja2. Если выражение, указанное в соответствии, истинно, узел добавляется в группу с заданным именем.

По умолчанию: {}

hostnames

list / элементы=string

Список выражений Jinja2, упорядоченных по приоритету, для формирования inventory_hostname.

Выражение игнорируется, если результатом является пустая строка или значение None.

Выражение default принудительно включает генератор имени узла по умолчанию, если предыдущее выражение имени узла не дало допустимого имени.

Используйте default_inventory_hostname, чтобы получить значение генератора имени узла по умолчанию в любом из выражений Jinja2.

По умолчанию: ["default"]

keyed_groups

list / элементы=dictionary

Создает группы на основе значения переменной узла. Требуется список словарей, определяющих key (переменную-источник типа dictionary), prefix (префикс для нового имени группы) и, при необходимости, separator (по умолчанию _).

По умолчанию: []

default_value

string

добавлено в ansible-core 2.12

Значение по умолчанию, если значение переменной узла равно None или является пустой строкой.

Этот параметр нельзя использовать вместе с keyed_groups[].trailing_separator.

key

string

Ключ из входного словаря, используемый для создания групп.

parent_group

string

Родительская группа для группы, создаваемой по ключу.

prefix

string

Имя группы, создаваемой по ключу, будет начинаться с этого префикса.

По умолчанию: ""

separator

string

Разделитель, используемый для формирования имени группы по ключу.

По умолчанию: "_"

trailing_separator

boolean

добавлено в ansible-core 2.12

Задайте для этого параметра значение false, чтобы не добавлять keyed_groups[].separator после переменной узла, если ее значение равно None или является пустой строкой.

Этот параметр нельзя использовать вместе с keyed_groups[].default_value.

Варианты:

  • false
  • true ← (по умолчанию)

leading_separator

boolean

добавлено в ansible-core 2.11

Используется вместе с keyed_groups.

По умолчанию группа, создаваемая по ключу и не имеющая заданных префикса или разделителя, будет иметь имя, начинающееся с подчеркивания.

Это связано с тем, что префикс по умолчанию — "", а разделитель по умолчанию — "_".

Задайте для этого параметра значение false, чтобы не добавлять начальное подчеркивание (или другой разделитель), если префикс не задан.

Если имя группы формируется на основе сопоставления, разделитель по-прежнему используется для объединения элементов.

Чтобы полностью исключить разделитель из имени группы, задайте для группы, создаваемой по ключу, пустую строку в качестве разделителя.

Варианты:

  • false
  • true ← (по умолчанию)

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.

Также можно задать с помощью переменной окружения AZURE_FEDERATED_TOKEN.

oidc_token_file_path

path

добавлено в azure.azcollection 3.17.0

Путь к файлу, содержащему токен OpenID Connect (OIDC) (JWT), используемый для аутентификации с удостоверением рабочей нагрузки.

Файл должен содержать только необработанный токен.

Этот способ обычно используется на платформах, которые сохраняют токены OIDC в виде файлов.

Также можно задать с помощью переменной окружения AZURE_FEDERATED_TOKEN_FILE.

password

string

Пароль пользователя Active Directory. Используйте при аутентификации с помощью пользователя Active Directory, а не субъекта-службы.

plugin

string / обязательный

указывает, что это экземпляр плагина ‘azure_rm’

Варианты:

  • "azure_kql"
  • "azure.azcollection.azure_kql"

profile

string

Профиль безопасности из файла ~/.azure/credentials.

secret

string

Секрет клиента Azure. Используйте при аутентификации с помощью субъекта-службы.

strict

boolean

Если yes, недопустимые записи вызывают критическую ошибку; в противном случае они пропускаются, и выполнение продолжается.

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

Варианты:

  • false ← (по умолчанию)
  • true

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

Объединяет дополнительные переменные с доступными переменными для составления значений (наивысший приоритет).

Варианты:

  • false ← (по умолчанию)
  • true

Конфигурация:

  • Запись INI:

    [inventory_plugins]
    use_extra_vars = false
    
  • Переменная окружения: ANSIBLE_INVENTORY_USE_EXTRA_VARS

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

Spec-Zone.ru

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