Merge pull request #646 from mwhudson/ai-fs-config

a few autoinstall fixes
This commit is contained in:
Michael Hudson-Doyle 2020-03-05 16:34:12 +01:00 committed by GitHub
commit 9e602a0e90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 13 deletions

View File

@ -83,12 +83,15 @@ class FilesystemController(SubiquityController):
def load_autoinstall_data(self, data): def load_autoinstall_data(self, data):
log.debug("load_autoinstall_data %s", data) log.debug("load_autoinstall_data %s", data)
if not self.interactive() and data is None: if data is None:
data = { if not self.interactive():
'layout': { data = {
'name': 'lvm', 'layout': {
}, 'name': 'lvm',
} },
}
else:
data = {}
log.debug("self.ai_data = %s", data) log.debug("self.ai_data = %s", data)
self.ai_data = data self.ai_data = data
@ -154,6 +157,10 @@ class FilesystemController(SubiquityController):
disks = self.model.all_disks() disks = self.model.all_disks()
disks.sort(key=lambda x: x.size) disks.sort(key=lambda x: x.size)
meth(disks[-1]) meth(disks[-1])
elif 'config' in self.ai_data:
with self.context.child("applying_autoinstall"):
# needs to account for grub and swap data too.
self.model.apply_autoinstall_config(self.ai_data['config'])
def start(self): def start(self):
self._start_task = schedule_task(self._start()) self._start_task = schedule_task(self._start())
@ -661,7 +668,7 @@ class FilesystemController(SubiquityController):
} }
self.partition_disk_handler(disk, None, result) self.partition_disk_handler(disk, None, result)
def guided_lvm(self, disk, lvm_options): def guided_lvm(self, disk, lvm_options=None):
self.reformat(disk) self.reformat(disk)
if DeviceAction.MAKE_BOOT in disk.supported_actions: if DeviceAction.MAKE_BOOT in disk.supported_actions:
self.make_boot_disk(disk) self.make_boot_disk(disk)
@ -677,7 +684,7 @@ class FilesystemController(SubiquityController):
fstype=None, fstype=None,
)) ))
spec = dict(name="ubuntu-vg", devices=set([part])) spec = dict(name="ubuntu-vg", devices=set([part]))
if lvm_options['encrypt']: if lvm_options and lvm_options['encrypt']:
spec['password'] = lvm_options['luks_options']['password'] spec['password'] = lvm_options['luks_options']['password']
# create volume group on partition # create volume group on partition
vg = self.create_volgroup(spec) vg = self.create_volgroup(spec)

View File

@ -43,9 +43,9 @@ class SSHController(SubiquityController):
if data is None: if data is None:
return return
self.model.install_server = data.get('install_server', False) self.model.install_server = data.get('install_server', False)
self.model.authorized_keys = self.autoinstall_data.get( self.model.authorized_keys = data.get(
'authorized-keys', []) 'authorized-keys', [])
self.model.pwauth = self.autoinstall_data.get( self.model.pwauth = data.get(
'allow-pw', not self.model.authorized_keys) 'allow-pw', not self.model.authorized_keys)
def start_ui(self): def start_ui(self):

View File

@ -1257,7 +1257,11 @@ class FilesystemModel(object):
self._actions = [] self._actions = []
self.grub_install_device = None self.grub_install_device = None
def _actions_from_config(self, config, blockdevs): def apply_autoinstall_config(self, ai_config):
self._actions = self._actions_from_config(
ai_config, self._probe_data['blockdev'], is_autoinstall=True)
def _actions_from_config(self, config, blockdevs, is_autoinstall=False):
"""Convert curtin storage config into action instances. """Convert curtin storage config into action instances.
curtin represents storage "actions" as defined in curtin represents storage "actions" as defined in
@ -1284,7 +1288,7 @@ class FilesystemModel(object):
exclusions = set() exclusions = set()
seen_multipaths = set() seen_multipaths = set()
for action in config: for action in config:
if action['type'] == 'mount': if not is_autoinstall and action['type'] == 'mount':
exclusions.add(byid[action['device']]) exclusions.add(byid[action['device']])
continue continue
c = _type_to_cls.get(action['type'], None) c = _type_to_cls.get(action['type'], None)
@ -1313,7 +1317,8 @@ class FilesystemModel(object):
if kw['type'] == 'disk': if kw['type'] == 'disk':
path = kw['path'] path = kw['path']
kw['info'] = StorageInfo({path: blockdevs[path]}) kw['info'] = StorageInfo({path: blockdevs[path]})
kw['preserve'] = True if not is_autoinstall:
kw['preserve'] = True
obj = byid[action['id']] = c(m=self, **kw) obj = byid[action['id']] = c(m=self, **kw)
multipath = kw.get('multipath') multipath = kw.get('multipath')
if multipath: if multipath: