第2章 ソフトウェア開発キットの使用
本章には、Java ソフトウェア開発キットの使用方法に関する例を記載します。特に記載がない限り、本章の例はすべて、ソフトウェア開発キットのバージョン 3 を使用します。
2.1. バージョン 3 での Red Hat Enterprise Virtualization Manager への接続 リンクのコピーリンクがクリップボードにコピーされました!
Java ソフトウェア開発キットバージョン 3 では、Api クラスは Red Hat Enterprise Virtualization 環境のオブジェクトに接続して操作するために使用する主要なクラスです。このクラスのインスタンスを宣言するには、ApiBuilder クラスのインスタンスを宣言して、builder メソッドでこのインスタンスに必要な引数を渡し、このインスタンス上で build メソッドを呼び出します。build メソッドは、Api クラスのインスタンスを返し、その後にこのクラスを変数に割り当てて、後続のアクションを実行する際に使用することができます。
Red Hat Enterprise Virtualization 環境との接続を作成して正常にシャットダウンし、接続を終了するとうい簡単な Java SE プログラムの例を以下に示します。
例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 Virtualization Manager との接続が正常にシャットダウンされるようにすることを推奨します。
2.2. バージョン 4 での Red Hat Virtualization Manager への接続 リンクのコピーリンクがクリップボードにコピーされました!
Java ソフトウェア開発キットバージョン 4 では、Connection クラスは Red Hat Virtualization 環境のオブジェクトに接続して操作するために使用する主要なクラスです。このクラスのインスタンスを宣言するには、ConnectionBuilder クラスのインスタンスを宣言して、builder メソッドでこのインスタンスに必要な引数を渡し、このインスタンス上で build メソッドを呼び出します。build メソッドは、Connection クラスのインスタンスを返し、その後にこのクラスを変数に割り当てて、後続のアクションを実行する際に使用することができます。
ソフトウェア開発キットバージョン 4 を使用して Red Hat Virtualization 環境の接続を作成する簡単な Java SE プログラムの例を以下に示します。
例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. エンティティーの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、Red Hat Virtualization Manager のエンティティーを一覧表示する方法を説明します。この例では、一覧表示するエンティティーは仮想マシンで、Api クラスの getVMs() メソッドを使用して一覧表示します。
エンティティーの一覧表示
一覧表示するエンティティーのタイプの
Listを宣言し、対応するメソッドを使用してエンティティーを一覧表示します。List<VM> vms = api.getVMs().list();
2.4. リソースの属性の変更 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、リソースの属性を変更する方法について説明します。この例では、変更する属性は、「test」という名前の仮想マシンの説明で、これを「java_sdk」に変更します。
リソースの属性の変更
属性を変更するリソースのインスタンスを宣言します。
VM vm = api.getVMs().get("test");新しい属性値を設定します。
vm.setDescription("java_sdk");変更を適用する仮想マシンを更新します。
VM newVM = vm.update();
2.5. リソースの取得 リンクのコピーリンクがクリップボードにコピーされました!
Java ソフトウェア開発キットでは、リソースはname および UUID の 2 つの属性で参照することができます。そのオブジェクトが存在している場合には、いずれも指定した属性のオブジェクトが返されます。
name 属性値を使用してリソースを取得するには、以下の方法を使用します。
VM vm = api.getVMs().get("test");
UUID 属性値を使用してリソースを取得するには、以下の方法を使用します。
VM vm = api.getVMs().get(UUID.fromString("5a89a1d2-32be-33f7-a0d1-f8b5bc974ff6"));
2.6. リソースの追加 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、Red Hat Virtualization Manager にリソースを追加する 2 つの方法について説明します。これらの例では、追加するリソースは仮想マシンです。
例 1
以下の例では、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);
例 2
以下の例では、VM クラスのインスタンスは、例 1 と同じ方法で宣言しますが、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. リソースに対するアクションの実行 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、リソースに対してアクションを実行する方法について説明します。この例では、「test」という名前の仮想マシンを起動します。
リソースに対するアクションの実行
リソースのインスタンスを宣言します。
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. サブリソースの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、リソースのサブリソースを一覧表示する方法について説明します。この例では、「test」という名前の仮想マシンのサブリソースを一覧表示します。
サブリソースの一覧表示
一覧表示するサブリソースが含まれているリソースのインスタンスを宣言します。
VM vm = api.getVMs().get("test");サブリソースを一覧表示します。
List<VMDisk> disks = vm.getDisks().list();
2.9. サブリソースの取得 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、リソースのサブリソースを参照する方法について説明します。この例では、「test」という名前の仮想マシンに属する「my disk」という名前のディスクを参照します。
リソースのサブリソースの取得
参照するサブリソースが含まれているリソースのインスタンスを宣言します。
VM vm = api.getVMs().get("test");参照するサブリソースのインスタンスを宣言します。
VMDisk disk = vm.getDisks().get("my disk");
2.10. リソースへのサブリソース追加 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、リソースにサブリソースを追加する方法を説明します。この例では、サイズが「1073741824L」で、「virtio」インターフェースを使用する「cow」形式の新規ディスクを「test」という名前の仮想マシンに追加します。
リソースへのサブリソースの追加
サブリソースを追加するリソースのインスタンスを宣言します。
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. サブリソースの変更 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、サブリソースの変更方法を説明します。この例では、「test」という名前の仮想マシンに属する「test_Disk1」という名前のディスクを「test_Disk1_updated」という名前に変更します。
サブリソースの更新
変更するサブリソースが含まれているリソースのインスタンスを宣言します。
VM vm = api.getVMs().get("test");変更するサブリソースのインスタンスを宣言します。
VMDisk disk = vm.getDisks().get("test_Disk1");新しい属性値を設定します。
disk.setAlias("test_Disk1_updated");サブリソースを更新します。
VMDisk updateDisk = disk.update();
2.12. サブリソースに対するアクションの実行 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、サブリソースに対するアクションの実行方法を説明します。この例では、「test」という名前の仮想マシンに属する「test_Disk1」という名前のディスクがアクティブ化されます。
サブリソースに対するアクションの実行
アクションを実行する対象となるサブリソースが含まれているリソースのインスタンスを宣言します。
VM vm = api.getVMs().get("test");サブリソースのインスタンスを宣言します。
VMDisk disk = vm.getDisks().get("test_Disk1");サブリソースに送信するアクションパラメーターを宣言します。
Action actionParam = new Action();アクションを実行します。
Action result = disk.activate(actionParam);