整体思路分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");
}
}