Author: arkurth
Date: Tue Jun 16 17:15:49 2009
New Revision: 785304
URL: http://svn.apache.org/viewvc?rev=785304&view=rev
Log:
VCL-158
Added multiple netsh attempts to Windows_mod.pm::set_static_public_address().
The netsh command occasionally fails but can be successfully run on subsequent
attempts.
VCL-153
xCAT21.pm::get_image_size() was failing because of the way the output was being
parsed. I updated how xCAT.pm::get_image_size() parses the du command output.
This subroutine also works for xCAT 2.1 so the xCAT21.pm::get_image_size() was
removed.
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows_mod.pm
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows_mod.pm
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows_mod.pm?rev=785304&r1=785303&r2=785304&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows_mod.pm
(original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows_mod.pm Tue Jun
16 17:15:49 2009
@@ -7159,32 +7159,45 @@
notify($ERRORS{'DEBUG'}, 0, "network configuration:\ninterface:
$public_interface_name\npublic IP address: $public_ip_address\nsubnet
mask=$subnet_mask\ndefault gateway=$default_gateway\ndns server=$dns_server");
- # Assemble the commands
- my $address_command = "netsh interface ip set address
name=\"$public_interface_name\" source=static addr=$public_ip_address
mask=$subnet_mask gateway=$default_gateway gwmetric=0";
- my $dns_command = "netsh interface ip set dns
name=\"$public_interface_name\" source=static addr=$dns_server register=none";
-
# Set the static public IP address
- my ($address_exit_status, $address_output) =
run_ssh_command($computer_node_name, $management_node_keys, $address_command);
- if (defined($address_exit_status) && $address_exit_status == 0) {
- notify($ERRORS{'DEBUG'}, 0, "set static public IP address to
$public_ip_address");
- }
- elsif (defined($address_exit_status)) {
- notify($ERRORS{'WARNING'}, 0, "failed to set static public IP
address to $public_ip_address, exit status: $address_exit_status,
output:\...@{$address_output}");
- return;
- }
- else {
- notify($ERRORS{'WARNING'}, 0, "failed to run ssh command to set
static public IP address to $public_ip_address");
- return;
+ my $address_command = "netsh interface ip set address
name=\"$public_interface_name\" source=static addr=$public_ip_address
mask=$subnet_mask gateway=$default_gateway gwmetric=0";
+
+ # Set number of attempts to try netsh commands
+ my $max_attempts = 3;
+ my $address_attempts = 0;
+ while ($address_attempts < $max_attempts) {
+ $address_attempts++;
+ my ($address_exit_status, $address_output) =
run_ssh_command($computer_node_name, $management_node_keys, $address_command);
+ if (defined($address_exit_status) && $address_exit_status == 0)
{
+ notify($ERRORS{'DEBUG'}, 0, "set static public IP
address to $public_ip_address");
+ last;
+ }
+ elsif (defined($address_exit_status)) {
+ notify($ERRORS{'WARNING'}, 0, "attempt
$address_attempts/$max_attempts: failed to set static public IP address to
$public_ip_address, exit status: $address_exit_status,
output:\...@{$address_output}");
+ }
+ else {
+ notify($ERRORS{'WARNING'}, 0, "attempt
$address_attempts/$max_attempts: failed to run ssh command to set static public
IP address to $public_ip_address");
+ return;
+ }
+
+ # Check if max attempts has been reached.
+ if ($address_attempts >= $max_attempts) {
+ notify($ERRORS{'WARNING'}, 0, "failed to set static
public IP address after making $address_attempts attempts");
+ return 0;
+ }
+
+ sleep 2;
}
# Set the static DNS server address
+ my $dns_command = "netsh interface ip set dns
name=\"$public_interface_name\" source=static addr=$dns_server register=none";
my ($dns_exit_status, $dns_output) =
run_ssh_command($computer_node_name, $management_node_keys, $dns_command);
if (defined($dns_exit_status) && $dns_exit_status == 0) {
notify($ERRORS{'DEBUG'}, 0, "set static DNS server address to
$dns_server");
}
elsif (defined($dns_exit_status)) {
notify($ERRORS{'WARNING'}, 0, "failed to set static DNS server
address to $dns_server, exit status: $dns_exit_status,
output:\...@{$dns_output}");
- return;
+ return 0;
}
else {
notify($ERRORS{'WARNING'}, 0, "failed to run ssh command to set
static DNS server address to $dns_server");
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm?rev=785304&r1=785303&r2=785304&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm
(original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm Tue
Jun 16 17:15:49 2009
@@ -3173,37 +3173,30 @@
}
# Execute the command
- my $du_command = "du -c $image_repository_path/$image_name* 2>&1";
+ my $du_command = "du -c $image_repository_path/$image_name.* 2>&1";
notify($ERRORS{'DEBUG'}, 0, "du command: $du_command");
my $du_output = `$du_command`;
# Save the exit status
my $du_exit_status = $? >> 8;
-
- # Check if $? = -1, this likely means a Perl CHLD signal bug was
encountered
- if ($? == -1) {
- notify($ERRORS{'OK'}, 0, "\$? is set to $?, setting exit status
to 0, Perl bug likely encountered");
- $du_exit_status = 0;
- }
-
- # Check the du command output
- if ($du_exit_status > 0) {
- notify($ERRORS{'WARNING'}, 0, "du exit status > 0:
$du_exit_status, output:\n$du_output");
- return 0;
+
+ # Make sure du produced output
+ if (!defined($du_output) || length($du_output) == 0) {
+ notify($ERRORS{'WARNING'}, 0, "du did not product any output,
du exit status: $du_exit_status");
+ return;
}
- elsif ($du_output !~ /total/s) {
- notify($ERRORS{'WARNING'}, 0, "du command did not produce
expected output, du exit staus: $du_exit_status, output:\n$du_output");
- return 0;
+
+ # Check if image doesn't exist
+ if ($du_output && $du_output =~ /No such file.*0\s+total/is) {
+ notify($ERRORS{'WARNING'}, 0, "image does not exist:
$image_repository_path/$image_name.*");
+ return;
}
-
- # Find the du output line containing 'total'
- $du_output =~ /(\d+)\s+total/s;
- my $size_bytes = $1;
-
+
# Check the du command output
- if (!$size_bytes) {
- notify($ERRORS{'WARNING'}, 0, "du produced unexpected output:
$du_exit_status, output:\n$du_output");
- return 0;
+ my ($size_bytes) = $du_output =~ /(\d+)\s+total/s;
+ if (!defined $size_bytes) {
+ notify($ERRORS{'WARNING'}, 0, "du command did not produce
expected output, du exit staus: $du_exit_status, output:\n$du_output");
+ return;
}
# Calculate the size in MB
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm?rev=785304&r1=785303&r2=785304&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm
(original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm
Tue Jun 16 17:15:49 2009
@@ -2771,80 +2771,6 @@
#/////////////////////////////////////////////////////////////////////////////
-=head2 get_image_size
-
- Parameters : $image_name (optional)
- Returns : 0 failure or size of image
- Description : in size of Kilobytes
-
-=cut
-
-sub get_image_size {
- my $self = shift;
- if (ref($self) !~ /xCAT/i) {
- notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a
function, it must be called as a class method");
- return 0;
- }
-
- # Either use a passed parameter as the image name or use the one stored
in this object's DataStructure
- my $image_name = shift;
- $image_name = $self->data->get_image_name() if !$image_name;
- if (!$image_name) {
- notify($ERRORS{'CRITICAL'}, 0, "image name could not be
determined");
- return 0;
- }
- notify($ERRORS{'DEBUG'}, 0, "getting size of image: $image_name");
-
- my $image_repository_path = $self->_get_image_repository_path();
- if (!$image_repository_path) {
- notify($ERRORS{'CRITICAL'}, 0, "unable to determine image
repository location, returning 0");
- return 0;
- }
-
- # Execute the command
- # TODO add gzip support
- my $du_command = "du -c $image_repository_path/$image_name*.img
$image_repository_path/$image_name*.gz* 2>&1";
- notify($ERRORS{'DEBUG'}, 0, "du command: $du_command");
- my $du_output = `$du_command`;
-
- # Save the exit status
- my $du_exit_status = $? >> 8;
-
- # Check if $? = -1, this likely means a Perl CHLD signal bug was
encountered
- if ($? == -1) {
- notify($ERRORS{'OK'}, 0, "\$? is set to $?, setting exit status
to 0, Perl bug likely encountered");
- $du_exit_status = 0;
- }
-
- # Check the du command output
- if ($du_exit_status > 0) {
- notify($ERRORS{'WARNING'}, 0, "du exit status > 0:
$du_exit_status, output:\n$du_output");
- return 0;
- }
- elsif ($du_output !~ /total/s) {
- notify($ERRORS{'WARNING'}, 0, "du command did not produce
expected output, du exit staus: $du_exit_status, output:\n$du_output");
- return 0;
- }
-
- # Find the du output line containing 'total'
- $du_output =~ /(\d+)\s+total/s;
- my $size_bytes = $1;
-
- # Check the du command output
- if (!$size_bytes) {
- notify($ERRORS{'WARNING'}, 0, "du produced unexpected output:
$du_exit_status, output:\n$du_output");
- return 0;
- }
-
- # Calculate the size in MB
- my $size_mb = int($size_bytes / 1024);
- notify($ERRORS{'DEBUG'}, 0, "returning image size: $size_mb MB
($size_bytes bytes)");
- return $size_mb;
-
-} ## end sub get_image_size
-
-#/////////////////////////////////////////////////////////////////////////////
-
=head2 _get_image_repository_path
Parameters : none, must be called as an xCAT object method