在 Ansible 中获取 Azure 规模集 VM 的专用 IP
Posted
技术标签:
【中文标题】在 Ansible 中获取 Azure 规模集 VM 的专用 IP【英文标题】:Get private IP for Azure scale set VMs in Ansible 【发布时间】:2019-10-26 17:41:42 【问题描述】:如何在 Ansible 的 Azure 规模集中获取 VM 的私有 IP?
这些似乎都没有信息:
azure_rm_virtualmachinescaleset_facts
azure_rm_virtualmachinescalesetinstance_facts
azure_rm_virtualmachine_facts
azure_rm_subnet_facts
azure_rm_networkinterface_facts
【问题讨论】:
虚拟网络事实怎么样?它应该包含分配给连接到 vnet 的所有 IP 地址 嗯。不,但它确实提供了 [azure_virtualnetworks][subnets][0][properties][ipConfigurations] 这是一个包含实际 VMSS 实例的 NIC 接口的列表,例如“id”:“/subscriptions/60bb3a0e-150e-43f6-84cf-6c02e8506269/resourceGroups/testans_rg/providers/Microsoft.Compute/virtualMachineScaleSets/testans-worker/virtualMachines/2/networkInterfaces/testans-worker/ipConfigurations/default” 所以也许我可以以某种方式使用它吗?? 如果你迭代这些,你可能可以。也有点奇怪的实例事实不提供该信息 不,这是一条死胡同。子网和 NIC 事实都不包含这些 ID。看起来 scaleset VM 真的很特别,至少对 ansible 来说是这样。 是的,嗯,它们确实很特别,但是您应该能够获取它们的 ip。你可以使用 python sdk,例如 【参考方案1】:为了获得我的 ScaleSet 实例的 IP,我通过带有自动注册功能的 Azure 的 PrivateDNS 绕道而行。一旦机器可用,它们就会在 DNS 中更新。
代码片段:
- name: Fetch IPs from ScaleSet instances
hosts: localhost
connection: local
vars:
resource_group: "test-lbs1"
vmss_name: "vmss"
zone_name: "my.private.dns.zone"
tasks:
#############################################
# Fetch all Instances from Scaleset
#############################################
- name: List all of the instances
azure.azcollection.azure_rm_virtualmachinescalesetinstance_info:
resource_group: " resource_group "
vmss_name: " vmss_name "
register: __instances
#############################################
# Fetch IP from PrivateDNS Record
#############################################
- name: Get network interfaces
azure.azcollection.azure_rm_privatednsrecordset_info:
resource_group: " resource_group "
zone_name: " zone_name "
relative_name: " item.computer_name "
record_type: A
with_items: " __instances.instances "
register: __network_ips
- debug:
var: __network_ips
【讨论】:
以上是关于在 Ansible 中获取 Azure 规模集 VM 的专用 IP的主要内容,如果未能解决你的问题,请参考以下文章