libvirt 启用TCP远程连接,windows平台java调用示例
1、开启TCP连接
编辑 /etc/libvirt/libvirtd.conf,去掉** listen_tls = 0** 、listen_tcp = 1 、tcp_port = "16509" 三行前面的注释
编辑 /etc/sysconfig/libvirtd,去掉 LIBVIRTD_ARGS="--listen" 前面的注释
执行服务重启命令:
systemctl restart libvirtd
2、安装 windows 平台下的 Libvirt 客户端,下载地址如下:
https://libvirt.org/sources/win32_experimental/Libvirt-0.8.8-0.exe
3、新建 maven 项目进行 java sdk 调用(必须装32位的jdk,64位的会有问题)
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>libvirt-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.8.0</version>
</dependency>
<dependency>
<groupId>org.libvirt</groupId>
<artifactId>libvirt</artifactId>
<version>0.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<root level="all">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
LibvirtTest:(注释掉的都是运行时会报错的,坑比较多)
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import org.libvirt.Connect;
import org.libvirt.LibvirtException;
public class LibvirtTest {
private static final Logger logger = LogManager.getLogger(LibvirtTest.class);
@Test
public void test() throws LibvirtException {
Connect connect = new Connect("qemu+tcp://172.16.20.17:16509/system", true);
// logger.info("连接到的宿主机的主机名:{}", connect.getHostName());
logger.info("JNI连接的libvirt库版本号:{}", connect.getLibVirVersion());
// logger.info("连接的URI:{}", connect.getURI());
logger.info("连接到的宿主机的剩余内存:{}", connect.getFreeMemory());
logger.info("连接到的宿主机的最大CPU:{}", connect.getMaxVcpus(null));
logger.info("hypervisor的名称:{}", connect.getType());
int[] ids = connect.listDomains();
for (int id : ids) {
System.out.println(connect.domainLookupByID(id).getName());
}
// String[] domains = connect.listDefinedDomains();
// for (String domain : domains) {
// System.out.println(domain);
// }
}
}
后续
在 CentOS7 上正常使用64位 jdk,安装 libvirt,执行上面的函数注释是不会报错的,可能 libvirt 版本不一样也有关系吧
3 条评论
测试评论3
测试评论2
测试评论