通过Azure REST API获取Azure VM规模集专用IP地址

通过Azure REST API获取Azure VM规模集专用IP地址,rest,azure,Rest,Azure,你能通过Azure REST API获得Azure VM规模集实例私有IP地址列表吗 Microsoft似乎没有按照检索“IPConfiguration”列表的常规方法发布VMS IP配置对象 以下是一些相关的API文档页面: 特别是,这只提供VM的IP配置,而不是VMSES: 以下是如何通过Ruby获取虚拟机和虚拟机实例的私有IP地址列表: 需要“openssl” 需要“azure管理网络” 需要“azure\u管理\u计算” 需要“绝妙打印” 选项={ 租户id:“”, 客户端id:“”

你能通过Azure REST API获得Azure VM规模集实例私有IP地址列表吗

Microsoft似乎没有按照检索“IPConfiguration”列表的常规方法发布VMS IP配置对象

以下是一些相关的API文档页面:

特别是,这只提供VM的IP配置,而不是VMSES:

以下是如何通过Ruby获取虚拟机和虚拟机实例的私有IP地址列表:

需要“openssl”
需要“azure管理网络”
需要“azure\u管理\u计算”
需要“绝妙打印”
选项={
租户id:“”,
客户端id:“”,
客户端密码:“”,
订阅\u id:'
}
def网络接口到ip映射(客户端)
网络接口=client.network\u interfaces.list\u all
pairs=network|interfaces.collect{ni|[ni.id.split('/')。最后,ni.ip|u configurations.collect{ip|ip.private|u ipaddress}.flatte.compact[0]}
[网络接口,对]
结束
def网络接口到虚拟机(ni)
interface_vm_set=ni.collect{prof|[prof.id,prof.virtual_machine,prof.ip_configurations.collect(&:id)])
ipconf_to_host=interface_vm_set.collect{| x |[x[2][0],x[1]&.id&.split('/')&.last]}.to_h
conf|u ip_map=ni.collect(&:ip_配置).flatte.compact.collect{| ipconf |[ipconf&.id,ipconf&.private_ipaddress]}.to|h
[ipconf到主机,配置ip映射]
结束
放置“***网络接口”
放
client=Azure::Network::Profiles::Latest::Mgmt::client.new(选项)
ni,pairs=网络接口到ip映射(客户端)
配对。至h.每个do | ni,ip|
放置“{ni}:{ip}”
结束
放
放置“***虚拟机”
放
ipconf到主机,conf\u ip\u map=net\u接口到虚拟机(ni)
ipconf_到主机。每个do|ipconf,主机|
ni_name=ipconf.split('/')[-3]
放置“#{host | |'#'+ni_name}-#{conf_ip_map[ipconf]}”
结束
放
放置“***虚拟机规模集”
放
vns=client.virtual_networks.list_all
vns.每个都做| vn|
资源组=vn.id.split('/')[4]
放
vn_details=client.virtual_networks.get(资源组,vn.name,展开:“子网/ipConfigurations”)
ip|u configs=vn|u详细信息和.subnets和.collect{| subnet | subnet和.ip|u配置和.collect{| ip |[ip和.id,ip和.name,ip和.private|ipaddress]}
vmss|u ipconf=ip|u configs.collect{| subnet | subnet.select{| ipconf | ipconf[0]。包括?('/virtualmachinescaleets/')}
VMS_ipconf.each do|子网|
subnet.each do | ipconf|
vmss_name=ipconf[0]。拆分('/')[8]
vmss_instance=ipconf[0]。拆分('/')[10]
将“#{vms_name}##{vms_instance}-#{ipconf[2]}”
结束
结束
结束

以下是如何通过Ruby获取虚拟机和虚拟机实例的私有IP地址列表:

需要“openssl”
需要“azure管理网络”
需要“azure\u管理\u计算”
需要“绝妙打印”
选项={
租户id:“”,
客户端id:“”,
客户端密码:“”,
订阅\u id:'
}
def网络接口到ip映射(客户端)
网络接口=client.network\u interfaces.list\u all
pairs=network|interfaces.collect{ni|[ni.id.split('/')。最后,ni.ip|u configurations.collect{ip|ip.private|u ipaddress}.flatte.compact[0]}
[网络接口,对]
结束
def网络接口到虚拟机(ni)
interface_vm_set=ni.collect{prof|[prof.id,prof.virtual_machine,prof.ip_configurations.collect(&:id)])
ipconf_to_host=interface_vm_set.collect{| x |[x[2][0],x[1]&.id&.split('/')&.last]}.to_h
conf|u ip_map=ni.collect(&:ip_配置).flatte.compact.collect{| ipconf |[ipconf&.id,ipconf&.private_ipaddress]}.to|h
[ipconf到主机,配置ip映射]
结束
放置“***网络接口”
放
client=Azure::Network::Profiles::Latest::Mgmt::client.new(选项)
ni,pairs=网络接口到ip映射(客户端)
配对。至h.每个do | ni,ip|
放置“{ni}:{ip}”
结束
放
放置“***虚拟机”
放
ipconf到主机,conf\u ip\u map=net\u接口到虚拟机(ni)
ipconf_到主机。每个do|ipconf,主机|
ni_name=ipconf.split('/')[-3]
放置“#{host | |'#'+ni_name}-#{conf_ip_map[ipconf]}”
结束
放
放置“***虚拟机规模集”
放
vns=client.virtual_networks.list_all
vns.每个都做| vn|
资源组=vn.id.split('/')[4]
放
vn_details=client.virtual_networks.get(资源组,vn.name,展开:“子网/ipConfigurations”)
ip|u configs=vn|u详细信息和.subnets和.collect{| subnet | subnet和.ip|u配置和.collect{| ip |[ip和.id,ip和.name,ip和.private|ipaddress]}
vmss|u ipconf=ip|u configs.collect{| subnet | subnet.select{| ipconf | ipconf[0]。包括?('/virtualmachinescaleets/')}
VMS_ipconf.each do|子网|
subnet.each do | ipconf|
vmss_name=ipconf[0]。拆分('/')[8]
vmss_instance=ipconf[0]。拆分('/')[10]
将“#{vms_name}##{vms_instance}-#{ipconf[2]}”
结束
结束
结束

查看Azure CLI,它返回虚拟机规模集中的所有网络接口。从结果来看,存在着一些问题

{
  "dnsSettings": {
    ...
  },
  "ipConfigurations": [
    {
      privateIpAddress: "..."
    }
   ]
}
您可以使用--query语法获取所有私有IP

az vmss nic list -g <resource_group> --vmss-name <vmss_name> --query [].{ip:ipConfigurations[0].privateIpAddress} -o tsv
az-vms-nic-list-g--vms-name--query[.{ip:ipConfigurations[0].privateIpAddress}-o tsv

查看Azure CLI,它返回虚拟机规模集中的所有网络接口。从结果来看,存在着一些问题

{
  "dnsSettings": {
    ...
  },
  "ipConfigurations": [
    {
      privateIpAddress: "..."
    }
   ]
}
您可以使用--query语法获取所有私有IP

az vmss nic list -g <resource_group> --vmss-name <vmss_name> --query [].{ip:ipConfigurations[0].privateIpAddress} -o tsv
az-vms-nic-list-g--vms-name--query[.{ip:ipConfigurations[0].privateIpAddress}-o tsv

借助Azure DNS,您可以获得将解析为IP的虚拟机主机名

$ curl -H "Authorization: Bearer $JWT_TOCKEN"  -sf https://management.azure.com/subscriptions/${subscription_id}/resourceGroups/${resourc_group}/providers/Microsoft.Compute/virtualMachineScaleSets/${scale_set}/virtualMachines?api-version=2018-10-01 |  jq '.value[].properties.osProfile.computerName'
"influx-meta000000"
"influx-meta000001"

$ getent hosts influx-meta000001
10.120.10.7     influx-meta000001.l55qt5nuiezudgvyxzyvtbihmf.gx.internal.cloudapp.net

由于Azure DNS,您可以获得将解析为IPs的VM主机名

$ curl -H "Authorization: Bearer $JWT_TOCKEN"  -sf https://management.azure.com/subscriptions/${subscription_id}/resourceGroups/${resourc_group}/providers/Microsoft.Compute/virtualMachineScaleSets/${scale_set}/virtualMachines?api-version=2018-10-01 |  jq '.value[].properties.osProfile.computerName'
"influx-meta000000"
"influx-meta000001"

$ getent hosts influx-meta000001
10.120.10.7     influx-meta000001.l55qt5nuiezudgvyxzyvtbihmf.gx.internal.cloudapp.net