Получение фактически используемого (выделенного) дискового пространства экземпляра в vmware с помощью pyvmomi

Недавно я начал использовать pyvmomi для получения подробной инвентаризации серверов vmware перед миграцией экземпляров в AWS.

В веб-интерфейсе vcenter, или в клиенте vsphere, я могу осмотреть экземпляр и увидеть его диски, и он сообщит мне размер диска (подготовленный) и объем его использования (использованное хранилище).

Из примеров репозитория github ( https://github.com/vmware/pyvmomi-community-samples) я мог быстро научиться получать информацию об экземплярах, поэтому получение размера диска тривиально (в SO даже есть вопрос, который показывает простой способ получить диски - Как получить размеры виртуальных дисков VMWare с помощью PyVMomi), но я не могу понять, как получить фактически используемое хранилище, которое может показать веб / клиент.

Итак, как я могу получить использованное пространство для дисков данного экземпляра?

2 ответа

Решение

Чтобы получить свободное пространство от виртуальной машины через PyVMomi, сначала вы должны проверить, установлены ли в вашей системе инструменты VMware для виртуальных машин или нет. Для проверки, установлен ли он, проверьте информацию о гостевой виртуальной машине со сводной страницы (через MOB), если она показывает:

  1. toolsStatus - VirtualMachineToolsStatus - "toolsNotInstalled": это означает, что вам нужно установить инструменты VMware на соответствующую виртуальную машину, чтобы установить следующие ссылки: a) https://my.vmware.com/web/vmware/details?productId=491&downloadGroup=VMTOOLS1000 или, б) https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1018377

  2. toolsStatus - VirtualMachineToolsStatus - "toolsOk": это означает, что на вашей виртуальной машине уже установлены инструменты VMware, и вы можете получить значения свойств diskPath, емкость и freeSpace из vim.vm.GuestInfo.DiskInfo. (Если вы устанавливаете инструменты VMware вручную, как указано выше, должно быть верно следующее)

После настройки вышеуказанной среды вы можете получить соответствующую информацию с вашей виртуальной машины с помощью следующего кода:

service_instance = None
vcenter_host = "HOSTNAME"
vcenter_port = NUMERIC_PORT
vcenter_username = "USERNAME"
vcenter_password = "PASSWORD"
vmName = "VM_NAME";
try:
    #For trying to connect to VM
    service_instance = connect.SmartConnect(host=vcenter_host, user=vcenter_username, pwd=vcenter_password, port=vcenter_port, sslContext=context)

    atexit.register(connect.Disconnect, service_instance)

    content = service_instance.RetrieveContent()

    container = content.rootFolder  # starting point to look into
    viewType = [vim.VirtualMachine]  # object types to look for
    recursive = True  # whether we should look into it recursively
    containerView = content.viewManager.CreateContainerView(
    container, viewType, recursive)
    #getting all the VM's from the connection    
    children = containerView.view
    #going 1 by 1 to every VM
    for child in children:
        vm = child.summary.config.name
        #check for the VM
        if(vm == vmName):
            vmSummary = child.summary
            #get the diskInfo of the selected VM
            info = vmSummary.vm.guest.disk
            #check for the freeSpace property of each disk
            for each in info:
                #To get the freeSPace in GB's
                diskFreeSpace = each.freeSpace/1024/1024/1024

Надеюсь, это решит вашу проблему.

Если вы используете выше vSphere API 4.0, пожалуйста, посмотрите эту документацию vmware

вот моя конфигурация виртуальной машины

JSON Dump

vm = <find your vm> 
jsonify(vm.summary.storage)

# dump output
(vim.vm.Summary.StorageSummary) { 
    dynamicType = <unset>, 
    dynamicProperty = (vmodl.DynamicProperty) [], 
    committed = 8591326612, # 8GB (first commmited hdd)
    uncommitted = 54964532611, # 20GB + 30GB (two added hdd)
    unshared = 8589934592, 
    timestamp = 2018-07-03T07:23:26.715559Z }

код Python

...
vm = <find your vm> 
#disk size in byte
disk_size = vm.summary.storage.committed + vm.summary.storage.uncommitted
Другие вопросы по тегам