diff options
| -rw-r--r-- | cloudinit/net/sysconfig.py | 3 | ||||
| -rw-r--r-- | tests/unittests/test_distros/test_netconfig.py | 2 | ||||
| -rw-r--r-- | tests/unittests/test_net.py | 38 | 
3 files changed, 43 insertions, 0 deletions
| diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py index 7ed11d1e..ad8c268e 100644 --- a/cloudinit/net/sysconfig.py +++ b/cloudinit/net/sysconfig.py @@ -329,6 +329,9 @@ class Renderer(renderer.Renderer):                      iface_cfg['NETMASK' + suff] = \                          net_prefix_to_ipv4_mask(subnet['prefix']) +                if 'gateway' in subnet: +                    iface_cfg['GATEWAY'] = subnet['gateway'] +      @classmethod      def _render_subnet_routes(cls, iface_cfg, route_cfg, subnets):          for i, subnet in enumerate(subnets, start=len(iface_cfg.children)): diff --git a/tests/unittests/test_distros/test_netconfig.py b/tests/unittests/test_distros/test_netconfig.py index 83580cc0..dffe1781 100644 --- a/tests/unittests/test_distros/test_netconfig.py +++ b/tests/unittests/test_distros/test_netconfig.py @@ -479,6 +479,7 @@ BOOTPROTO=none  DEVICE=eth0  IPADDR=192.168.1.5  NETMASK=255.255.255.0 +GATEWAY=192.168.1.254  NM_CONTROLLED=no  ONBOOT=yes  TYPE=Ethernet @@ -627,6 +628,7 @@ IPV6_AUTOCONF=no  BOOTPROTO=none  DEVICE=eth0  IPV6ADDR=2607:f0d0:1002:0011::2/64 +GATEWAY=2607:f0d0:1002:0011::1  IPV6INIT=yes  NM_CONTROLLED=no  ONBOOT=yes diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py index 06e8f094..71c9c457 100644 --- a/tests/unittests/test_net.py +++ b/tests/unittests/test_net.py @@ -828,6 +828,7 @@ pre-down route del -net 10.0.0.0 netmask 255.0.0.0 gw 11.0.0.1 metric 3 || true      }  } +  CONFIG_V1_EXPLICIT_LOOPBACK = {      'version': 1,      'config': [{'name': 'eth0', 'type': 'physical', @@ -836,6 +837,18 @@ CONFIG_V1_EXPLICIT_LOOPBACK = {                  'subnets': [{'control': 'auto', 'type': 'loopback'}]},                 ]} + +CONFIG_V1_SIMPLE_SUBNET = { +    'version': 1, +    'config': [{'mac_address': '52:54:00:12:34:00', +                'name': 'interface0', +                'subnets': [{'address': '10.0.2.15', +                             'gateway': '10.0.2.2', +                             'netmask': '255.255.255.0', +                             'type': 'static'}], +                'type': 'physical'}]} + +  DEFAULT_DEV_ATTRS = {      'eth1000': {          "bridge": False, @@ -1135,6 +1148,31 @@ USERCTL=no                  with open(os.path.join(render_dir, fn)) as fh:                      self.assertEqual(expected_content, fh.read()) +    def test_network_config_v1_samples(self): +        ns = network_state.parse_net_config_data(CONFIG_V1_SIMPLE_SUBNET) +        render_dir = self.tmp_path("render") +        os.makedirs(render_dir) +        renderer = sysconfig.Renderer() +        renderer.render_network_state(ns, render_dir) +        found = dir2dict(render_dir) +        nspath = '/etc/sysconfig/network-scripts/' +        self.assertNotIn(nspath + 'ifcfg-lo', found.keys()) +        expected = """\ +# Created by cloud-init on instance boot automatically, do not edit. +# +BOOTPROTO=none +DEVICE=interface0 +GATEWAY=10.0.2.2 +HWADDR=52:54:00:12:34:00 +IPADDR=10.0.2.15 +NETMASK=255.255.255.0 +NM_CONTROLLED=no +ONBOOT=yes +TYPE=Ethernet +USERCTL=no +""" +        self.assertEqual(expected, found[nspath + 'ifcfg-interface0']) +      def test_config_with_explicit_loopback(self):          ns = network_state.parse_net_config_data(CONFIG_V1_EXPLICIT_LOOPBACK)          render_dir = self.tmp_path("render") | 
