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/12/09 20:52:24 UTC
svn commit: r1044112 -
/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vmware_cmd.pm
Author: arkurth
Date: Thu Dec 9 19:52:24 2010
New Revision: 1044112
URL: http://svn.apache.org/viewvc?rev=1044112&view=rev
Log:
VCL-394
Added _get_datastore_info subroutine to vmware_cmd.pm which retrieves the datastore information from /etc/vmware/config. This subroutine is required in order to use several subroutines in VMware.pm.
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vmware_cmd.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vmware_cmd.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vmware_cmd.pm?rev=1044112&r1=1044111&r2=1044112&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vmware_cmd.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/vmware_cmd.pm Thu Dec 9 19:52:24 2010
@@ -152,28 +152,6 @@ sub _run_vmware_cmd {
}
}
-#/////////////////////////////////////////////////////////////////////////////
-
-=head2 _get_file_name
-
- Parameters : $file_path
- Returns : string
- Description : Extracts the file name from a file path.
-
-=cut
-
-sub _get_file_name {
- my $self = shift;
- if (ref($self) !~ /VCL::Module/i) {
- notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
- return;
- }
-
- my $file_path = shift;
- my ($file_name) = $file_path =~ /([^\/]+)$/;
- return $file_name || $file_path;
-}
-
##############################################################################
=head1 API OBJECT METHODS
@@ -204,7 +182,7 @@ sub get_registered_vms {
return if !$output;
my @vmx_file_paths = grep(/^\//, @$output);
- notify($ERRORS{'DEBUG'}, 0, "registered VMs found: " . scalar(@vmx_file_paths));
+ notify($ERRORS{'DEBUG'}, 0, "registered VMs found: " . scalar(@vmx_file_paths) . "\n" . join("\n", sort @vmx_file_paths));
return @vmx_file_paths;
}
@@ -667,6 +645,83 @@ sub get_virtual_disk_hardware_version {
#/////////////////////////////////////////////////////////////////////////////
+=head2 _get_datastore_info
+
+ Parameters : none
+ Returns : hash reference
+ Description : Retrieves information about the VM host's datastore from the
+ /etc/vmware/config file and returns a hash containing the
+ information.
+
+=cut
+
+sub _get_datastore_info {
+ my $self = shift;
+ if (ref($self) !~ /VCL::Module/i) {
+ notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
+ return;
+ }
+
+ # Set the default values
+ my $default_datastore_info;
+ $default_datastore_info->{local}{accessible} = 'true';
+ $default_datastore_info->{local}{type} = 'local';
+ $default_datastore_info->{local}{normal_path} = '/var/lib/vmware/Virtual Machines';
+ $default_datastore_info->{local}{url} = '/var/lib/vmware/Virtual Machines';
+
+ # Get the contents of the VMware config file
+ my $config_file_path = '/etc/vmware/config';
+ my @config_contents = $self->vmhost_os->get_file_contents($config_file_path);
+ if (@config_contents) {
+ notify($ERRORS{'DEBUG'}, 0, "retrieved contents of $config_file_path\n" . join("\n", @config_contents));
+ }
+ else {
+ notify($ERRORS{'WARNING'}, 0, "failed to retrieve the contents of $config_file_path, returning default datastore information:\n" . format_data($default_datastore_info));
+ return $default_datastore_info;
+ }
+
+ # Get the datastore name and path from the file contents
+ my ($datastore_name) = map { $_ =~ /datastore\.name\s*=\s*"([^"]+)"/ } @config_contents;
+ if (!$datastore_name) {
+ notify($ERRORS{'WARNING'}, 0, "failed to locate the 'datastore.name' line in $config_file_path, returning default datastore information:\n" . format_data($default_datastore_info));
+ return $default_datastore_info;
+ }
+
+ my ($datastore_path) = map { $_ =~ /datastore\.localpath\s*=\s*"([^"]+)"/ } @config_contents;
+ $datastore_path = normalize_file_path($datastore_path);
+ if (!$datastore_path) {
+ notify($ERRORS{'WARNING'}, 0, "failed to locate the 'datastore.localpath' line in $config_file_path, returning default datastore information:\n" . format_data($default_datastore_info));
+ return $default_datastore_info;
+ }
+
+ my $datastore_info;
+ $datastore_info->{$datastore_name}{accessible} = 'true';
+ $datastore_info->{$datastore_name}{type} = 'local';
+ $datastore_info->{$datastore_name}{normal_path} = $datastore_path;
+ $datastore_info->{$datastore_name}{url} = $datastore_path;
+
+ my $available_space = $self->vmhost_os->get_available_space($datastore_path);
+ if (defined($available_space)) {
+ $datastore_info->{$datastore_name}{freeSpace} = $available_space;
+ }
+ else {
+ notify($ERRORS{'WARNING'}, 0, "failed to determine the amount of space available in '$datastore_path'");
+ }
+
+ my $total_space = $self->vmhost_os->get_total_space($datastore_path);
+ if (defined($total_space)) {
+ $datastore_info->{$datastore_name}{capacity} = $total_space;
+ }
+ else {
+ notify($ERRORS{'WARNING'}, 0, "failed to determine the total amount of space of the volume where '$datastore_path' resides");
+ }
+
+ notify($ERRORS{'DEBUG'}, 0, "retrieved datastore info:\n" . format_data($datastore_info));
+ return $datastore_info;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
1;
__END__