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 2014/07/16 21:43:16 UTC
svn commit: r1611151 -
/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ManagementNode.pm
Author: arkurth
Date: Wed Jul 16 19:43:15 2014
New Revision: 1611151
URL: http://svn.apache.org/r1611151
Log:
VCL-767
Added ManagementNode.pm::check_private_ip_addresses and setup_get_menu subroutines. This may be used to verify private IP addresses in database match what the hostnames resolve to.
Modified:
vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ManagementNode.pm
Modified: vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ManagementNode.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ManagementNode.pm?rev=1611151&r1=1611150&r2=1611151&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ManagementNode.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ManagementNode.pm Wed Jul 16 19:43:15 2014
@@ -170,6 +170,114 @@ sub copy_file_to {
#/////////////////////////////////////////////////////////////////////////////
+=head2 check_private_ip_addresses
+
+ Parameters : none
+ Returns : boolean
+ Description : Retrieves private IP information for all computers in the
+ database assigned to the management node and checks if the
+ hostname resolves on the management node. If it resolves to a
+ different address than the value stored in the database, the
+ database is updated.
+
+=cut
+
+sub check_private_ip_addresses {
+ 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;
+ }
+
+ # Get computers assigned to this management node
+ my @management_node_computer_ids = get_management_node_computer_ids();
+
+ # Get private IP addresses from the database for all computers assigned to this managment node
+ my $database_private_ip_address_info = get_computer_private_ip_address_info(@management_node_computer_ids);
+
+ my @database_no_resolve;
+ my @database_resolve_match;
+ my @database_resolve_no_match;
+ my @no_database_resolve;
+ my @no_database_no_resolve;
+
+ for my $hostname (sort keys %$database_private_ip_address_info) {
+ my $database_private_ip_address = $database_private_ip_address_info->{$hostname};
+ my ($hostname) = $hostname =~ /^([^\.]+)/g;
+
+ # Attempt to detmine the IP address the hostname resolves to via gethostip
+ #my $resolved_ip_address = get_host_ip($hostname) || get_host_ip($hostname);
+ my $resolved_ip_address = hostname_to_ip_address($hostname);
+
+ if ($database_private_ip_address) {
+ if (!$resolved_ip_address) {
+ push @database_no_resolve, $hostname;
+ #print "private IP address of $hostname set in the database: $database_private_ip_address, hostname does NOT resolve\n";
+ #notify($ERRORS{'DEBUG'}, 0, "private IP address of $hostname set in the database: $database_private_ip_address, hostname does NOT resolve");
+ }
+ elsif ($database_private_ip_address eq $resolved_ip_address) {
+ push @database_resolve_match, $hostname;
+ print "private IP address of $hostname set in database matches IP address hostname resolves to: $database_private_ip_address\n";
+ notify($ERRORS{'DEBUG'}, 0, "private IP address of $hostname set in database matches IP address hostname resolves to: $database_private_ip_address");
+ }
+ else {
+ push @database_resolve_no_match, $hostname;
+ print "private IP address $hostname resolves to ($resolved_ip_address) does NOT match database ($database_private_ip_address)\n";
+ notify($ERRORS{'DEBUG'}, 0, "private IP address $hostname resolves to ($resolved_ip_address) does NOT match database ($database_private_ip_address)");
+ update_computer_private_ip_address($hostname, $resolved_ip_address);
+ }
+ }
+ else {
+ # Private IP address is not set in the database
+ if ($resolved_ip_address) {
+ push @no_database_resolve, $hostname;
+ print "private IP address of $hostname NOT set in database, hostname resolves to $resolved_ip_address\n";
+ notify($ERRORS{'DEBUG'}, 0, "private IP address of $hostname NOT set in database, hostname resolves to $resolved_ip_address");
+ update_computer_private_ip_address($hostname, $resolved_ip_address);
+ }
+ else {
+ push @no_database_no_resolve, $hostname;
+ #print "private IP address of $hostname NOT set in database and hostname does NOT resolve\n";
+ notify($ERRORS{'DEBUG'}, 0, "private IP address of $hostname NOT set in database and hostname does NOT resolve");
+ }
+ }
+ }
+
+ my $database_no_resolve_count = scalar(@database_no_resolve);
+ my $database_resolve_match_count = scalar(@database_resolve_match);
+ my $database_resolve_no_match_count = scalar(@database_resolve_no_match);
+ my $no_database_resolve_count = scalar(@no_database_resolve);
+ my $no_database_no_resolve_count = scalar(@no_database_no_resolve);
+
+ notify($ERRORS{'DEBUG'}, 0, "private IP address results:\n" .
+ "database set, hostname does not resolve: $database_no_resolve_count\n" .
+ "database set, hostname resolves to matching address: $database_resolve_match_count\n" .
+ "database set, hostname resolves to different address: $database_resolve_no_match_count (" . join(', ', @database_resolve_no_match) . ")\n" .
+ "database not set, hostname resolves: $no_database_resolve_count (" . join(', ', @no_database_resolve) . ")\n" .
+ "database not set, hostname does not resolve: $no_database_no_resolve_count (" . join(', ', @no_database_no_resolve) . ")"
+ );
+
+ return 1;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 setup_get_menu
+
+ Parameters : none
+ Returns : hash reference
+ Description : Assembles the MN-related 'vcld -setup' menu items.
+
+=cut
+
+sub setup_get_menu {
+ return {
+ 'Management Node Operations' => {
+ 'Check private IP addresses' => \&check_private_ip_addresses,
+ },
+ };
+}
+
#/////////////////////////////////////////////////////////////////////////////
1;