VMWare VIX APIのPerlバインディングの導入(Windows)

VIX APIを使うとゲストOSの操作を行うことが可能になります
http://communities.vmware.com/community/vmtn/developer/forums/automationapi


VIX-PerlというPerlバインディングが提供されていますが、使うにはビルドする必要があります。
Windows信者なので、まずWindowsに導入します。


おそらく必要なものは以下になります。


また、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なんか使わずに使いたい場合も、多分同じなのかな。