2018年3月21日水曜日

rbVmomi で vMotion する方法 (RelocateVM_Task 編)

概要

rbVmomi を使って VM の vMotion をしてみました
今回は RelocateVM_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
}

migrate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(host: host)
vm.RelocateVM_Task(spec: migrate_spec, priority: priority).wait_for_completion

RelocateVM_Task の場合 VirtualMachineRelocateSpec を引数に取ります
また今回は host のみを指定しているため単純なホスト間の vMotion になりますがストレージ情報も指定できます
ストレージ情報を指定すると Storage vMotion にすることができます

host の情報は MigrateVM_Task 同様 HostSystem の情報を指定する必要があります

最後に

RelocateVM_Task を使って rbVmomi から vMotion してみました
vSphere 6.5 からはこちらを使うことが推奨されています

0 件のコメント:

コメントを投稿