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 2010/05/27 14:55:39 UTC

svn commit: r948816 - /incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm

Author: arkurth
Date: Thu May 27 12:55:39 2010
New Revision: 948816

URL: http://svn.apache.org/viewvc?rev=948816&view=rev
Log:
VCL-298
Updated DataStructure.pm to allow objects to be cloned and to allow a computer or image ID argument to be specified when creating a DataStructure object.  This allows objects to be created containing data for a specific computer or image.  This is used to create an object representing a VM host, with the VM host's computer and image data saved in the object.

Added or uncommented the accessors to vmhost.id, vmhost.computerid, vmhost.imageid, and vmprofile.imageid.

Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm?rev=948816&r1=948815&r2=948816&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm Thu May 27 12:55:39 2010
@@ -79,6 +79,7 @@ use English '-no_match_vars';
 use Object::InsideOut;
 use List::Util qw(min max);
 use YAML;
+use Storable qw(dclone);
 
 use VCL::utils;
 
@@ -178,6 +179,7 @@ $SUBROUTINE_MAPPINGS{reservation_passwor
 #$SUBROUTINE_MAPPINGS{reservation_requestid} = '$self->request_data->{reservation}{RESERVATION_ID}{requestid}';
 $SUBROUTINE_MAPPINGS{reservation_ready} = '$self->request_data->{reservation}{RESERVATION_ID}{READY}';
 
+$SUBROUTINE_MAPPINGS{computer_data}             = '$self->request_data->{reservation}{RESERVATION_ID}{computer}';
 $SUBROUTINE_MAPPINGS{computer_current_image_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{currentimageid}';
 $SUBROUTINE_MAPPINGS{computer_deleted}          = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{deleted}';
 $SUBROUTINE_MAPPINGS{computer_drive_type}       = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{drivetype}';
@@ -208,11 +210,11 @@ $SUBROUTINE_MAPPINGS{computer_rsa}      
 $SUBROUTINE_MAPPINGS{computer_rsa_pub}            = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{rsapub}';
 $SUBROUTINE_MAPPINGS{computer_schedule_id}        = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{scheduleid}';
 $SUBROUTINE_MAPPINGS{computer_short_name}         = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{SHORTNAME}';
-#$SUBROUTINE_MAPPINGS{computer_state_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{stateid}';
+$SUBROUTINE_MAPPINGS{computer_state_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{stateid}';
 $SUBROUTINE_MAPPINGS{computer_state_name}      = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{state}{name}';
 $SUBROUTINE_MAPPINGS{computer_type}            = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{type}';
 $SUBROUTINE_MAPPINGS{computer_provisioning_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{provisioningid}';
-#$SUBROUTINE_MAPPINGS{computer_vmhostid} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhostid}';
+$SUBROUTINE_MAPPINGS{computer_vmhost_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhostid}';
 
 $SUBROUTINE_MAPPINGS{computer_provisioning_name}        = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{provisioning}{name}';
 $SUBROUTINE_MAPPINGS{computer_provisioning_pretty_name} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{provisioning}{prettyname}';
@@ -223,9 +225,10 @@ $SUBROUTINE_MAPPINGS{computer_provisioni
 $SUBROUTINE_MAPPINGS{computer_provisioning_module_description}  = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{provisioning}{module}{description}';
 $SUBROUTINE_MAPPINGS{computer_provisioning_module_perl_package} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{provisioning}{module}{perlpackage}';
 
-#$SUBROUTINE_MAPPINGS{vm_computerid} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{computerid}';
+$SUBROUTINE_MAPPINGS{vmhost_computer_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{computerid}';
 $SUBROUTINE_MAPPINGS{vmhost_hostname}   = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{hostname}';
 $SUBROUTINE_MAPPINGS{vmhost_id}         = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{id}';
+$SUBROUTINE_MAPPINGS{vmhost_image_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{imageid}';
 $SUBROUTINE_MAPPINGS{vmhost_image_name} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{imagename}';
 $SUBROUTINE_MAPPINGS{vmhost_ram}        = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{RAM}';
 $SUBROUTINE_MAPPINGS{vmhost_state}      = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{state}';
@@ -239,6 +242,7 @@ $SUBROUTINE_MAPPINGS{vmhost_type}       
 $SUBROUTINE_MAPPINGS{vmhost_profile_datastore_path}     = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{vmprofile}{datastorepath}';
 $SUBROUTINE_MAPPINGS{vmhost_profile_datastorepath_4vmx} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{vmprofile}{datastorepath4vmx}';
 #$SUBROUTINE_MAPPINGS{vmhost_profile_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{vmprofile}{id}';
+$SUBROUTINE_MAPPINGS{vmhost_profile_image_id} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{vmprofile}{imageid}';
 $SUBROUTINE_MAPPINGS{vmhost_profile_nas_share}      = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{vmprofile}{nasshare}';
 $SUBROUTINE_MAPPINGS{vmhost_profile_name}           = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{vmprofile}{profilename}';
 $SUBROUTINE_MAPPINGS{vmhost_profile_virtualswitch0} = '$self->request_data->{reservation}{RESERVATION_ID}{computer}{vmhost}{vmprofile}{virtualswitch0}';
@@ -511,7 +515,7 @@ my @blocktime_id : Field : Arg('Name' =>
 
 =cut
 
-my @request_data : Field : Arg('Name' => 'request_data', 'Default' => {}) : Get('Name' => 'request_data', 'Private' => 1) : Set('Name' => 'refresh_request_data', 'Private' => 1);
+my @request_data : Field : Deep : Arg('Name' => 'request_data', 'Default' => {}) : Get('Name' => 'request_data', 'Private' => 1) : Set('Name' => 'refresh_request_data', 'Private' => 1);
 
 =head3 @blockrequest_data
 
@@ -522,6 +526,24 @@ my @request_data : Field : Arg('Name' =>
 
 my @blockrequest_data : Field : Arg('Name' => 'blockrequest_data', 'Default' => {}) : Get('Name' => 'blockrequest_data', 'Private' => 1);
 
+=head3 @computer_id
+
+ Data type   : array of scalars
+ Description :
+
+=cut
+
+my @computer_id : Field : Arg('Name' => 'computer_id') : Type(scalar) : Get('Name' => 'computer_id', 'Private' => 1);
+
+=head3 @image_id
+
+ Data type   : array of scalars
+ Description :
+
+=cut
+
+my @image_id : Field : Arg('Name' => 'image_id') : Type(scalar) : Get('Name' => 'image_id', 'Private' => 1);
+
 ##############################################################################
 
 =head1 PRIVATE OBJECT METHODS
@@ -540,20 +562,63 @@ my @blockrequest_data : Field : Arg('Nam
 
 sub _initialize : Init {
 	my ($self, $args) = @_;
-	my ($package, $filename, $line, $sub) = caller(0);
-
+	
+	# Get the management node info and add it to %ENV
 	my $management_node_info = get_management_node_info();
 	if (!$management_node_info) {
 		notify($ERRORS{'WARNING'}, 0, "unable to obtain management node info for this node");
-		return 0;
+		return;
 	}
 	$ENV{management_node_info} = $management_node_info;
+	
+	# Replace the request data with a deep copy if itself
+	# This creates entirely separate copies in case multiple DataStructure objects are used
+	# If not deep copied, the separate objects will alter each other's data
+	$self->refresh_request_data(dclone($self->request_data)) if $self->request_data;
+	
+	# Get the computer info if the computer_id argument was specified and add it to this object
+	if ($self->computer_id) {
+		my $vmhost_info_save = $self->request_data->{reservation}{$self->reservation_id}{computer}{vmhost};
+		
+		notify($ERRORS{'DEBUG'}, 0, "computer ID argument was specified, retrieving data for computer ID: " . $self->computer_id);
+		my $computer_info = get_computer_info($self->computer_id);
+		if (!$computer_info) {
+			notify($ERRORS{'WARNING'}, 0, "DataStructure object could not be initialized, failed to retrieve data for computer ID: " . $self->computer_id);
+			return;
+		}
+		
+		# Check if the new computer info doesn't contain VM host info but the original data does
+		# Add the VM host info to the new hash so that it's available
+		if (!$computer_info->{computer}{vmhost} && $vmhost_info_save) {
+			$computer_info->{computer}{vmhost} = $vmhost_info_save;
+		}
+		
+		$self->request_data->{reservation}{$self->reservation_id}{computer} = $computer_info->{computer};
+	}
+	
+	# Get the image and imagerevision info if the image_id argument was specified
+	if ($self->image_id) {
+		my %image_info = get_image_info($self->image_id);
+		if (%image_info) {
+			$self->request_data->{reservation}{$self->reservation_id}{image} = \%image_info;
+		}
+		else {
+			notify($ERRORS{'WARNING'}, 0, "DataStructure object could not be initialized, failed to retrieve data for image ID: " . $self->image_id);
+			return;
+		}
+		
+		my %imagerevision_info = get_production_imagerevision_info($self->image_id);
+		if (%imagerevision_info) {
+			$self->request_data->{reservation}{$self->reservation_id}{imagerevision} = \%imagerevision_info;
+		}
+		else {
+			notify($ERRORS{'WARNING'}, 0, "DataStructure object could not be initialized, failed to retrieve production imagerevision data for image ID: " . $self->image_id);
+			return;
+		}
+	}
 
-	# TODO: add checks to make sure req data is valid if it was passed and rsvp is set
-
-	#notify($ERRORS{'DEBUG'}, 0, "object initialized");
 	return 1;
-} ## end sub _initialize :
+}
 
 #/////////////////////////////////////////////////////////////////////////////