如何使用 libvirt "start" 或 "activate" 网络?

How to "start" or "activate" a network with libvirt?

如何使用 libvirt "start" 非活动网络?对于 virsh,这将是 net-start <network>

我可以用 virNetworkDefineXML 创建一个网络,它将:

Define an inactive persistent virtual network or modify an existing persistent one from the XML description.

(相当于virsh net-define),但我不知道如何"start"这个新创建但不活动的网络。

我正在使用 libvirt-python 绑定,但知道正确的 C API 就足够了。

API是virNetworkCreate():

Create and start a defined network. If the call succeed the network moves from the defined to the running networks pools.


要找到它,我们可以查看 virsh 的来源。 "net-start"命令定义在tools/virsh-network.c:

static bool
cmdNetworkStart(vshControl *ctl, const vshCmd *cmd)
{
    virNetworkPtr network;
    bool ret = true;
    const char *name = NULL;

    if (!(network = virshCommandOptNetwork(ctl, cmd, &name)))
         return false;

    if (virNetworkCreate(network) == 0) {
        vshPrint(ctl, _("Network %s started\n"), name);
    } else {
        vshError(ctl, _("Failed to start network %s"), name);
        ret = false;
    }
    virNetworkFree(network);
    return ret;
}

libvirt-python 中,这意味着简单地调用 .create().networkDefineXML() 返回的网络对象:

conn = libvirt.open('qemu:///system')

# Define a new persistent, inactive network
xml = open('net.xml', 'r').read()
net = conn.networkDefineXML(xml)

# Set it to auto-start
net.setAutostart(True)

# Start it!
net.create()