apt: fix disable_components w/ autoinstall

* The mixture of storage for disable_components in and out of the config
  dict was confusing and caused bugs, depending on the flow
* disable_components now solely lives in the dict, like other items
This commit is contained in:
Dan Bungert 2022-01-05 10:35:05 -07:00
parent ce624ad543
commit 5a2a7f5ad6
5 changed files with 16 additions and 9 deletions

View File

@ -19,6 +19,9 @@ apt:
primary:
- arches: [default]
uri: "http://mymirror.local/repository/Apt/ubuntu/"
disable_components:
- non-free
- restricted
packages:
- package1
- package2

View File

@ -155,6 +155,8 @@ timeout --foreground 60 sh -c "LANG=C.UTF-8 python3 -m subiquity.cmd.tui --autoi
--kernel-cmdline 'autoinstall' \
--source-catalog=examples/install-sources.yaml"
validate
python3 scripts/check-yaml-fields.py .subiquity/var/log/installer/subiquity-curtin-apt.conf \
apt.disable_components='[non-free, restricted]'
python3 scripts/check-yaml-fields.py .subiquity/var/log/installer/subiquity-curtin-install.conf \
debconf_selections.subiquity='"eek"' \
storage.config[-1].options='"errors=remount-ro"'

View File

@ -31,6 +31,7 @@ log = logging.getLogger('subiquitycore.models.mirror')
DEFAULT = {
"disable_components": [],
"preserve_sources_list": False,
"primary": [
{
@ -51,12 +52,9 @@ class MirrorModel(object):
self.config = copy.deepcopy(DEFAULT)
self.architecture = get_architecture()
self.default_mirror = self.get_mirror()
self.disable_components = set()
def get_apt_config(self):
config = copy.deepcopy(self.config)
config['disable_components'] = list(self.disable_components)
return config
return copy.deepcopy(self.config)
def mirror_is_default(self):
return self.get_mirror() == self.default_mirror

View File

@ -15,6 +15,8 @@
import unittest
from curtin.config import merge_config
from subiquity.models.mirror import (
MirrorModel,
)
@ -47,8 +49,10 @@ class TestMirrorModel(unittest.TestCase):
config = MirrorModel().get_apt_config()
self.assertEqual([], config['disable_components'])
def test_set_disable_components(self):
def test_from_autoinstall(self):
# autoinstall loads to the config directly
model = MirrorModel()
model.disable_components = set(['universe'])
data = {'disable_components': ['non-free']}
merge_config(model.config, data)
config = model.get_apt_config()
self.assertEqual(['universe'], config['disable_components'])
self.assertEqual(['non-free'], config['disable_components'])

View File

@ -129,7 +129,7 @@ class MirrorController(SubiquityController):
await self.configured()
async def disable_components_GET(self) -> List[str]:
return list(self.model.disable_components)
return self.model.config.get('disable_components', [])
async def disable_components_POST(self, data: List[str]):
self.model.disable_components = set(data)
self.model.config['disable_components'] = data