Author: arkurth
Date: Fri Dec 12 22:47:58 2014
New Revision: 1645086

URL: http://svn.apache.org/r1645086
Log:
VCL-783
The latest version of Cygwin doesn't install unix2dos by default. This causes 
problems. Removed Windows.pm::run_unix2dos. Added set_text_file_line_endings to 
Windows.pm and OS.pm. Changed all calls to run_unix2dos to 
set_text_file_line_endings.

Other
Removed unused Windows.pm::format_text_file.

Modified:
    vcl/trunk/managementnode/lib/VCL/Module/OS.pm
    vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
    vcl/trunk/managementnode/lib/VCL/Module/Provisioning.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=1645086&r1=1645085&r2=1645086&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS.pm Fri Dec 12 22:47:58 2014
@@ -1132,42 +1132,34 @@ sub set_vcld_post_load_status {
        }
 
        my $image_os_type = $self->data->get_image_os_type();
-       my $computer_node_name   = $self->data->get_computer_node_name();
+       my $computer_node_name = $self->data->get_computer_node_name();
        
        my $time = localtime;
        
+       my $file_path = 'currentimage.txt';
+       $self->remove_lines_from_file($file_path, 'vcld_post_load');
+       
        my $post_load_line = "vcld_post_load=success ($time)";
        
        # Assemble the command
        my $command;
