Hyper-V Provisioning IDEハードディスクの追加

Hyper-Vを使ったクラウドサービスの作り方 Vol.6

GMOインターネット株式会社 システム本部 樋口 勝一が担当するGMO最新ネット業界レポート-ソリューション編。5回に渡って特集してきた『Hyper-Vを使ったクラウドサービスの作り方』、Vol.6となる今回は『Hyper-V Provisioning IDEハードディスクの追加』について。

Hyper-V Provisioning IDEハードディスクの追加

『Hyper-Vを使ったクラウドサービスの作り方』完成までもう一息となりました。

今回はハードディスクの追加について解説します。

前回のネットワークアダプタの追加同様、若干難易度の高いコードとなりますが、こちらもある程度パターンに副っていると思ってもらえればよいと思います。 (参照:コード01)

  Function SetIDEHardDisk(ByVal objManagementScope As ManagementScope, 

  Dim objComputerSystem As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New


  objComputerSystem = objManagementObject
  Next
   
  Dim objDiskDrive As ManagementObject = Nothing
  For Each objResourcePool As ManagementObject In New 



  Dim 


  For Each objAllocationCapabilities As ManagementObject In

  Dim objSettingsDefineCapabilitiesCollection As ManagementObjectCollection 


  For Each objSettingsDefineCapabilities As ManagementObject In

  If objSettingsDefineCapabilities("ValueRole") = 0 Then
  objDiskDrive = New"PartComponent").ToString())
  objDiskDrive.Scope = objManagementScope
  End If
  Next
  Next
  Next
   
  Dim objIDEController As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New




  objIDEController = objManagementObject
  objDiskDrive("Parent") = objIDEController.Path.Path
  objDiskDrive("Address") = 0
  Next
   
  For Each objVirtualSystemManagementService As ManagementObject In New


  Dim objParams As ManagementBaseObject =


  Dim strResourceSettingData As String() = New String(0) {}
  strResourceSettingData(0) = objDiskDrive.GetText(TextFormat.CimDtd20)
  objParams("ResourceSettingData") = strResourceSettingData
  objParams("TargetSystem") = objComputerSystem.Path.Path
  Dim objManagementBaseObject As ManagementBaseObject =


  Next
   
  Dim objHardDisk As ManagementObject = Nothing
  For Each objResourcePool As ManagementObject In New




  Dim objAllocationCapabilitiesCollection As ManagementObjectCollection

  For Each objAllocationCapabilities As ManagementObject In

  Dim objSettingsDefineCapabilitiesCollection As


  For Each objSettingsDefineCapabilities As ManagementObject In

  If objSettingsDefineCapabilities("ValueRole") = 0 Then
  objHardDisk = New ManagementObject(objSettingsDefineCapabilities

  objHardDisk.Scope = objManagementScope
  End If
  Next
  Next
  Next
   
  Dim objIDEDrive As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New




  objIDEDrive = objManagementObject
  objHardDisk("Parent") = objIDEDrive.Path.Path
  objHardDisk("Connection") = New String(0) {strDiskPath}
  Next
   
  For Each objVirtualSystemManagementService As ManagementObject In New


  Dim objParams As ManagementBaseObject =




  Dim strResourceSettingData As String() = New String(0) {}
  strResourceSettingData(0) = objHardDisk.GetText(TextFormat.CimDtd20)
  objParams("ResourceSettingData") = strResourceSettingData
  objParams("TargetSystem") = objComputerSystem.Path.Path
  Dim objManagementBaseObject As ManagementBaseObject =




  Return JobComplete(objManagementBaseObject, objManagementScope)
  Next
  End Function

1行目:

引数として、ManagementScope オブジェクト、仮想マシン名、ハードディスクとして接続するvhdのファイルパスを渡します。

2~5行目:

仮想マシン名をキーにして、WMIクエリにてメモリ設定を行なう仮想マシンオブジェクトを取得します。

ここまでは前回までと同様のパターンとなります。

さて、ここからはハードディスク関連のオブジェクトの取り扱いになります。 IDEハードディスクの追加の手順としては、ディスクドライブオブジェトを作成し、IDEコントローラーに接続、次にvhdファイルパスを指定してハードディスクオブジェクトを作成します。最後に、ハードディスクオブジェクトを、ディスクドライブオブジェクトに接続する、という手順になります。

7行目:

まずはディスクドライブオブジェクトを作成します。

8行目:

ディスクドライブオブジェクトを作成する場合は、Hyper-Vのリソース一覧にあるオブジェクトを呼び出し、各パラメーターを設定して作成していきます。

Msvm_ResourcePoolクラスには仮想マシンに追加することができるリソースが格納されています。

Msvm_ResourcePoolクラスから、ResourceType = 22(Disk)、

ResourceSubType = Microsoft Synthetic Disk Drive、

OtherResourceType = null という内容でSQL文でフィルタします。

ResourceTypeについては、こちらに一覧があります。

9~19行目

Msvm_AllocationCapabilities オブジェクト(Msvm_AllocationCapabilities)、Msvm_SettingsDefineCapabilitiesオブジェクトを利用してディスクドライブオブジェクトを取得していきますが、ネットワークアダプタの追加のときと同様、この部分のコードは解説自体が非常に困難なものとなりますので、ほぼ決まり文句といった感じでこのまま利用することになります。

21行目:

ディスクドライブオブジェクトを接続するIDEコントローラーを取得します。IDEコントローラーは仮想マシンの骨組みが作成された時点で自動的に追加されていますので、改めて作成、追加する必要はありません。

22行目:

すでに作成、追加されている仮想マシンのオブジェクトはMsvm_ResourceAllocationSettingDataオブジェクトの中に格納されていますので、ResourceType = 5(IDE Controller)、ResourceSubType = Microsoft Emulated IDE Controller、

Address = 0という内容のSQL文でフィルタします。

Address = 0というのは、IDEコントローラーの番号となります。

今回はIDEコントローラーの0番にディスクドライブオブジェクトを接続します。

23~26行目:

先ほど作成したディスクドライブオブジェクトをIDEコントローラーに接続するように指定します。

28行目:

仮想マシン作成時同様に、Msvm_VirtualSystemManagementService クラスを使用して、ディスクドライブを追加していきます。Msvm_VirtualSystemManagementServiceクラスのオブジェクトの中の一つをFor~Next文で取り出します。

29行目:

AddVirtualSystemResourcesメソッドを使用して、各パラメータを設定します。

30~32行目:

ディスクドライブオブジェクトのXML化した設定情報を、ResourceSettingDataパラメーターに入力します。

33行目:

ComputerSystemパラメーターには、ディスクドライブオブジェクトを追加する仮想マシンを格納したMsvm_ComputerSystemオブジェクトを指定します。

34行目:

AddVirtualSystemResourcesメソッドを、入力したパラメーターの内容で実行します。

38行目:

ハードディスクオブジェクトを作成する場合は、Hyper-Vのリソース一覧にあるオブジェクトを呼び出し、各パラメーターを設定して作成していきます。

Msvm_ResourcePoolクラスには仮想マシンに追加することができるリソースが格納されています。

Msvm_ResourcePoolクラスから、ResourceType = 21(Storage Extent)、

ResourceSubType = Microsoft Virtual Hard Disk、OtherResourceType = null という内容のSQL文でフィルタします。

ResourceTypeについては、こちらに一覧があります。

39~49行目:

Msvm_AllocationCapabilities オブジェクト(Msvm_AllocationCapabilities)、Msvm_SettingsDefineCapabilitiesオブジェクトを利用してディスクドライブオブジェクトを取得していきます。ディスクドライブの作成のときと同様、この部分のコードは解説自体が非常に困難なものとなりますので、ほぼ決まり文句といった感じでこのまま利用することになります。 先ほど作成して、追加したディスクドライブオブジェクトを呼び出して、作成したハードディスクオブジェクトを接続します。

51行目:

ディスクドライブオブジェクトを格納する変数を定義します。

52行目:

前述のMsvm_ResourceAllocationSettingDataを利用して、IDEコントローラーの0番に接続されたディスクドライブオブジェクトを抽出します。

54行目:

追加するハードディスクは、先ほど作成したディスクドライブオブジェクトに接続します。

55行目:

追加するハードディスクで使用するvhdファイルのパスを指定します。

58行目:

ディスクドライブオブジェクトを作成したときと同様に、Msvm_VirtualSystemManagementService クラスを使用して、ディスクドライブを追加していきます。Msvm_VirtualSystemManagementServiceクラスのオブジェクトの中の一つをFor~Next文で取り出します。

59~66行目:

AddVirtualSystemResourcesメソッドを使用して追加します。ここからもほぼ定型文のようになっていますので、同様にパラメータを設定していきます。

以上で、エラーが出ること無くコードが走れば、Hyper-V上の仮想マシンにIDEコントローラー0番に接続されたハードディスクが追加されています。

今回でひととおり、仮想マシンのブロビジョニングが完了したことになります。

このほかにもWMI経由では、DVDドライブの追加や、ISOイメージファイルのマウント、VLANIDの設定など、仮想マシンに対して様々なことが設定可能となっています。その他細かい設定も順次ご紹介していく予定ですので、ご期待ください。

*本文中に記載されている会社名および商品名・サービス名は、各社の商標 または登録商標です。

著書の紹介欄

Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!

できるPRO Windows Server 2016 Hyper-V

◇Hyper-Vのさまざまな機能がわかる ◇インストールからの操作手順を解説 ◇チェックポイントやレプリカも活用できる Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。 本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。

初めてのWindows Azure Pack本が発売

Windows Azure Pack プライベートクラウド構築ガイド

本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

ブログの著者欄

樋口 勝一

GMOインターネット株式会社

1999年6月GMOインターネットに入社。Windows Serverをプラットフォームとしたサービス開発から運用・保守まで幅広く担当。講演登壇や出版、ネット記事連載などでマイクロソフト社と強い信頼関係を構築。2007年より「マイクロソフトMVPアワード」を受賞し、インターネットソリューションのスペシャリストとして活躍。

採用情報

関連記事