summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--google_compute_engine/instance_setup/instance_config.py1
-rwxr-xr-xgoogle_compute_engine/ip_forwarding/ip_forwarding_daemon.py11
-rw-r--r--google_compute_engine/ip_forwarding/tests/ip_forwarding_daemon_test.py64
4 files changed, 63 insertions, 14 deletions
diff --git a/README.md b/README.md
index 6d628a9..655415b 100644
--- a/README.md
+++ b/README.md
@@ -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),