allow a source to define a snapd_system_label
And fetch information about it from snapd when it is selected.
This commit is contained in:
parent
c8068d7dab
commit
1ef6267b54
|
@ -35,6 +35,7 @@ class CatalogEntry:
|
|||
default: bool = False
|
||||
locale_support: str = attr.ib(default="locale-only")
|
||||
preinstalled_langs: typing.List[str] = attr.ib(default=attr.Factory(list))
|
||||
snapd_system_label: typing.Optional[str] = None
|
||||
|
||||
|
||||
fake_entries = {
|
||||
|
|
|
@ -79,6 +79,7 @@ from subiquity.models.filesystem import (
|
|||
from subiquity.server.controller import (
|
||||
SubiquityController,
|
||||
)
|
||||
from subiquity.server.types import InstallerChannels
|
||||
|
||||
|
||||
log = logging.getLogger("subiquity.server.controllers.filesystem")
|
||||
|
@ -109,7 +110,12 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
|||
self._probe_once, propagate_errors=False)
|
||||
self._probe_task = SingleInstanceTask(
|
||||
self._probe, propagate_errors=False, cancel_restart=False)
|
||||
self._get_system_task = SingleInstanceTask(self._get_system)
|
||||
self.supports_resilient_boot = False
|
||||
self.app.hub.subscribe(
|
||||
(InstallerChannels.CONFIGURED, 'source'),
|
||||
self._get_system_task.start_sync)
|
||||
self._system = None
|
||||
|
||||
def load_autoinstall_data(self, data):
|
||||
log.debug("load_autoinstall_data %s", data)
|
||||
|
@ -130,10 +136,19 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
|||
await super().configured()
|
||||
self.stop_listening_udev()
|
||||
|
||||
async def _get_system(self):
|
||||
label = self.app.base_model.source.current.snapd_system_label
|
||||
if label is None:
|
||||
self._system = None
|
||||
return
|
||||
self._system = await self.app.snapdapi.v2.systems[label].GET()
|
||||
log.debug("got system %s", self._system)
|
||||
|
||||
@with_context()
|
||||
async def apply_autoinstall_config(self, context=None):
|
||||
await self._start_task
|
||||
await self._probe_task.wait()
|
||||
await self._get_system_task.wait()
|
||||
if False in self._errors:
|
||||
raise self._errors[False][0]
|
||||
if True in self._errors:
|
||||
|
@ -281,6 +296,12 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
|||
return resp_cls(
|
||||
status=ProbeStatus.FAILED,
|
||||
error_report=self._errors[True][1].ref())
|
||||
if self._get_system_task.task is None or \
|
||||
not self._get_system_task.task.done():
|
||||
if wait:
|
||||
await self._get_system_task.wait()
|
||||
else:
|
||||
return resp_cls(status=ProbeStatus.PROBING)
|
||||
return None
|
||||
|
||||
def full_probe_error(self):
|
||||
|
|
|
@ -241,6 +241,7 @@ class TestGuidedV2(IsolatedAsyncioTestCase):
|
|||
'filesystem': self.fs_probe,
|
||||
}
|
||||
self.fsc._probe_task.task = mock.Mock()
|
||||
self.fsc._get_system_task.task = mock.Mock()
|
||||
if bootloader == Bootloader.BIOS and ptable != 'msdos' and fix_bios:
|
||||
make_partition(self.model, self.disk, preserve=True,
|
||||
flag='bios_grub', size=1 << 20, offset=1 << 20)
|
||||
|
|
|
@ -243,6 +243,15 @@ async def start_server_factory(factory, *args, **kwargs):
|
|||
@contextlib.asynccontextmanager
|
||||
async def start_server(*args, **kwargs):
|
||||
async with start_server_factory(Server, *args, **kwargs) as instance:
|
||||
sources = await instance.get('/source')
|
||||
await instance.post(
|
||||
'/source', source_id=sources['sources'][0]['id'])
|
||||
while True:
|
||||
resp = await instance.get('/storage/v2')
|
||||
print(resp)
|
||||
if resp['status'] != 'PROBING':
|
||||
break
|
||||
await asyncio.sleep(0.5)
|
||||
yield instance
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue