Merge pull request #1167 from dbungert/lp-1952603-nonet
snaplist: handle cancel error paths
This commit is contained in:
commit
ee20eb335a
|
@ -148,7 +148,8 @@ parser.add_argument('-f', '--autoinstall-file', action='store',
|
|||
help='load autoinstall from file')
|
||||
parser.add_argument('-i', '--img', action='store', help='use this img')
|
||||
parser.add_argument('-n', '--nets', action='store', default=1, type=int,
|
||||
help='number of network interfaces')
|
||||
help='''number of network interfaces.
|
||||
0=no network, -1=deadnet''')
|
||||
parser.add_argument('-o', '--overwrite', default=False, action='store_true',
|
||||
help='allow overwrite of the target image')
|
||||
parser.add_argument('-q', '--quick', default=False, action='store_true',
|
||||
|
@ -339,18 +340,21 @@ class PortFinder:
|
|||
|
||||
|
||||
def nets(ctx):
|
||||
ports = PortFinder()
|
||||
|
||||
if ctx.args.nets > 0:
|
||||
ports = PortFinder()
|
||||
ret = []
|
||||
for _ in range(ctx.args.nets):
|
||||
port = ports.get()
|
||||
ret.extend(('-nic',
|
||||
'user,model=virtio-net-pci,' +
|
||||
f'hostfwd=tcp::{port}-:22'))
|
||||
return ret
|
||||
elif ctx.args.nets == 0:
|
||||
# no network
|
||||
return ('-nic', 'none')
|
||||
else:
|
||||
ret = ['-nic', 'none']
|
||||
return ret
|
||||
# nic present but restricted - simulate deadnet environment
|
||||
return ('-nic', 'user,model=virtio-net-pci,restrict=on')
|
||||
|
||||
|
||||
def bios(ctx):
|
||||
|
|
|
@ -16,10 +16,6 @@
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from subiquitycore.tuicontroller import (
|
||||
Skip,
|
||||
)
|
||||
|
||||
from subiquity.client.controller import (
|
||||
SubiquityTuiController,
|
||||
)
|
||||
|
@ -39,9 +35,9 @@ class SnapListController(SubiquityTuiController):
|
|||
async def make_ui(self):
|
||||
data = await self.endpoint.GET()
|
||||
if data.status == SnapCheckState.FAILED:
|
||||
# If loading snaps failed or the network is disabled, skip the
|
||||
# screen.
|
||||
raise Skip()
|
||||
# If loading snaps failed or network is disabled, skip the screen.
|
||||
log.debug('snaplist GET failed, mark done')
|
||||
self.done([])
|
||||
return SnapListView(self, data)
|
||||
|
||||
def run_answers(self):
|
||||
|
|
|
@ -22,6 +22,7 @@ import requests.exceptions
|
|||
|
||||
from subiquitycore.async_helpers import (
|
||||
schedule_task,
|
||||
SingleInstanceTask,
|
||||
)
|
||||
from subiquitycore.context import with_context
|
||||
|
||||
|
@ -62,8 +63,9 @@ class SnapdSnapInfoLoader:
|
|||
|
||||
async def _start(self):
|
||||
with self.context:
|
||||
task = self.tasks[None] = schedule_task(self._load_list())
|
||||
await task
|
||||
task = self.tasks[None] = \
|
||||
SingleInstanceTask(self._load_list, propagate_errors=False)
|
||||
task.start_sync()
|
||||
self.pending_snaps = self.model.get_snap_list()
|
||||
log.debug("fetched list of %s snaps", len(self.pending_snaps))
|
||||
while self.pending_snaps:
|
||||
|
@ -172,7 +174,10 @@ class SnapListController(SubiquityController):
|
|||
return SnapListResponse(status=SnapCheckState.FAILED)
|
||||
if not self.loader.snap_list_fetched and not wait:
|
||||
return SnapListResponse(status=SnapCheckState.LOADING)
|
||||
await self.loader.get_snap_list_task()
|
||||
await self.loader.get_snap_list_task().wait()
|
||||
if self.loader.failed or not self.app.base_model.network.has_network:
|
||||
await self.configured()
|
||||
return SnapListResponse(status=SnapCheckState.FAILED)
|
||||
return SnapListResponse(
|
||||
status=SnapCheckState.DONE,
|
||||
snaps=self.model.get_snap_list(),
|
||||
|
|
|
@ -340,6 +340,7 @@ class SnapListView(BaseView):
|
|||
title = _("Featured Server Snaps")
|
||||
|
||||
def __init__(self, controller, data):
|
||||
self.selections_by_name = {}
|
||||
self.controller = controller
|
||||
if data.status == SnapCheckState.LOADING:
|
||||
self.wait_load()
|
||||
|
|
Loading…
Reference in New Issue