基于libvirt-java获得虚拟机对应vNic的id
整体思路分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");}}?