Как получить имя и IP хоста виртуальной машины VMware?

Моя программа работает внутри виртуальной машины VMware, моя цель - получить некоторую информацию о машине, на которой размещена эта виртуальная машина.

Я уже погуглил и нашел библиотеку под названием pyVmomi.

Но я все еще не могу понять, как получить информацию, которую я хочу.

Примеры почти все касаются получения всех виртуальных машин или всех хостов, и нет очевидного способа адаптировать их для получения информации о текущей машине.


person satoru    schedule 01.02.2016    source источник
comment
На какой платформе размещена текущая виртуальная машина? Это платная версия vSphere с лицензией API?   -  person Michael Rice    schedule 02.02.2016
comment
@MichaelRice Да, у меня есть лицензия API.   -  person satoru    schedule 02.02.2016
comment
Итак, вы хотите обратиться к vSphere API, а затем получить сведения о данной виртуальной машине (на основе имени или uuid?), а сведения, которые вам нужны, — это имя хоста и IP?   -  person Michael Rice    schedule 02.02.2016
comment
@MichaelRice Программа будет работать внутри виртуальной машины, я не знаю, как получить имя или UUID текущей виртуальной машины.   -  person satoru    schedule 02.02.2016
comment
То, о чем вы просите, сбивает с толку, если не сказать больше. Но если я правильно понимаю: У вас есть vSphere. Работая в vSphere на каком-то хосте ESXi, у вас есть виртуальная машина. В этой виртуальной машине вы хотите запустить скрипт. Вы хотите, чтобы этот скрипт получал информацию о хосте ESXi, на котором в данный момент работает ваша виртуальная машина. Вам нужна информация об имени хоста ESXi и его IP-адресе?   -  person Michael Rice    schedule 02.02.2016
comment
@MichaelRice Из библиотеки pyVmomi мы можем получить объект HostSystem, из которого мы можем получить многие свойства хоста ESXi (или машины, на которой размещена моя виртуальная машина). Но я не знаю, как найти этот HostSystem во-первых.   -  person satoru    schedule 02.02.2016


Ответы (2)


Предполагая, что ваша виртуальная машина (на которой выполняется этот скрипт pyVmomi) работает под управлением какой-либо версии Linux, вы можете использовать что-то вроде dmidecode для поиска UUID.

import subprocess

from pyVim import connect

proc = subprocess.Popen(["sudo dmidecode|grep UUID|awk '{print $2}'"], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
uuid = out[:-1]

SI = None
SI = connect.SmartConnect(host=ARGS.host,
                          user=ARGS.user,
                          pwd=ARGS.password,
                          port=ARGS.port)

VM = SI.content.searchIndex.FindByUuid(None, uuid,
                                       True,
                                       False)

HOST = VM.runtime.host

print "Host name: {}".format(HOST.name)

Что это будет делать, так это выполнить системную команду в поле Linux, чтобы найти UUID. VMWare использует UUID BIOS в качестве UUID по умолчанию, поэтому здесь должен работать dmidecode. Затем он подключится к заданному хосту vSphere (в этом примере я предполагаю vCenter, но хост ESXi должен дать здесь те же результаты). Затем он будет искать в инвентаре виртуальную машину с совпадающим UUID. Оттуда он вызывает метод runtime.host, который возвращает HostSystem для виртуальной машины. Обратите внимание, что из-за кластеризации этот хост может измениться.

person Michael Rice    schedule 02.02.2016
comment
Перейдите по этой ссылке [1] [1] github.com/vmware/pyvmomi /blob/master/sample/getallvms.py - person chinmay; 14.07.2017

Это должно помочь, установите pynetinfo и передайте устройство функции

#!/usr/bin/python
import netinfo

def get_route( interface ):
    r = []
    for routes in netinfo.get_routes():
        if routes[ 'dev' ] == interface:
            r.append( routes[ 'dest' ] )
    return r

print get_route( 'wlan0' )
person James John    schedule 01.02.2016