diff options
author | Max Illfelder <illfelder@users.noreply.github.com> | 2017-08-11 17:02:38 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-11 17:02:38 -0700 |
commit | 5e241171ebce1b007167ebd10ec6c341b11f024c (patch) | |
tree | b552b5e903842d08a0d65ebe02098643322f790c | |
parent | 4107b965d5fa94d7220366a73b6712bc88a9653f (diff) | |
download | google-compute-image-packages-5e241171ebce1b007167ebd10ec6c341b11f024c.tar.gz |
Support for internal IP address load balancing. (#434)
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | google_compute_engine/instance_setup/instance_config.py | 1 | ||||
-rwxr-xr-x | google_compute_engine/ip_forwarding/ip_forwarding_daemon.py | 11 | ||||
-rw-r--r-- | google_compute_engine/ip_forwarding/tests/ip_forwarding_daemon_test.py | 64 |
4 files changed, 63 insertions, 14 deletions
@@ -253,6 +253,7 @@ InstanceSetup | set_host_keys | `false` skips generating host keys on InstanceSetup | set_multiqueue | `false` skips multiqueue driver support. IpForwarding | ethernet_proto_id | Protocol ID string for daemon added routes. IpForwarding | ip_aliases | `false` disables setting up alias IP routes. +IpForwarding | target_instance_ips | `false` disables internal IP address load balancing. MetadataScripts | run_dir | String base directory where metadata scripts are executed. MetadataScripts | startup | `false` disables startup script execution. MetadataScripts | shutdown | `false` disables shutdown script execution. diff --git a/google_compute_engine/instance_setup/instance_config.py b/google_compute_engine/instance_setup/instance_config.py index 7f1ec0c..18975fd 100644 --- a/google_compute_engine/instance_setup/instance_config.py +++ b/google_compute_engine/instance_setup/instance_config.py @@ -81,6 +81,7 @@ class InstanceConfig(config_manager.ConfigManager): 'IpForwarding': { 'ethernet_proto_id': '66', 'ip_aliases': 'true', + 'target_instance_ips': 'true', }, 'MetadataScripts': { 'run_dir': '', diff --git a/google_compute_engine/ip_forwarding/ip_forwarding_daemon.py b/google_compute_engine/ip_forwarding/ip_forwarding_daemon.py index a4de8aa..32c2e8b 100755 --- a/google_compute_engine/ip_forwarding/ip_forwarding_daemon.py +++ b/google_compute_engine/ip_forwarding/ip_forwarding_daemon.py @@ -47,11 +47,15 @@ class IpForwardingDaemon(object): network_interfaces = 'instance/network-interfaces' - def __init__(self, proto_id=None, ip_aliases=True, debug=False): + def __init__( + self, proto_id=None, ip_aliases=True, target_instance_ips=True, + debug=False): """Constructor. Args: proto_id: string, the routing protocol identifier for Google IP changes. + ip_aliases: bool, True if the guest should configure IP alias routes. + target_instance_ips: bool, True supports internal IP load balancing. debug: bool, True if debug output should write to the console. """ facility = logging.handlers.SysLogHandler.LOG_DAEMON @@ -62,6 +66,7 @@ class IpForwardingDaemon(object): self.ip_forwarding_utils = ip_forwarding_utils.IpForwardingUtils( logger=self.logger, proto_id=proto_id) self.ip_aliases = ip_aliases + self.target_instance_ips = target_instance_ips try: with file_utils.LockFile(LOCKFILE): self.logger.info('Starting Google IP Forwarding daemon.') @@ -140,6 +145,8 @@ class IpForwardingDaemon(object): ip_addresses.extend(network_interface.get('forwardedIps', [])) if self.ip_aliases: ip_addresses.extend(network_interface.get('ipAliases', [])) + if self.target_instance_ips: + ip_addresses.extend(network_interface.get('targetInstanceIps', [])) self._HandleForwardedIps(ip_addresses, interface) else: message = 'Network interface not found for MAC address: %s.' @@ -159,6 +166,8 @@ def main(): 'IpForwarding', 'ethernet_proto_id'), ip_aliases=instance_config.GetOptionBool( 'IpForwarding', 'ip_aliases'), + target_instance_ips=instance_config.GetOptionBool( + 'IpForwarding', 'target_instance_ips'), debug=bool(options.debug)) diff --git a/google_compute_engine/ip_forwarding/tests/ip_forwarding_daemon_test.py b/google_compute_engine/ip_forwarding/tests/ip_forwarding_daemon_test.py index fe576e2..85e5b57 100644 --- a/google_compute_engine/ip_forwarding/tests/ip_forwarding_daemon_test.py +++ b/google_compute_engine/ip_forwarding/tests/ip_forwarding_daemon_test.py @@ -177,17 +177,36 @@ class IpForwardingDaemonTest(unittest.TestCase): def testHandleNetworkInterfaces(self): self.mock_setup.ip_aliases = False + self.mock_setup.target_instance_ips = False mocks = mock.Mock() mocks.attach_mock(self.mock_network_utils, 'network') mocks.attach_mock(self.mock_setup, 'setup') self.mock_network_utils.GetNetworkInterface.side_effect = [ 'eth0', 'eth1', 'eth2', 'eth3', None] result = [ - {'mac': '1', 'forwardedIps': ['a']}, - {'mac': '2', 'forwardedIps': ['b'], 'ipAliases': ['banana']}, - {'mac': '3', 'ipAliases': ['cherry']}, - {'mac': '4'}, - {'forwardedIps': ['d'], 'ipAliases': ['date']}, + { + 'mac': '1', + 'forwardedIps': ['a'] + }, + { + 'mac': '2', + 'forwardedIps': ['b'], + 'ipAliases': ['banana'], + 'targetInstanceIps': ['baklava'], + }, + { + 'mac': '3', + 'ipAliases': ['cherry'], + 'targetInstanceIps': ['cake'], + }, + { + 'mac': '4' + }, + { + 'forwardedIps': ['d'], + 'ipAliases': ['date'], + 'targetInstanceIps': ['doughnuts'], + }, ] ip_forwarding_daemon.IpForwardingDaemon.HandleNetworkInterfaces( @@ -206,19 +225,38 @@ class IpForwardingDaemonTest(unittest.TestCase): ] self.assertEqual(mocks.mock_calls, expected_calls) - def testHandleNetworkInterfacesIpAliases(self): + def testHandleNetworkInterfacesFeatures(self): self.mock_setup.ip_aliases = True + self.mock_setup.target_instance_ips = True mocks = mock.Mock() mocks.attach_mock(self.mock_network_utils, 'network') mocks.attach_mock(self.mock_setup, 'setup') self.mock_network_utils.GetNetworkInterface.side_effect = [ 'eth0', 'eth1', 'eth2', 'eth3', None] result = [ - {'mac': '1', 'forwardedIps': ['a']}, - {'mac': '2', 'forwardedIps': ['b'], 'ipAliases': ['banana']}, - {'mac': '3', 'ipAliases': ['cherry']}, - {'mac': '4'}, - {'forwardedIps': ['d'], 'ipAliases': ['date']}, + { + 'mac': '1', + 'forwardedIps': ['a'] + }, + { + 'mac': '2', + 'forwardedIps': ['b'], + 'ipAliases': ['banana'], + 'targetInstanceIps': ['baklava'], + }, + { + 'mac': '3', + 'ipAliases': ['cherry'], + 'targetInstanceIps': ['cake'], + }, + { + 'mac': '4' + }, + { + 'forwardedIps': ['d'], + 'ipAliases': ['date'], + 'targetInstanceIps': ['doughnuts'], + }, ] ip_forwarding_daemon.IpForwardingDaemon.HandleNetworkInterfaces( @@ -227,9 +265,9 @@ class IpForwardingDaemonTest(unittest.TestCase): mock.call.network.GetNetworkInterface('1'), mock.call.setup._HandleForwardedIps(['a'], 'eth0'), mock.call.network.GetNetworkInterface('2'), - mock.call.setup._HandleForwardedIps(['b', 'banana'], 'eth1'), + mock.call.setup._HandleForwardedIps(['b', 'banana', 'baklava'], 'eth1'), mock.call.network.GetNetworkInterface('3'), - mock.call.setup._HandleForwardedIps(['cherry'], 'eth2'), + mock.call.setup._HandleForwardedIps(['cherry', 'cake'], 'eth2'), mock.call.network.GetNetworkInterface('4'), mock.call.setup._HandleForwardedIps([], 'eth3'), mock.call.network.GetNetworkInterface(None), |