Quantcast
Channel: VMware Communities : Blog List - All Communities
Viewing all articles
Browse latest Browse all 3135

PowerCLI から Nested ESXi の esxcli を実行してみる。(GuestProcessManager)

$
0
0

ESXi 上の VM に ESXi をインストールする「Nested ESXi」と呼ばれる使用方法があり、

検証環境や、vSAN Witness Appliance などで利用されています。

Running Nested VMs

 

Nested ESXi は物理マシンへのインストールと同様に DCUI からの設定作業ができるため

通常は、VM コンソールから設定をすることになります。

nested-esxi-vm.png

 

しかし VM であり、しかも最近の ESXi 6.x ではデフォルトで VMware Tools がインストールされます。

そのため Nested ESXi では、ネットワーク設定前であっても

vSphere のレイヤから直接での設定投入ができます。

 

通常、PowerCLI からゲスト OS の設定を変更する場合は Invoke-VMScript を使用しますが、

ScriptType で指定できるインタープリタは PowerShell、Bat、Bash だけなので

ESXi ではスクリプト(コマンド)が実行できません。

 

Invoke-VMScript

https://code.vmware.com/doc/preview?id=6330#/doc/Invoke-VMScript.html

 

そこで、ためしに vSphere Web Services API の GuestOperationsManager にある

GuestProcessManager を利用して esxcli コマンドを実行してみました。

 

GuestProcessManager

https://code.vmware.com/apis/358/vsphere?h=GuestOperationsManager#/doc/vim.vm.guest.ProcessManager.html

 

今回は、下記のようなサンプル スクリプトを作成してみました。

エラー制御などは、あえて一切いれていないので、

実行してみる場合はお好みで改造していただければと・・・

invoke_nested-esxcli.ps1 · GitHub

 

スクリプトの内容は下記のようになっています。

param($ESXiVM, $ESXiUser, $ESXiPass)

 

# 最初に変数設定。

$vm_name = $ESXiVM

$esxi_user = $ESXiUser

$esxi_pass = $ESXiPass

$esxcli_args = $args

 

$vm = Get-VM $vm_name | select -First 1

$vm_id = $vm.Id

$vc_name = $vm.Uid  -replace "^.*@|:.*$",""

$vc = $global:DefaultVIServers | where {$_.Name -eq $vc_name}

 

"ESXi VM Name:" + $vm.Name

"esxcli args: " + $esxcli_args

 

# ESXi の認証情報をセット。

$cred = New-Object VMware.Vim.NamePasswordAuthentication

$cred.Username = $esxi_user

$cred.Password = $esxi_pass

 

# esxcli コマンドをフルパスで指定。

$gps = New-Object VMware.Vim.GuestProgramSpec

$gps.WorkingDirectory = "/tmp"

$gps.ProgramPath = "/bin/esxcli"

$gps.Arguments = $esxcli_args

 

# ここでコマンド実行。

$gom = Get-View $vc.ExtensionData.Content.GuestOperationsManager

$pm = Get-View $gom.ProcessManager

$gos_pid = $pm.StartProgramInGuest($vm_Id, $cred, $gps)

$pm.ListProcessesInGuest($vm_Id, $cred, $gos_pid)

 

実行するときには、まず Nested VM を管理している vCenter に接続しておきます。

PowerCLI> Connect-VIServer <vCenter アドレス>

 

このスクリプトでは、esxcli のオプションを通常どおり指定しやすいように工夫しています。

実行方法は、下記のような感じです。

PowerCLI> .\invoke_nested-esxcli.ps1<esxcli option> -ESXiVM:<Nested ESXi VM Name> -ESXiUser:<Nested ESXi User Name> -ESXiPass:<Nested ESXi User password>

 

もしくは・・・

PowerCLI> .\invoke_nested-esxcli.ps1 -ESXiVM:<Nested ESXi VM Name> -ESXiUser:<Nested ESXi User Name> -ESXiPass:<Nested ESXi User password> <esxcli option>

 

たとえば「esxcli system hostname set --host ~ --domain ~」の実行は

下記のようになります。

PowerCLI> .\invoke_nested-esxcli.ps1 system hostname set --host hv-n23w --domain go-lab.jp -ESXiVM:hv-n23w -ESXiUser:root -ESXiPass:VMware1!

ESXi VM Name:hv-n23w

esxcli args: system hostname set --host hv-n23w --domain go-lab.jp

 

Name      : esxcli

Pid       : 2278253

Owner     : root

CmdLine   : "/bin/esxcli" system hostname set --host hv-n23w --domain go-lab.jp

StartTime : 2018/04/22 2:52:18

EndTime   :

ExitCode  :

 

 

これだとコマンドの出力結果は取得できないのですが、

Nested ESXi をネットワーク設定して vCenter に登録してしまえば

vCenter 経由で ESXi の設定確認ができるので、うちでは設定投入するだけの利用をしています。

 

ちなみに、今回の環境では下記でした。

  • 物理環境: vCenter 6.5 U1 / ESXi 6.5 U1
  • Nested ESXi: ESXi 6.7
  • PowerCLI 10.0.0 / PowerShell 5.1 / Windows 10

 

以上、PowerCLI から Nested ESXi の esxcli を実行してみる話でした。


Viewing all articles
Browse latest Browse all 3135

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>