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 2015/09/14 19:31:13 UTC

svn commit: r1703005 - /vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm

Author: arkurth
Date: Mon Sep 14 17:31:13 2015
New Revision: 1703005

URL: http://svn.apache.org/r1703005
Log:
VCL-906
Fixed some issues with VIM_SSH.pm::_parse_vim_cmd_output. It was not properly converting the output of some vim-cmd commands to Perl syntax before evaluating it.

Modified:
    vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm

Modified: vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm?rev=1703005&r1=1703004&r2=1703005&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm Mon Sep 14 17:31:13 2015
@@ -2543,7 +2543,12 @@ sub get_config_option_info {
 		return;
 	}
 	
-	return $result;
+	if (!defined($result->{'vim.vm.ConfigOption'})) {
+		notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option info for $key, 'vim.vm.ConfigOption' key does not exist:\n" . format_hash_keys($result));
+		return;
+	}
+	
+	return $result->{'vim.vm.ConfigOption'};
 }
 
 #/////////////////////////////////////////////////////////////////////////////
@@ -2586,13 +2591,13 @@ sub get_config_option_guest_os_info {
 	
 	my $guest_os_descriptor_array_ref = $config_option_info->{guestOSDescriptor};
 	if (!defined($guest_os_descriptor_array_ref)) {
-		notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info, config option info does not contain a 'guestOSDescriptor' key:\n" . format_data($config_option_info));
+		notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info, config option info does not contain a 'guestOSDescriptor' key:\n" . format_hash_keys($config_option_info));
 		return;
 	}
 	
 	my $type = ref($guest_os_descriptor_array_ref);
 	if (!$type || $type ne 'ARRAY') {
-		notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info, guestOSDescriptor value is not an array reference:\n" . format_data($guest_os_descriptor_array_ref));
+		notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info for '$key', guestOSDescriptor value is not an array reference:\n" . format_data($guest_os_descriptor_array_ref));
 		return;
 	}
 	
@@ -2600,7 +2605,7 @@ sub get_config_option_guest_os_info {
 	for my $guest_os_descriptor (@$guest_os_descriptor_array_ref) {
 		my $id = $guest_os_descriptor->{id};
 		if (!defined($id)) {
-			notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info, guest OS descriptor does not contain an 'id' key:\n" . format_data($guest_os_descriptor));
+			notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info for '$key', guest OS descriptor does not contain an 'id' key:\n" . format_data($guest_os_descriptor));
 			return;
 		}
 		$config_option_guest_os_info->{$id} = $guest_os_descriptor;
@@ -2632,6 +2637,7 @@ sub _print_compatible_guest_os_hardware_
 	
 	my $guest_os_info = {};
 	my $config_option_descriptor_info = $self->get_config_option_descriptor_info();
+	
 	for my $version_key (sort keys %$config_option_descriptor_info) {
 		my $config_option_guest_os_info = $self->get_config_option_guest_os_info($version_key);
 		for my $guest_os (keys %$config_option_guest_os_info) {
@@ -2639,6 +2645,8 @@ sub _print_compatible_guest_os_hardware_
 		}
 	}
 	
+	my $version_key_count = scalar(keys %$config_option_descriptor_info);
+	
 	for my $guest_os (sort keys %$guest_os_info) {
 		if ($print_code) {
 			print "'$guest_os' => { ";
@@ -2650,10 +2658,19 @@ sub _print_compatible_guest_os_hardware_
 		}
 		else {
 			my $length = length($guest_os);
+			my $guest_os_version_key_count = scalar(keys %{$guest_os_info->{$guest_os}});
 			print "$guest_os ";
 			print (' ' x (25-$length));
-			print (' ' x (50-scalar(@{$guest_os_info->{$guest_os}})*8));
-			print join(", ", sort keys %{$guest_os_info->{$guest_os}});
+			
+			for my $version_key (sort keys %$config_option_descriptor_info) {
+				print " ";
+				if ($guest_os_info->{$guest_os}{$version_key}) {
+					print "$version_key";
+				}
+				else {
+					print "      ";
+				}
+			}
 			print "\n";
 		}
 	}
@@ -2711,6 +2728,8 @@ sub _parse_vim_cmd_output {
 		
 		$line_number++;
 		
+		my $original_line = $line;
+		
 		# Remove trailing newlines
 		$line =~ s/\n+$//g;
 		
@@ -2719,16 +2738,24 @@ sub _parse_vim_cmd_output {
 		$line =~ s/^(\s+)\([^\)]*\)\s*/$1/g;
 		
 		# Remove class names at beginning of a line surrounded by parenthesis
-		# '(vim.vm.device.VirtualPointingDevice) {' --> '{'
+		# '(vim.vm.device.VirtualPointingDevice) {' --> 'vim.vm.device.VirtualPointingDevice => {'
 		$line =~ s/^\(([^\)]+)\)\s*{/'$1' => {/gx;
 		
+		# Remove class names 
+		# '(vim.vm.ConfigOptionDescriptor) ['
+		$line =~ s/^\([^\)]+\)\s*(\[)/$1/gx;
+		
 		# Add comma to lines containing a closing curly bracket
 		# '   }' --> '   },'
 		$line =~ s/^(\s*)}\s*$/$1},/g;
 		
 		# Remove class names after an equals sign
 		# 'backing = (vim.vm.device.VirtualDevice.BackingInfo) null,' --> 'backing = null'
-		$line =~ s/(=\s+)\([^\)]+\)\s*//g;
+		$line =~ s/(=\s+)\([^\)]+\)\s*/$1/g;
+		
+		# Add comma to lines containing = sign which don't end with a comma
+		# 'value = xxx' --> 'value = xxx,'
+		$line =~ s/(=\s+[^,]+[\w>])$/$1,/g;
 		
 		# Surround values after equals sign in quotes
 		# 'value = xxx,' --> 'value = "xxx",'
@@ -2739,18 +2766,20 @@ sub _parse_vim_cmd_output {
 		$line =~ s/(\w\s+)null,/$1 => undef,/g;
 		
 		# Change = to =>
-		$line =~ s/=(\s+.+),/=>$1,/g;
+		$line =~ s/=(\s+.+)/=>$1/g;
 		
 		# Add => before array and hash references
 		# 'guestOSDescriptor [' --> 'guestOSDescriptor => ['
 		$line =~ s/(\w\s+)([\[{])/$1=>$2/g;
 		
 		$statement .= "$line\n";
-		$numbered_statement .= "$line_number:$line\n";
+		$numbered_statement .= "$line_number: '$original_line' --> '$line'\n";
 	}
-	
+
 	# Enclose the entire statement in curly brackets
-	$statement = "{\n$statement\n}";
+	if ($statement =~ /^[^\n]+{/) {
+		$statement = "{\n$statement\n}";
+	}
 
 	# The statement variable should contain a valid definition
 	my $result = eval($statement);