diff options
Diffstat (limited to 'cloudinit/net/sysconfig.py')
| -rw-r--r-- | cloudinit/net/sysconfig.py | 111 | 
1 files changed, 52 insertions, 59 deletions
| diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py index 997907bb..ba85c4f6 100644 --- a/cloudinit/net/sysconfig.py +++ b/cloudinit/net/sysconfig.py @@ -10,6 +10,7 @@ from configobj import ConfigObj  from cloudinit import log as logging  from cloudinit import subp, util  from cloudinit.distros.parsers import networkmanager_conf, resolv_conf +from cloudinit.net import network_state  from . import renderer  from .network_state import ( @@ -190,69 +191,61 @@ class Route(ConfigMap):          # (because Route can contain a mix of IPv4 and IPv6)          reindex = -1          for key in sorted(self._conf.keys()): -            if "ADDRESS" in key: -                index = key.replace("ADDRESS", "") -                address_value = str(self._conf[key]) -                # only accept combinations: -                # if proto ipv6 only display ipv6 routes -                # if proto ipv4 only display ipv4 routes -                # do not add ipv6 routes if proto is ipv4 -                # do not add ipv4 routes if proto is ipv6 -                # (this array will contain a mix of ipv4 and ipv6) -                if proto == "ipv4" and not self.is_ipv6_route(address_value): -                    netmask_value = str(self._conf["NETMASK" + index]) -                    gateway_value = str(self._conf["GATEWAY" + index]) -                    # increase IPv4 index -                    reindex = reindex + 1 -                    buf.write( -                        "%s=%s\n" -                        % ( -                            "ADDRESS" + str(reindex), -                            _quote_value(address_value), -                        ) -                    ) -                    buf.write( -                        "%s=%s\n" -                        % ( -                            "GATEWAY" + str(reindex), -                            _quote_value(gateway_value), -                        ) -                    ) +            if "ADDRESS" not in key: +                continue + +            index = key.replace("ADDRESS", "") +            address_value = str(self._conf[key]) +            netmask_value = str(self._conf["NETMASK" + index]) +            gateway_value = str(self._conf["GATEWAY" + index]) + +            # only accept combinations: +            # if proto ipv6 only display ipv6 routes +            # if proto ipv4 only display ipv4 routes +            # do not add ipv6 routes if proto is ipv4 +            # do not add ipv4 routes if proto is ipv6 +            # (this array will contain a mix of ipv4 and ipv6) +            if proto == "ipv4" and not self.is_ipv6_route(address_value): +                # increase IPv4 index +                reindex = reindex + 1 +                buf.write( +                    "%s=%s\n" +                    % ("ADDRESS" + str(reindex), _quote_value(address_value)) +                ) +                buf.write( +                    "%s=%s\n" +                    % ("GATEWAY" + str(reindex), _quote_value(gateway_value)) +                ) +                buf.write( +                    "%s=%s\n" +                    % ("NETMASK" + str(reindex), _quote_value(netmask_value)) +                ) +                metric_key = "METRIC" + index +                if metric_key in self._conf: +                    metric_value = str(self._conf["METRIC" + index])                      buf.write(                          "%s=%s\n" -                        % ( -                            "NETMASK" + str(reindex), -                            _quote_value(netmask_value), -                        ) -                    ) -                    metric_key = "METRIC" + index -                    if metric_key in self._conf: -                        metric_value = str(self._conf["METRIC" + index]) -                        buf.write( -                            "%s=%s\n" -                            % ( -                                "METRIC" + str(reindex), -                                _quote_value(metric_value), -                            ) -                        ) -                elif proto == "ipv6" and self.is_ipv6_route(address_value): -                    netmask_value = str(self._conf["NETMASK" + index]) -                    gateway_value = str(self._conf["GATEWAY" + index]) -                    metric_value = ( -                        "metric " + str(self._conf["METRIC" + index]) -                        if "METRIC" + index in self._conf -                        else "" +                        % ("METRIC" + str(reindex), _quote_value(metric_value))                      ) -                    buf.write( -                        "%s/%s via %s %s dev %s\n" -                        % ( -                            address_value, -                            netmask_value, -                            gateway_value, -                            metric_value, -                            self._route_name, -                        ) +            elif proto == "ipv6" and self.is_ipv6_route(address_value): +                prefix_value = network_state.ipv6_mask_to_net_prefix( +                    netmask_value +                ) +                metric_value = ( +                    "metric " + str(self._conf["METRIC" + index]) +                    if "METRIC" + index in self._conf +                    else "" +                ) +                buf.write( +                    "%s/%s via %s %s dev %s\n" +                    % ( +                        address_value, +                        prefix_value, +                        gateway_value, +                        metric_value, +                        self._route_name,                      ) +                )          return buf.getvalue() | 
