Author: arkurth
Date: Tue May 12 19:39:44 2015
New Revision: 1679038
URL: http://svn.apache.org/r1679038
Log:
VCL-844
Added check to VMware.pm::prepare_vmdk to not attempt to delete an existing
dedicated vmdk directory for a VM unless the request state is new or reload.
Added check to migrate_vm so that the migration fails if the VM has multiple
virtual disks. Support for this may be added later.
Modified:
vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
Modified: vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
URL:
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm?rev=1679038&r1=1679037&r2=1679038&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
(original)
+++ vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm Tue
May 12 19:39:44 2015
@@ -1951,10 +1951,19 @@ sub prepare_vmdk {
# If the VM is dedicated, check if the dedicated vmdk already exists on
the host, delete it if necessary
if ($is_vm_dedicated &&
$self->vmhost_os->file_exists($host_vmdk_directory_path)) {
- notify($ERRORS{'WARNING'}, 0, "VM is dedicated and vmdk
directory already exists on VM host $vmhost_name: $host_vmdk_directory_path,
existing directory will be deleted");
- if (!$self->vmhost_os->delete_file($host_vmdk_directory_path)) {
- notify($ERRORS{'WARNING'}, 0, "failed to delete
existing dedicated vmdk directory on VM host $vmhost_name:
$host_vmdk_directory_path");
- return;
+ my $request_state_name = $self->data->get_request_state_name(0);
+ if ($request_state_name && $request_state_name =~
/(new|reload)/) {
+ notify($ERRORS{'WARNING'}, 0, "VM is dedicated and vmdk
directory already exists on VM host $vmhost_name: $host_vmdk_directory_path,
existing directory will be deleted");
+ if
(!$self->vmhost_os->delete_file($host_vmdk_directory_path)) {
+ notify($ERRORS{'WARNING'}, 0, "failed to delete
existing dedicated vmdk directory on VM host $vmhost_name:
$host_vmdk_directory_path");
+ return;
+ }
+ }
+ else {
+ # Don't delete the directory, it may be in use by a VM
+ # Attempting to delete it will likely delete some files
but not all, leaving a mess to reconstruct
+ notify($ERRORS{'OK'}, 0, "VM is dedicated and vmdk
directory already exists on VM host $vmhost_name: $host_vmdk_directory_path,
request state is not new or reload, directory will not be deleted, returning
true");
+ return 1;
}
}
@@ -9264,6 +9273,12 @@ sub migrate_vm {
notify($ERRORS{'WARNING'}, 0, "failed to migrate VM, source
vmdk file paths could not be retrieved");
return;
}
+ elsif (scalar(@source_vmdk_file_paths) > 1) {
+ # Don't allow multiple vmdk's for now
+ # TODO: add support for this, need to check if destination has
enough space
+ # Also need to check if disks are affected by snapshots. If
not, need to copy while VM is suspended
+ notify($ERRORS{'DEBUG'}, 0, "$vm_computer_name contains
multiple virtual disks, only the migration of single virtual disk VMs is
currently supported");
+ }
# VM may have multiple virtual disks
my @source_primary_vmdk_file_paths = @{$source_vmdk_file_paths[0]};