Merge pull request #1154 from dbungert/autoinstall-disable-components
apt: fix disable_components w/ autoinstall
This commit is contained in:
commit
96a53eff14
|
@ -19,6 +19,9 @@ apt:
|
||||||
primary:
|
primary:
|
||||||
- arches: [default]
|
- arches: [default]
|
||||||
uri: "http://mymirror.local/repository/Apt/ubuntu/"
|
uri: "http://mymirror.local/repository/Apt/ubuntu/"
|
||||||
|
disable_components:
|
||||||
|
- non-free
|
||||||
|
- restricted
|
||||||
packages:
|
packages:
|
||||||
- package1
|
- package1
|
||||||
- package2
|
- package2
|
||||||
|
|
|
@ -167,6 +167,8 @@ timeout --foreground 60 sh -c "LANG=C.UTF-8 python3 -m subiquity.cmd.tui --autoi
|
||||||
--kernel-cmdline 'autoinstall' \
|
--kernel-cmdline 'autoinstall' \
|
||||||
--source-catalog=examples/install-sources.yaml"
|
--source-catalog=examples/install-sources.yaml"
|
||||||
validate
|
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 \
|
python3 scripts/check-yaml-fields.py .subiquity/var/log/installer/subiquity-curtin-install.conf \
|
||||||
debconf_selections.subiquity='"eek"' \
|
debconf_selections.subiquity='"eek"' \
|
||||||
storage.config[-1].options='"errors=remount-ro"'
|
storage.config[-1].options='"errors=remount-ro"'
|
||||||
|
|
|
@ -31,6 +31,7 @@ log = logging.getLogger('subiquitycore.models.mirror')
|
||||||
|
|
||||||
|
|
||||||
DEFAULT = {
|
DEFAULT = {
|
||||||
|
"disable_components": [],
|
||||||
"preserve_sources_list": False,
|
"preserve_sources_list": False,
|
||||||
"primary": [
|
"primary": [
|
||||||
{
|
{
|
||||||
|
@ -51,12 +52,9 @@ class MirrorModel(object):
|
||||||
self.config = copy.deepcopy(DEFAULT)
|
self.config = copy.deepcopy(DEFAULT)
|
||||||
self.architecture = get_architecture()
|
self.architecture = get_architecture()
|
||||||
self.default_mirror = self.get_mirror()
|
self.default_mirror = self.get_mirror()
|
||||||
self.disable_components = set()
|
|
||||||
|
|
||||||
def get_apt_config(self):
|
def get_apt_config(self):
|
||||||
config = copy.deepcopy(self.config)
|
return copy.deepcopy(self.config)
|
||||||
config['disable_components'] = list(self.disable_components)
|
|
||||||
return config
|
|
||||||
|
|
||||||
def mirror_is_default(self):
|
def mirror_is_default(self):
|
||||||
return self.get_mirror() == self.default_mirror
|
return self.get_mirror() == self.default_mirror
|
||||||
|
@ -77,5 +75,14 @@ class MirrorModel(object):
|
||||||
self.config, "primary", self.architecture)
|
self.config, "primary", self.architecture)
|
||||||
config["uri"] = mirror
|
config["uri"] = mirror
|
||||||
|
|
||||||
|
def disable_components(self, comps, add):
|
||||||
|
dc = set(self.config.get('disable_components', []))
|
||||||
|
comps = set(comps)
|
||||||
|
if add:
|
||||||
|
dc |= comps
|
||||||
|
else:
|
||||||
|
dc -= comps
|
||||||
|
self.config['disable_components'] = list(dc)
|
||||||
|
|
||||||
def render(self):
|
def render(self):
|
||||||
return {}
|
return {}
|
||||||
|
|
|
@ -15,40 +15,60 @@
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
from curtin.config import merge_config
|
||||||
|
|
||||||
from subiquity.models.mirror import (
|
from subiquity.models.mirror import (
|
||||||
MirrorModel,
|
MirrorModel,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestMirrorModel(unittest.TestCase):
|
class TestMirrorModel(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.model = MirrorModel()
|
||||||
|
|
||||||
def test_set_country(self):
|
def test_set_country(self):
|
||||||
model = MirrorModel()
|
self.model.set_country("CC")
|
||||||
model.set_country("CC")
|
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
model.get_mirror(),
|
self.model.get_mirror(),
|
||||||
[
|
[
|
||||||
"http://CC.archive.ubuntu.com/ubuntu",
|
"http://CC.archive.ubuntu.com/ubuntu",
|
||||||
"http://CC.ports.ubuntu.com/ubuntu-ports",
|
"http://CC.ports.ubuntu.com/ubuntu-ports",
|
||||||
])
|
])
|
||||||
|
|
||||||
def test_set_mirror(self):
|
def test_set_mirror(self):
|
||||||
model = MirrorModel()
|
self.model.set_mirror("http://mymirror.invalid/")
|
||||||
model.set_mirror("http://mymirror.invalid/")
|
self.assertEqual(self.model.get_mirror(), "http://mymirror.invalid/")
|
||||||
self.assertEqual(model.get_mirror(), "http://mymirror.invalid/")
|
|
||||||
|
|
||||||
def test_set_country_after_set_mirror(self):
|
def test_set_country_after_set_mirror(self):
|
||||||
model = MirrorModel()
|
self.model.set_mirror("http://mymirror.invalid/")
|
||||||
model.set_mirror("http://mymirror.invalid/")
|
self.model.set_country("CC")
|
||||||
model.set_country("CC")
|
self.assertEqual(self.model.get_mirror(), "http://mymirror.invalid/")
|
||||||
self.assertEqual(model.get_mirror(), "http://mymirror.invalid/")
|
|
||||||
|
|
||||||
def test_default_disable_components(self):
|
def test_default_disable_components(self):
|
||||||
config = MirrorModel().get_apt_config()
|
config = self.model.get_apt_config()
|
||||||
self.assertEqual([], config['disable_components'])
|
self.assertEqual([], config['disable_components'])
|
||||||
|
|
||||||
def test_set_disable_components(self):
|
def test_from_autoinstall(self):
|
||||||
model = MirrorModel()
|
# autoinstall loads to the config directly
|
||||||
model.disable_components = set(['universe'])
|
data = {'disable_components': ['non-free']}
|
||||||
config = model.get_apt_config()
|
merge_config(self.model.config, data)
|
||||||
self.assertEqual(['universe'], config['disable_components'])
|
config = self.model.get_apt_config()
|
||||||
|
self.assertEqual(['non-free'], config['disable_components'])
|
||||||
|
|
||||||
|
def test_disable_add(self):
|
||||||
|
expected = ['things', 'stuff']
|
||||||
|
self.model.disable_components(expected.copy(), add=True)
|
||||||
|
actual = self.model.get_apt_config()['disable_components']
|
||||||
|
actual.sort()
|
||||||
|
expected.sort()
|
||||||
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
|
def test_disable_remove(self):
|
||||||
|
self.model.config['disable_components'] = ['a', 'b', 'things']
|
||||||
|
to_remove = ['things', 'stuff']
|
||||||
|
expected = ['a', 'b']
|
||||||
|
self.model.disable_components(to_remove, add=False)
|
||||||
|
actual = self.model.get_apt_config()['disable_components']
|
||||||
|
actual.sort()
|
||||||
|
expected.sort()
|
||||||
|
self.assertEqual(expected, actual)
|
||||||
|
|
|
@ -129,7 +129,7 @@ class MirrorController(SubiquityController):
|
||||||
await self.configured()
|
await self.configured()
|
||||||
|
|
||||||
async def disable_components_GET(self) -> List[str]:
|
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]):
|
async def disable_components_POST(self, data: List[str]):
|
||||||
self.model.disable_components = set(data)
|
self.model.config['disable_components'] = data
|
||||||
|
|
|
@ -165,11 +165,8 @@ class MetaController:
|
||||||
async def free_only_POST(self, enable: bool) -> None:
|
async def free_only_POST(self, enable: bool) -> None:
|
||||||
self.free_only = enable
|
self.free_only = enable
|
||||||
to_disable = {'restricted', 'multiverse'}
|
to_disable = {'restricted', 'multiverse'}
|
||||||
if enable:
|
|
||||||
# enabling free only mode means disabling components
|
# enabling free only mode means disabling components
|
||||||
self.app.base_model.mirror.disable_components |= to_disable
|
self.app.base_model.mirror.disable_components(to_disable, enable)
|
||||||
else:
|
|
||||||
self.app.base_model.mirror.disable_components -= to_disable
|
|
||||||
|
|
||||||
|
|
||||||
def get_installer_password_from_cloudinit_log():
|
def get_installer_password_from_cloudinit_log():
|
||||||
|
|
Loading…
Reference in New Issue