读书人

基于libvirt-java取得虚拟机对应vNic的

发布时间: 2013-02-24 17:58:56 作者: rapoo

基于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");}}

?

读书人网 >编程

热点推荐