From 19c2d5a3b729f57ba63dad2ff477214766026ac6 Mon Sep 17 00:00:00 2001 From: Adam Stokes Date: Thu, 8 Oct 2015 17:06:25 -0400 Subject: [PATCH] Add default gateway support Signed-off-by: Adam Stokes --- subiquity/models/actions.py | 12 ++++++++++++ subiquity/models/network.py | 11 +++++++++++ subiquity/ui/views/network.py | 3 ++- subiquity/ui/views/network_default_route.py | 12 +++++++----- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/subiquity/models/actions.py b/subiquity/models/actions.py index 955ae130..c080b511 100644 --- a/subiquity/models/actions.py +++ b/subiquity/models/actions.py @@ -89,6 +89,18 @@ class BondAction(NetAction): self._action_keys.extend(['bond_interfaces']) +class RouteAction(NetAction): + def __init__(self, **options): + if 'type' not in options or options['type'] != 'route': + raise Exception('Invalid type for {}'.format( + self.__class__.__name__)) + if 'gateway' not in options: + raise Exception('{} requires a valid gateway attr'.format( + self.__class__.__name__)) + super().__init__(**options) + self._action_keys.extend(['gateway']) + + class DiskAction(): def __init__(self, action_id, model, serial, ptable='gpt', wipe=None): self._action_id = action_id diff --git a/subiquity/models/network.py b/subiquity/models/network.py index ff80e6a3..0d5656f9 100644 --- a/subiquity/models/network.py +++ b/subiquity/models/network.py @@ -24,6 +24,7 @@ from subiquity.utils import (read_sys_net, from .actions import ( BondAction, + RouteAction, PhysicalAction, ) @@ -78,6 +79,7 @@ class NetworkModel(ModelPolicy): self.prober = prober self.network = {} self.configured_interfaces = {} + self.default_gateway = None def reset(self): log.debug('resetting network model') @@ -258,6 +260,15 @@ class NetworkModel(ModelPolicy): else: action['subnets'] = [subnet] + def get_default_route(self): + if self.default_gateway: + action = { + 'type': 'route', + 'gateway': self.default_gateway + } + return [RouteAction(**action)] + return [] + def get_bridges(self): return [iface for iface in self.network.keys() if self.iface_is_bridge(iface)] diff --git a/subiquity/ui/views/network.py b/subiquity/ui/views/network.py index a2efea57..a8a697bb 100644 --- a/subiquity/ui/views/network.py +++ b/subiquity/ui/views/network.py @@ -27,6 +27,7 @@ from subiquity.ui.lists import SimpleList from subiquity.ui.buttons import cancel_btn, menu_btn from subiquity.ui.utils import Padding, Color from subiquity.view import ViewPolicy +from subiquity.models.actions import RouteAction log = logging.getLogger('subiquity.network') @@ -146,9 +147,9 @@ class NetworkView(ViewPolicy): log.debug("Selected network dev: {}".format(result.label)) actions = [action.get() for _, action in self.model.configured_interfaces.items()] + actions += self.model.get_default_route() log.debug('Configured Network Actions:\n{}'.format( yaml.dump(actions, default_flow_style=False))) - self.signal.emit_signal('network:finish', actions) def cancel(self, button): diff --git a/subiquity/ui/views/network_default_route.py b/subiquity/ui/views/network_default_route.py index 0b209cb5..85a46c03 100644 --- a/subiquity/ui/views/network_default_route.py +++ b/subiquity/ui/views/network_default_route.py @@ -27,6 +27,7 @@ class NetworkSetDefaultRouteView(ViewPolicy): def __init__(self, model, signal): self.model = model self.signal = signal + self.default_gateway_w = None body = [ Padding.center_50(self._build_default_routes()), Padding.line_break(""), @@ -60,15 +61,16 @@ class NetworkSetDefaultRouteView(ViewPolicy): def show_edit_default_route(self, btn): log.debug("Re-rendering specify default route") - self.manual_route_edit = StringEditor( + self.default_gateway_w = StringEditor( caption="Default gateway will be ") - self.manual_route_edit = Color.string_input( - self.manual_route_edit, - focus_map="string_input focus") - self.pile.contents[-1] = (self.manual_route_edit, self.pile.options()) + self.pile.contents[-1] = (Color.string_input( + self.default_gateway_w, + focus_map="string_input focus"), self.pile.options()) # self.signal.emit_signal('refresh') def done(self, result): + if self.default_gateway_w.value: + self.model.default_gateway = self.default_gateway_w.value self.signal.emit_signal('network:show') def cancel(self, button):