in managementnode/lib/VCL/DataStructure.pm [644:770]
sub _initialize : Init {
my ($self, $args) = @_;
# 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;
}
# 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;
# Set the request and reservation IDs in the request data hash if they are undefined
$self->request_data->{id} = ($self->request_id || 0) if (!defined($self->request_data->{id}));
$self->request_data->{RESERVATIONID} = ($self->reservation_id || 0) if (!defined($self->request_data->{RESERVATIONID}));
if ($self->request_data->{RESERVATIONID} == 0) {
$self->request_data->{reservation}{0}{serverrequest}{id} = 0;
$self->request_data->{forimaging} = 0;
$self->request_data->{state}{name} = "available";
}
my $computer_identifier = $self->computer_identifier;
my $vmhost_identifier = $self->vmhost_identifier;
my $image_identifier = $self->image_identifier;
my $imagerevision_identifier = $self->imagerevision_identifier;
# Get the computer info if the computer_identifier argument was specified and add it to this object
if ($computer_identifier) {
notify($ERRORS{'DEBUG'}, 0, "computer identifier argument was specified, retrieving data for computer: $computer_identifier");
my $computer_info = get_computer_info($computer_identifier, 1);
if (!$computer_info) {
notify($ERRORS{'WARNING'}, 0, "DataStructure object could not be initialized, failed to retrieve data for computer: $computer_identifier");
# Throw an exception because simply returning undefined (return;) does not result in this DataStructure object being undefined
Exception::Class::Base->throw(error => "DataStructure object could not be initialized, failed to retrieve data for computer: $computer_identifier");
return;
}
$self->request_data->{reservation}{$self->reservation_id}{computer} = $computer_info;
}
# Get the VM host info if the $vmhost_identifier argument was specified and add it to this object
if ($vmhost_identifier) {
notify($ERRORS{'DEBUG'}, 0, "VM host identifier argument was specified, retrieving data for VM host: $vmhost_identifier");
my $vmhost_info = get_vmhost_info($vmhost_identifier, 1);
if (!$vmhost_info) {
notify($ERRORS{'WARNING'}, 0, "DataStructure object could not be initialized, failed to retrieve data for VM host: $vmhost_identifier");
# Throw an exception because simply returning undefined (return;) does not result in this DataStructure object being undefined
Exception::Class::Base->throw(error => "DataStructure object could not be initialized, failed to retrieve data for VM host: $vmhost_identifier");
return;
}
$self->request_data->{reservation}{$self->reservation_id}{computer}{vmhost} = $vmhost_info;
}
# If either the computer, image, or imagerevision identifier arguments are specified, retrieve appropriate image and imagerevision data
if (defined($imagerevision_identifier) || defined($image_identifier) || defined($computer_identifier)) {
my $imagerevision_info;
if (defined($imagerevision_identifier)) {
$imagerevision_identifier = 'noimage' if !$imagerevision_identifier;
notify($ERRORS{'DEBUG'}, 0, "imagerevision identifier argument was specified: $imagerevision_identifier, DataStructure object will contain image information for this imagerevision: $imagerevision_identifier");
$imagerevision_info = get_imagerevision_info($imagerevision_identifier);
}
elsif (defined($image_identifier)) {
$image_identifier = 'noimage' if !$image_identifier;
notify($ERRORS{'DEBUG'}, 0, "image identifier argument was specified: $image_identifier, DataStructure object will contain image information for the production imagerevision of this image");
$imagerevision_info = get_production_imagerevision_info($image_identifier);
}
elsif (defined($computer_identifier)) {
my $imagerevision_id = $self->get_computer_imagerevision_id();
if (defined($imagerevision_id)) {
notify($ERRORS{'DEBUG'}, 0, "computer identifier argument was specified ($computer_identifier) but image and imagerevision ID arguments were not, DataStructure object will contain image information for the computer's current imagerevision ID: $imagerevision_id");
if (!$imagerevision_id) {
notify($ERRORS{'DEBUG'}, 0, "computer identifier argument was specified ($computer_identifier) imagerevision_id is set to $imagerevision_id");
my $image_id = $self->get_computer_currentimage_id();
if (defined($image_id)) {
$imagerevision_info = get_production_imagerevision_info($image_id);
}
else {
Exception::Class::Base->throw(error => "DataStructure object could not be initialized, computer's current imagerevision ID could not be retrieved from the current DataStructure data:\n" . format_data($self->get_request_data));
return;
}
}
else {
$imagerevision_info = get_imagerevision_info($imagerevision_id);
}
}
else {
Exception::Class::Base->throw(error => "DataStructure object could not be initialized, computer's current imagerevision ID could not be retrieved from the current DataStructure data:\n" . format_data($self->get_request_data));
return;
}
}
if ($imagerevision_info) {
my $imagerevision_id = $imagerevision_info->{id};
notify($ERRORS{'DEBUG'}, 0, "retrieved data for imagerevision ID: $imagerevision_id");
$self->request_data->{reservation}{$self->reservation_id}{imagerevision} = $imagerevision_info;
}
else {
Exception::Class::Base->throw(error => "DataStructure object could not be initialized, failed to retrieve imagerevision data");
return;
}
my $image_id = $imagerevision_info->{imageid};
if (!defined($image_id)) {
Exception::Class::Base->throw(error => "DataStructure object could not be initialized, failed to retrieve image ID from the imagerevision data:\n" . format_data($imagerevision_info));
return;
}
my $image_info = get_image_info($image_id);
if ($image_info) {
notify($ERRORS{'DEBUG'}, 0, "retrieved data for image ID: $image_id");
$self->request_data->{reservation}{$self->reservation_id}{image} = $image_info;
}
else {
Exception::Class::Base->throw(error => "DataStructure object could not be initialized, failed to retrieve data for image ID: " . $self->image_id);
return;
}
}
return 1;
}