azure.azcollection.azure_rm 清单 – Azure Resource Manager 清单插件

注意

此清单插件是 azure.azcollection 集合(版本 3.1.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了这个集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install azure.azcollection。您需要更多要求才能使用此清单插件,请参阅 要求 了解详细信息。

要在 playbook 中使用它,请指定:azure.azcollection.azure_rm

概要

  • 从 Azure Resource Manager 查询 VM 详细信息

  • 需要一个名称以“azure_rm.(yml|yaml)”结尾的 YAML 配置文件

  • 默认情况下,将 ansible_host 设置为找到的第一个公共 IP 地址(优先选择主 NIC)。如果未找到公共 IP,则为第一个私有 IP(也优先选择主 NIC)。可以通过 hostvar_expressions 覆盖默认值;请参阅示例。

要求

以下要求需要在执行此清单的本地控制器节点上满足。

  • python >= 2.7

  • 执行此模块的主机必须通过 galaxy 安装 azure.azcollection 集合

  • 必须通过 pip 在执行来自 azure.azcollection 的模块的主机上安装集合的 requirements.txt 中列出的所有 python 包

  • 完整的安装说明可以在 https://galaxy.ansible.com/azure/azcollection 中找到

参数

参数

注释

ad_user

字符串

Active Directory 用户名。当使用 Active Directory 用户而不是服务主体进行身份验证时使用。

adfs_authority_url

字符串

在 azure.azcollection 0.0.1 中添加

Azure AD 授权 URL。当使用用户名/密码进行身份验证,并且您拥有自己的 ADFS 授权时使用。

api_profile

字符串

在 azure.azcollection 0.0.1 中添加

选择与 Azure 服务通信时使用的 API 配置文件。默认值 latest 适用于公共云;未来的值将允许与 Azure Stack 一起使用。

默认: "latest"

auth_source

字符串

在 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 来标识订阅 ID,否则将使用默认的 az cli 订阅。

当设置为 msi 时,主机必须是启用了 MSI 扩展的 Azure 资源。如果资源被授予对多个订阅的访问权限,则可以使用 subscription_id 或环境变量 AZURE_SUBSCRIPTION_ID 来标识订阅 ID,否则将选择第一个订阅。

msi 已在 Ansible 2.6 中添加。

选择

  • "auto" ← (默认)

  • "cli"

  • "credential_file"

  • "env"

  • "msi"

batch_fetch

字符串

为了提高性能,使用不受支持的批处理 API 获取结果。禁用 batch_fetch 会使用慢得多的串行获取,导致更多往返。通常仅对故障排除有用。

默认: true

cert_validation_mode

字符串

在 azure.azcollection 0.0.1 中添加

控制 Azure 端点的证书验证行为。默认情况下,所有模块都会验证服务器证书,但当使用 HTTPS 代理时,或针对 Azure Stack 时,可能需要通过传递 ignore 来禁用此行为。也可以通过凭据文件配置文件或 AZURE_CERT_VALIDATION 环境变量设置。

选择

  • "ignore"

  • "validate"

client_id

字符串

Azure 客户端 ID。在使用服务主体或托管标识 (msi) 进行身份验证时使用。

也可以通过 AZURE_CLIENT_ID 环境变量进行设置。

cloud_environment

字符串

在 azure.azcollection 0.0.1 中添加

对于美国公共云以外的云环境,使用环境名称(由 Azure Python SDK 定义,例如 AzureChinaCloudAzureUSGovernment),或元数据发现终结点 URL(Azure Stack 需要)。也可以通过凭据文件配置文件或 AZURE_CLOUD_ENVIRONMENT 环境变量进行设置。

默认值: "AzureCloud"

compose

字典

从 Jinja2 表达式创建变量。

默认值: {}

conditional_groups

字符串

组名称到 Jinja2 表达式的映射。当映射的表达式为 true 时,主机将添加到指定组。

default_host_filters

字符串

除了 exclude_host_filters 中的条件之外,默认应用的一组过滤器,用于排除已关闭电源和未完全配置的主机。如果需要包含处于这些状态的主机,请将此设置为不同的值或空列表。

默认值: ["powerstate != \"running\"", "provisioning_state != \"succeeded\""]

disable_instance_discovery

布尔值

在 azure.azcollection 2.3.0 中添加

确定在尝试进行身份验证时是否执行实例发现。将其设置为 true 将完全禁用实例发现和授权验证。此功能旨在用于无法访问元数据终结点的情况,例如在私有云或 Azure Stack 中。实例发现过程包括从 https://login.microsoft.com/ 检索授权元数据以验证授权。通过将此设置为 **True**,将禁用授权验证。因此,必须确保配置的授权主机有效且可信。

通过凭据文件配置文件或 AZURE_DISABLE_INSTANCE_DISCOVERY 环境变量进行设置。

选择

  • false ← (默认)

  • true

exclude_host_filters

字符串

使用 Jinja2 条件表达式列表从清单中排除主机。将针对每个主机评估列表中的每个表达式;当表达式为 true 时,该主机将从清单中排除。

默认值: []

fail_on_template_errors

字符串

如果为 false,则在组和筛选器处理期间发生的模板失败将被静默忽略(例如,如果筛选器或组表达式引用了未定义的主机变量)

选择

  • true ← (默认)

  • false

groups

字典

根据 Jinja2 条件将主机添加到组。

默认值: {}

hostnames

列表 / 元素=字符串

用于组成 inventory_hostname 的 Jinja2 表达式列表(按优先级排序)。

如果结果为空字符串或 None 值,则忽略表达式。

默认情况下,inventory_hostname 基于 VM 主机名生成,以保证全局唯一。有关默认值的更多详细信息,请参阅 plain_host_names

如果之前的任何主机名表达式没有生成有效的主机名,则 default 表达式将强制使用默认主机名生成器。

在任何 Jinja2 表达式中,使用 default_inventory_hostname 来访问默认主机名生成器的值。

默认值: ["default"]

hostvar_expressions

字符串

主机变量名称到 Jinja2 表达式的映射。每个主机的值都是 Jinja2 表达式的结果(该表达式可以引用此清单插件运行时任何主机现有的变量)。

include_hcivm_resource_groups

字符串

用于搜索 Azure StackHCI 虚拟机的资源组名称列表。“*”将包含订阅中的所有资源组。

默认值: []

include_host_filters

字符串

使用 Jinja2 条件表达式列表从清单中包含主机。将针对每个主机评估列表中的每个表达式;当表达式为 true 时,该主机将包含在清单中,默认情况下所有主机都包含在清单中。

默认值: [true]

include_vm_resource_groups

字符串

用于搜索虚拟机的资源组名称列表。“*”将包含订阅中的所有资源组。也可以通过 ANSIBLE_AZURE_VM_RESOURCE_GROUPS 环境变量设置以逗号分隔的资源组名称。

默认值: ["*"]

include_vmss_resource_groups

字符串

用于搜索虚拟机规模集 (VMSS) 的资源组名称列表。“*”将包含订阅中的所有资源组。

默认值: []

keyed_groups

列表 / 元素=字典

基于主机变量的值创建组。需要一个字典列表,定义 key (源字典类型变量)、prefix (用于新组名称的前缀),以及可选的 separator (默认为 _

默认值: []

default_value

字符串

在 ansible-core 2.12 中添加

当主机变量的值为空字符串时的默认值。

此选项与 keyed_groups[].trailing_separator 互斥。

key

字符串

用于生成组的输入字典中的键

parent_group

字符串

键控组的父组

prefix

字符串

键控组名称将以此前缀开头

默认值: ""

separator

字符串

用于构建键控组名称的分隔符

默认值: "_"

trailing_separator

布尔值

在 ansible-core 2.12 中添加

将此选项设置为 False 可在主机变量的值为空字符串时省略主机变量后的 keyed_groups[].separator

此选项与 keyed_groups[].default_value 互斥。

选择

  • false

  • true ← (默认)

leading_separator

布尔值

在 ansible-core 2.11 中添加

与 keyed_groups 结合使用。

默认情况下,没有提供前缀或分隔符的键控组的名称将以下划线开头。

这是因为默认前缀为 "",默认分隔符为 "_"。

如果没有给定前缀,则将此选项设置为 False 可省略前导下划线(或其他分隔符)。

如果组名称是从映射派生的,则仍使用分隔符来连接各项。

要完全不在组名称中使用分隔符,请将键控组的分隔符设置为空字符串。

选择

  • false

  • true ← (默认)

log_mode

字符串

父参数。

log_path

字符串

父参数。

password

字符串

Active Directory 用户密码。当使用 Active Directory 用户而不是服务主体进行身份验证时使用。

plain_host_names

布尔值

在 azure.azcollection 0.0.1 中添加

默认情况下,此插件将使用全局唯一的主机名。此选项允许您覆盖该设置,并使用与旧清单脚本命名匹配的名称。

这不是默认设置,因为这些名称并非真正唯一,并且可能与其他主机冲突。默认行为将在主机名末尾添加额外的哈希,以防止此类冲突。

选择

  • false ← (默认)

  • true

plugin

字符串 / 必需

将此标记为“azure_rm”插件的实例

选择

  • "azure_rm"

  • "azure.azcollection.azure_rm"

profile

字符串

在 ~/.azure/credentials 文件中找到的安全配置文件。

secret

字符串

Azure 客户端密钥。当使用服务主体进行身份验证时使用。

strict

布尔值

如果为 yes,则使无效条目成为致命错误,否则跳过并继续。

由于可以在表达式中使用事实,因此它们可能并不总是可用,并且默认情况下我们会忽略这些错误。

选择

  • false ← (默认)

  • true

subscription_id

字符串

您的 Azure 订阅 ID。

tenant

字符串

Azure 租户 ID。当使用服务主体进行身份验证时使用。

thumbprint

字符串

在 azure.azcollection 1.14.0 中添加

x509_certificate_path 中指定的私钥的指纹。

当使用服务主体进行身份验证时使用。

如果定义了 x509_certificate_path,则为必需项。

use_contrib_script_compatible_sanitization

布尔值

在 azure.azcollection 0.0.1 中添加

默认情况下,此插件使用常规组名称清理来创建安全且可用于 Ansible 的组名称。此选项允许您覆盖该设置,以尝试从旧的清单脚本迁移,并匹配当脚本的 replace_dash_in_groups 选项设置为 false 时组的清理。要使用构造的组复制 replace_dash_in_groups = true 的行为,您需要通过 regex_replace 过滤器将这些条目的连字符替换为下划线。

为此,您还应该关闭 TRANSFORM_INVALID_GROUP_CHARS 设置,否则核心引擎将只使用顶部的标准清理。

这不是默认设置,因为此类名称会破坏某些功能,因为并非所有字符都是有效的 Python 标识符,最终将组名称用作标识符。

选择

  • false ← (默认)

  • true

use_extra_vars

布尔值

在 ansible-core 2.11 中添加

将额外的变量合并到可用于组合的变量中(最高优先级)。

选择

  • false ← (默认)

  • true

配置

x509_certificate_path

路径

在 azure.azcollection 1.14.0 中添加

用于以 PEM 格式创建服务主体的 X509 证书的路径。

证书必须附加到私钥。

当使用服务主体进行身份验证时使用。

注释

注意

  • 对于使用 Azure 进行身份验证,您可以传递参数、设置环境变量、使用存储在 ~/.azure/credentials 中的配置文件,或者在使用 az login 运行任务或 playbook 之前登录。

  • 也可以使用服务主体或 Active Directory 用户进行身份验证。

  • 要通过服务主体进行身份验证,请传递 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 来指定配置文件。

另请参阅

另请参阅

使用 Azure CLI 登录

如何使用 az login 命令进行身份验证。

示例

# The following host variables are always available:
# public_ipv4_addresses: all public IP addresses, with the primary IP config from the primary NIC first
# public_dns_hostnames: all public DNS hostnames, with the primary IP config from the primary NIC first
# private_ipv4_addresses: all private IP addressses, with the primary IP config from the primary NIC first
# id: the VM's Azure resource ID, eg /subscriptions/00000000-0000-0000-1111-1111aaaabb/resourceGroups/my_rg/providers/Microsoft.Compute/virtualMachines/my_vm
# location: the VM's Azure location, eg 'westus', 'eastus'
# name: the VM's resource name, eg 'myvm'
# os_profile: The VM OS properties, a dictionary, only system is currently available, eg 'os_profile.system not in ['linux']'
# powerstate: the VM's current power state, eg: 'running', 'stopped', 'deallocated'
# provisioning_state: the VM's current provisioning state, eg: 'succeeded'
# tags: dictionary of the VM's defined tag values
# resource_type: the VM's resource type, eg: 'Microsoft.Compute/virtualMachine', 'Microsoft.Compute/virtualMachineScaleSets/virtualMachines',
# 'microsoft.azurestackhci/virtualmachineinstances'
# vmid: the VM's internal SMBIOS ID, eg: '36bca69d-c365-4584-8c06-a62f4a1dc5d2'
# vmss: if the VM is a member of a scaleset (vmss), a dictionary including the id and name of the parent scaleset
# availability_zone: availability zone in which VM is deployed, eg '1','2','3'
# creation_time: datetime object of when the VM was created, eg '2023-07-21T09:30:30.4710164+00:00'
#
# The following host variables are sometimes available:
# computer_name: the Operating System's hostname. Will not be available if azure agent is not available and picking it up.
# The following host variables are available for Azure Stack HCI vms:
# customLocation: the azure arc custom location.
# virtual_machine_memoryMB: RAM allowed (static)
# virtual_machine_processors: number of vCPUs


# sample 'myazuresub.azure_rm.yaml'

# required for all azure_rm inventory plugin configs
plugin: azure.azcollection.azure_rm

# forces this plugin to use a CLI auth session instead of the automatic auth source selection (eg, prevents the
# presence of 'ANSIBLE_AZURE_RM_X' environment variables from overriding CLI auth)
auth_source: cli

# fetches VMs from an explicit list of resource groups instead of default all (- '*')
include_vm_resource_groups:
    - myrg1
    - myrg2

# fetches VMs from VMSSs in all resource groups (defaults to no VMSS fetch)
include_vmss_resource_groups:
    - '*'

# fetches VMs from Azure StackHCI in specific resource groups (defaults to no HCI vm fetch)
include_hcivm_resource_groups:
    - myrg1

# places a host in the named group if the associated condition evaluates to true
conditional_groups:
    # since this will be true for every host, every host sourced from this inventory plugin config will be in the
    # group 'all_the_hosts'
    all_the_hosts: true
    # if the VM's "name" variable contains "dbserver", it will be placed in the 'db_hosts' group
    db_hosts: "'dbserver' in name"

# adds variables to each host found by this inventory plugin, whose values are the result of the associated expression
hostvar_expressions:
    my_host_var:
    # A statically-valued expression has to be both single and double-quoted, or use escaped quotes, since the outer
    # layer of quotes will be consumed by YAML. Without the second set of quotes, it interprets 'staticvalue' as a
    # variable instead of a string literal.
    some_statically_valued_var: "'staticvalue'"
    # overrides the default ansible_host value with a custom Jinja2 expression, in this case, the first DNS hostname, or
    # if none are found, the first public IP address.
    ansible_host: (public_dns_hostnames + public_ipv4_addresses) | first

# change how inventory_hostname is generated. Each item is a jinja2 expression similar to hostvar_expressions.
hostnames:
    - tags.vm_name
    - default_inventory_hostname + ".domain.tld" # Transfer to fqdn if you use shortnames for VMs
    - default  # special var that uses the default hashed name

# places hosts in dynamically-created groups based on a variable value.
keyed_groups:
# places each host in a group named 'tag_(tag name)_(tag value)' for each tag on a VM.
    - prefix: tag
      key: tags
# places each host in a group named 'azure_loc_(location name)', depending on the VM's location
    - prefix: azure_loc
      key: location
# places host in a group named 'some_tag_X' using the value of the 'sometag' tag on a VM as X, and defaulting to the
# value 'none' (eg, the group 'some_tag_none') if the 'sometag' tag is not defined for a VM.
    - prefix: some_tag
      key: tags.sometag | default('none')

# excludes a host from the inventory when any of these expressions is true, can refer to any vars defined on the host
exclude_host_filters:
    # excludes hosts in the eastus region
    - location in ['eastus']
    - tags['tagkey'] is defined and tags['tagkey'] == 'tagvalue'
    - tags['tagkey2'] is defined and tags['tagkey2'] == 'tagvalue2'
    # excludes hosts that are powered off
    - powerstate != 'running'

# includes a host to the inventory when any of these expressions is true, can refer to any vars defined on the host
include_host_filters:
    # includes hosts that in the eastus region and power on
    - location in ['eastus'] and powerstate == 'running'
    # includes hosts in the eastus region and power on OR includes hosts in the eastus2 region and tagkey value is tagvalue
    - location in ['eastus'] and powerstate == 'running'
    - location in ['eastus2'] and tags['tagkey'] is defined and tags['tagkey'] == 'tagvalue'

提示

每个条目类型的配置条目都具有从低到高的优先级顺序。例如,列表中较低的变量将覆盖较高的变量。