*

インベントリから操作対象のManagedEntityを取り出す ~vijava programming tips(2)

公開日: 最終更新日:2014/07/25  |  By  |  VMware, vSphereAPI

by kumagai 2013/2/8

vijavaによるvSphereAPIプログラミングtips の第2回です。第1回はこちら

今回はインベントリ操作に注目してみたいと思います。
インベントリとはvSphere Clientでいうとこの部分です。

Clientから何らかの操作を行うときはこの要素を右クリックして操作すると思いますが、
APIからの操作でもまずはこの要素を特定しないことにはなにもできません。

APIからインベントリ上の要素を取得する場合、
これらの要素はManagedEntityとして抽象化されています。

このManadedEntityを継承した抽象化される要素の種類は下記のとおりです。

表1 ManagedEntityの継承クラスの一覧
要素の型名  vSphere Client上での表示名
 Datacenter データセンター
 VirtualMachine 仮想マシンとテンプレート
 Datastore データストア
 Folder フォルダー
   -StoragePod データストアクラスタ
 ComputeResource -
   -ClusterComputeResource クラスター
 ResourcePool リソースプール
   -VirtualApp vApp
 Network 標準スイッチ
   -DistributedVirtualPortgroup フォルダー
 DistributedVirtualSwitch 分散仮想スイッチ

※要素の型名が-から始まるものはすぐ上の型をさらに継承しています。

それでは、これらを取得するプログラムをご紹介します。
これら、インベントリ上に表示される要素(ManadedEntity)を
vijavaを使用したプログラムで取得するには、InventoryNavigatorというクラスを使用します。
InventoryNavigatorで取得できるメソッドが4つ用意されており、
引数のtypeには表1の要素の型名を文字列で指定します。

戻り値 メソッド
 ManagedEntity[]  searchManagedEntities(boolan recurse)
 ManagedEntity[]  searchManagedEntities(String type)
 ManagedEntity[]  searchManagedEntities(String[][] type ,boolan recurse)
 ManagedEntity  searchManagedEntities(String type, String name)

実際にこれを使用したプログラムが以下です。

1. [サンプル] Folder内のvAppと仮想マシンを取得する

//①ルートフォルダーを取得する
  Folder rootFolder = si.getRootFolder();
  //ルートフォルダを基点としてInventoryNavigatorを生成する
  InventoryNavigator rootNavi = new InventoryNavigator(rootFolder);
  
  //② Folder型のblogFolderを取得する
  ManagedEntity blogFolder = 
    rootNavi.searchManagedEntity("Folder","blogFolder");

  //blogFolderを基点としてInventoryNavigatorを生成する
  InventoryNavigator blogFolderNavi = new InventoryNavigator(blogFolder);

  //③ blogFolder以下のVirtualAppまたはVirtualMachineを取得する
  ManagedEntity[] targets = blogFolderNavi.searchManagedEntities(
    new String[][]{{"VirtualMachine","name"},{"VirtualApp","name"}},true);
  
  //取得結果(名前と型)の表示
  for (ManagedEntity target : targets){
    System.out.println(target.getName()
      + "t: " +target.getClass().getSimpleName());
  }

このときの出力結果は下記のようになります。

blogTemplate : VirtualMachine
blogVm       : VirtualMachine
blogvApp     : VirtualApp

[Tips]テンプレートはVirtualMachine型で取得できます。

2. [サンプル] FolderからNetworkとDistributedVirtualSwitchを取得する


//ルートフォルダを取得する
  Folder rootFolder = si.getRootFolder();
  
  //ルートフォルダを基点としてInventoryNavigatorを生成する
  InventoryNavigator rootNavi = new InventoryNavigator(rootFolder);
  //① DistributedVirtualSwitch型のManagedEntityをすべて取得する
  ManagedEntity[] dvses= rootNavi.searchManagedEntities("DistributedVirtualSwitch");
  
  //取得結果(名前と型)の表示
  for (ManagedEntity dvs : dvses){
    System.out.println(dvs.getName() 
      + "t:" +dvs.getClass().getSimpleName());
  }
  
    System.out.println("=====================");
  
  //② Network型のManagedEntityをすべて取得する
  ManagedEntity[] targets = rootNavi.searchManagedEntities("Network");
  
  //取得結果(名前と型)の表示
  for (ManagedEntity target : targets){
    System.out.println(target.getName() 
      + "t: " +target.getClass().getSimpleName());
  }

このときの出力結果は下記のようになります。

blogSwitch                : VmwareDistributedVirtualSwitch (①の結果)
=====================
blog_vSwitch              : Network                        (②の結果)
blogPortGroup             : DistributedVirtualPortgroup    (同上)
blogSwitch-DVUplinks-1524 : DistributedVirtualPortgroup    (同上)

[Tips] DistributedVirtualPortgroupはNetworkを継承しているので、
Network型で指定すると合わせて取得することができます。
また、DistributedVirtualSwitchとDistributedVirtualPortgroupは表示上親子関係に
見えますが、オブジェクトの関係は親子関係ではありません。

3. インベントリ ビュー とフォルダについて

vSphere Client の画面では インベントリには検索のほかに4つのビューがありますが
これらはフォルダとして定義されているようです。

フォルダ名 ビュー
 host  ホストおよびクラスタ
 vm  仮想マシンおよびテンプレート
 datastore  データストアおよびデータストアクラスター
 network  ネットワーク

このことから、rootフォルダから各フォルダ名を指定し、その子要素を取得すると
vSphere Clientのビューで表示されるツリーと同じ要素が取得できることがわかります。

少し長くなってしまいましたので、今回はここまで。
次回は仮想マシンの作成を行います。

関連記事

WS000093

VMware vSphere PowerCLIの導入

2014年10月27日 by ymaeda PowerCLIとは PowerCLIは、Wind

記事を読む

file001

vSphereAPI をJavaでプログラミングする ~vijava programming tips

by kumagai 2013/02/01 VMwareの提供する仮想化プラットフォーム、vS

記事を読む

blog-000051

仮想デバイス設定の変更 ~vijava programming tips(4)

by kumagai(@kumagai19o) 2013/3/11 vijavaによるvSph

記事を読む

img-000001

仮想スイッチの追加 ~vijava programming tips(6)

by kumagai(@kumagai19o) 2013/5/27前回までで仮想マシン側の作成、設定

記事を読む

no image

INDEX : vijava Programming

by kumagai@kumagai19ovijava programming tips 

記事を読む

img-000001

仮想マシンの電源操作 と状態判別~vijava programming tips(9)

by kumagai(@kumagai19o) 2013/8/5 今回は少し戻って基本的な仮想

記事を読む

img-000003

データストア操作 ~vijava programming tips(11)

by kumagai(@kumagai19o) 2013/8/26 今回はデータストアの操作を

記事を読む

WS000093

VMware vSphere PowerCLIを使った仮想マシンの基本操作

2015年1月18日 by ymaeda vSphereへのログイン 今回はPowerCLIを使

記事を読む

img-000004

仮想マシンのパフォーマンスチャートの取得 ~vijava programming tips(10)

by kumagai(@kumagai19o) 2013/8/8 今回は仮想マシンのパフォーマ

記事を読む

img-0000011

仮想マシンのクローン作成&カスタマイズ(Linux) ~vijava programming tips(7)

by kumagai(@kumagai19o) 2013/7/9 今回は仮想マシンをクローンし各設定

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