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 2011/08/11 19:04:43 UTC
svn commit: r1156677 - in
/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware:
VMware.pm vSphere_SDK.pm
Author: arkurth
Date: Thu Aug 11 17:04:43 2011
New Revision: 1156677
URL: http://svn.apache.org/viewvc?rev=1156677&view=rev
Log:
VCL-450
Fixed problem where vSphere_SDK.pm had trouble detecting the disk adapter type. This value is not displayed for some reason for vmdk's which have a snapshot. Updated code to attempt to locate the reference vmx file in the shared vmdk path as well as the repository path.
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vSphere_SDK.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm?rev=1156677&r1=1156676&r2=1156677&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm Thu Aug 11 17:04:43 2011
@@ -3100,7 +3100,25 @@ sub get_reference_vmx_file_path {
return;
}
- $ENV{reference_vmx_file_path} = "$vmdk_directory_path_shared/$reference_vmx_file_name";
+ my $reference_vmx_file_path = "$vmdk_directory_path_shared/$reference_vmx_file_name";
+
+ if ($self->vmhost_os->file_exists($reference_vmx_file_path)) {
+ $ENV{reference_vmx_file_path} = $reference_vmx_file_path;
+ notify($ERRORS{'DEBUG'}, 0, "determined reference vmx file path: $ENV{reference_vmx_file_path}");
+ return $ENV{reference_vmx_file_path};
+ }
+
+ my $repository_vmdk_file_path = $self->get_repository_vmdk_file_path();
+ if ($self->is_repository_mounted_on_vmhost()) {
+ if ($self->vmhost_os->file_exists($repository_vmdk_file_path)) {
+ $ENV{reference_vmx_file_path} = $repository_vmdk_file_path;
+ notify($ERRORS{'DEBUG'}, 0, "determined reference vmx file path: $ENV{reference_vmx_file_path}");
+ return $ENV{reference_vmx_file_path};
+ }
+ }
+ else {
+ }
+
notify($ERRORS{'DEBUG'}, 0, "determined reference vmx file path: $ENV{reference_vmx_file_path}");
return $ENV{reference_vmx_file_path};
}
@@ -4374,6 +4392,8 @@ sub get_vm_disk_adapter_type {
return;
}
+ my $vmdk_file_path = shift || $self->get_vmdk_file_path_shared();
+
my $vmdk_controller_type;
# Attempt to retrieve the type from the reference vmx file for the image
@@ -4391,7 +4411,7 @@ sub get_vm_disk_adapter_type {
# Try to get the type from the API module's get_virtual_disk_controller_type subroutine
if ($self->api->can("get_virtual_disk_controller_type")) {
- if ($vmdk_controller_type = $self->api->get_virtual_disk_controller_type($self->get_vmdk_file_path())) {
+ if ($vmdk_controller_type = $self->api->get_virtual_disk_controller_type($vmdk_file_path)) {
notify($ERRORS{'DEBUG'}, 0, "retrieved VM disk adapter type from api object: $vmdk_controller_type");
return $vmdk_controller_type;
}
@@ -4708,7 +4728,7 @@ sub get_vmx_file_paths {
=head2 get_vmx_info
- Parameters : $vmx_file_path
+ Parameters : $vmx_file_path, $vmx_resides_on_management_node (optional)
Returns : hash
Description : Reads the contents of the vmx file indicated by the
$vmx_file_path argument and returns a hash containing the info:
@@ -4752,6 +4772,8 @@ sub get_vmx_info {
return;
}
+ my $vmx_resides_on_management_node = shift;
+
# Return previously retrieved data if defined
if ($self->{vmx_info}{$vmx_file_path}) {
notify($ERRORS{'DEBUG'}, 0, "returning previously retrieved info from vmx file: $vmx_file_path");
@@ -4762,7 +4784,14 @@ sub get_vmx_info {
my %vmx_info;
- my @vmx_file_contents = $self->vmhost_os->get_file_contents($vmx_file_path);
+ my @vmx_file_contents;
+ if ($vmx_resides_on_management_node) {
+ @vmx_file_contents = $self->mn_os->get_file_contents($vmx_file_path);
+ }
+ else {
+ @vmx_file_contents = $self->vmhost_os->get_file_contents($vmx_file_path);
+ }
+
if (!@vmx_file_contents) {
notify($ERRORS{'WARNING'}, 0, "unable to retrieve the contents of vmx file: $vmx_file_path");
return;
@@ -4880,32 +4909,65 @@ sub get_reference_vmx_info {
return;
}
- # Check if the reference vmx info has already been retrieved
- if ($self->{reference_vmx_info}) {
+ # Check if it was already determined that the reference vmx file doesn't exist
+ # $self->{reference_vmx_info} is set to 0 if the file doesn't exist
+ if (defined($self->{reference_vmx_info})) {
return $self->{reference_vmx_info};
}
- # Check if it was already determined that the reference vmx file doesn't exist
- # $self->{reference_vmx_info} is set to 0 if the file doesn't exist
- if (defined($self->{reference_vmx_info}) && !$self->{reference_vmx_info}) {
- return 0;
+ my $vmdk_directory_path_shared = $self->get_vmdk_directory_path_shared();
+ if (!$vmdk_directory_path_shared) {
+ notify($ERRORS{'WARNING'}, 0, "unable to construct reference vmx file path, shared vmdk directory path could not be determined");
+ return;
}
- # Get the reference vmx file path and check if the file exists
- my $reference_vmx_file_path = $self->get_reference_vmx_file_path();
- if (!$self->vmhost_os->file_exists($reference_vmx_file_path)) {
- notify($ERRORS{'DEBUG'}, 0, "reference vmx file does not exist: $reference_vmx_file_path");
- # Set $self->{reference_vmx_info} to 0 so this subroutine doesn't have to check if it exists again on subsequent calls
- $self->{reference_vmx_info} = 0;
- return 0;
+ my $reference_vmx_file_name = $self->get_reference_vmx_file_name();
+ if (!$reference_vmx_file_name) {
+ notify($ERRORS{'WARNING'}, 0, "unable to construct reference vmx file path, reference vmx file name could not be determined");
+ return;
}
+ # Check if reference vmx file exists on the host or management node
# Retrieve the info from the file
- my $reference_vmx_info = $self->get_vmx_info($reference_vmx_file_path);
+ my $reference_vmx_file_path = "$vmdk_directory_path_shared/$reference_vmx_file_name";
+ my $reference_vmx_info;
+
+ if ($self->vmhost_os->file_exists($reference_vmx_file_path)) {
+ notify($ERRORS{'DEBUG'}, 0, "found reference vmx file in shared vmdk directory on VM host: $reference_vmx_file_path");
+ $reference_vmx_info = $self->get_vmx_info($reference_vmx_file_path);
+ }
+ else {
+ my $repository_vmdk_directory_path = $self->get_repository_vmdk_directory_path();
+ if (!$repository_vmdk_directory_path) {
+ notify($ERRORS{'DEBUG'}, 0, "unable to locate reference vmx file, it does NOT exist in shared vmdk directory on VM host and repository path is not configured");
+ $self->{reference_vmx_info} = 0;
+ return $self->{reference_vmx_info};
+ }
+
+ notify($ERRORS{'DEBUG'}, 0, "reference vmx file does NOT exist in shared vmdk directory on VM host, checking repository");
+ $reference_vmx_file_path = "$repository_vmdk_directory_path/$reference_vmx_file_name";
+
+ if ($self->is_repository_mounted_on_vmhost() && $self->vmhost_os->file_exists($reference_vmx_file_path)) {
+ notify($ERRORS{'DEBUG'}, 0, "found reference vmx file in repository directory on VM host: $reference_vmx_file_path");
+ $reference_vmx_info = $self->get_vmx_info($reference_vmx_file_path);
+ }
+ elsif ($self->mn_os->file_exists($reference_vmx_file_path)) {
+ notify($ERRORS{'DEBUG'}, 0, "found reference vmx file in repository on management node: $reference_vmx_file_path");
+ # Pass argument to get_vmx_info indicating file resides on managment node
+ $reference_vmx_info = $self->get_vmx_info($reference_vmx_file_path, 1);
+ }
+ else {
+ notify($ERRORS{'DEBUG'}, 0, "reference vmx file does NOT exist in repository on management node: $reference_vmx_file_path");
+ $self->{reference_vmx_info} = 0;
+ return $self->{reference_vmx_info};
+ }
+ }
+
+ # Check if the info was successfully retrieved
if ($reference_vmx_info) {
notify($ERRORS{'DEBUG'}, 0, "retrieved reference vmx info from file: $reference_vmx_file_path");
$self->{reference_vmx_info} = $reference_vmx_info;
- return $reference_vmx_info;
+ return $self->{reference_vmx_info};
}
else {
notify($ERRORS{'WARNING'}, 0, "failed to retrieve reference vmx info from file: $reference_vmx_file_path");
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vSphere_SDK.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vSphere_SDK.pm?rev=1156677&r1=1156676&r2=1156677&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vSphere_SDK.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vSphere_SDK.pm Thu Aug 11 17:04:43 2011
@@ -451,6 +451,16 @@ sub copy_virtual_disk {
}
}
+ if ($adapter_type =~ /bus/i) {
+ $adapter_type = 'busLogic';
+ }
+ elsif ($adapter_type =~ /lsi/) {
+ $adapter_type = 'lsiLogic';
+ }
+ else {
+ $adapter_type = 'ide';
+ }
+
my $vmhost_name = $self->data->get_vmhost_hostname();
# Get a virtual disk manager object