Add default gateway support
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
This commit is contained in:
parent
c9355e8433
commit
19c2d5a3b7
|
@ -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
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue