如何使用libvirt-java创建持久化并自动启动的网络?
解决libvirt-java创建持久化并自动启动网络的问题
问题原因
你当前使用的networkCreateXML方法创建的是临时(transient)网络,这类网络仅存在于当前libvirt会话中,重启后会消失,因此不支持设置自动启动(autostart),这就是报错的核心原因。
正确实现步骤
要创建持久化(persistent)且自动启动的网络,需要改用networkDefineXML方法——它会将网络配置保存到libvirt的持久化存储目录(如/etc/libvirt/qemu/networks/),之后再启动网络并设置自动启动:
Connect connect = new Connect("qemu:///system", false); // 定义持久化网络(此时网络处于未激活状态) Network network = connect.networkDefineXML(""" <network> <name>foo</name> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virfoo' stp='on' delay='0'/> <ip address='192.168.99.1' netmask='255.255.255.0'/> </network> """); // 启动网络 network.start(); // 设置自动启动 network.setAutostart(true);
验证结果
执行上述代码后,运行virsh net-list --all可看到网络状态:
Name State Autostart Persistent -------------------------------------------- default active yes yes foo active yes yes
已存在临时网络的转换方法
如果已经创建了临时的foo网络,可按以下步骤转为持久化:
- 停止临时网络:
network.destroy(); - 导出临时网络的XML配置:
String xml = network.getXMLDesc(0); - 删除临时网络:
network.delete(); - 用导出的XML调用
networkDefineXML定义持久化网络,再执行启动和设置自动启动的步骤。
内容的提问来源于stack exchange,提问作者artpi
相关产品推荐
相关产品推荐

