Add default gateway support

Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
This commit is contained in:
Adam Stokes 2015-10-08 17:06:25 -04:00
parent c9355e8433
commit 19c2d5a3b7
4 changed files with 32 additions and 6 deletions

View File

@ -89,6 +89,18 @@ class BondAction(NetAction):
self._action_keys.extend(['bond_interfaces']) 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(): class DiskAction():
def __init__(self, action_id, model, serial, ptable='gpt', wipe=None): def __init__(self, action_id, model, serial, ptable='gpt', wipe=None):
self._action_id = action_id self._action_id = action_id

View File

@ -24,6 +24,7 @@ from subiquity.utils import (read_sys_net,
from .actions import ( from .actions import (
BondAction, BondAction,
RouteAction,
PhysicalAction, PhysicalAction,
) )
@ -78,6 +79,7 @@ class NetworkModel(ModelPolicy):
self.prober = prober self.prober = prober
self.network = {} self.network = {}
self.configured_interfaces = {} self.configured_interfaces = {}
self.default_gateway = None
def reset(self): def reset(self):
log.debug('resetting network model') log.debug('resetting network model')
@ -258,6 +260,15 @@ class NetworkModel(ModelPolicy):
else: else:
action['subnets'] = [subnet] 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): def get_bridges(self):
return [iface for iface in self.network.keys() return [iface for iface in self.network.keys()
if self.iface_is_bridge(iface)] if self.iface_is_bridge(iface)]

View File

@ -27,6 +27,7 @@ from subiquity.ui.lists import SimpleList
from subiquity.ui.buttons import cancel_btn, menu_btn from subiquity.ui.buttons import cancel_btn, menu_btn
from subiquity.ui.utils import Padding, Color from subiquity.ui.utils import Padding, Color
from subiquity.view import ViewPolicy from subiquity.view import ViewPolicy
from subiquity.models.actions import RouteAction
log = logging.getLogger('subiquity.network') log = logging.getLogger('subiquity.network')
@ -146,9 +147,9 @@ class NetworkView(ViewPolicy):
log.debug("Selected network dev: {}".format(result.label)) log.debug("Selected network dev: {}".format(result.label))
actions = [action.get() for _, action in actions = [action.get() for _, action in
self.model.configured_interfaces.items()] self.model.configured_interfaces.items()]
actions += self.model.get_default_route()
log.debug('Configured Network Actions:\n{}'.format( log.debug('Configured Network Actions:\n{}'.format(
yaml.dump(actions, default_flow_style=False))) yaml.dump(actions, default_flow_style=False)))
self.signal.emit_signal('network:finish', actions) self.signal.emit_signal('network:finish', actions)
def cancel(self, button): def cancel(self, button):

View File

@ -27,6 +27,7 @@ class NetworkSetDefaultRouteView(ViewPolicy):
def __init__(self, model, signal): def __init__(self, model, signal):
self.model = model self.model = model
self.signal = signal self.signal = signal
self.default_gateway_w = None
body = [ body = [
Padding.center_50(self._build_default_routes()), Padding.center_50(self._build_default_routes()),
Padding.line_break(""), Padding.line_break(""),
@ -60,15 +61,16 @@ class NetworkSetDefaultRouteView(ViewPolicy):
def show_edit_default_route(self, btn): def show_edit_default_route(self, btn):
log.debug("Re-rendering specify default route") log.debug("Re-rendering specify default route")
self.manual_route_edit = StringEditor( self.default_gateway_w = StringEditor(
caption="Default gateway will be ") caption="Default gateway will be ")
self.manual_route_edit = Color.string_input( self.pile.contents[-1] = (Color.string_input(
self.manual_route_edit, self.default_gateway_w,
focus_map="string_input focus") focus_map="string_input focus"), self.pile.options())
self.pile.contents[-1] = (self.manual_route_edit, self.pile.options())
# self.signal.emit_signal('refresh') # self.signal.emit_signal('refresh')
def done(self, result): 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') self.signal.emit_signal('network:show')
def cancel(self, button): def cancel(self, button):