Author: arkurth
Date: Mon Jan 10 18:56:10 2011
New Revision: 1057312
URL: http://svn.apache.org/viewvc?rev=1057312&view=rev
Log:
VCL-394
Updated VMware code to detect if a datastore mounted on a VM host is not
accessible. A warning is displayed when the VMware provisioning object is
initialized if any datastores are inaccessible. These datastores are not
considered when attempting to determine various other paths.
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm
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/VIM_SSH.pm
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm?rev=1057312&r1=1057311&r2=1057312&view=diff
==============================================================================
---
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm
(original)
+++
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm
Mon Jan 10 18:56:10 2011
@@ -453,6 +453,8 @@ sub _get_datastore_info {
return $self->{datastore};
}
+ my $vmhost_hostname = $self->data->get_vmhost_hostname();
+
my $vim_cmd_arguments = "hostsvc/datastore/listsummary";
my ($exit_status, $output) = $self->_run_vim_cmd($vim_cmd_arguments);
return if !$output;
@@ -512,10 +514,19 @@ sub _get_datastore_info {
}
}
+ # Check if the accessible value was retrieved and is not false
+ my $datastore_accessible =
$datastore_info->{$datastore_name}{accessible};
+ if (!$datastore_accessible || $datastore_accessible =~
/false/i) {
+ notify($ERRORS{'WARNING'}, 0, "datastore
'$datastore_name' is mounted on $vmhost_hostname but not accessible");
+ delete $datastore_info->{$datastore_name};
+ next;
+ }
+
# Add a 'normal_path' key to the hash based on the datastore url
my $datastore_url = $datastore_info->{$datastore_name}{url};
if (!defined($datastore_url)) {
notify($ERRORS{'WARNING'}, 0, "failed to determine
datastore url from 'vim-cmd $vim_cmd_arguments' output section, datastore name:
$datastore_name:\n$output_section");
+ delete $datastore_info->{$datastore_name};
next;
}
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=1057312&r1=1057311&r2=1057312&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
Mon Jan 10 18:56:10 2011
@@ -5718,6 +5718,10 @@ sub _get_datastore_name {
# Loop through the datastores, check if the path begins with the
datastore path
for my $datastore_name (keys(%{$datastore_info})) {
my $datastore_normal_path =
$datastore_info->{$datastore_name}{normal_path};
+ if (!$datastore_normal_path) {
+ notify($ERRORS{'WARNING'}, 0, "normal path is not
defined in the datastore info hash for datastore $datastore_name:" .
format_data($datastore_info->{$datastore_name}));
+ next;
+ }
$datastore_normal_path =
normalize_file_path($datastore_normal_path);
my $datastore_url = $datastore_info->{$datastore_name}{url};
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=1057312&r1=1057311&r2=1057312&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
Mon Jan 10 18:56:10 2011
@@ -2109,6 +2109,8 @@ sub _get_datastore_info {
return;
}
+ my $vmhost_hostname = $self->data->get_vmhost_hostname();
+
# Get the host view
my $host_view = VIExt::get_host_view(1);
@@ -2121,7 +2123,20 @@ sub _get_datastore_info {
for my $datastore_mo_ref (@datastore_mo_refs) {
my $datastore_view = Vim::get_view(mo_ref => $datastore_mo_ref);
my $datastore_name = $datastore_view->summary->name;
+
+ # Make sure the datastore is accessible
+ # Don't return info for inaccessible datastores
+ my $datastore_accessible = $datastore_view->summary->accessible;
+ if (!$datastore_accessible) {
+ notify($ERRORS{'WARNING'}, 0, "datastore
'$datastore_name' is mounted on $vmhost_hostname but not accessible");
+ next;
+ }
+
my $datastore_url = $datastore_view->summary->url;
+ if (!$datastore_url) {
+ notify($ERRORS{'WARNING'}, 0, "unable to retrieve URL
for datastore '$datastore_name'");
+ next;
+ }
if ($datastore_url =~ /^\/vmfs\/volumes/i) {
$datastore_view->summary->{normal_path} =
"/vmfs/volumes/$datastore_name";