仮想マシンのコンバートのデモ動画を公開しました

こんにちは! SEの高野です

先日のBlogで仮想マシン変換ツール「Shift」のご紹介をしましたが、やっと私の手元で動く環境を作ることができました。

Yotubeで公開しましたので是非御覧ください。


私が環境構築でハマった点をご紹介します

1.NetAppのPowerShell tool kit(PSTK)は最新にすること

ZAPIのエラーとなり動作しませんでした(Bugだったようです)。最新版では改修されていますので必ず最新版のPSTKを使いましょう。ネットアップのサポートサイトから入手できます。

2.ストレージへのログオン先の指定

ストレージへログオンする場合の指定は必ずマネジメントlifを指定します。

最初データlif(CIFSやNFSを処理しているlif)をログオン先に指定していましたが「xxx.vmdk is not on NetApp storage」というメッセージで変換できませんでした。

3.ネットワークパスの指定方法

\\コンピュータ名\共有名で指定すると「Source and destination files must reside on the same controller」というエラーになってしまうことがありました。

どうもDNSとの絡みのようですが、直接IP指定したほうが動作が安定するようです。

最後にYotubeのデモの中でご紹介したPowershellのスクリプトの中身を公開します!

(パスワード部分は*にしています)

ホスト名の変更やIPの付け替え等も仕込めればもっと運用に則したスクリプトが作れますよね。

<Sampleスクリプト>

Function write-Done {

    Write-Host '[' -ForegroundColor White -NoNewline

    Write-Host 'DONE' -ForegroundColor Green -NoNewline

    Write-Host ']' -ForegroundColor White

}

Add-PSSnapin VMware.VimAutomation.Core

Write-host "Connecting to ESX............" -ForegroundColor Yellow -NoNewline

Connect-VIServer -Server 10.130.205.70 -User root -Password ********* -WarningAction SilentlyContinue | OUT-NULL

write-Done

IPMO DataONTAP

Write-host "Connecting to Data ONTAP....." -ForegroundColor Yellow -NoNewline

Connect-NCController -Name 10.130.204.119 -Credential vsadmin

write-Done

Write-host "Enumerating VMs.............." -ForegroundColor Yellow -NoNewline

$VMS = VMware.VimAutomation.Core\get-vm|Out-GridView -OutputMode Multiple -Title "変換したい仮想マシンを選択してください"

write-Done

Foreach ($VM in $VMS)

{

    $start = Get-Date

    Write-host "Creating VM in Hyper-V......." -ForegroundColor Yellow   -NoNewline

    $NewVM = Hyper-V\New-VM -BootDevice ide -NoVHD -MemoryStartupBytes ($vm.MemoryGB * 1GB) -SwitchName VM_A -Path \\10.130.204.116\shift_share\ -Name $VM.Name

    write-Done

    Get-HardDisk -vm $VM | ?{ $_.Filename -Match "^\S+\s+(?<File>.+)"}| ForEach-Object {

        $VHDX = '{0}\{1}.vhdx' -f $NewVM.ConfigurationLocation,[regex]::Match( $Matches.File,"\/(?<file>.+)(?=.vmdk)").Groups[1].Value

        $VMDK = ('\\10.130.204.116\shift_share\{0}' -F $Matches.File.replace('/','\'))

        Write-host "Converting VMDK to VHDX......" -ForegroundColor Yellow -NoNewline

        ConvertTo-NaVhdx -SourceVmdk $VMDK -DestinationVhdx $VHDX | Out-Null

        write-Done

        Write-host "Mounting VHDX................" -ForegroundColor Yellow -NoNewline

        Hyper-V\Add-VMHardDiskDrive -ControllerType IDE -ControllerLocation 0 -ControllerNumber 0 -Path $VHDX -VMName $NewVM.Name | out-null

        write-Done

    }

    Write-host ("Finished $VM in {0} Seconds" -f [MATH]::Round((New-TimeSpan -Start $start).TotalSeconds)) -ForegroundColor Green

    Hyper-V\Start-VM -Name $NewVM.Name

}

<Sampleスクリプト end>

この辺アイデア次第で色々なことができそうなので、またこのBligで紹介していきたいと思います。