2018年12月21日金曜日

InstantClone_Task 時に guestinfo を渡す方法

概要

前回 InstantClone をサクっと試してみました
実は InstantClone_Task 実行時に作成されたインスタントクローン VM に guestinfo を渡すことができます
gusetinfo は簡単に言えば GuestOS (例えば Ubuntu など) 上で参照することができる変数です

環境

  • VCSA 6.7.0.20000 build 10244745
  • ESXi 6.7.0 Update 1 (Build 10302608)
  • Ruby 2.5.0p0
  • rbvmomi (2.0.0)

guestinfo を指定する方法

spec に config を key/value 形式で並べるだけです

<spec>
   <name>ic01</name>
   <location></location>
   <!-- ok -->
   <config>
      <key>guestinfo.ic.hoge</key>
      <value xsi:type="xsd:string">guestinfo.ic.hoge</value>
   </config>
   <config>
      <key>guestinfo.ic.fuga</key>
      <value xsi:type="xsd:string">guestinfo.ic.fuga</value>
   </config>
   <config>
      <key>guestinfo.iic.fuga</key>
      <value xsi:type="xsd:string">guestinfo.iic.fuga</value>
   </config>
   <config>
      <key>guestinfo.fuga</key>
      <value xsi:type="xsd:string">guestinfo.fuga</value>
   </config>
   <!-- ng -->
   <config>
      <key>ic.fuga</key>
      <value xsi:type="xsd:string">ic.fuga</value>
   </config>
   <config>
      <key>fuga</key>
      <value xsi:type="xsd:string">fuga</value>
   </config>
</spec>

少しポイントがあります
渡せる key に制約があるようで必ず guestinfo で始まっている必要がありました
もし制約違反していると値が GuestOS 側に渡りません
参照しても Invalid key name supplied になります
また、存在しない key を指定すると No value found になります

どうやって参照するの

vmware-tools の機能を使います
vmware-tools がインストールされていると vmware-rpctool コマンドが使えます
実際にインスタントクローンされた VM にログインして以下のコマンドを叩いてみましょう

  • vmware-rpctool "info-get guestinfo.ic.hoge"

すると設定した value 側の値が取得できると思います

おまけ: rbvmomi でやってみた

require 'rbvmomi'

vim = RbVmomi::VIM.connect(
  host: '192.168.100.30',
  user: 'administrator@vsphere.local',
  password: 'xxxxxxxxxxx',
  insecure: 'true',
  rev: '6.7.1'
)

dc = vim.serviceInstance.find_datacenter('Datacenter') || fail('datacenter not found')
vm = dc.find_vm('u18_01') || fail('VM not found')

spec = {
  name: "ic01", location: "",
  config: [
    {key: "guestinfo.ic.hoge", value: "hoge"},
    {key: "guestinfo.ic.fuga", value: "fuga"}
  ]
}
ret = vm.InstantClone_Task(spec: spec).wait_for_completion
puts ret

spec の指定を mob で実行する spec に合わせるだけです

最後に

InstantClone_Task 時に gusetinfo を渡す方法を紹介しました
実はこれを応用すると前回紹介した InstantClone 時に IP アドレスがバッティングしてしまう問題を解決することができます

要するにネットワーク情報を guestinfo で渡してインスタントクローン VM が作成されたときにネットワークを設定するスクリプトを実行することでバッティングを解消するという流れになります

ちょっと力技感も強いですがこちらで紹介されていたのでほぼオフィシャルなのかなと思います
具体的なやり方も分かったら紹介したいと思います

参考サイト

0 件のコメント:

コメントを投稿