Получение частных IP-адресов масштабируемого набора виртуальных машин Azure через Azure REST API

Можно ли получить список частных IP-адресов экземпляра масштабируемого набора виртуальных машин Azure через Azure REST API?

Похоже, что Microsoft не публикует объекты конфигурации IP VMSS с помощью обычных методов получения списка «ipConfigurations».

Вот некоторые соответствующие страницы документации API:

https://docs.microsoft.com/en-us/rest/api/compute/virtualmachinescalesets/listallhttps://docs.microsoft.com/en-us/rest/api/compute/virtualmachinescalesets/gethttps://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/listall

В частности, это дает вам только IP-конфигурацию виртуальных машин, а не VMSS: https://docs.microsoft.com/en-us/rest/api/virtualnetwork/networkinterfaces/listall

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 448
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вот как получить список частных IP-адресов для виртуальных машин и экземпляров VMSS через Ruby:

require 'openssl'

require 'azure_mgmt_network'
require 'azure_mgmt_compute'
require 'awesome_print'

options = {
    tenant_id: '<tenant_id>',
    client_id: '<client_id>',
    client_secret: '<client_secret>',
    subscription_id: '<subscription_id>'
}

def net_interface_to_ip_mapping(client)
  network_interfaces = client.network_interfaces.list_all
  pairs = network_interfaces.collect { |ni| [ni.id.split('/').last, ni.ip_configurations.collect { |ip| ip.private_ipaddress }.flatten.compact[0] ] }
  [network_interfaces, pairs]
end

def net_interface_to_vm(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_ip_map = ni.collect(&:ip_configurations).flatten.compact.collect { |ipconf| [ipconf&.id, ipconf&.private_ipaddress] }.to_h
  [ipconf_to_host, conf_ip_map]
end

puts "*** Network Interfaces"
puts
client = Azure::Network::Profiles::Latest::Mgmt::Client.new(options)
ni, pairs = net_interface_to_ip_mapping(client)
pairs.to_h.each do |ni, ip|
  puts "  #{ni}: #{ip}"
end

puts
puts "*** Virtual Machines"
puts

ipconf_to_host, conf_ip_map = net_interface_to_vm(ni)
ipconf_to_host.each do |ipconf, host|
  ni_name = ipconf.split('/')[-3]
  puts "  #{host || '#  ' + ni_name} - #{conf_ip_map[ipconf]}"
end

puts
puts "*** Virtual Machine Scale Sets"
puts

vns = client.virtual_networks.list_all
vns.each do |vn|
  resource_group = vn.id.split('/')[4]
  puts
  vn_details = client.virtual_networks.get(resource_group, vn.name,  expand: 'subnets/ipConfigurations')
  ip_configs = vn_details&.subnets&.collect { |subnet| subnet&.ip_configurations&.collect { |ip| [ip&.id, ip&.name, ip&.private_ipaddress] } }.compact
  vmss_ipconf = ip_configs.collect { |subnet| subnet.select { |ipconf| ipconf[0].include?('/virtualMachineScaleSets/') } }
  vmss_ipconf.each do |subnet|
    subnet.each do |ipconf|
      vmss_name = ipconf[0].split('/')[8]
      vmss_instance = ipconf[0].split('/')[10]
      puts "#{vmss_name} ##{vmss_instance} - #{ipconf[2]}"
    end
  end
end

В интерфейсе командной строки Azure есть az vmss nic список, который возвращает все сетевые интерфейсы в масштабируемом наборе виртуальных машин. Глядя на результаты, есть

{
  "dnsSettings": {
    ...
  },
  "ipConfigurations": [
    {
      privateIpAddress: "..."
    }
   ]
}

Вы можете использовать синтаксис --query, чтобы получить все частные IP-адреса.

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

вы можете получить имена хостов виртуальных машин, которые будут преобразованы в IP-адреса благодаря Azure DNS.

$ 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

Другие вопросы по теме