GMOインターネット株式会社 システム本部 樋口 勝一が担当するGMO最新ネット業界レポート-ソリューション編。5回に渡って特集してきた『Hyper-Vを使ったクラウドサービスの作り方』、Vol.6となる今回は『Hyper-V Provisioning IDEハードディスクの追加』について。
Hyper-V Provisioning IDEハードディスクの追加
『Hyper-Vを使ったクラウドサービスの作り方』完成までもう一息となりました。
今回はハードディスクの追加について解説します。
前回のネットワークアダプタの追加同様、若干難易度の高いコードとなりますが、こちらもある程度パターンに副っていると思ってもらえればよいと思います。 (参照:コード01)
- サンプルコードをこちらからダウンロードいただけます。 → GMOReport.zip(17KB)
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の設定など、仮想マシンに対して様々なことが設定可能となっています。その他細かい設定も順次ご紹介していく予定ですので、ご期待ください。
- サンプルコードをこちらからダウンロードいただけます。 → GMOReport.zip(17KB)
*本文中に記載されている会社名および商品名・サービス名は、各社の商標 または登録商標です。
著書の紹介欄
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に必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(418)
-
イベント(155)
-
カルチャー(35)
-
デザイン(16)
TAG
- 5G
- Adam byGMO
- AI
- AWX
- BIT VALLEY
- blockchain
- ChatGPT
- cloudnative
- CloudStack
- CM
- CNDO
- CNDT
- CODEGYM Academy
- ConoHa
- CS
- CSS
- CTF
- DC
- Designship
- DevSecOpsThon
- Docker
- DTF
- GitLab
- GMO Developers Day
- GMO Developers Night
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOイエラエ
- GMOグローバルサイン
- GMOデジキッズ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOリサーチ
- Go
- GTB
- Hardning
- Harvester
- HCI
- iOS
- IoT
- ISUCON
- JapanDrone
- Java
- JJUG
- K8s
- Kids VALLEY
- LLM
- MetaMask
- MySQL
- NFT
- NVIDIA
- OpenStack
- Perl
- PHP
- PHPcon
- PHPerKaigi
- QUIC
- Rancher
- RPA
- Ruby
- Selenium
- splunk
- SRE
- SSL
- Terraform
- TLS
- TypeScript
- UI/UX
- VLAN
- VS Code
- インターンシップ
- オブジェクト指向
- オンボーディング
- お名前.com
- カルチャー
- コンテナ
- スクラム
- スペシャリスト
- ソフトウェアテスト
- チームビルディング
- ドローン
- ネットワーク
- プログラミング教育
- ブロックチェーン
- ゆめみらいワーク
- リモートワーク
- 基礎
- 多拠点開発
- 大学授業
- 宮崎オフィス
- 応用
- 技育プロジェクト
- 新卒
- 暗号
- 機械学習
- 決済
PICKUP