読者です 読者をやめる 読者になる 読者になる

harry’s memorandum

おれおれメモ

VMware VIX を使って仮想マシンを色々操作してみる 2

VMware VIX にあるperlAPIを使ってみます。
CやPerlAPIは別途コンパイルしてあげないといけないのでコンパイルします。インストール先にアーカイブがありますので展開して make && make install します。

$ gzip -cd /usr/lib/vmware-vix/vix-perl.tar.gz | tar xvf -
$ cd vix-perl/
$ perl Makefile.PL
$ make
$ sudo make install

これで終わりです。Perlだとこんな感じで仮想マシンのsnapshotを取得できます。*1

#!/usr/bin/perl

use strict;
use warnings;
use DateTime;
use VMware::Vix::Simple;
use VMware::Vix::API::Constants;

my $now = DateTime->now( time_zone => 'local' );
my $err = VIX_OK;
my $hostHandle = VIX_INVALID_HANDLE;
my $vmHandle = VIX_INVALID_HANDLE;
my $snapshotHandle = VIX_INVALID_HANDLE;

my %vix = (
  'url' => "https://myesxserver/sdk",
  'u' => "user",
  'p' => "password",
  'vmx' => "[data1] CentOS5.3/CentOS5.3.vmx",
);

($err, $hostHandle) = HostConnect(VIX_API_VERSION,
                                  VIX_SERVICEPROVIDER_VMWARE_VI_SERVER,
                                  $vix{'url'}, # hostName
                                  0, # hostPort
                                  $vix{'u'}, # userName
                                  $vix{'p'}, # password
                                  0, # options
                                  VIX_INVALID_HANDLE); # propertyListHandle

die "HostConnect() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;

($err, $vmHandle) = VMOpen($hostHandle, $vix{'vmx'});
die "VMOpen() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;

$err = VMPowerOn($vmHandle,
                 VIX_VMPOWEROP_LAUNCH_GUI, # powerOnOptions
                 VIX_INVALID_HANDLE);  # propertyListHandle
die "VMPowerOn() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;

# Create snapshot in powered-on state.
($err, $snapshotHandle) = VMCreateSnapshot($vmHandle,
                                           $now, # name
                                           undef, # description
                                           VIX_SNAPSHOT_INCLUDE_MEMORY, # options
                                           VIX_INVALID_HANDLE);

*1:リファレンスのサンプルコードのパクリです