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 中找到
参数
参数 |
注释 |
---|---|
Active Directory 用户名。当使用 Active Directory 用户而不是服务主体进行身份验证时使用。 |
|
Azure AD 授权 URL。当使用用户名/密码进行身份验证,并且您拥有自己的 ADFS 授权时使用。 |
|
选择与 Azure 服务通信时使用的 API 配置文件。默认值 默认: |
|
控制用于身份验证的凭据的来源。 也可以通过 当设置为 当设置为 当设置为 当设置为 当设置为
选择
|
|
为了提高性能,使用不受支持的批处理 API 获取结果。禁用 默认: |
|
控制 Azure 端点的证书验证行为。默认情况下,所有模块都会验证服务器证书,但当使用 HTTPS 代理时,或针对 Azure Stack 时,可能需要通过传递 选择
|
|
Azure 客户端 ID。在使用服务主体或托管标识 (msi) 进行身份验证时使用。 也可以通过 |
|
对于美国公共云以外的云环境,使用环境名称(由 Azure Python SDK 定义,例如 默认值: |
|
从 Jinja2 表达式创建变量。 默认值: |
|
组名称到 Jinja2 表达式的映射。当映射的表达式为 true 时,主机将添加到指定组。 |
|
除了 默认值: |
|
确定在尝试进行身份验证时是否执行实例发现。将其设置为 true 将完全禁用实例发现和授权验证。此功能旨在用于无法访问元数据终结点的情况,例如在私有云或 Azure Stack 中。实例发现过程包括从 https://login.microsoft.com/ 检索授权元数据以验证授权。通过将此设置为 **True**,将禁用授权验证。因此,必须确保配置的授权主机有效且可信。 通过凭据文件配置文件或 选择
|
|
使用 Jinja2 条件表达式列表从清单中排除主机。将针对每个主机评估列表中的每个表达式;当表达式为 true 时,该主机将从清单中排除。 默认值: |
|
如果为 false,则在组和筛选器处理期间发生的模板失败将被静默忽略(例如,如果筛选器或组表达式引用了未定义的主机变量) 选择
|
|
根据 Jinja2 条件将主机添加到组。 默认值: |
|
用于组成 inventory_hostname 的 Jinja2 表达式列表(按优先级排序)。 如果结果为空字符串或 None 值,则忽略表达式。 默认情况下,inventory_hostname 基于 VM 主机名生成,以保证全局唯一。有关默认值的更多详细信息,请参阅 如果之前的任何主机名表达式没有生成有效的主机名,则 在任何 Jinja2 表达式中,使用 默认值: |
|
主机变量名称到 Jinja2 表达式的映射。每个主机的值都是 Jinja2 表达式的结果(该表达式可以引用此清单插件运行时任何主机现有的变量)。 |
|
用于搜索 Azure StackHCI 虚拟机的资源组名称列表。“*”将包含订阅中的所有资源组。 默认值: |
|
使用 Jinja2 条件表达式列表从清单中包含主机。将针对每个主机评估列表中的每个表达式;当表达式为 true 时,该主机将包含在清单中,默认情况下所有主机都包含在清单中。 默认值: |
|
用于搜索虚拟机的资源组名称列表。“*”将包含订阅中的所有资源组。也可以通过 默认值: |
|
用于搜索虚拟机规模集 (VMSS) 的资源组名称列表。“*”将包含订阅中的所有资源组。 默认值: |
|
基于主机变量的值创建组。需要一个字典列表,定义 默认值: |
|
当主机变量的值为空字符串时的默认值。 此选项与 |
|
用于生成组的输入字典中的键 |
|
键控组的父组 |
|
键控组名称将以此前缀开头 默认值: |
|
用于构建键控组名称的分隔符 默认值: |
|
将此选项设置为 此选项与 选择
|
|
与 keyed_groups 结合使用。 默认情况下,没有提供前缀或分隔符的键控组的名称将以下划线开头。 这是因为默认前缀为 "",默认分隔符为 "_"。 如果没有给定前缀,则将此选项设置为 False 可省略前导下划线(或其他分隔符)。 如果组名称是从映射派生的,则仍使用分隔符来连接各项。 要完全不在组名称中使用分隔符,请将键控组的分隔符设置为空字符串。 选择
|
|
父参数。 |
|
父参数。 |
|
Active Directory 用户密码。当使用 Active Directory 用户而不是服务主体进行身份验证时使用。 |
|
默认情况下,此插件将使用全局唯一的主机名。此选项允许您覆盖该设置,并使用与旧清单脚本命名匹配的名称。 这不是默认设置,因为这些名称并非真正唯一,并且可能与其他主机冲突。默认行为将在主机名末尾添加额外的哈希,以防止此类冲突。 选择
|
|
将此标记为“azure_rm”插件的实例 选择
|
|
在 ~/.azure/credentials 文件中找到的安全配置文件。 |
|
Azure 客户端密钥。当使用服务主体进行身份验证时使用。 |
|
如果为 由于可以在表达式中使用事实,因此它们可能并不总是可用,并且默认情况下我们会忽略这些错误。 选择
|
|
您的 Azure 订阅 ID。 |
|
Azure 租户 ID。当使用服务主体进行身份验证时使用。 |
|
x509_certificate_path 中指定的私钥的指纹。 当使用服务主体进行身份验证时使用。 如果定义了 x509_certificate_path,则为必需项。 |
|
默认情况下,此插件使用常规组名称清理来创建安全且可用于 Ansible 的组名称。此选项允许您覆盖该设置,以尝试从旧的清单脚本迁移,并匹配当脚本的 为此,您还应该关闭 TRANSFORM_INVALID_GROUP_CHARS 设置,否则核心引擎将只使用顶部的标准清理。 这不是默认设置,因为此类名称会破坏某些功能,因为并非所有字符都是有效的 Python 标识符,最终将组名称用作标识符。 选择
|
|
将额外的变量合并到可用于组合的变量中(最高优先级)。 选择
配置
|
|
用于以 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'
提示
每个条目类型的配置条目都具有从低到高的优先级顺序。例如,列表中较低的变量将覆盖较高的变量。