Author: arkurth
Date: Fri Feb  7 19:59:03 2014
New Revision: 1565780

URL: http://svn.apache.org/r1565780
Log:
VCL-745
Added check to Windows.pm::user_logged_in to use the 'Administrator' username 
for imaging requests.


VCL-746
Updated Windows.pm::get_service_configuration to copy the reg export text file 
from the remote computer to the management node and then retrieve its contents 
locally.
Added OS.pm::copy_file_from subroutine. This is called from 
get_service_configuration.


Other
Removed duplicate call to update_public_ip_address in Windows.pm::post_load.

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

Modified: vcl/trunk/managementnode/lib/VCL/Module/OS.pm
URL: 
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS.pm?rev=1565780&r1=1565779&r2=1565780&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS.pm Fri Feb  7 19:59:03 2014
@@ -662,7 +662,7 @@ sub is_ssh_responding {
        if (!$computer_node_name) {
                $computer_node_name = $self->data->get_computer_node_name();
        }
-       
+
        # Try nmap to see if any of the ssh ports are open before attempting to 
run a test command
        my $port_22_status = nmap_port($computer_node_name, 22) ? "open" : 
"closed";
        my $port_24_status = nmap_port($computer_node_name, 24) ? "open" : 
"closed";
@@ -2943,15 +2943,63 @@ sub copy_file_to {
 
 #/////////////////////////////////////////////////////////////////////////////
 
+=head2 copy_file_from
+
+ Parameters  : $source_path, $destination_path
+ Returns     : boolean
+ Description : Copies file(s) from the computer to the management node.
+
+=cut
+
+sub copy_file_from {
+       my $self = shift;
+       if (ref($self) !~ /VCL::Module/i) {
+               notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a 
function, it must be called as a class method");
+               return;
+       }
+       
+       # Get the source and destination arguments
+       my ($source_path, $destination_path) = @_;
+       if (!$source_path || !$destination_path) {
+               notify($ERRORS{'WARNING'}, 0, "source and destination path 
arguments were not specified");
+               return;
+       }
+       
+       # Get the computer short and hostname
+       my $computer_node_name = $self->data->get_computer_node_name() || 
return;
+       
+       # Get the destination parent directory path and create the directory
+       my $destination_directory_path = 
parent_directory_path($destination_path);
+       if (!$destination_directory_path) {
+               notify($ERRORS{'WARNING'}, 0, "unable to determine destination 
parent directory path: $destination_path");
+               return;
+       }
+       $self->mn_os->create_directory($destination_directory_path) || return;
+       
+       # Get the identity keys used by the management node
+       my $management_node_keys = $self->data->get_management_node_keys() || 
'';
+       
+       # Run the SCP command
+       if (run_scp_command("$computer_node_name:\"$source_path\"", 
$destination_path, $management_node_keys)) {
+               notify($ERRORS{'DEBUG'}, 0, "copied file from 
$computer_node_name to management node: $computer_node_name:'$source_path' --> 
'$destination_path'");
+       }
+       else {
+               notify($ERRORS{'WARNING'}, 0, "failed to copy file from 
$computer_node_name to management node: $computer_node_name:'$source_path' --> 
'$destination_path'");
+               return;
+       }
+       
+       return 1;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
 =head2 find_files
 
  Parameters  : $base_directory_path, $file_pattern, $search_subdirectories 
(optional)
  Returns     : array
- Description : Finds files under the base directory path
+ Description : Finds files under the base directory and any subdirectories path
                matching the file pattern. The search is not case sensitive. An
-               array is returned containing matching file paths. Subdirectories
-               are searched by default. An optional $search_subdirectories
-               argument may be specified.
+               array is returned containing matching file paths.
 
 =cut
 
@@ -2988,7 +3036,7 @@ sub find_files {
        
        COMMAND: for my $find_command (@find_commands) {
                # Run the find command
-               my $command = "$find_command \"$base_directory_path\" -iname 
\"$file_pattern\"";
+               my $command = "$find_command \"$base_directory_path\" -iname 
\"$file_pattern\" -type f";
                
                if (!$search_subdirectories) {
                        $command .= " -maxdepth 1";

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=1565780&r1=1565779&r2=1565780&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm Fri Feb  7 19:59:03 
2014
@@ -684,16 +684,6 @@ sub post_load {
 
 =item *
 
-       Collect or Set the public IP address
-=cut
-
-   if (!$self->update_public_ip_address()) {
-               notify($ERRORS{'WARNING'}, 0, "failed to update IP address for 
$computer_node_name");
-               return 0;
-   }
-
-=item *
-
  Set root as the owner of /home/root
 
 =cut
@@ -3968,21 +3958,33 @@ sub get_service_configuration {
        my $computer_node_name   = $self->data->get_computer_node_name();
        
        notify($ERRORS{'DEBUG'}, 0, "retrieving service configuration 
information from the registry");
+       
        my $services_key = 
'HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services';
+       
        my $node_reg_file_path = 
"C:/cygwin/tmp/services_$computer_node_name.reg";
+       my $mn_reg_file_path = "/tmp/vcl/services_$computer_node_name.reg";
+       
+       # Export the registry key to the temp directory on the computer
        if (!$self->reg_export($services_key, $node_reg_file_path)) {
                notify($ERRORS{'WARNING'}, 0, "failed to retrieve service 
credential information from the registry on $computer_node_name");
                return;
        }
        
-       my @reg_file_contents = $self->get_file_contents($node_reg_file_path);
+       # Copy the file to the managment node
+       if (!$self->copy_file_from($node_reg_file_path, $mn_reg_file_path)) {
+               return;
+       }
+       
+       # Get the contents of the file on the managment node
+       my @reg_file_contents = 
$self->mn_os->get_file_contents($mn_reg_file_path);
        if (!@reg_file_contents) {
                notify($ERRORS{'WARNING'}, 0, "failed to retrieve contents of 
file on $computer_node_name containing exported service credential information 
from the registry: $node_reg_file_path");
                return;
        }
        
-       # Delete the registry file
+       # Delete the registry files
        $self->delete_file($node_reg_file_path);
+       $self->mn_os->delete_file($mn_reg_file_path);
        
        my $service_configuration;
        my $service_name;
@@ -3997,6 +3999,7 @@ sub get_service_configuration {
                }
        }
        
+       #notify($ERRORS{'DEBUG'}, 0, "retrieved service configuration from 
$computer_node_name:\n" . format_data($service_configuration));
        $self->{service_configuration} = $service_configuration;
        return $self->{service_configuration};
 }
@@ -8957,7 +8960,12 @@ sub user_logged_in {
        
        # Check if username argument was passed
        if (!$username) {
-               $username = $self->data->get_user_login_id();
+               if ($self->data->get_request_forimaging()) {
+                       $username = 'Administrator';
+               }
+               else {
+                       $username = $self->data->get_user_login_id();
+               }
        }
        notify($ERRORS{'DEBUG'}, 0, "checking if $username is logged in to 
$computer_node_name");
 
@@ -9998,7 +10006,7 @@ sub setup_get_menu {
  Parameters  : none
  Returns     :
  Description : Checks various configuration settings and displays a message to
-               the user if any important settings are not configured.
+                                       the user if any important settings are 
not configured.
 
 =cut
 


Reply via email to