Author: arkurth
Date: Wed Oct 27 20:38:29 2010
New Revision: 1028089

URL: http://svn.apache.org/viewvc?rev=1028089&view=rev
Log:
VCL-394
Added Linux.pm::set_file_permissions subroutine.  This will be called from 
VMware.pm after an image is copied to the image repository to set the correct 
permissions.  VMware's methods set the permissions to 0700 when a virtual disk 
is copied.  This prevents image retrieval from working.

Also added -f to the rm command in delete_file.

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

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm?rev=1028089&r1=1028088&r2=1028089&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm Wed Oct 27 
20:38:29 2010
@@ -1423,7 +1423,7 @@ sub delete_file {
        my $computer_short_name = $self->data->get_computer_short_name();
        
        # Delete the file
-       my $command = "rm -rv $escaped_path";
+       my $command = "rm -rfv $escaped_path";
        my ($exit_status, $output) = $self->execute($command);
        if (!defined($output)) {
                notify($ERRORS{'WARNING'}, 0, "failed to run command to delete 
file or directory on $computer_short_name:\npath: '$path'\ncommand: 
'$command'");
@@ -1985,6 +1985,69 @@ sub find_files {
        notify($ERRORS{'DEBUG'}, 0, "matching file count: " . 
scalar(@file_paths));
        return sort @file_paths;
 }
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 set_file_permissions
+
+ Parameters  : $file_path, $chmod_mode, $recursive (optional)
+ Returns     : boolean
+ Description : Calls chmod to set the file permissions on the Linux computer.
+               The $chmod_mode argument may be any valid chmod mode (+rw, 0755,
+               etc). The $recursive argument is optional. The default is false.
+
+=cut
+
+sub set_file_permissions {
+       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 arguments
+       my $path = shift;
+       if (!defined($path)) {
+               notify($ERRORS{'WARNING'}, 0, "path argument was not 
specified");
+               return;
+       }
+       
+       my $chmod_mode = shift;
+       if (!defined($chmod_mode)) {
+               notify($ERRORS{'WARNING'}, 0, "chmod mode argument was not 
specified");
+               return;
+       }
+       
+       my $recursive = shift;
+       my $recursive_string;
+       $recursive_string = "recursively " if $recursive;
+       
+       # Get the computer short and hostname
+       my $computer_node_name = $self->data->get_computer_node_name();
+       
+       # Run the chmod command
+       my $command = "chmod ";
+       $command .= "-R " if $recursive;
+       $command .= "$chmod_mode \"$path\"";
+       
+       my ($exit_status, $output) = $self->execute($command);
+       if (!defined($output)) {
+               notify($ERRORS{'WARNING'}, 0, "failed to run command to " . 
$recursive_string . "set file permissions on $computer_node_name: '$command'");
+               return;
+       }
+       elsif (grep(/No such file or directory/i, @$output)) {
+               notify($ERRORS{'WARNING'}, 0, "failed to " . $recursive_string 
. "set permissions of '$path' to '$chmod_mode' on $computer_node_name because 
the file does not exist, command: '$command', output:\n" . join("\n", 
@$output));
+               return;
+       }
+       elsif (grep(/^chmod:/i, @$output)) {
+               notify($ERRORS{'WARNING'}, 0, "error occurred attempting to " . 
$recursive_string . "set permissions of '$path' to '$chmod_mode' on 
$computer_node_name, command: '$command'\noutput:\n" . join("\n", @$output));
+               return;
+       }
+       else {
+               notify($ERRORS{'OK'}, 0, $recursive_string . "set permissions 
of '$path' to '$chmod_mode' on $computer_node_name");
+               return 1;
+       }
+}
        
 #/////////////////////////////////////////////////////////////////////////////
 


Reply via email to