IBM Systems Director には、HTTP クライアント・ライブラリーを持つ任意の言語 (Java、Perl、CSharp など) から利用できる一連のインターフェースがあります。これらのインターフェースは REST (Representational State Transfer) クライアント/サーバー・アーキテクチャーをベースとする Web サービスであり、各 Web サービスは IBM Systems Director 内のリソースとみなされます。各リソースには特定の URI が関連付けられます。リソース URI、HTTP メソッド、クエリー・パラメーター、HTTP リクエスト本体が IBM Systems Director サーバーに送信されると、それらによってアクセス対象のサービス (REST API と呼ばれます) と、そのサービスによって実行する必要のあるアクションが決定されます。
VMControl は IBM Systems Director 内で REST Web サービスをサポートする高度なマネージャーです。この記事の執筆時点での VMControl の最新バージョンは 2.3.1 ですが、残念ながら、このバージョンには仮想サーバーを作成する際のディスク・ストレージの作成に関していくつかの制約があります。例えば、VMControl REST Web サービスを使用して仮想ディスクや論理ボリュームをプログラムで作成する機能はバージョン 2.3.1 ではサポートされていません。しかし、この問題を解決する方法が 1 つあります。それは、HMC (Hardware Management Console) のリモート・コマンド実行機能を利用して仮想ディスクを作成し、VMControl REST Web サービスを利用して仮想ディスクと仮想ネットワークを追加する方法です。
コマンド行インターフェース (CLI) は単純なタスクや複雑なタスクを実行するための手軽な手段です。HMC コマンドをスクリプト化すると、一般的なシステム管理タスクを自動化することができます。HMC のリモート・コマンド実行機能を有効にし、この機能を構成するための方法については、HMC command line の Wiki を参照してください。
リモート・コマンド行が構成されると、SSH クライアントから HMC コマンドを実行できるようになります。リスト 1 は VIOS (Virtual I/O Server) コマンドの実行方法を示しています。後ほど、VIOS コマンドを使用してストレージ・プールと論理ボリュームを作成する方法について説明します。
リスト 1. HMC のリモート・コマンド行の使い方
$ssh hscroot@<hmc_host> viosvrcmd -m <POWER_System>
-p <vios_name> -c '"<vios_command>"'
|
ここで、各項目の内容は以下のとおりです。
<hmc_host> は HMC のホスト名または IP アドレス
<Power_System> は Power Systems の名前 (例えば「Server-9117-MMA-SN10ED68E」など)
<vios_name> は Power Systems で実行される VIOS の名前
<vios_command> は VIOS 内で実行させたいコマンド
VIOS コマンドに引数が含まれる場合、そのコマンドを「'」で囲うことが重要です。そうしないと次のようなエラー・メッセージが表示されます。
「An invalid parameter was entered. The parameters -virtual are not valid. Please check your entry and retry the command. (無効なパラメーターが入力されました。-virtual というパラメーターは無効です。入力内容を確認し、再度コマンドを実行してください。)」
ストレージ・プールと論理ボリュームは 1 つ以上の物理ボリュームで構成されます。ストレージ・プールを作成するためには、必ず以下の要件を満たす必要があります。
- HMC がバージョン 7 リリース 3.4.2 またはそれ以降であること。
- VIOS がバージョン 2.1.1.0 またはそれ以降であること。
- HMC と VIOS との間に必ずリソース監視と制御接続が存在すること。
ボリューム・グループをベースとするストレージ・プールを作成するためには、まずシステム内で割り当てられていない物理ボリュームがどれであるかを認識する必要があります。割り当てられていない物理ボリュームのリストを取得するためには、リスト 2 に示す VMControl REST API を使用します。
リスト 2. VMControl REST API を使用してカスタマイズ可能な値を取得する
VMControl/hosts/{hostOID}/virtualServers/customization
|
この API によって、特定のホスト上で新しい仮想サーバーを作成するときにカスタマイズして使用できるプロパティーがすべて表示されます。ホストのオブジェクト ID (OID) を知るためにはリスト 3 の API を使用します。
リスト 3. 利用可能なホストの情報を VMControl REST API を使用して取得する
VMControl/hosts/
|
リスト 2 に示す API に GET アクションを送信すると、利用可能な物理ボリュームのリストが diskphysicalvolumes プロパティーの中に表示されます (図 1)。
図 1. ホスト・システムで利用可能な物理ボリューム
各物理ボリュームに対して必要な値は、そのボリュームの id とサイズであり、サイズは property オブジェクトの中にあります。どの物理ボリュームを使用するかを決定すると、HMC 上で REST クライアント・アプリケーションからリモートでコマンドを実行し、ストレージ・プールを作成することができます。リスト 4 はリモートで実行できる VIOS コマンドを示しています。
リスト 4. リモートでストレージ・プールを作成する
$ssh hscroot@<hmc_host> viosvrcmd -m <host_system>
-p <vios_name> -c '"mksp -f <storage_pool_name>
<physical_disk>"'
|
物理ボリュームの id を指定する際には、id に含まれるボリューム名のみを指定するようにし、「:vios」というテキストを含めないように注意してください。
論理ボリュームは VMControl の仮想ディスクとして表示され、いったんストレージ・プールが利用できるようになると、必要に応じていくつでも仮想ディスクを作成することができます。リスト 5 のコマンドを使用すると、リモートで仮想ディスクを作成することができます。
リスト 5. リモートで仮想ディスクを作成する
$ssh hscroot@<hmc_host> viosvrcmd -m <host_system>
-p <vios_name> -c '"mklv -lv <disk_name>
<storage_pool_name> <size>"'
|
ストレージ・プールと仮想ディスクをリソースとして IBM Systems Director に追加するためには、Power Systems ホストをターゲットとするインベントリー・コレクション・ジョブを送信します。リスト 9 に示す API を使用して POST リクエストを送信すると、インベントリー・ジョブを作成することができます。
リスト 6. インベントリー・コレクション・ジョブの API
resources/{ObjectType}/{OID}/inventoryprofiles/{ProfileID}/inventory/jobs
|
ここで、各項目の内容は以下とおりです。
{ObjectType} = サーバー
{OID} = サーバーのオブジェクト ID
{ProfileID} = インベントリー・プロファイル ID。すべてのインベントリーを表す既定の ID として「default.All」を使用することができます。
リスト 6 の API に使用するリクエスト・ペイロードをリスト 7 に示します。
リスト 7. インベントリー・コレクション・ジョブのペイロード
{
"DisplayName": "My inventory collection job",
}
|
インベントリー・コレクション・ジョブの進行状況とステータスは、IBM Systems Director の JMS (Java Messaging Service) プロバイダーである Apache ActiveMQ を使用して確認することができます。IBM Systems Director は対象となるクライアント・アプリケーションとの間で、イベントおよびその他の重要なメッセージの通信を行うためにこの JMS プロバイダーを使用します。JMS の概要とサンプルは IBM Systems Management SDK に含まれています。基本的には、Director.jobs.activation トピックをサブスクライブするようにクライアントを設定することで、ジョブの進行状況とステータスを確認する必要があります。
新しい JMS トピック・サブスクリプションを作成してイベントをリッスンし、IBM Systems Director 内でストレージ・プールや仮想ディスクなどの新しいリソースが利用可能となったかどうかを確認します。使用すべきトピックは Director.manageableelementservice.manageableelement であり、新しい管理可能要素が IBM Systems Director に追加されたときに受信するメッセージのプロパティーをリスト 8 に示します。
リスト 8. 管理可能要素のイベント・プロパティーの例
properties = {EventType=CREATED_EVENT, OID=91256,
ObjectType=StorageVolume, Version=1.0.0}
|
ObjectType プロパティーの値は新たに追加されたリソースのタイプを表します。ストレージ・プールの場合、ObjectType は StoragePool に設定されます。VIOS パーティション内に論理ボリュームとして作成された仮想ディスクは ObjectType が StorageVolume に設定されて表示されます。
インベントリー・コレクション・ジョブがエラーなしで完了し、管理可能要素が追加されると、新しいリソースが IBM Systems Director の VMControl から見えるかどうかを、リスト 2 と同じ VMControl REST API を使用して確認することができます。図 2 は disks プロパティー内に表示される一連の仮想ディスクを示しています。
図 2. ホスト・システムで利用可能な仮想ディスク
各仮想ディスクの property オブジェクトの中には、サイズ (MB)、ストレージ・プール、ストレージ・サーバーなどの追加情報があります。この場合のストレージ・サーバーは VIOS です。仮想ディスクの ID の値は新しい仮想サーバーにディスクを割り当てるために使用します。
リスト 9. VMControl REST API を使用して仮想サーバーを作成する
/VMControl/hosts/{hostOID}/virtualServers
|
IBM Systems Director VMControl SDK のインフォメーション・センターで説明されているように、POST リクエストによって JSON オブジェクトのペイロードを要求し、このペイロードで仮想サーバーの設定を指定します。
リスト 10 は以下の設定を指定する JSON ペイロードの例を示しています。
- 仮想サーバーのタイプ (値を「IBM Power – AIXLINUX」に設定しています。)
- 仮想サーバーの名前 (値を「vserver」に設定しています。)
- CPU モード (値を「SHARED」に設定しています。)
- CPU の数 (値を「2」に設定しています。)
- メモリー・サイズ (値を「2048」に設定しています。)
- メモリー・サイズの単位 (値を「MB」に設定しています。)
- ディスク (値を「vmdisk1:rootvg_vm:vios;vmdisk2:rootvg_vm:vios」に設定しています。つまり vmdisk1 と vmdisk2 の両方を仮想サーバーに割り当てます。)
- ネットワーク (値を「1」に設定しています。つまり ID が「1」の VLAN を仮想イーサネット・アダプターに割り当てます。)
- ネットワーク (値を「80」に設定しています。つまり ID が「80」の VLAN を仮想イーサネット・アダプターに割り当てます。)
リスト 10. 仮想サーバーを作成するための JSON リクエストの例
{
"virtualServer":{
"properties":[
{
"name":"gos", "value":"IBM Power - AIXLINUX"
},
{
"name":"name", "value":"vserver"
},
{
"name":"cpumode", "value":"SHARED"
},
{
"name":"cpushared", "value":2
},
{
"name":"memsize", "value":2048
},
{
"name":"memunitsize", "value":"MB"
},
{
"name":"disks", "value":"vmdisk1:rootvg_vm:vios;vmdisk2:rootvg_vm:vios"
},
{
"name":"networks", "value":"1"
},
{
"name":"networks", "value":"80"
}
]
}
} |
図 3 はリスト 9 の API に対する送信リクエストを示しています。このリクエストは FireFox の Poster プラグイン上で実行されたものです。Poster プラグインを利用すると、直接 REST API を使用してレスポンス・メッセージの本体とステータスを調べることができます。1 行もコードを作成することなく、REST API でサポートされている任意のリクエスト・アクションを送信することができますが、HTTP クライアント・ライブラリーを持つ Java などのプログラミング言語を使用して同じタイプのリクエストを送信することもできます。
図 3. VMControl REST API を使用して仮想サーバーを作成する
このリクエストを送信すると、「Create Virtual Server (仮想サーバーの作成)」というジョブが起動され、このジョブのステータスと進行状況を確認できるようになることに注意してください。すべてが順調にいけば、新しい仮想サーバーが VMControl に表示されるはずです。このジョブのステータスを確認するためには、リスト 11 に示す API に GET リクエストを送信します。
リスト 11. REST API によって起動したジョブのステータスを確認する
jobs/{jobID}/activations/{activationID}
|
この例の「Create Virtual Server (仮想サーバーの作成)」リクエストに対するレスポンスで上記リストの値を置き換えると、jobID = 36、activationID = 12 となります。起動したジョブのステータスが「Complete (完了)」になり、「Progress (進行状況)」が「100」になると、図 4 のメッセージを確認することができます。
図 4. 起動したジョブの詳細
図 4 は進行状況が 50% に達すると表示されるメッセージを示しており、その内容は「ホスト Server-9117-MMA-SN10ED68E に対する DNZVMP509I 「仮想サーバーの作成」リクエストの処理が正常に完了しました。Systems Director は新しい仮想サーバーを即座に表示しない可能性があります。新しいサーバーが表示されるまでには、数分かかかる可能性があります。」というものです。起動したジョブが完了すると、「サーバー {ホスト名} のクライアント・ジョブのステータスが「完了」になりました」というようなメッセージが表示されます。
この場合も、ジョブが更新された場合や新しい管理可能要素が作成、削除、変更された場合に生成されるメッセージを利用するために、JMS を使用することを推奨します。この場合、作成される新しい仮想サーバーは管理可能要素です。
IBM Systems Management SDK のサイトには IBM Systems Director の REST API を呼び出すための適切な方法の例がいくつか紹介されており、それらのソース・コードを入手することができます。リスト 12 は POST リクエストを送信して仮想サーバーを作成する方法の Java コードの例を示しています。
リスト 12. VMControl REST API を呼び出すための Java コードの例
1)public String ceateVirtualServer(){
2) String METHODNAME = "ceateVirtualServer";
3) String requestPayload = "your JSON payload from Listing 10 goes here";
4) String uri = sdc.getConnectionContextURI() +
"/VMControl/hosts/48098/virtualServers";
5) RESTUtilities.log(Level.INFO, logger, CLASSNAME, METHODNAME,
"requestPayload: " + requestPayload);
6) RESTUtilities.log(Level.INFO, logger, CLASSNAME, METHODNAME,
"(POST) URI to invoke: " + uri);
7) try{
8) HttpsURLConnection dataConnection = sdc.processRequest(uri,
"POST", requestPayload);
9) int rc = dataConnection.getResponseCode();
10) if (rc != 201) {
11) RESTUtilities.log(Level.SEVERE, logger, CLASSNAME, METHODNAME,
"FAIL: Unexpected return code: Expected 201 but got " + rc);
12) return "-1";
13) }
14) String response = RESTUtilities.getResponseString(dataConnection);
15) }catch(Exception e){
16) e.printStackTrace();
17) }
18) return "0";
19) }
|
リスト 12 のライン 14 によって、図 3 のレスポンスを受け取ったときと同じように、起動されたジョブのステータスと進行状況の検証に必要な URL が得られます。
仮想サーバーの設定が IBM Systems Director に適切に保存されたかどうかを以下のステップで検証することができます。
- 「System Configuration (システム構成)」 > 「VMControl」 > 「Virtual Servers and Hosts (仮想サーバーおよびホスト)」の順に選択します。
- 新しい仮想サーバーを選択し、コンテキスト・メニュー (右クリック) から「System Configuration (システム構成)」 > 「Edit Virtual Server (仮想サーバーを編集)」の順に選択した後「Virtual Disk (仮想ディスク)」を選択し、割り当てられた仮想ディスクが図 5 のように選択されていることを確認します。
- 「Network (ネットワーク)」を選択し、割り当てられたネットワークが図 6 のように表示されることを確認します。
図 5 は仮想サーバーに割り当てられた仮想ディスクを示しています。
図 5. 仮想サーバーに割り当てられた仮想ディスク
図 5 を見るとわかるように、HMC を使用してリモートから VIOS パーティションに作成された仮想ディスクが仮想サーバーに適切に割り当てられており、割り当てられていない他のディスクはすべてここに表示されているはずです。
仮想サーバーが作成されると、VMCotrol は VIOS パーティションに仮想 SCSI アダプターを自動的に割り当てるため、再起動は必要ありません。
図 6 は仮想サーバーに割り当てられたネットワークを示しています。これらのネットワークは先ほど、仮想サーバーのハードウェア・リソースを管理する VIOS パーティションの中で作成されたものです。
図 6. 仮想サーバーに割り当てられたネットワーク
図 6 には一意の ID を持つネットワークが 2 つ表示されています。この ID の値は、仮想サーバーとの通信に使用される内部 VLAN (Virtual LAN) の ID を表しています。
この記事では VMControl REST API を使用して仮想サーバーを作成する方法の概略を説明しています。スクリプトを呼び出すことで、REST クライアント・アプリケーションからリモートで HMC コマンドを実行することができます (「ストレージ・プールを作成する」と「論理ボリュームを作成する」を参照)。例えば Java コードを使用していて、クライアントが Linux または Unix 上で実行されている場合、リスト 13 のような HMC スクリプトを呼び出すことができます。
リスト 13. システム・コマンドを呼び出すための Java コードの例
1) String s = null;
try {
2) Process p =
Runtime.getRuntime().exec("ssh hscroot@myhmc.austin.ibm.com viosvrcmd" +
" -m Server-9117-MMA-SN10ED68E -p myvios" +
" -c '\"mklv -lv vmdisk2 rootvg_vm 10G\"'");
3) BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
4) BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
// read the output from the command
5) System.out.println("Here is the standard output of the command:\n");
6) while ((s = stdInput.readLine()) != null) {
7) System.out.println(s);
8) }
// read any errors from the attempted command
9) System.out.println("Here is the standard error of the command (if any):\n");
10) while ((s = stdError.readLine()) != null) {
11) System.out.println(s);
12) }
13) System.exit(0);
14) }
15) catch (IOException e) {
16) System.out.println("exception happened - here's what I know: ");
17) e.printStackTrace();
18) System.exit(-1);
19) }
|
ディスク・サイズを指定する機能は VMControl REST API (バージョン 2.3.1) でも IBM Systems Director CLI (バージョン 6.2.1) でもサポートされていませんが、今後の VMControl のリリースで機能強化として追加されるかもしれません。この記事を参考にすることで、仮想サーバーを作成しながらストレージ・プールや仮想ディスクを作成することができます。重要なことは、仮想サーバーにはディスク・サイズの全体を割り当てることしかできず、物理ディスクの割り当てにもこれと同じ方法が使われるということです。そして物理ディスクを割り当てる場合には、リスト 2 の REST API に対するレスポンスから物理ディスクの ID の値を取得すればよいのです。
学ぶために
- IBM システム・ハードウェアについて学ぶために、IBM Power Systems Hardware インフォメーション・センターをご覧ください。
- JSON について学ぶために、「JSON の紹介」を読んでください。
- IBM Systems Director SDK: IBM Systems Director SDK (Software Development Kit) について学んでください。このサイトには、独自のアプリケーション開発に IBM Systems Director を活用するためのドキュメント、インターフェース、サンプルが用意されています。
議論するために
- IBM Systems Director フォーラム: IBM Systems Director に関する質問やコメントを投稿し、皆さんの考え方やアイデア、ソリューションを他の人達と共有してください。