středa 19. září 2012

VMware vSphere Perl SDK

Potřeboval jsem si zprovoznit VMware API a šáhnul jsem po jednom z několika nástrojů, které VMware má k dispozici. Tyto nástroje hodlám použít pro monitorovani ESXi hypervisorů např. dle tohoto návodu na Zabbix fóru.

vSphere Perl SDK jsem si instaloval na třech různých OS. FreeBSD, CentOS a Ubuntu Desktop. Toto SDK má v sobě nejen Perlovské knihovny, ale i připravené CLI příkazy též postavené na Perlu, které umí poměrně hodně věcí. Již dříve jsem si CLI instaloval. Většina API nástrojů je integrována ve virtuálce vMA. Osobně jsem se rozhodl Perl SDK instalovat na své systémy.

FreeBSD 8.x i 9.x

Existuje port, který je momentálně ve verzi 5.0.0. Instalace všech závislostí je velmi snadná.

fetch http://nekde/VMware-vSphere-Perl-SDK-5.0.0-422456.i386.tar.gz
mv VMware-vSphere-Perl-SDK-5.0.0-422456.i386.tar.gz /usr/ports/distfiles/


cd /usr/ports/net/vmware-vsphere-cli && make install


Po instalaci je dobré zohlednit postinstalační zprávu.

========================================================================
Please note that, by default, an underlying Perl module does certificate
verification when communicating with vSphere hosts.

You must create a file that contains the public keys of all of your
vSphere hosts and then configure your Perl scripts to have the following
line:
$ENV{HTTPS_CA_FILE} = "/path/to/file";

If you want to disable this important security feature, you may set the
following variable to 0:
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}
========================================================================


Balíček se jmenuje přesně takto.

vmware-vsphere-cli-5.0.0 VMware vSphere SDK for Perl with CLI tools

Jakou verzi používáme zjistíme následovně.

perl -MVMware::VIRuntime -e 'print $VMware::VIRuntime::VERSION'
5.0


Pro programování v perlu jsou důležité tyto Perlovské moduly.

VMware::VIM25Runtime
VMware::VIM2Stub
VMware::VIM2Runtime
VMware::VICommon
VMware::VILib
VMware::VIM25Stub


Nutno dodat, že port neobsahuje binárky esxcli!

CentOS 6.3 x86_64

Instalace na této distribuci odvozené od RHEL je poněkud komplikovanější. Je to kombinace tří zdrojů. Některé baličky jsou z oficiálního repositáře. Dále je nutný EPEL a jeden Perl modul jsem musel instalovat ručně.

Instalaci jsem konfrontoval s oficiální dokumentací vsphere-esxi-vcenter-server-51-sdk-for-perl-installation-guide.pdf, kde není instalace kompletní. Sice se část nainstaluje dle návodu, ale spoustu Perl modulů - balíčků musíme instalovat sami. Já si své instalované moduly poznamenám.

Instalace dle návodu k RHEL

yum install openssl-devel libxml2-dev e2fsprogs-dev

Nastavení proxy bylo vyžadováno ...

export ftp_proxy=http://192.168.42.7:8080
export http_proxy=http://192.168.42.7:8080

Stáhneme si instalační soubor.

VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz

tar xvzf VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz
cd vmware-vsphere-cli-distrib && ./vmware-install.pl

Instalátor si žádá následující balíčky o kterých dokumentace píše obecně. Názvy uváděny nejsou.

yum install perl-Archive-Zip perl-Compress-Zlib perl-Crypt-SSLeay perl-Class-MethodMaker perl-HTML-Parser perl-SOAP-Lite perl-XML-SAX perl-ExtUtils-CBuilder perl-libxml-perl perl-XML-LibXML-Common

Né vše je v oficiálním repo.

rpm -i http://ftp.fi.muni.cz/pub/linux/fedora/epel/6/i386/epel-release-6-7.noarch.rpm
yum update
zum install uuid-perl perl-Data-Dump


Instalátor si žádá verzi UUID 0.03 or newer, která není ani v jednom repo.

Doinstalujeme si nástroje pro build.

yum install make gcc libuuid-devel

Na stránce  http://search.cpan.org/~jnh/UUID/UUID.pm si najdeme odkaz ke stažení src.

wget http://search.cpan.org/CPAN/authors/id/J/JN/JNH/UUID-0.04.tar.gz
tar xvzf UUID-0.04.tar.gz && cd UUID-0.04
perl Makefile.PL
make install clean

Instalace již doběhla s varováním, které zatím ignoruji. Co jsem od SDK potřeboval fungovalo.

The following Perl modules were found on the system but may be too old to work
with vSphere CLI:

