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 2017/03/16 22:41:49 UTC

svn commit: r1787267 - /vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/Ubuntu.pm

Author: arkurth
Date: Thu Mar 16 22:41:49 2017
New Revision: 1787267

URL: http://svn.apache.org/viewvc?rev=1787267&view=rev
Log:
VCL-1026
Added Ubuntu.pm::get_product_name.

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

Modified: vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/Ubuntu.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/Ubuntu.pm?rev=1787267&r1=1787266&r2=1787267&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/Ubuntu.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/Ubuntu.pm Thu Mar 16 22:41:49 2017
@@ -1213,7 +1213,55 @@ sub fix_debconf_db {
 			return;
 		}
 	}
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 get_product_name
+
+ Parameters  : none
+ Returns     : string
+ Description : Retrieves the name of the Ubuntu distribution from
+               'lsb_release --description'.
+
+=cut
+
+sub get_product_name {
+	my $self = shift;
+	if (ref($self) !~ /linux/i) {
+		notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
+		return;
+	}
+	
+	return $self->{product_name} if defined($self->{product_name});
+	
+	my $computer_name = $self->data->get_computer_short_name();
+	
+	my $command = 'lsb_release --description';
+	my ($exit_status, $output) = $self->execute($command);
+	if (!defined($output)) {
+		notify($ERRORS{'WARNING'}, 0, "failed to execute command to determine Ubuntu distribution name installed on $computer_name: $command");
+		return;
+	}
+	elsif ($exit_status ne '0') {
+		notify($ERRORS{'WARNING'}, 0, "failed to determine Ubuntu distribution name installed on $computer_name, exit status: $exit_status, command:\n$command\noutput:\n" . join("\n", @$output));
+		return 0;
+	}
+	
+	# Line should be in the form:
+	# Description:    Ubuntu 14.04.2 LTS
+	my ($product_name_line) = grep(/(Description|Ubuntu)/i, @$output);
+	if (!$product_name_line) {
+		notify($ERRORS{'WARNING'}, 0, "unable to determine Ubuntu distribution name installed on $computer_name, output does not contain a line with 'Description' or 'Ubuntu':\n" . join("\n", @$output));
+		return;
+	}
+	
+	# Remove Description: from line
+	$product_name_line =~ s/.*Description:\s*//g;
 	
+	$self->{product_name} = $product_name_line;
+	notify($ERRORS{'OK'}, 0, "determined Ubuntu distribution name installed on $computer_name: '$self->{product_name}'");
+	return $self->{product_name};
 }
 
 #/////////////////////////////////////////////////////////////////////////////