vcl-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From arku...@apache.org
Subject svn commit: r1791416 - in /vcl/trunk/managementnode/lib/VCL/Module/OS: Windows.pm Windows/Version_6.pm
Date Fri, 14 Apr 2017 21:10:40 GMT
Author: arkurth
Date: Fri Apr 14 21:10:40 2017
New Revision: 1791416

URL: http://svn.apache.org/viewvc?rev=1791416&view=rev
Log:
VCL-1033
Improved Windows.pm::post_load to attempt to retrieve or set the public IP before settings
a persistent default route.

Added code in post_load if the retrieval failed and DHCP is used to call 'ipconfig /renew'
and check again.

Cleaned up and modernized Windows.pm::ipconfig_renew.

Changed Version_6.pm::wait_for_response to check if the computer is a VM. If so, the total
wait time is reduced to 5 minutes from 10-30. If the wait time is reached without a response,
an attempt is made to call the provisioning object's power_reset subroutine, then another
response loop is attempted.

Modified:
    vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
    vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm

Modified: vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm?rev=1791416&r1=1791415&r2=1791416&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm Fri Apr 14 21:10:40 2017
@@ -828,24 +828,45 @@ sub post_load {
 
 =item *
 
- Set persistent public default route
+ Update the public IP address
 
 =cut
 
-	if (!$self->set_public_default_route()) {
-		notify($ERRORS{'WARNING'}, 0, "unable to set persistent public default route");
+	if (!$self->update_public_ip_address()) {
+		my $public_ip_configuration = $self->data->get_management_node_public_ip_configuration();
+		if ($public_ip_configuration =~ /dhcp/i) {
+			notify($ERRORS{'WARNING'}, 0, "computer should have received a public IP address from
DHCP but the address could not be determined, attempting to execute 'ipconfig /renew'");
+			
+			if (!$self->ipconfig_renew()) {
+				notify($ERRORS{'WARNING'}, 0, "public IP address from DHCP but the address could not
be determined, 'ipconfig /renew' failed");
+				return;
+			}
+			
+			# Try to update the public IP address again
+			if (!$self->update_public_ip_address()) {
+				notify($ERRORS{'WARNING'}, 0, "computer should have received a public IP address from
DHCP but the address could not be determined on second attempt after executing 'ipconfig /renew'");
+				return;
+			}
+			else {
+				notify($ERRORS{'DEBUG'}, 0, "computer initially failed to obtain a public IP address
from DHCP, executed 'ipconfig /renew', public IP address could then be determined");
+			}
+		}
+		else { 
+			notify($ERRORS{'WARNING'}, 0, "management node failed to set a static public IP address
on the computer");
+			return;
+		}
 	}
-	
+
 =item *
 
- Update the public IP address
+ Set persistent public default route
 
 =cut
 
-	if (!$self->update_public_ip_address()) {
-		notify($ERRORS{'WARNING'}, 0, "unable to retrieve or set the public IP address");
+	if (!$self->set_public_default_route()) {
+		notify($ERRORS{'WARNING'}, 0, "unable to set persistent public default route");
 	}
-	
+
 =item *
 
  Configure and synchronize time
@@ -6277,7 +6298,7 @@ sub is_dhcp_enabled {
 
 =head2 ipconfig_renew
 
- Parameters  : $interface_name, $release_first (optional)
+ Parameters  : 
  Returns     :
  Description : 
 
@@ -6297,51 +6318,29 @@ sub ipconfig_renew {
 	delete $self->{public_interface_name};
 	delete $self->{private_interface_name};
 	
-	my $interface_name = shift;
-	if (!$interface_name) {
-		notify($ERRORS{'WARNING'}, 0, "interface name argument was not supplied");
-		return;
-	}
-	elsif ($interface_name =~ /^public$/i) {
-		$interface_name = $self->get_public_interface_name() || return;
-	}
-	elsif ($interface_name =~ /^private$/i) {
-		$interface_name = $self->get_private_interface_name() || return;
-	}
-	
-	# Delete cached network configuration information again
-	delete $self->{network_configuration};
-	delete $self->{public_interface_name};
-	delete $self->{private_interface_name};
-	
-	my $release_first = shift;
-	
 	# Assemble the ipconfig command, include the interface name if argument was specified
-	my $ipconfig_command;
-	if ($release_first) {
-		$ipconfig_command = "$system32_path/ipconfig.exe /release \"$interface_name\" ; ";
-	}
-	$ipconfig_command .= "$system32_path/ipconfig.exe /renew \"$interface_name\"";
+	my $ipconfig_command = "$system32_path/ipconfig.exe /renew";
+	notify($ERRORS{'OK'}, 0, "attempting to renew IP configuration");
+	my ($ipconfig_status, $ipconfig_output) = $self->execute({
+		command => $ipconfig_command,
+		timeout => 65,
+		max_attempts => 1,
+		ignore_error => 1
+	});
 	
-		# Run ipconfig
-		my ($ipconfig_status, $ipconfig_output) = $self->execute({command => $ipconfig_command,
timeout => 65, ignore_error => 1});
-		if (!defined($ipconfig_output)) {
-		notify($ERRORS{'WARNING'}, 0, "failed to execute command to renew IP configuration for
interface '$interface_name'");
+	if (!defined($ipconfig_output)) {
+		notify($ERRORS{'WARNING'}, 0, "failed to execute command to renew IP configuration");
 		return;
-		}
-		elsif (grep(/error occurred/i, @$ipconfig_output)) {
-		notify($ERRORS{'WARNING'}, 0, "failed to renew IP configuration for interface '$interface_name',
exit status: $ipconfig_status, output:\n" . join("\n", @$ipconfig_output));
-			return;
-		}
-		elsif ($ipconfig_status ne '0' || grep(/error occurred/i, @$ipconfig_output)) {
-		notify($ERRORS{'WARNING'}, 0, "failed to renew IP configuration for interface '$interface_name',
exit status: $ipconfig_status, command: '$ipconfig_command', output:\n" . join("\n", @$ipconfig_output));
+	}
+	elsif ($ipconfig_status ne 0) {
+		notify($ERRORS{'WARNING'}, 0, "failed to renew IP configuration, exit status: $ipconfig_status,
output:\n" . join("\n", @$ipconfig_output));
 		return;
-		}
-		else {
-			notify($ERRORS{'OK'}, 0, "renewed IP configuration for interface '$interface_name', output:\n"
. join("\n", @$ipconfig_output));
-			return 1;
-		}
 	}
+	else {
+		notify($ERRORS{'OK'}, 0, "renewed IP configuration, output:\n" . join("\n", @$ipconfig_output));
+		return 1;
+	}
+}
 	
 #/////////////////////////////////////////////////////////////////////////////
 

Modified: vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm?rev=1791416&r1=1791415&r2=1791416&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm Fri Apr 14 21:10:40 2017
@@ -2030,8 +2030,12 @@ sub wait_for_response {
 	my $initial_delay_seconds;
 	my $ssh_response_timeout_seconds;
 	
-	if ($self->data->get_imagemeta_sysprep()) {
+	if ($self->data->get_computer_type() eq 'virtualmachine') {
 		$initial_delay_seconds = 5;
+		$ssh_response_timeout_seconds = 300; 
+	}
+	elsif ($self->data->get_imagemeta_sysprep()) {
+		$initial_delay_seconds = 60;
 		$ssh_response_timeout_seconds = 1800; 
 	}
 	else {
@@ -2039,8 +2043,23 @@ sub wait_for_response {
 		$ssh_response_timeout_seconds = 600; 
 	}
 	
-	# Call parent class's wait_for_response subroutine
-	return $self->SUPER::wait_for_response($initial_delay_seconds, $ssh_response_timeout_seconds);
+	if ($self->SUPER::wait_for_response($initial_delay_seconds, $ssh_response_timeout_seconds,
5)) {
+		return 1;
+	}
+	
+	if ($self->provisioner->can('power_reset')) {
+		if ($self->provisioner->power_reset()) {
+			return $self->SUPER::wait_for_response(15, 600, 5);
+		}
+		else {
+			notify($ERRORS{'WARNING'}, 0, "computer never responded and provisioning module failed
to perform a power reset, returning false");
+			return;
+		}
+	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "computer never responded and provisioning does not implement
a power_reset subroutine, returning false");
+		return;
+	}
 }
 
 #/////////////////////////////////////////////////////////////////////////////



Mime
View raw message