Compress::Zlib 2.037 or newer
Compress::Raw::Zlib 2.037 or newer
version 0.78 or newer
IO::Compress::Base 2.037 or newer
IO::Compress::Zlib::Constants 2.037 or newer
LWP::Protocol::https 5.805 or newer

Enjoy,

--the VMware team

Ubuntu 12.04 LTS Desktop

Naposledy jsem si instaloval VMware vSphere Perl SDK na notebook. Instalace je opět pro Ubuntu 10.04 popisována v dokumentaci. Taktéž je doporučeno instalovat jen něco.

32 bit
sudo apt-get install build-essential gcc uuid uuid-dev perl libssl-dev perl-doc liburi-perl libxml-libxml-perl libcrypt-ssleay-perl
64 bit
sudo apt-get install ia32-libs build-essential gcc uuid uuid-dev perl libssl-dev perl-doc liburi-perl libxml-libxml-perl libcrypt-ssleay-perl

Doinstalovávám tyto deb balíky

libarchive-zip-perl
libcrypt-ssleay-perl
libclass-methodmaker-perl
libdata-dump-perl
libsoap-lite-perl


tar xvzf VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz
cd vmware-vsphere-cli-distrib


Test verze Perl SDK.

perl -MVMware::VIRuntime -e 'print $VMware::VIRuntime::VERSION'
5.1.0


Test spojeni s ESXi pomocí připravených ukázkových scriptů.

cd /usr/lib/vmware-vcli/apps/general/
./connect.pl --url https://192.168.42.13/sdk/webService --username root --password ***
Connection Successful
Server Time : 2012-09-19T12:31:19.505723Z


Pokud se nám objevuje chybová hláška začínající ...

Server version unavailable at ...

Slevíme z bezpečnosti a nastavíme si danou proměnnou na zero.

export PERL_LWP_SSL_VERIFY_HOSTNAME=0

Teď už jen zažít programovat :-) Jinak mnoho zajímavých informací je na blogu vmware http://blogs.vmware.com/vsphere/tag/vsphere-api

Zabbix

Pro otestování Perl SDK je možno užít a mírně modifikovat tento script

time ./zabbix_perl_api_vmware.pl 192.168.42.13 ahKaer5a root
0

real    0m27.655s
user    0m19.087s
sys    0m0.253s


Tento script do /tmp/vmware_api_IP.txt vytvoří soubor s informacema o běhu ESXi.

Array_0.Queue_Command_Latency.average:    0
Uptime:    2251653
Array_0.Disk_Write_Requests.summation:    2768
Array_0.Disk_Read_Requests.summation:    1872
CpuUsed:    800000000
MEM_consumed:    5467086848
Array_0.Physical_Device_Write_Latency.average:    0
vmnic1.duplex:    0
Array_0.Disk_Command_Latency.average:    3
MEM_shared:    337231872
vmnic1.state:    0
MEM_swapused:    0
Array_0.Disk_Commands_Issued.summation:    4641
Volume.Capacity_datastore1:    744371519488
MEM_heapfree:    8821760
MEM_overhead:    329478144
Array_0.Disk_Command_Aborts.summation:    0
vmnic0.Network_Packets_Received.summation:    926
MEM_unreserved:    7255425024
vmnic1.speed:    0
Array_0.Queue_Read_Latency.average:    0
Volume.Free_NFSDATA:    5556114989056
MEM_zero:    188387328
vmnic0.Network_Data_Receive_Rate.average:    65536
Array_0.Disk_Bus_Resets.summation:    0
Volume.Capacity_NFSDATA:    5902284800000
MEM_swapout:    0
MEM_vmmemctl:    0
MaintenanceMode:    0
MEM_sysUsage:    382578688
Array_0.Queue_Write_Latency.average:    0
MEM_reservedCapacity:    321536
Array_0.Disk_Read_Rate.average:    1150976
MEM_swapin:    0
MEM_usage:    6522880
Array_0.Kernel_Disk_Command_Latency.average:    0
Array_0.Disk_Write_Rate.average:    2843648
vmnic0.state:    1
Array_0.Physical_Device_Read_Latency.average:    7
Array_0.Kernel_Disk_Read_Latency.average:    0
Array_0.Disk_Read_Latency.average:    7
MEM_state:    0
MEM_granted:    5213470720
Volume.Free_datastore1:    158921129984
vmnic0.duplex:    1
Array_0.Disk_Write_Latency.average:    1
MemSize:    8582520832
Array_0.Physical_Device_Command_Latency.average:    3
vmnic0.speed:    1048576000
Array_0.Kernel_Disk_Write_Latency.average:    1
MemUsage:    5465178112
MEM_active:    647704576
MEM_sharedcommon:    132751360
CpuTotal:    11304000000
vmnic0.Network_Data_Transmit_Rate.average:    565248
vmnic0.Network_Packets_Transmitted.summation:    886

Žádné komentáře: