`
Iam42
  • 浏览: 272968 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 

2
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics