Author: fapeeler
Date: Fri Dec 19 08:58:21 2008
New Revision: 728065

URL: http://svn.apache.org/viewvc?rev=728065&view=rev
Log:
getdynamicaddress - fixed checks for private address 127. 172., 192.,
address ranges. Previously could capture wrong address for win OS's. 
If someone installs a hypervisor or creates any additional adapters,
this routine needs to know which one is the public address to handout.

Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/utils.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=728065&r1=728064&r2=728065&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Fri Dec 19 08:58:21 2008
@@ -121,6 +121,7 @@
   get_management_node_id
   get_management_node_info
   get_management_node_requests
+  get_management_predictive_info
   get_next_image_default
   get_production_imagerevision_info
   get_request_by_computerid
@@ -1651,7 +1652,12 @@
 
                @sshcmd = run_ssh_command($node, $identity, "netsh diag show 
ip", "root");
                for my $l (@{$sshcmd[1]}) {
+                       # skip class a,b,c private addresses
                        next if ($l =~ /IPAddress = $privateIP/);
+                       next if ($l =~ /inet addr:10.([.0-9]*)/);
+                       next if ($l =~ /inet addr:127([.0-9]*)/);
+                       next if ($l =~ /inet addr:172([.0-9]*)/);
+                       next if ($l =~ /inet addr:192.168([.0-9]*)/);
                        if ($l =~ /IPAddress = ([.0-9]*)/) {
                                if ($l !~ /IPAddress = $privateIP/) {
                                        #to cover sites using eth0 as public
@@ -7079,6 +7085,80 @@
 
 #/////////////////////////////////////////////////////////////////////////////
 
+=head2 get_management_predictive_info
+
+ Parameters  : Either a management node hostname or database ID
+ Returns     : Hash containing data contained in the managementnode table
+ Description :
+
+=cut
+
+sub get_management_predictive_info {
+       my ($management_node_identifier) = @_;
+
+       my ($package, $filename, $line, $sub) = caller(0);
+
+       # Check the passed parameter
+       if (!(defined($management_node_identifier))) {
+               # If nothing was passed, assume management node is this machine
+               # Try to get the hostname of this machine
+               unless ($management_node_identifier = (hostname())[0]) {
+                       notify($ERRORS{'WARNING'}, 0, "management node hostname 
or ID was not specified and hostname could not be determined");
+                       return ();
+               }
+       }
+
+       my $select_statement = "
+   SELECT
+   managementnode.*,
+   predictivemodule.name AS predictive_name,
+   predictivemodule.prettyname AS predictive_prettyname,
+   predictivemodule.description AS predictive_description,
+   predictivemodule.perlpackage  AS predictive_perlpackage,
+       state.name AS statename
+   FROM
+   managementnode,
+   module predictivemodule,
+       state
+   WHERE
+   managementnode.predictivemoduleid = predictivemodule.id
+       AND managementnode.stateid = state.id
+   AND
+   ";
+
+       # Figure out if the ID or hostname was passed as the identifier and 
complete the SQL statement
+       # Check if it only contains digits
+       chomp $management_node_identifier;
+       if ($management_node_identifier =~ /^\d+$/) {
+               $select_statement .= "managementnode.id = 
$management_node_identifier";
+       }
+       else {
+               $select_statement .= "managementnode.hostname like 
\'$management_node_identifier%\'";
+       }
+
+       # Call the database select subroutine
+       # This will return an array of one or more rows based on the select 
statement
+       my @selected_rows = database_select($select_statement);
+
+       # Check to make sure 1 row was returned
+       if (scalar @selected_rows == 0) {
+               notify($ERRORS{'WARNING'}, 0, "zero rows were returned from 
database select");
+               return ();
+       }
+       elsif (scalar @selected_rows > 1) {
+               notify($ERRORS{'WARNING'}, 0, "" . scalar @selected_rows . " 
rows were returned from database select");
+               return ();
+       }
+       # Get the single returned row
+       # It contains a hash
+       my $management_node_info = $selected_rows[0];
+
+       notify($ERRORS{'DEBUG'}, 0, "management node info retrieved from 
database ");
+       return $management_node_info;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
 =head2 get_management_node_id
 
  Parameters  : Either a management node hostname or database ID


Reply via email to