You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by ar...@apache.org on 2010/08/23 18:30:57 UTC
svn commit: r988189 -
/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm
Author: arkurth
Date: Mon Aug 23 16:30:57 2010
New Revision: 988189
URL: http://svn.apache.org/viewvc?rev=988189&view=rev
Log:
VCL-164
Added commands to set the interfaces to use DHCP immediately before Sysprep.exe is run since the call to enable DHCP in Windows.pm::pre_capture was removed. This allows a machine with a statically configured private IP address to be captured (useful for base images).
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm?rev=988189&r1=988188&r2=988189&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm Mon Aug 23 16:30:57 2010
@@ -172,6 +172,8 @@ sub run_sysprep {
my $node_working_sysprep_directory = 'C:/Sysprep';
my $node_working_sysprep_exe_path = 'C:\\Sysprep\\sysprep.exe';
+ my $system32_path = $self->get_system32_path();
+
# Get the sysprep.inf file contents
my $sysprep_contents = $self->get_sysprep_inf_contents();
if (!$sysprep_contents) {
@@ -265,8 +267,32 @@ sub run_sysprep {
notify($ERRORS{'WARNING'}, 0, "unable to configure firewall to allow sessmgr.exe program, Sysprep may hang");
}
+ # Assemble the Sysprep command
# Run Sysprep.exe, use cygstart to lauch the .exe and return immediately
- my $sysprep_command = '/bin/cygstart.exe cmd.exe /c "' . $node_working_sysprep_exe_path . ' /quiet /reseal /mini /forceshutdown"';
+ my $sysprep_command = "/bin/cygstart.exe cmd.exe /c \"";
+
+ # First enable DHCP on the private and public interfaces and delete the default route
+ my $private_interface_name = $self->get_private_interface_name();
+ my $public_interface_name = $self->get_public_interface_name();
+ if (!$private_interface_name || !$public_interface_name) {
+ notify($ERRORS{'WARNING'}, 0, "unable to determine private and public interface names, failed to enable DHCP and shut down $computer_node_name");
+ return;
+ }
+ $sysprep_command .= "$system32_path/netsh.exe interface ip set address name=\\\"$private_interface_name\\\" source=dhcp & ";
+ $sysprep_command .= "$system32_path/netsh.exe interface ip set dns name=\\\"$private_interface_name\\\" source=dhcp & ";
+ $sysprep_command .= "$system32_path/netsh.exe interface ip set address name=\\\"$public_interface_name\\\" source=dhcp & ";
+ $sysprep_command .= "$system32_path/netsh.exe interface ip set dns name=\\\"$public_interface_name\\\" source=dhcp & ";
+
+ # Delete the default route
+ $sysprep_command .= "$system32_path/route.exe DELETE 0.0.0.0 MASK 0.0.0.0 & ";
+
+ # Run Sysprep.exe
+ $sysprep_command .= "C:/Sysprep/sysprep.exe /quiet /reseal /mini /forceshutdown & ";
+
+ # Shutdown the computer - Sysprep does not always shut the computer down
+ $sysprep_command .= "$system32_path/shutdown.exe -s -t 0 -f";
+ $sysprep_command .= "\"";
+
my ($sysprep_status, $sysprep_output) = run_ssh_command($computer_node_name, $management_node_keys, $sysprep_command);
if (defined($sysprep_status) && $sysprep_status == 0) {
notify($ERRORS{'OK'}, 0, "initiated Sysprep.exe, waiting for $computer_node_name to become unresponsive");