Merge pull request #1167 from dbungert/lp-1952603-nonet

snaplist: handle cancel error paths
This commit is contained in:
Dan Bungert 2022-01-25 07:46:46 -07:00 committed by GitHub
commit ee20eb335a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 15 deletions

View File

@ -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):

View File

@ -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):

View File

@ -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(),

View File

@ -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()