-       
-       # Remove existing lines beginning with vcld_post_load
-       $command .= "sed -i -e \'/vcld_post_load.*/d\' currentimage.txt";
-
-       # Add a line to the end of currentimage.txt
-       $command .= " && echo >> currentimage.txt";
-       $command .= " && echo \"$post_load_line\" >> currentimage.txt";
-       
-       # Remove blank lines
-       $command .= ' && sed -i -e \'/^[\\s\\r\\n]*$/d\' currentimage.txt';
-
-       if ($image_os_type =~ /windows/i) {
-               $command .= " && unix2dos currentimage.txt";
-       }
+       $command .= " echo >> $file_path";
+       $command .= " && echo \"$post_load_line\" >> $file_path";
        
        my ($exit_status, $output) = $self->execute($command, 1);
        if (defined($exit_status) && $exit_status == 0) {
-               notify($ERRORS{'DEBUG'}, 0, "added line to currentimage.txt on 
$computer_node_name: '$post_load_line'");
+               notify($ERRORS{'DEBUG'}, 0, "added line to $file_path on 
$computer_node_name: '$post_load_line'");
        }
        elsif ($exit_status) {
-               notify($ERRORS{'WARNING'}, 0, "failed to add line to 
currentimage.txt on $computer_node_name: '$post_load_line', exit status: 
$exit_status, output:\n" . join("\n", @$output));
+               notify($ERRORS{'WARNING'}, 0, "failed to add line to $file_path 
on $computer_node_name: '$post_load_line', exit status: $exit_status, 
output:\n" . join("\n", @$output));
                return;
        }
        else {
-               notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to add 
line to currentimage.txt on $computer_node_name");
+               notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to add 
line to $file_path on $computer_node_name");
                return;
        }
        
+       $self->set_text_file_line_endings($file_path);
        return 1;
 }
 
@@ -1912,19 +1904,6 @@ sub create_text_file {
                $self->create_directory($parent_directory_path) if 
$parent_directory_path;
        }
        
-       # Remove Windows-style carriage returns if the image OS isn't Windows
-       if ($image_os_type =~ /windows/) {
-               $file_contents_string =~ s/\r*\n/\r\n/g;
-       }
-       else {
-               $file_contents_string =~ s/\r//g;
-       }
-       
-       # Add a newline to the end of the contents
-       if ($file_contents_string !~ /\n$/) {
-               $file_contents_string .= "\n";
-       }
-       
        # Convert the string to a string containing the hex value of each 
character
        # This is done to avoid problems with special characters in the file 
contents
        
@@ -1998,6 +1977,58 @@ sub append_text_file {
 }
 
 #/////////////////////////////////////////////////////////////////////////////
+
+=head2 set_text_file_line_endings
+
+ Parameters  : $file_path, $line_ending (optional)
+ Returns     : boolean
+ Description : Changes the line endings of a text file. This is equivalent to
+               running unix2dos or dos2unix. The default line ending type is
+               unix. Windows-style line endings will be applied if the
+               $line_ending argument is supplied and contains 'win' or 'r'.
+
+=cut
+
+sub set_text_file_line_endings {
+       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;
+       }
+       
+       my ($file_path, $line_ending) = @_;
+       if (!$file_path) {
+               notify($ERRORS{'WARNING'}, 0, "file path argument was not 
supplied");
+               return;
+       }
+       
+       my $command = 'sed -i -r ';
+       my $type;
+       if ($line_ending && $line_ending =~ /(r|win)/i) {
+               $type = 'windows';
+               $command .= '"s/\r*$/\r/"';
+       }
+       else {
+               $type = 'unix';
+               $command .= '"s/\r//"';
+       }
+       $command .= " $file_path";
+       my ($exit_status, $output) = $self->execute($command);
+       if (!defined($output)) {
+               notify($ERRORS{'WARNING'}, 0, "failed to execute command to set 
$type-style line endings for file: $file_path");
+               return;
+       }
+       elsif ($exit_status eq 0) {
+               notify($ERRORS{'DEBUG'}, 0, "set $type-style line endings for 
file: $file_path");
+               return 1;
+       }
+       else {
+               notify($ERRORS{'WARNING'}, 0, "failed to set $type-style line 
endings for file: $file_path, exit status: $exit_status, output:\n@{$output}");
+               return;
+       }
+}
+
+#/////////////////////////////////////////////////////////////////////////////
 
 =head2 get_file_contents
 

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=1645086&r1=1645085&r2=1645086&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm Fri Dec 12 22:47:58 
2014
@@ -6217,8 +6217,8 @@ sub add_group_policy_script {
                return;
        }
        
-       # Run unix2dos on scripts.ini
-       $self->run_unix2dos($scripts_ini);
+       # Apply Windows-style line endings to scripts.ini
+       $self->set_text_file_line_endings($scripts_ini);
        
        # Get the modified contents of scripts.ini
        my $cat_modified_command = "cat $scripts_ini";
@@ -6458,8 +6458,8 @@ sub remove_group_policy_script {
                return;
        }
        
-       # Run unix2dos on scripts.ini
-       $self->run_unix2dos($scripts_ini);
+       # Apply Windows-style line endings to scripts.ini
+       $self->set_text_file_line_endings($scripts_ini);
        
        # Get the modified contents of scripts.ini
        my $cat_modified_command = "cat $scripts_ini";
@@ -6571,44 +6571,33 @@ sub fix_cygwin_nodosfilewarning {
 
 #/////////////////////////////////////////////////////////////////////////////
 
-=head2 run_unix2dos
+=head2 set_text_file_line_endings
 
- Parameters  : 
- Returns     :
- Description : 
+ Parameters  : $file_path, $line_ending (optional)
+ Returns     : boolean
+ Description : Changes the line endings of a text file. This is equivalent to
+               running unix2dos or dos2unix. The default line ending type is
+               Windows. Unix-style line endings will be applied if the
+                                       $line_ending argument is supplied and 
does not contain 'win' or
+                                       'r'.
 
 =cut
 
-sub run_unix2dos {
+sub set_text_file_line_endings {
        my $self = shift;
-       if (ref($self) !~ /windows/i) {
+       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 arguments
-       my $file_path = shift;
+       
+       my ($file_path, $line_ending) = @_;
        if (!$file_path) {
-               notify($ERRORS{'WARNING'}, 0, "file path was not specified as 
an argument");
-               return;
-       }
-
-       # Run unix2dos on scripts.ini
-       my $unix2dos_command = "unix2dos $file_path";
-       my ($unix2dos_status, $unix2dos_output) = 
$self->execute($unix2dos_command);
-       if (defined($unix2dos_status) && $unix2dos_status == 0) {
-               notify($ERRORS{'DEBUG'}, 0, "ran unix2dos on $file_path");
-       }
-       elsif (defined($unix2dos_status)) {
-               notify($ERRORS{'WARNING'}, 0, "failed to run unix2dos on 
$file_path, exit status: $unix2dos_status, output:\n@{$unix2dos_output}");
-               return;
-       }
-       else {
-               notify($ERRORS{'WARNING'}, 0, "unable to run ssh command to run 
unix2dos on $file_path");
+               notify($ERRORS{'WARNING'}, 0, "file path argument was not 
supplied");
                return;
        }
+       $line_ending = 'win' unless $line_ending;
        
-       return 1;
+       return $self->SUPER::set_text_file_line_endings($file_path, 
$line_ending);
 }
 
 #/////////////////////////////////////////////////////////////////////////////
@@ -6708,9 +6697,8 @@ sub search_and_replace_in_files {
                else {
                        notify($ERRORS{'OK'}, 0, "replaced '$search_pattern' 
with '$replace_string' in $matching_file");
                        
-                       # sed replaces Windows newlines with \n
-                       # There is a sed -b option which prevents this but it 
is not available on all versions of sed
-                       $self->run_unix2dos($matching_file);
+                       # Apply Windows-style line endings to scripts.ini
+                       $self->set_text_file_line_endings($matching_file);
                }
        }
        
@@ -11316,49 +11304,6 @@ sub get_installed_updates {
 }
 
 #/////////////////////////////////////////////////////////////////////////////
-
-=head2 format_text_file
-
- Parameters  : $file_path
- Returns     : boolean
- Description : Runs unix2dos on the text file to format the line endings for
-               Windows.
-
-=cut
-
-sub format_text_file {
-       my $self = shift;
-       if (ref($self) !~ /VCL::Module/) {
-               notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a 
function, it must be called as a class method");
-               return;
-       }
-       
-       my $file_path = shift;
-       if (!$file_path) {
-               notify($ERRORS{'WARNING'}, 0, "file path argument was not 
specified");
-               return;
-       }
-       
-       my $computer_node_name = $self->data->get_computer_node_name();
-       
-       # Execute the command
-       my $command = "unix2dos \"$file_path\"";
-       my ($exit_status, $output) = $self->execute($command);
-       if (!defined($output)) {
-               notify($ERRORS{'WARNING'}, 0, "failed to format text file for 
Windows on $computer_node_name: command: '$command'");
-               return;
-       }
-       elsif ($exit_status == 0) {
-               notify($ERRORS{'OK'}, 0, "formatted text file for Windows on 
$computer_node_name: '$file_path'");
-               return 1;
-       }
-       else {
-               notify($ERRORS{'WARNING'}, 0, "failed to format text file for 
Windows on $computer_node_name, command: '$command'\noutput:\n" . join("\n", 
@$output));
-               return;
-       }
-}
-
-#/////////////////////////////////////////////////////////////////////////////
 
 =head2 get_user_names
 

Modified: vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm
URL: 
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm?rev=1645086&r1=1645085&r2=1645086&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm Fri Dec 12 22:47:58 
2014
@@ -187,7 +187,7 @@ sub node_status {
        $status->{currentimagerevision_id} = $current_image_revision_id;
 
        $status->{currentimage} = $self->data->get_computer_currentimage_name();
-       my $vcld_post_load_status = 
$self->data->get_computer_currentimage_vcld_post_load();
+       my $vcld_post_load_status = 
$self->data->get_computer_currentimage_vcld_post_load(0);
        
        if (!$current_image_revision_id) {
                notify($ERRORS{'OK'}, 0, "unable to retrieve currentimage.txt 
contents on $computer_name, returning 'RELOAD'");


Reply via email to