整体思路分4步
1.获得hypervisor中所有虚拟机的ID(使用listDomains方法)
2.根据虚拟机ID查询它的UUID(通过domainLookupByID方法)
3.根据UUID打印出虚拟机的详细信息XML文件(通过getXMLDesc方法)
4.在XML文件中提取source bridge标签中的内容,即这个虚拟机的虚拟网卡的vNic
package src; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.libvirt.Connect; import org.libvirt.Domain; import org.libvirt.LibvirtException; public class LibvirtTools { /** * 获得hypervisor链接,需要从配置文件读取hypervisor类型 * @return 链接名 */ public static Connect getConnection(){ Properties props = new Properties(); InputStream in; try { in = new BufferedInputStream (new FileInputStream("cfg.properties")); props.load(in); } catch (IOException e1) { e1.printStackTrace(); } String hypervisorName = props.getProperty("hypervisor"); //读取cfg.properties,获得hypervisor类型 Connect conn = null; try{ conn = new Connect(hypervisorName, true); } catch (LibvirtException e){ System.out.println("exception caught:"+e); System.out.println(e.getError()); } return conn; //得到链接并返回 } /** * 得到hypervisor中,所有虚拟机的uuid * @return 所有uuid组成的list */ public List<String> getAllUuidInDomain(){ Connect conn = getConnection(); List<String> uuidlist = new ArrayList<String>(); try{ int[] domainid = conn.listDomains(); //首先通过listDomains方法得到所有活跃Domain的ID列表 System.out.println(domainid[0]); for(int i = 0 ; i < domainid.length ; i++){ Domain dom = conn.domainLookupByID(domainid[i]); uuidlist.add(dom.getUUIDString()); } //通过Domainid得到Domain,再把所有domain的uuid加入到uuidlist中返回 } catch (LibvirtException e){ System.out.println("exception caught:"+e); System.out.println(e.getError()); } System.out.println(uuidlist.get(0)); return uuidlist; } /** * 根据一个虚拟机的uuid,得到这个虚拟机上虚拟网卡端口的vNic,这里暂时没有考虑一台虚拟机有多个网卡端口的情况 * @param Uuid * @return */ public String getVnicByUuid(String uuid){ Connect conn = getConnection(); String xml = null; String vnic = null; try{ Domain testDomain = conn.domainLookupByUUIDString(uuid); //根据虚拟机的uuid得到描述这个虚拟机的xml文件 xml = testDomain.getXMLDesc(0); String temp = xml.substring(xml.indexOf("source bridge")).substring(0, xml.substring(xml.indexOf("source bridge")).indexOf("/>")); vnic = temp.substring(temp.indexOf("'")+1 , temp.lastIndexOf("'")); //从xml文件中,读取出VNIC,vnic在source bridge标签中 System.out.println(vnic); } catch (LibvirtException e){ System.out.println("exception caught:"+e); System.out.println(e.getError()); } return vnic; } public static void main(String[] args) { LibvirtTools lt = new LibvirtTools(); lt.getAllUuidInDomain(); lt.getVnicByUuid("6de933ac-374e-43c9-b7c6-cbbb055b2e44"); //lt.getVnicByUuid("19f96615-df43-4604-a361-cbc1cf8372e0"); } }
相关推荐
libvirt-java则通过Java语言封装了这个库,使得Java开发者能够利用其丰富的类库和API,以面向对象的方式处理虚拟机的创建、管理、监控等任务。 在libvirt-java 0.4.7版本中,主要包含以下几个核心组件: 1. **连接...
libvirt java绑定包 提供java API
编译后直接可用的libvirt-java.jar,java监控虚拟机的必要jar包
libvirt-client-0.10.2-62.el6.x86_64.rpm libvirt-client-0.10.2-62.el6.x86_64.rpm
libvirt-devel-4.5.0-10.el7.x86_64.rpm
libvirt-snmp 是一个专为虚拟化环境设计的网络管理接口工具,它允许用户通过简单网络管理协议(SNMP)来监控和管理虚拟机网络流量。该工具提供了对libvirt库的扩展,使SNMP支持成为可能,从而使得管理员可以利用广泛...
- **测试套件**: `libvirt-test-API` 是一个基于 Python 的测试套件,目标是实现功能回归测试,确保 `libvirt` 的稳定性和兼容性。 - **编写测试案例**: 该文档还提供了一些指导如何编写测试案例的方法。 #### ...
libvirt-docs-4.5.0-36.el7.x86_64.rpm
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
离线安装包安装:rpm -ivh [rpm完整包名]
官方离线安装包,亲测可用
编译的libvirt-php,基于国产飞腾2000_64加麒麟OS+PHP7.4.13。适用于KVM
离线安装包,亲测可用
libvirt提供了C语言的原生API,同时也为其他编程语言如Python、Java、Perl、Ruby等提供了绑定,方便不同语言的开发者使用。API包含了丰富的函数和结构体,涵盖虚拟机生命周期管理、网络配置、存储管理等多个方面。 ...