You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by fa...@apache.org on 2009/05/05 19:06:23 UTC
svn commit: r771936 -
/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm
Author: fapeeler
Date: Tue May 5 17:06:23 2009
New Revision: 771936
URL: http://svn.apache.org/viewvc?rev=771936&view=rev
Log:
VCL-7
updated node_status routine so it can be called by tools outside of
vcld - specifically healthcheck
node_status:
- extended to accept non-class method calls
- changed basic flow to always get the state of a vm
- vmstate is now on,off,stuck instead of 0,1
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm?rev=771936&r1=771935&r2=771936&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm Tue May 5 17:06:23 2009
@@ -53,6 +53,7 @@
use strict;
use warnings;
use diagnostics;
+use English qw( -no_match_vars );
use VCL::utils;
use Fcntl qw(:DEFAULT :flock);
@@ -391,12 +392,12 @@
if ($a =~ /^(on|off|stuck)/i) {
$vmlist{$v}{"state"} = $a;
}
- else{
+ else {
notify($ERRORS{'WARNING'}, 0, "unknown state $a for $vmlist{$v}{path} on $hostnode");
$vmlist{$v}{"state"} = $a;
}
- }
+ } ## end foreach $a (@{$sshcmd_2[1]})
} ## end foreach my $v (keys %vmlist)
notify($ERRORS{'OK'}, 0, "ls datastorepath $datastorepath ");
my @sshcmd_3 = run_ssh_command($hostnode, $identity, "ls -1 $datastorepath", "root");
@@ -831,18 +832,18 @@
#good vm still on
notify($ERRORS{'OK'}, 0, "vm $computer_shortname reports on");
- if($sloop > 15 ){
+ if ($sloop > 15) {
my $sshd_status = _sshd_status($computer_shortname, $requestedimagename);
- if ($sshd_status eq "on") {
- notify($ERRORS{'OK'}, 0, "$computer_shortname now has active sshd running, maybe we missed the READY flag setting STAGE5 flag");
- $s5 = 1;
- #speed this up a bit
- close(TAIL);
- goto VMWAREROUND2;
- }
- }
+ if ($sshd_status eq "on") {
+ notify($ERRORS{'OK'}, 0, "$computer_shortname now has active sshd running, maybe we missed the READY flag setting STAGE5 flag");
+ $s5 = 1;
+ #speed this up a bit
+ close(TAIL);
+ goto VMWAREROUND2;
+ }
+ } ## end if ($sloop > 15)
- }
+ } ## end if ($l =~ /= on/)
elsif ($l =~ /= off/) {
#good vm still on
notify($ERRORS{'CRITICAL'}, 0, "state of vm $computer_shortname reports off after pass number $sloop attempting to restart: start attempts $vmware_starts");
@@ -918,7 +919,7 @@
$sloop = $sloop - 5;
}
- my $sshd_status = _sshd_status($computer_shortname, $requestedimagename,$image_os_type);
+ my $sshd_status = _sshd_status($computer_shortname, $requestedimagename, $image_os_type);
if ($sshd_status eq "on") {
notify($ERRORS{'OK'}, 0, "$computer_shortname now has active sshd running, maybe we missed the READY flag setting STAGE5 flag");
$s5 = 1;
@@ -971,7 +972,7 @@
$sshd_attempts++;
my $sshd_status = "off";
while (!$sshdstatus) {
- my $sshd_status = _sshd_status($computer_shortname, $requestedimagename,$image_os_type);
+ my $sshd_status = _sshd_status($computer_shortname, $requestedimagename, $image_os_type);
if ($sshd_status eq "on") {
$sshdstatus = 1;
notify($ERRORS{'OK'}, 0, "$computer_shortname now has active sshd running, ok to proceed to sync ssh keys");
@@ -1083,7 +1084,7 @@
#not default setting
if ($IPCONFIGURATION eq "dynamicDHCP") {
insertloadlog($reservation_id, $vmclient_computerid, "dynamicDHCPaddress", "collecting dynamic IP address for node");
- my $assignedIPaddress = getdynamicaddress($computer_shortname, $vmclient_OSname,$image_os_type);
+ my $assignedIPaddress = getdynamicaddress($computer_shortname, $vmclient_OSname, $image_os_type);
if ($assignedIPaddress) {
#update computer table
if (update_computer_address($vmclient_computerid, $assignedIPaddress)) {
@@ -1102,7 +1103,7 @@
} ## end if ($IPCONFIGURATION eq "dynamicDHCP")
elsif ($IPCONFIGURATION eq "static") {
insertloadlog($reservation_id, $vmclient_computerid, "staticIPaddress", "setting static IP address for node");
- if (setstaticaddress($computer_shortname, $vmclient_OSname, $vmclient_publicIPaddress,$image_os_type)) {
+ if (setstaticaddress($computer_shortname, $vmclient_OSname, $vmclient_publicIPaddress, $image_os_type)) {
# good set static address
}
}
@@ -1149,7 +1150,7 @@
my $image_os_name = $self->data->get_image_os_name;
my $image_identity = $self->data->get_image_identity;
my $image_os_type = $self->data->get_image_os_type;
- my $image_name = $self->data->get_image_name();
+ my $image_name = $self->data->get_image_name();
my $imagemeta_sysprep = $self->data->get_imagemeta_sysprep;
@@ -1296,7 +1297,7 @@
if (_pingnode($computer_nodename)) {
#it pingable check if sshd is open
notify($ERRORS{'OK'}, 0, "$computer_nodename is pingable, checking sshd port");
- my $sshd = _sshd_status($computer_nodename, $image_name,$image_os_type);
+ my $sshd = _sshd_status($computer_nodename, $image_name, $image_os_type);
if ($sshd =~ /on/) {
$rebooted = 0;
notify($ERRORS{'OK'}, 0, "$computer_nodename sshd is open");
@@ -2048,26 +2049,66 @@
sub node_status {
my $self = shift;
+ my $vmpath = 0;
+ my $datastorepath = 0;
+ my $requestedimagename = 0;
+ my $vmhost_type = 0;
+ my $log = 0;
+ my $vmhost_hostname = 0;
+ my $vmhost_imagename = 0;
+ my $vmclient_shortname = 0;
+ my $image_os_type = 0;
+ my $request_forimaging = 0;
+ my $computer_node_name = 0;
+ my $identity_keys = 0;
+
# Check if subroutine was called as a class method
if (ref($self) !~ /vmware/i) {
- notify($ERRORS{'DEBUG'}, 0, "subroutine was called as a function, it must be called as a class method");
- }
+ if (ref($self) eq 'HASH') {
+ $log = $self->{logfile};
+ #notify($ERRORS{'DEBUG'}, $log, "self is a hash reference");
+
+ $computer_node_name = $self->{computer}->{hostname};
+ $identity_keys = $self->{managementnode}->{keys};
+ $requestedimagename = $self->{imagerevision}->{imagename};
+ $image_os_type = $self->{image}->{OS}->{type};
+ $vmhost_type = $self->{vmhost}->{vmprofile}->{vmtype}->{name};
+ $vmhost_imagename = $self->{vmhost}->{imagename};
+ $vmpath = $self->{vmhost}->{vmprofile}->{vmpath};
+ $datastorepath = $self->{vmhost}->{vmprofile}->{datastorepath};
+ $vmhost_hostname = $self->{vmhost}->{hostname};
+
+ } ## end if (ref($self) eq 'HASH')
+ # Check if node_status returned an array ref
+ elsif (ref($self) eq 'ARRAY') {
+ notify($ERRORS{'DEBUG'}, $log, "self is a array reference");
+ }
- my ($package, $filename, $line, $sub) = caller(0);
+ $vmclient_shortname = $1 if ($computer_node_name =~ /([-_a-zA-Z0-9]*)(\.?)/);
- # Collect local variables from DataStructure
+ } ## end if (ref($self) !~ /vmware/i)
+ else {
+ # called as an object
+ # Collect local variables from DataStructure
- my $vmpath = $self->data->get_vmhost_profile_vmpath;
- my $datastorepath = $self->data->get_vmhost_profile_datastore_path;
- my $requestedimagename = $self->data->get_image_name;
- my $vmhost_type = $self->data->get_vmhost_type;
- my $vmhost_hostname = $self->data->get_vmhost_hostname;
- my $vmhost_imagename = $self->data->get_vmhost_image_name;
- my $vmclient_shortname = $self->data->get_computer_short_name;
- my $image_os_type = $self->data->get_image_os_type;
- my $request_forimaging = $self->data->get_request_forimaging();
-
- my ($hostnode, $identity);
+ $vmpath = $self->data->get_vmhost_profile_vmpath;
+ $datastorepath = $self->data->get_vmhost_profile_datastore_path;
+ $requestedimagename = $self->data->get_image_name;
+ $vmhost_type = $self->data->get_vmhost_type;
+ $vmhost_hostname = $self->data->get_vmhost_hostname;
+ $vmhost_imagename = $self->data->get_vmhost_image_name;
+ $vmclient_shortname = $self->data->get_computer_short_name;
+ $image_os_type = $self->data->get_image_os_type;
+ $request_forimaging = $self->data->get_request_forimaging();
+ $identity_keys = $self->data->get_management_node_keys;
+ } ## end else [ if (ref($self) !~ /vmware/i)
+
+ notify($ERRORS{'DEBUG'}, $log, "identity_keys= $identity_keys");
+ notify($ERRORS{'DEBUG'}, $log, "requestedimagename= $requestedimagename");
+ notify($ERRORS{'DEBUG'}, $log, "image_os_type= $image_os_type");
+ notify($ERRORS{'DEBUG'}, $log, "request_forimaging= $request_forimaging");
+ notify($ERRORS{'DEBUG'}, $log, "vmpath= $vmpath");
+ notify($ERRORS{'DEBUG'}, $log, "datastorepath= $datastorepath");
# Create a hash to store status components
my %status;
@@ -2080,76 +2121,65 @@
$status{vmstate} = 0; #on or off
$status{image_match} = 0;
- if ($vmhost_type eq "blade") {
- $hostnode = $1 if ($vmhost_hostname =~ /([-_a-zA-Z0-9]*)(\.?)/);
- $identity = $IDENTITY_bladerhel;
- }
- else {
- #using FQHN
- $hostnode = $vmhost_hostname;
- $identity = $IDENTITY_linux_lab if ($vmhost_imagename =~ /^(realmrhel)/);
- }
-
- if (!$identity) {
- notify($ERRORS{'CRITICAL'}, 0, "could not set ssh identity variable for image $vmhost_imagename type= $vmhost_type host= $vmhost_hostname");
+ if (!$identity_keys) {
+ notify($ERRORS{'CRITICAL'}, $log, "could not set ssh identity variable for image $vmhost_imagename type= $vmhost_type host= $vmhost_hostname");
}
# Check if node is pingable
- notify($ERRORS{'DEBUG'}, 0, "checking if $vmclient_shortname is pingable");
+ notify($ERRORS{'DEBUG'}, $log, "checking if $vmclient_shortname is pingable");
if (_pingnode($vmclient_shortname)) {
$status{ping} = 1;
- notify($ERRORS{'OK'}, 0, "$vmclient_shortname is pingable ($status{ping})");
+ notify($ERRORS{'OK'}, $log, "$vmclient_shortname is pingable ($status{ping})");
}
else {
- notify($ERRORS{'OK'}, 0, "$vmclient_shortname is not pingable ($status{ping})");
+ notify($ERRORS{'OK'}, $log, "$vmclient_shortname is not pingable ($status{ping})");
$status{status} = 'RELOAD';
return $status{status};
}
- #
my $vmx_directory = "$requestedimagename$vmclient_shortname";
my $myvmx = "$vmpath/$requestedimagename$vmclient_shortname/$requestedimagename$vmclient_shortname.vmx";
my $mybasedirname = $requestedimagename;
my $myimagename = $requestedimagename;
+ # #vm running
+ my @sshcmd = run_ssh_command($vmhost_hostname, $identity_keys, "vmware-cmd $myvmx getstate", "root");
+ foreach my $l (@{$sshcmd[1]}) {
+ notify($ERRORS{'OK'}, $log, "$l");
+ $status{vmstate} = "on" if ($l =~ /^getstate\(\) = on/);
+ $status{vmstate} = "off" if ($l =~ /= off/);
+ $status{vmstate} = "stuck" if ($l =~ /= stuck/);
- #can I ssh into it
- my $sshd = _sshd_status($vmclient_shortname, $requestedimagename,$image_os_type);
+ if ($l =~ /No such virtual machine/) {
+ #ok wait something is using that hostname
+ #reset $status{image_match} controlVM will detect and remove it
+ $status{image_match} = 0;
+ }
+ } ## end foreach my $l (@{$sshcmd[1]})
+ notify($ERRORS{'OK'}, $log, "$vmclient_shortname vmstate reports $status{vmstate}");
+ #can I ssh into it
+ my $sshd = _sshd_status($vmclient_shortname, $requestedimagename, $image_os_type);
#is it running the requested image
if ($sshd eq "on") {
- $status{ssh} = 1;
+ $status{ssh} = 1;
+
$status{currentimage} = _getcurrentimage($vmclient_shortname);
if ($status{currentimage}) {
chomp($status{currentimage});
if ($status{currentimage} =~ /$requestedimagename/) {
$status{image_match} = 1;
- notify($ERRORS{'OK'}, 0, "$vmclient_shortname is loaded with requestedimagename $requestedimagename");
+ notify($ERRORS{'OK'}, $log, "$vmclient_shortname is loaded with requestedimagename $requestedimagename");
}
else {
- notify($ERRORS{'OK'}, 0, "$vmclient_shortname reports current image is currentimage= $status{currentimage} requestedimagename= $requestedimagename");
+ notify($ERRORS{'OK'}, $log, "$vmclient_shortname reports current image is currentimage= $status{currentimage} requestedimagename= $requestedimagename");
}
} ## end if ($status{currentimage})
} ## end if ($sshd eq "on")
- # #vm running
- if ($status{image_match}) {
- my @sshcmd = run_ssh_command($hostnode, $identity, "vmware-cmd $myvmx getstate", "root");
- foreach my $l (@{$sshcmd[1]}) {
- notify($ERRORS{'OK'}, 0, "$l");
- $status{vmstate} = 1 if ($l =~ /^getstate\(\) = on/);
- $status{vmstate} = 0 if ($l =~ /= off/);
-
- if ($l =~ /No such virtual machine/) {
- #ok wait something is using that hostname
- #reset $status{image_match} controlVM will detect and remove it
- $status{image_match} = 0;
- }
- } ## end foreach my $l (@{$sshcmd[1]})
- } ## end if ($status{image_match})
# Determine the overall machine status based on the individual status results
if ($status{ssh} && $status{image_match}) {
@@ -2159,12 +2189,12 @@
$status{status} = 'RELOAD';
}
- if($request_forimaging){
+ if ($request_forimaging) {
$status{status} = 'RELOAD';
- notify($ERRORS{'OK'}, 0, "forimaging flag enabled RELOAD machine");
+ notify($ERRORS{'OK'}, $log, "forimaging flag enabled RELOAD machine");
}
- notify($ERRORS{'OK'}, 0, "returning node status hash reference (\$node_status->{status}=$status{status})");
+ notify($ERRORS{'OK'}, $log, "returning node status hash reference (\$node_status->{status}=$status{status})");
return \%status;
} ## end sub node_status