`
Iam42
  • 浏览: 276792 次
  • 性别: 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
分享到:
评论

相关推荐

    libvirt-java0.4.7

    libvirt-java则通过Java语言封装了这个库,使得Java开发者能够利用其丰富的类库和API,以面向对象的方式处理虚拟机的创建、管理、监控等任务。 在libvirt-java 0.4.7版本中,主要包含以下几个核心组件: 1. **连接...

    libvirt-java-devel-0.4.9-4.el7.x64-86.rpm.tar.gz

    jna包的包含意味着该压缩包中的libvirt-java-devel可能用于Java开发环境中,允许Java开发者通过libvirt API来管理虚拟机。 整个安装过程分为两个步骤。首先需要解压tar.gz压缩包,解压后将得到一个包含多个rpm包的...

    libvirt-java-0.4.9-4.el7.x64-86.rpm.tar.gz

    libvirt-java则是一个libvirt的Java绑定,允许Java程序以编程方式管理虚拟机和虚拟化资源。libvirt-java-0.4.9-4.el7版本的rpm包是适用于Red Hat Enterprise Linux(RHEL)7.x版本的x86_64架构的软件安装包。 安装...

    libvirt -java绑定

    libvirt java绑定包 提供java API

    libvirt-java

    编译后直接可用的libvirt-java.jar,java监控虚拟机的必要jar包

    libvirt-java-javadoc-0.4.9-4.el7.x64-86.rpm.tar.gz

    libvirt是一个开源的库,允许对虚拟机、虚拟机管理程序、以及相关的虚拟化技术进行管理。文档作为项目的重要组成部分,不仅能够帮助开发者更好地理解代码结构、类和方法的用途,还可以用来作为代码维护和扩展的参考...

    libvirt-client-0.10.2-62.el6.x86_64.rpm

    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-devel-4.5.0-10.el7.x86_64.rpm

    libvirt-daemon-driver-qemu-4.5.0-36.el7-9.5.x64-86.rpm.tar.gz

    其余RPM包文件名中的“libvirt-libs”表示包含libvirt库文件,而“libvirt-daemon”是libvirt守护进程,而“libvirt-daemon-driver-qemu”是负责管理QEMU虚拟机的驱动程序,这也是标题中提到的文件。其他文件如...

    libvirt-snmp 网络管理接口

    libvirt-snmp 是一个专为虚拟化环境设计的网络管理接口工具,它允许用户通过简单网络管理协议(SNMP)来监控和管理虚拟机网络流量。该工具提供了对libvirt库的扩展,使SNMP支持成为可能,从而使得管理员可以利用广泛...

    libvirt-test-API

    - **测试套件**: `libvirt-test-API` 是一个基于 Python 的测试套件,目标是实现功能回归测试,确保 `libvirt` 的稳定性和兼容性。 - **编写测试案例**: 该文档还提供了一些指导如何编写测试案例的方法。 #### ...

    libvirt-docs-4.5.0-36.el7.x86_64.rpm

    libvirt-docs-4.5.0-36.el7.x86_64.rpm

    libvirt-daemon-driver-lxc-4.5.0-36.el7-9.5.x64-86.rpm.tar.gz

    libvirt是一个广泛使用的开源接口和守护进程,用于管理虚拟化平台的虚拟机和虚拟化资源。在此处,文件名中的“libvirt-daemon-driver-lxc”特指与Linux容器(LXC)相关的驱动程序版本4.5.0。文件中还包括了版本号...

    libvirt-java-javadoc-0.4.9-4.el7.noarch.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    libvirt-daemon-4.5.0-36.el7_9.5.x86_64.rpm

    官方离线安装包,亲测可用

    libvirt-daemon-config-network-4.5.0-36.el7-9.5.x64-86.rpm.tar.gz

    此外,libvirt-daemon-config-network包还依赖于libvirt-libs包以及其他一些驱动相关的rpm包,如libvirt-daemon、libvirt-daemon-driver-qemu、libvirt-daemon-driver-storage-core、libvirt-daemon-driver-network...

    libvirt-daemon-kvm-4.5.0-36.el7-9.5.x64-86.rpm.tar.gz

    kvm-4.5.0-36.el7_9.5.x64-86.rpm.tar.gz,该文件是一个tar.gz压缩包,包含了多个rpm文件,这些文件共同构成了libvirt-daemon-kvm的软件组件,用于在基于Red Hat Enterprise Linux 7 (RHEL 7)的系统上管理虚拟机。...

    libvirt-client-6.0.0-37.module_el8.5.0+1002+36725df2.aarch64.rpm

    官方离线安装包,亲测可用

    libvirt-daemon-driver-network-4.5.0-36.el7-9.5.x64-86.rpm.tar.gz

    libvirt是一个用于管理虚拟化平台的管理工具集,包括了对虚拟机、存储和网络的管理功能。本文提到的rpm包包含了libvirt的网络驱动部分,以及其它一些相关组件。 首先,文件中包含的rpm包用于在基于Red Hat的系统,...

    libvirt-daemon-driver-interface-4.5.0-36.el7-9.5.x64-86.rpm.tar.gz

    具体到这个压缩包,它包含了libvirt项目中与虚拟机网络接口(interface)相关联的驱动程序安装文件。libvirt-daemon-driver-interface-4.5.0-36.el7_9.5.x86_64.rpm文件是该驱动程序的RPM安装包。同时,还包含了其他...

Global site tag (gtag.js) - Google Analytics