2018年3月20日火曜日

rbVmomi で vMotion する方法 (MigrateVM_Task 編)

概要

rbVmomi を使って VM の vMotion をしてみました
今回は MigrateVM_Task を使って vMotion しています

環境

  • Ubuntu 16.04.3
  • Ruby 2.3.1p112
  • gem 2.5.1
  • rbvmomi 1.11.3
  • vCenter 6.5

コード

require 'rbvmomi'

vim = RbVmomi::VIM.connect(
  host: '192.168.100.1',
  user: 'vcenter-user',
  password: 'vcenter-pass',
  insecure: 'true'
)

dc = vim.serviceInstance.find_datacenter('datacenter') || fail('datacenter not found')
vm = dc.find_vm('directory/path/to/vm') || fail('VM not found')

host = nil
priority = :defaultPriority
dc.hostFolder.children.each { |cluster|
  if cluster.is_a? RbVmomi::VIM::ClusterComputeResource
    host = cluster.host.select { |host|
      host.name == 'target_hostname'
    }.first
  end
}
vm.MigrateVM_Task(host: host, priority: priority).wait_for_completion

host と priority を指定しています
host は文字列をただ指定するだけではだめで HostSystem クラスのオブジェクトを設定する必要があります

今回はクラスタ直下にあるホストを取得していますが環境によってはフォルダを挟んでいる環境もあると思うので検索ロジックの部分は必要に併せて変更してください

最後に

MigrateVM_Task を使って rbVmomi で vMotion してみました
ちなみに MigrateVM_Task は vCenter 6.5 では deprecated になっているので RelocateVM_Task を使うようにしましょう

0 件のコメント:

コメントを投稿