Author: arkurth
Date: Thu Feb  5 22:47:06 2015
New Revision: 1657707

URL: http://svn.apache.org/r1657707
Log:
VCL-174
Fixed issue with iptables.pm::configure_nat. It didn't have access to the 
nathost table information when called via nathost_os. Changed it to accept 
$public_ip_address and $internal_ip_address arguments.

Modified:
    vcl/trunk/managementnode/lib/VCL/Module/OS.pm
    vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/firewall/iptables.pm

Modified: vcl/trunk/managementnode/lib/VCL/Module/OS.pm
URL: 
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS.pm?rev=1657707&r1=1657706&r2=1657707&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS.pm Thu Feb  5 22:47:06 2015
@@ -2805,6 +2805,7 @@ sub process_connect_methods {
        my $computer_node_name = $self->data->get_computer_node_name();
        my $nathost_hostname = $self->data->get_nathost_hostname(0);
        my $nathost_public_ip_address = 
$self->data->get_nathost_public_ip_address(0);
+       my $nathost_internal_ip_address = 
$self->data->get_nathost_internal_ip_address(0);
        
        # Retrieve the connect method info hash
        my $connect_method_info = $self->data->get_connect_methods();
@@ -2843,6 +2844,14 @@ sub process_connect_methods {
                        notify($ERRORS{'WARNING'}, 0, "unable to process 
connect methods, $computer_node_name is assigned to NAT host $nathost_hostname 
but NAT host OS's firewall object is not available");
                        return;
                }
+               elsif (!$nathost_public_ip_address) {
+                       notify($ERRORS{'WARNING'}, 0, "unable to process 
connect methods, $computer_node_name is assigned to NAT host $nathost_hostname 
but NAT host public IP address could not be determined from the nathost table");
+                       return;
+               }
+               elsif (!$nathost_internal_ip_address) {
+                       notify($ERRORS{'WARNING'}, 0, "unable to process 
connect methods, $computer_node_name is assigned to NAT host $nathost_hostname 
but NAT host internal IP address could not be determined from the nathost 
table");
+                       return;
+               }
                
                # Get the IP address used to communicate between the NAT host 
and computer
                $computer_ip_address = $self->get_public_ip_address();
@@ -2852,15 +2861,20 @@ sub process_connect_methods {
                }
                
                # Perform general NAT configuration
-               if ($self->nathost_os->firewall->can('configure_nat')) {
-                       if (!$self->nathost_os->firewall->configure_nat()) {
-                               notify($ERRORS{'WARNING'}, 0, "unable to 
process connect methods, failed to configure NAT on $nathost_hostname");
+               if ($nathost_internal_ip_address) {
+                       if ($self->nathost_os->firewall->can('configure_nat')) {
+                               if 
(!$self->nathost_os->firewall->configure_nat($nathost_public_ip_address, 
$nathost_internal_ip_address)) {
+                                       notify($ERRORS{'WARNING'}, 0, "unable 
to process connect methods, failed to configure NAT on $nathost_hostname");
+                                       return;
+                               }
+                       }
+                       else {
+                               notify($ERRORS{'CRITICAL'}, 0, "NAT not 
configured on $nathost_hostname, " . ref($self->nathost_os->firewall) . " does 
not implement a 'configure_nat' subroutine");
                                return;
                        }
                }
                else {
-                       notify($ERRORS{'CRITICAL'}, 0, "NAT not configured on 
$nathost_hostname, " . ref($self->nathost_os->firewall) . " does not implement 
a 'configure_nat' subroutine");
-                       return;
+                       notify($ERRORS{'DEBUG'}, 0, "unable to configure NAT, 
nathost.publicIPaddress is not set in the database for $nathost_hostname");
                }
                
                # Perform reservation-specific NAT configuration

Modified: vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/firewall/iptables.pm
URL: 
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/firewall/iptables.pm?rev=1657707&r1=1657706&r2=1657707&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/firewall/iptables.pm 
(original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/firewall/iptables.pm Thu 
Feb  5 22:47:06 2015
@@ -580,7 +580,7 @@ sub get_table_info {
 
 =head2 configure_nat
 
- Parameters  : none
+ Parameters  : $public_ip_address, $internal_ip_address
  Returns     : boolean
  Description : 
 
@@ -595,11 +595,14 @@ sub configure_nat {
        
        my $computer_name = $self->data->get_computer_hostname();
        
-       my $public_ip_address = 
$self->os->data->get_nathost_public_ip_address();
-       my $internal_ip_address = 
$self->os->data->get_nathost_internal_ip_address(0);
+       my ($public_ip_address, $internal_ip_address) = @_;
+       if (!$public_ip_address) {
+               notify($ERRORS{'WARNING'}, 0, "unable to automatically 
configure NAT, nathost public IP address argument was not specified");
+               return;
+       }
        if (!$internal_ip_address) {
-               notify($ERRORS{'DEBUG'}, 0, "unable to automatically configure 
NAT, nathost.internalIPaddress is not set");
-               return 1;
+               notify($ERRORS{'WARNING'}, 0, "unable to automatically 
configure NAT, nathost internal IP address argument was not specified");
+               return;
        }
        
        # Enable IP port forwarding


Reply via email to