使用pyvmomi在vmware中获取实例的实际使用(分配)磁盘空间

时间:2016-07-29 19:27:36

标签: python vmware pyvmomi

我最近开始使用pyvmomi在将实例迁移到AWS之前获取vmware服务器的详细清单。

在vcenter Web界面或vsphere客户端中,我可以检查实例并查看其磁盘,并告诉我磁盘大小(已配置)及其使用量(已使用的存储空间)

从样本github repo(https://github.com/vmware/pyvmomi-community-samples)我可以快速学习如何获取有关实例的信息,因此获取磁盘大小是微不足道的(甚至在SO中的一个问题显示了一种简单的方法获取驱动器 - How to get sizes of VMWare VM disks using PyVMomi),但我无法弄清楚如何获取Web /客户端可以显示的实际使用的存储空间。

那么,如何获取给定实例磁盘的已用空间?

2 个答案:

答案 0 :(得分:3)

首先,要通过 PyVMomi 从VM获取 自由空间 ,您必须检查 VMware工具是否为 VM是否安装在您的系统上。要检查是否已安装,请从 VM的访客信息中查看其摘要页面(通过MOB),如果显示:

  1. toolsStatus - VirtualMachineToolsStatus - “toolsNotInstalled”: 这意味着您必须将VMware工具安装到相应的VM,您可以参考以下链接进行安装:a)https://my.vmware.com/web/vmware/details?productId=491&downloadGroup=VMTOOLS1000或者b)https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1018377

  2. toolsStatus - VirtualMachineToolsStatus - “toolsOk”:这意味着您的VM已经安装了VMware工具,您可以获得 diskPath 容量来自 vim.vm.GuestInfo.DiskInfo freeSpace 属性值。 (如果您按上述方法手动安装VMware工具,则应该如下)

  3. 一旦设置了上述环境,您可以通过以下代码从VM获取相应的信息:

    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
    

    希望它能解决你的问题。

答案 1 :(得分:0)

如果您使用的是以上vSphere API 4.0, 请看看这个vmware documentation

这是我的虚拟机配置

json转储

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