diff --git a/subiquity/cmd/tui.py b/subiquity/cmd/tui.py index 2f51ef0a..9c86a08d 100755 --- a/subiquity/cmd/tui.py +++ b/subiquity/cmd/tui.py @@ -78,6 +78,9 @@ def parse_options(argv): parser.add_argument('--click', metavar="PAT", action=ClickAction, help='Synthesize a click on a button matching PAT') parser.add_argument('--answers') + parser.add_argument('--source', default=[], action='append', + dest='sources', metavar='URL', + help='install from url instead of default.') parser.add_argument( '--snaps-from-examples', action='store_true', help=("Load snap details from examples/snaps instead of store. " diff --git a/subiquity/controllers/installpath.py b/subiquity/controllers/installpath.py index b1662b14..5ce29151 100644 --- a/subiquity/controllers/installpath.py +++ b/subiquity/controllers/installpath.py @@ -54,6 +54,10 @@ class InstallpathController(BaseController): log.debug("Installing Ubuntu path chosen.") self.signal.emit_signal('next-screen') + def install_cmdline(self): + log.debug("Installing from command line sources.") + self.signal.emit_signal('next-screen') + def install_maas_region(self): # show region questions, seed model title = "MAAS Region Controller Setup" diff --git a/subiquity/models/installpath.py b/subiquity/models/installpath.py index a366fd7f..de73f791 100644 --- a/subiquity/models/installpath.py +++ b/subiquity/models/installpath.py @@ -28,23 +28,37 @@ class InstallpathModel(object): path = 'ubuntu' # update() is not run, upon selecting the default choice... - source = '/media/filesystem' curtin = {} + def __init__(self, sources=None): + self.cmdline_sources = sources + if sources: + self.path = 'cmdline' + @property def paths(self): - return [ + cmdline = [] + if self.cmdline_sources: + cmdline = [(_('Install from cli provided sources'), 'cmdline')] + return cmdline + [ (_('Install Ubuntu'), 'ubuntu'), (_('Install MAAS bare-metal cloud (region)'), 'maas_region'), (_('Install MAAS bare-metal cloud (rack)'), 'maas_rack'), ] + @property + def sources(self): + src_map = { + 'ubuntu': ['cp:///media/filesystem'], + 'maas_region': ['cp:///media/region'], + 'maas_rack': ['cp:///media/rack'], + 'cmdline': self.cmdline_sources} + return {self.path + "%02d" % n: u + for n, u in enumerate(src_map[self.path])} + def update(self, results): - if self.path == 'ubuntu': - self.source = '/media/filesystem' - self.curtin = {} - elif self.path == 'maas_region': - self.source = '/media/region' + self.curtin = {} + if self.path == 'maas_region': self.curtin['debconf_selections'] = { 'maas-username': ('maas-region-controller maas/username ' 'string %s' % results['username']), @@ -108,7 +122,6 @@ class InstallpathModel(object): '915-maas': ['umount', '/target/proc'], } elif self.path == 'maas_rack': - self.source = '/media/rack' self.curtin['debconf_selections'] = { 'maas-url': ('maas-rack-controller ' 'maas-rack-controller/maas-url ' @@ -132,6 +145,7 @@ class InstallpathModel(object): } else: raise ValueError("invalid Installpath %s" % self.path) + self.curtin['sources'] = self.sources def render(self): return self.curtin diff --git a/subiquity/models/subiquity.py b/subiquity/models/subiquity.py index d1b8389c..72dece2e 100644 --- a/subiquity/models/subiquity.py +++ b/subiquity/models/subiquity.py @@ -49,7 +49,7 @@ class SubiquityModel: root = os.path.abspath(".subiquity") self.locale = LocaleModel(common['signal']) self.keyboard = KeyboardModel(root) - self.installpath = InstallpathModel() + self.installpath = InstallpathModel(sources=common['opts'].sources) self.network = NetworkModel(support_wlan=False) self.filesystem = FilesystemModel(common['prober']) self.identity = IdentityModel() @@ -135,9 +135,7 @@ class SubiquityModel: '/var/log/installer/curtin-install.log', }, - 'sources': { - 'rofs': 'cp://%s' % self.installpath.source, - }, + 'sources': self.installpath.sources, 'verbosity': 3,