#!/usr/bin/perl # PURPOSE: ADD SERVERS TO THE vMA # CREATED BY: Rob Mokkink rob@mokkinksystems.com use strict; use warnings; use VMware::VIRuntime; #VARIABLES my $entity_type = "HostSystem"; #PARSE AND VALIDATE OPTIONS Opts::parse(); Opts::validate(); #GET VCENTER SERVER NAME my $VCSERVER = Opts::get_option('server'); #GET THE USER SPECIFIED IN THE CONNECTION my $USER = Opts::get_option('username'); #SANITY CHECK IF THE vCENTER SERVER IS NOT LOCALHOST if ($VCSERVER eq "localhost") { print "vCENTER SERVER IS LOCALHOST, USE --server \n"; exit } #CHECK IF THE USERNAME CONTAINS A BACKWARD SLASH if (! $USER =~ m/\\/g) { print "USERNAME IS NOT CORRECT, USE \\n"; exit } #CONNECT TO THE vCENTER SERVER Util::connect(); #ASSIGN $USER TO A NEW VARIABLE $USER2 my $USER2 = $USER; #REPLACE A SINGLE SLASH WITH 2 SLASHES $USER2 =~ s/\\/\\\\/g || die("CAN'T ADD EXTRA BACKSLASH"); #ADD THE VCENTER SERVER TO vMA my $CHECK_ADD = ADD_SRV_vMA($USER2,$VCSERVER); #ERROR HANDLING if ($CHECK_ADD ne "true") { print "ERROR ADDING $VCSERVER TO vMA\n"; } else { print "$VCSERVER ADDED TO vMA\n"; } #GET ALL THE ESX HOSTS FROM vCENTER my $ARR_ESX = Vim::find_entity_views(view_type => $entity_type); #LOOP THROUGH THE ARRAY OF ESX SERVERS foreach my $ESX_HOST (@$ARR_ESX) { my $ESX_NAME = $ESX_HOST->name; #ADD SERVER TO vMA $CHECK_ADD = ADD_SRV_vMA($USER2,$ESX_NAME); #ERROR HANDLING if ($CHECK_ADD ne "true") { print "ERROR ADDING $ESX_NAME TO vMA\n"; } else { print "$ESX_NAME ADDED TO vMA\n"; } } #DISCONNECT FROM THE vCENTER SERVER Util::disconnect(); #FUNCTIONS sub ADD_SRV_vMA { #VARIABLES my $JOINUSER = $_[0]; my $SRV = $_[1]; my $SUDO = "/usr/bin/sudo"; my $VIFP = "/usr/bin/vifp"; my $STRCMD = $SUDO . " " . $VIFP . " addserver " . $SRV . " --authpolicy adauth --username " . $JOINUSER; system($STRCMD); #ERROR HANDLING if ($? == 0) { return "true"; } else { return "false"; } }