【问题标题】:Alternative to virsh (libvirt)替代 virsh (libvirt)
【发布时间】:2011-02-13 18:43:09
【问题描述】:

我正在使用 virsh list 来显示计算机上运行的虚拟机列表。我希望将过程中的信息以二维数组的形式打印出来。

解决此问题的一种方法是获取输出,使用标记器并将其存储在数组中。但是有没有其他方法可以让我直接把它变成数组或其他东西的形式,这样代码就更具可扩展性。 (我能想到的是在python中使用libvirt api)

【问题讨论】:

    标签: python list virtual-machine libvirt


    【解决方案1】:

    确实有libvirt Python API bindings

    import libvirt
    
    conn = libvirt.openReadOnly(None)  # $LIBVIRT_DEFAULT_URI, or give a URI here
    assert conn, 'Failed to open connection'
    
    names = conn.listDefinedDomains()
    domains = map(conn.lookupByName, names)
    
    ids = conn.listDomainsID()
    running = map(conn.lookupByID, ids)
    
    columns = 3
    
    states = {
        libvirt.VIR_DOMAIN_NOSTATE: 'no state',
        libvirt.VIR_DOMAIN_RUNNING: 'running',
        libvirt.VIR_DOMAIN_BLOCKED: 'blocked on resource',
        libvirt.VIR_DOMAIN_PAUSED: 'paused by user',
        libvirt.VIR_DOMAIN_SHUTDOWN: 'being shut down',
        libvirt.VIR_DOMAIN_SHUTOFF: 'shut off',
        libvirt.VIR_DOMAIN_CRASHED: 'crashed',
    }
    def info(dom):
        [state, maxmem, mem, ncpu, cputime] = dom.info()
        return '%s is %s,' % (dom.name(), states.get(state, state))
    
    print 'Defined domains:'
    for row in map(None, *[iter(domains)] * columns):
        for domain in row:
            if domain:
                print info(domain),
        print
    print
    
    print 'Running domains:'
    for row in map(None, *[iter(running)] * columns):
        for domain in row:
            if domain:
                print info(domain),
        print
    

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 2013-09-26
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多