Java SDK 指南
使用 Red Hat Virtualization Java SDK
摘要
第 1 章 概述
Version 3- V3 Java 软件开发套件提供了对 Red Hat Enterprise Virtualization 3.6 最新版本中的 Java 软件开发套件的类(class)和方法(method)结构的后向兼容功能。使用 Red Hat Enterprise Virtualization 3.6 中的 Java 软件开发套件开发的应用程序可以在不需要进行修改的情况下在这个版本中运行。
Version 4- V4 Java 软件开发套件提供了一组更新的类和方法。使用 Red Hat Enterprise Virtualization 3.6 中的 Java 软件开发套件开发的应用程序需要进行更新后才可以在这个版本中运行。
1.1. 前提条件
- 安装了 Red Hat Enterprise Linux 7(Server 版和 Workstation 版都被支持)的系统。
- 订阅了 Red Hat Virtualization 权利。
重要
1.2. 安装 Java 软件开发套件
过程 1.1. 安装 Java 软件开发套件
- 启用所需的频道:
# subscription-manager repos --enable=rhel-7-server-rpms # subscription-manager repos --enable=rhel-7-server-rhv-4.0-rpms # subscription-manager repos --enable=jb-eap-7-for-rhel-7-server-rpms
- 安装所需软件包:
- V3:
# yum install ovirt-engine-sdk-java ovirt-engine-sdk-javadoc
- V4:
# yum install java-ovirt-engine-sdk4
/usr/share/java/rhevm-sdk-java 目录中,它们现在可以被添加到所需的 Java 项目中。
1.3. 依赖性
commons-beanutils.jarcommons-codec.jarhttpclient.jarhttpcore.jarjakarta-commons-logging.jarlog4j.jar
/usr/share/java 目录中。
1.4. 配置 SSL
1.4.1. 配置 SSL
过程 1.2. 配置 SSL
- 下载 Red Hat Virtualization Manager 使用的证书:
注意
在默认情况下,Red Hat Virtualization Manager 使用的证书位于/etc/pki/ovirt-engine/ca.pem。 - 创建一个 truststore:
$ keytool -import -alias "server.crt truststore" -file ca.crt -keystore server.truststore
- 在构建一个
Api或Connection对象实例时,指定trustStoreFile和trustStorePassword参数。myBuilder.trustStoreFile("/home/username/server.truststore"); myBuilder.trustStorePassword("p@ssw0rd");注意
如果在创建一个连接时没有指定trustStoreFile选项,Java SDK 会尝试使用系统变量javax.net.ssl.trustStore所指定的默认 truststore。如果系统变量没有指定 truststore,Java SDK 会尝试使用在$JAVA_HOME/lib/security/jssecacerts或$JAVA_HOME/lib/security/cacerts中指定的 truststore。
1.4.2. 主机验证
Connection 类的实例时使用以下参数:
myBuilder.insecure(true);
重要
第 2 章 使用软件开发套件
2.1. 使用 V3 连接到 Red Hat Enterprise Virtualization Manager
Api 类是连接并处理 Red Hat Enterprise Virtualization 环境中的项的主要类。为了声明这个类的一个实例,您需要声明 ApiBuilder 类的一个实例,并使用 builder 方法把需要的参数传递到这个实例。build 方法会返回 Api 类的一个实例,然后您就可以为它分配变量,并执行相关的操作。
例 2.1. 连接到 Red Hat Enterprise Virtualization Manager
package rhevm;
import org.ovirt.engine.sdk.Api;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.ovirt.engine.sdk.ApiBuilder;
import org.ovirt.engine.sdk.exceptions.ServerException;
import org.ovirt.engine.sdk.exceptions.UnsecuredConnectionAttemptError;
public class rhevm {
public static void main(String[] args) {
Api api = null;
try {
ApiBuilder myBuilder = new ApiBuilder()
.url("https://rhevm.example.com/api")
.user("admin@internal")
.password("p@ssw0rd")
.keyStorePath("/home/username/server.truststore")
.keyStorePassword("p@ssw0rd");
api = myBuilder.build();
api.shutdown();
} catch (ServerException | UnsecuredConnectionAttemptError | IOException ex) {
Logger.getLogger(Ovirt.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (api != null) {
try {
api.close();
} catch (Exception ex) {
Logger.getLogger(Ovirt.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}ApiBuilder 类实例的参数列表,请参阅 附录 A, ApiBuilder 的方法。
注意
Api 类不采用 Autocloseable 接口。因此建议在 finally 块中关闭 Api 类实例,以保证可正常关闭与 Red Hat Enterprise Virtualization Manager 的连接。
2.2. 使用 V4 连接到 Red Hat Virtualization Manager
Connection 类是连接并处理 Red Hat Virtualization 环境中的项的主要类。为了声明这个类的一个实例,您需要声明 ConnectionBuilder 类的一个实例,并使用 builder 方法把需要的参数传递到这个实例。build 方法会返回 Connection 类的一个实例,然后您就可以为它分配变量,并执行相关的操作。
例 2.2. 连接到 Red Hat Virtualization Manager
package rhevm;
import org.ovirt.engine.sdk4.Connection;
import org.ovirt.engine.sdk4.ConnectionBuilder;
public class rhevm {
public static void main(String[] args) {
ConnectionBuilder myBuilder = ConnectionBuilder.connection()
.url("https://rhevm.example.com/ovirt-engine/api")
.user("admin@internal")
.password("p@ssw0rd")
.trustStoreFile("/home/username/server.truststore")
.trustStorePassword("p@ssw0rd");
try (Connection conn = myBuilder.build()) {
// Requests
} catch (Exception e) {
// Error handling
}
}
}ConnectionBuilder 类实例的参数列表,请参阅 附录 B, ConnectionBuilder 的方法。
2.3. 列出项
Api 类的 getVMs() 方法可以列出它们。
过程 2.1. 列出项
- 声明一个要被列出项的类型的
List,使用相应方法获得项列表:List<VM> vms = api.getVMs().list();
2.4. 修改资源属性
过程 2.2. 修改资源的属性
- 声明一个需要被更改属性的资源的实例。
VM vm = api.getVMs().get("test"); - 为属性设置新的值:
vm.setDescription("java_sdk"); - 更新虚拟机来应用所做的修改:
VM newVM = vm.update();
2.5. 创建资源
name 和 UUID 来代表。
name 属性获得一个资源:
VM vm = api.getVMs().get("test");UUID 属性获得一个资源:
VM vm = api.getVMs().get(UUID.fromString("5a89a1d2-32be-33f7-a0d1-f8b5bc974ff6"));2.6. 添加资源
在这个示例中,声明了一个代表了新添加的虚拟机的 VM 类。接下来,为虚拟机的属性设置所需的值。最后,虚拟机被添加到 Manager。
org.ovirt.engine.sdk.entities.VM vmParams = new org.ovirt.engine.sdk.entities.VM();
vmParams.setName("myVm");
vmParams.setCluster(api.getClusters().get("myCluster"));
vmParams.setTemplate(api.getTemplates().get("myTemplate"));
...VM vm = api.getVMs().add(vmParams);
在这个示例中,首先和示例 1 一样,声明了一个 VM 类实例。不同的是,它没有使用 get 方法来获得 Manager 中存在的项,而是为每个属性声明一个属性实例。最后,虚拟机被添加到 Manager。
org.ovirt.engine.sdk.entities.VM vmParams = new org.ovirt.engine.sdk.entities.VM();
vmParams.setName("myVm");
org.ovirt.engine.sdk.entities.Cluster clusterParam = new Cluster();
clusterParam.setName("myCluster");
vmParams.setCluster(clusterParam);
org.ovirt.engine.sdk.entities.Template templateParam = new Template();
templateParam.setName("myTemplate");
vmParams.setTemplate(templateParam);
...VM vm = api.getVMs().add(vmParams);
2.7. 在资源上进行操作
过程 2.3. 在资源上进行操作
- 声明资源的一个实例:
VM vm = api.getVMs().get("test"); - 声明要发送到资源上的操作参数:
Action actionParam = new Action(); org.ovirt.engine.sdk.entities.VM vmParam = new org.ovirt.engine.sdk.entities.VM(); actionParam.setVm(vmParam);
- 执行操作:
Action res = vm.start(actionParam);
Action res = vm.start(new Action()
{
{
setVm(new org.ovirt.engine.sdk.entities.VM());
}
});2.8. 列出子资源
过程 2.4. 列出子资源
- 声明一个需要被列出子资源的资源实例。
VM vm = api.getVMs().get("test"); - 列出子资源:
List<VMDisk> disks = vm.getDisks().list();
2.9. 获得子资源
过程 2.5. 获得一个资源的子资源
- 声明一个需要被引用的子资源所属资源的实例。
VM vm = api.getVMs().get("test"); - 声明需要被引用的子资源的一个实例:
VMDisk disk = vm.getDisks().get("my disk");
2.10. 为资源添加子资源
过程 2.6. 为资源添加子资源
- 声明一个需要添加子资源的资源实例。
VM vm = api.getVMs().get("test"); - 创建参数来定义资源的属性:
Disk diskParam = new Disk(); diskParam.setProvisionedSize(1073741824L); diskParam.setInterface("virtio"); diskParam.setFormat("cow"); - 添加子资源:
Disk disk = vm.getDisks().add(diskParam);
2.11. 修改子资源
过程 2.7. 更新子资源
- 声明一个需要被更改的子资源所属资源的实例。
VM vm = api.getVMs().get("test"); - 声明需要被更改的子资源的实例:
VMDisk disk = vm.getDisks().get("test_Disk1"); - 为属性设置新的值:
disk.setAlias("test_Disk1_updated"); - 更新子资源:
VMDisk updateDisk = disk.update();
2.12. 在子资源上进行操作
过程 2.8. 在子资源上进行操作
- 声明需要进行操作的子资源所属资源的一个实例。
VM vm = api.getVMs().get("test"); - 声明子资源的一个实例:
VMDisk disk = vm.getDisks().get("test_Disk1"); - 声明要发送到子资源上的操作参数:
Action actionParam = new Action();
- 执行操作:
Action result = disk.activate(actionParam);
附录 A. ApiBuilder 的方法
ApiBuilder 类可以使用的关键方法(method)。
表 A.1. ApiBuilder 的方法
| 方法 | 参数类型 | 描述 |
|---|---|---|
user | String | 连接到 Manager 的用户的名称。您需要知道用户名和域(如 admin@internal)。这个方法需要和 password 方法一起使用。 |
password | String | 连接到 Manager 的用户的密码。 |
sessionID | String | 连接到 Manager 的会话 ID。如果已和 Manager 进行了验证并有可用的会话,则可以指定这个参数来替代用户名和密码。 |
requestTimeout | Integer | 等待请求响应的超时时间(以秒为单位)。如果请求在这个设置的时间内没有获得响应,则这个请求会被取消,并产生一个异常(exception)。这个参数是可选的。 |
sessionTimeout | Integer | 会话超时时间(以分钟为单位)。当经过这个指定的时间后还没有对 Manager 的请求,则活跃的会话会被删除。这个参数是可选的。 |
persistentAuth | Boolean | 指定是否使用 cookies 实现持久性验证。这个选项在默认情况下被启用,您只需要在禁用这个选项时才需要使用它。 |
noHostVerification | Boolean | 指定是否验证运行 Manager 的服务器上的 SSL 证书中的主机名。在默认情况下,主机名会被验证,如果主机名不正确,连接会被拒绝。只有在需要禁用这个选项时才使用这个方法。 |
keyStorePath | String | 指定包括一个 CA 证书的文件位置。这个证书被用来验证运行 Manager 的服务器上的证书。这个方法需要和 keyStorePassword 方法一起使用。 |
keyStorePassword | String | 访问在 keyStorePath 方法中指定的 keystore 文件时使用的密码。 |
filter | Boolean | 启用或禁用基于发出请求的用户的权限对项进行过滤的功能。它的默认设置是禁用,这会允许任何用户查看环境中的所有项。如果需要限制环境中的项只对有权限的用户可见,可以使用这个方法。 |
debug | Boolean | 启用或禁用 debug 输出。在默认情况下,这个选项被禁用。 |
附录 B. ConnectionBuilder 的方法
ConnectionBuilder 类可以使用的关键方法(method)。
表 B.1. ConnectionBuilder 的方法
| 方法 | 参数类型 | 描述 |
|---|---|---|
user | String | 连接到 Manager 的用户的名称。您需要知道用户名和域(如 admin@internal)。这个方法需要和 password 方法一起使用。 |
password | String | 连接到 Manager 的用户的密码。 |
compress | Boolean | 指定从运行 Manager 的服务器上返回的信息是否要压缩。这个选项在默认情况下被禁用,您只有在需要启用这个选项时才使用这个方法。 |
timeout | Integer | 等待请求响应的超时时间(以秒为单位)。如果请求在这个设置的时间内没有获得响应,则这个请求会被取消,并产生一个异常(exception)。这个参数是可选的。 |
ssoUrl | String | 运行 Manager 的服务器的基本 URL。例如, https://server.example.com/ovirt-engine/sso/oauth/token?\grant_type=password&scope=ovirt-app-api 代表密码验证。 |
ssoRevokeUrl | String | SSO revoke 服务的基本 URL。只有在使用外部验证服务时才使用这个选项。在默认情况下,这个 URL 的值会根据 url 选项的值自动计算,SSO token revoke 会使用作为引擎一部分的 SSO 服务进行。 |
ssoTokenName | String | SSO 服务器返回的 JSON SSO 响应数据中的 token 名。在默认情况下,这个值是 access_token。 |
insecure | Boolean | 指定是否验证运行 Manager 的服务器上的 SSL 证书中的主机名。在默认情况下,主机名会被验证,如果主机名不正确,连接会被拒绝。只有在需要禁用这个选项时才使用这个方法。 |
trustStoreFile | String | 指定包括一个 CA 证书的文件位置。这个证书被用来验证运行 Manager 的服务器上的证书。这个方法需要和 trustStorePassword 方法一起使用。 |
trustStorePassword | String | 访问在 trustStorePath 方法中指定的 keystore 文件时使用的密码。 |
附录 C. 修订历史
| 修订历史 | |||
|---|---|---|---|
| 修订 4.0-1.1 | Thu Aug 25 2016 | ||
| |||
| 修订 4.0-1 | Wed 15 Jun 2016 | ||
| |||
