Moving logic form SystemSetupModel to controllers.

- In order to stay confined into system_setup,
WSLLocaleController had to be recriated.
This commit is contained in:
Carlos Nihelton 2021-10-29 12:43:25 -03:00
parent 10f209ad81
commit 4c0ad44738
5 changed files with 69 additions and 4 deletions

View File

@ -80,7 +80,7 @@ def main():
logger.info("Arguments passed: {}".format(sys.argv))
prefillFile = opts.prefill
if opts.prefill:
if prefillFile:
if os.path.exists(prefillFile):
statInfo = os.stat(prefillFile)
mode = statInfo.st_mode

View File

@ -20,8 +20,8 @@ from subiquity.server.controllers.cmdlist import (
)
from subiquity.server.controllers.reporting import ReportingController
from subiquity.server.controllers.userdata import UserdataController
from subiquity.server.controllers.locale import LocaleController
from .identity import WSLIdentityController
from .locale import WSLLocaleController
from .wslconfbase import WSLConfigurationBaseController
from .wslconfadvanced import WSLConfigurationAdvancedController
from .configure import ConfigureController
@ -32,7 +32,7 @@ __all__ = [
'ErrorController',
'WSLIdentityController',
'LateController',
'LocaleController',
'WSLLocaleController',
'ReportingController',
'SetupShutdownController',
'UserdataController',

View File

@ -36,6 +36,28 @@ class WSLIdentityController(IdentityController):
'additionalProperties': False,
}
def __init__(self, app):
super().__init__(app)
if app.prefillInfo is None or self.interactive() is False:
return
# Only applies when interactive and prefill Info is set.
idata = app.prefillInfo.get('WSLIdentity', None)
if idata is None:
return
# Cannot call load_autoinstall_data because password is
# required in that context, but not here.
identity_data = IdentityData(
realname=idata.get('realname', ''),
username=idata.get('username', ''),
hostname='',
crypted_password='',
)
self.model.add_user(identity_data)
log.debug('Prefilled Identity: {}'.format(self.model.user))
def load_autoinstall_data(self, data):
if data is not None:
identity_data = IdentityData(

View File

@ -0,0 +1,32 @@
# Copyright 2021 Canonical, Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import logging
from subiquity.server.controllers.locale import LocaleController
log = logging.getLogger('system_setup.server.controllers.locale')
class WSLLocaleController(LocaleController):
def start(self):
if self.app.prefillInfo:
welcome = self.app.prefillInfo.get('Welcome', {'lang': None})
win_lang = welcome.get('lang')
if win_lang:
self.model.selected_language = win_lang
log.debug('Prefilled Language: {}'
.format(self.model.selected_language))
super().start()

View File

@ -39,13 +39,14 @@ POSTINSTALL_MODEL_NAMES = ModelNames(set())
class SystemSetupServer(SubiquityServer):
prefillInfo = None
from system_setup.server import controllers as controllers_mod
controllers = [
"Early",
"Reporting",
"Error",
"Locale",
"WSLLocale",
"WSLIdentity",
"WSLConfigurationBase",
"WSLConfigurationAdvanced",
@ -63,6 +64,16 @@ class SystemSetupServer(SubiquityServer):
self.log_syslog_id = ""
if is_reconfigure(opts.dry_run):
self.set_source_variant("wsl_configuration")
if self.opts.prefill:
with open(self.opts.prefill, 'r') as stream:
try:
# Shared with controllers thru self.app.
self.prefillInfo = yaml.safe_load(stream)
except yaml.YAMLError as exc:
log.error('Exception while parsing prefill file: {}.'
' Ignoring file.'.format(self.opts.prefill))
log.error(exc)
self.prefillInfo = None
def make_model(self):
root = '/'