VIX APIを使うとゲストOSの操作を行うことが可能になります
http://communities.vmware.com/community/vmtn/developer/forums/automationapi
VIX-PerlというPerlバインディングが提供されていますが、使うにはビルドする必要があります。
Windows信者なので、まずWindowsに導入します。
おそらく必要なものは以下になります。
- Visual Studio 2008 SP1(Visual C++ 2008 Express EditionをWEBダウンロード)
- Microsoft SDK
- VMware vShphre CLI付属Perl(5.8.8)
また、VMware vShphre CLIを導入する際、ファイルパスに空白が入るとnmake時に失敗するので、うまく空白を含まない構成にしてください。
×C:\Program Files (x86)\VMware\VMware vSphere CLI\Perl\
○C:\vSphereCLI\Perl\
僕はPerlを上記の場所に移動させました。
Makefile作成時のパスはあるファイル内で定義されているので、適当に書き換えます。
perl -i.bak -pe "s/C:\\Program Files \(x86\)\\VMware\\VMware vSphere CLI/C:\\vSphereCLI/g" C:\vSphereCLI\Perl\lib\Config_heavy.pl C:\vSphereCLI\Perl\lib\Config.pm
また、VIX APIを実行する際に、MSVCR80.dllを要求するのですが、
ActivePerlとはちょっと相性が悪いのかうまくいかないので、こちらのパッチに倣って修正します。
http://harapeko.asablo.jp/blog/2006/12/21/1041020
#use vars qw(@ISA $VERSION $BORLAND $GCC $DMAKE $NMAKE); # 削除 use vars qw(@ISA $VERSION $BORLAND $GCC $DMAKE $NMAKE $VC80); # 追加
$NMAKE = 1 if $Config{'make'} =~ /^nmake/i; $VC80 = 1 if $Config{'cc'} =~ /^cl/i && system('mt >nul 2>nul') == 0; # 追加
} else { # VC my $ld_manifest_option = ' -manifest -manifestfile:$@.intermediate.manifest' if $VC80; # 追加 push(@m, # q{ $(LD) -out:$@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) } # 削除 q{ $(LD) -out:$@}.$ld_manifest_option.q{ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) } # 追加 .q{$(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)}); push @m, "\n\t", q'mt -outputresource:$@;2 -manifest $@.intermediate.manifest -nologo' if $VC80; # 追加 }
コマンドラインからビルドします。
VS2008のパスを通すためのバッチファイルがあるので利用します。それにPerlのパスを加えてあげます。
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat" PATH=C:\vSphereCLI\bin;C:\vSphereCLI\Perl\bin;%PATH% cd /D C:\PATH\TO\vix-perl\ perl Makefile.PL nmake install
あとはMSVCR80.dllをパスが通っている位置において終わりです。
vix-perl配下にあるsamplesからvmrun.plというのがあるので使ってみましょう。
(表示されるusageと実際のオプションが異なるので注意)
perl samples/vmrun.pl -h https://esxi.local/sdk -u ryozi -p PASSWORD list
Connect Failed: この操作は現在のライセンスではサポートされていません(32)
ライセンスを取らないと使えない機能だったんですねー・・・
Perl5.10以上だとか、そもそもvSphere CLI付属のPerlなんか使わずに使いたい場合も、多分同じなのかな。