Add support for --source on command line.
This provides the ability to install from a different source by providing it on the command line. So we can boot into a system, and then run: subiquity --source=/tmp/xenial-server-cloudimg-amd64.squashfs or subiquity --source=http://cloud-images.ubuntu.com/.../some.squashfs And install that image rather than the hard coded paths.
This commit is contained in:
parent
c40a03a346
commit
7bf11ef883
|
@ -78,6 +78,9 @@ def parse_options(argv):
|
||||||
parser.add_argument('--click', metavar="PAT", action=ClickAction,
|
parser.add_argument('--click', metavar="PAT", action=ClickAction,
|
||||||
help='Synthesize a click on a button matching PAT')
|
help='Synthesize a click on a button matching PAT')
|
||||||
parser.add_argument('--answers')
|
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(
|
parser.add_argument(
|
||||||
'--snaps-from-examples', action='store_true',
|
'--snaps-from-examples', action='store_true',
|
||||||
help=("Load snap details from examples/snaps instead of store. "
|
help=("Load snap details from examples/snaps instead of store. "
|
||||||
|
|
|
@ -54,6 +54,10 @@ class InstallpathController(BaseController):
|
||||||
log.debug("Installing Ubuntu path chosen.")
|
log.debug("Installing Ubuntu path chosen.")
|
||||||
self.signal.emit_signal('next-screen')
|
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):
|
def install_maas_region(self):
|
||||||
# show region questions, seed model
|
# show region questions, seed model
|
||||||
title = "MAAS Region Controller Setup"
|
title = "MAAS Region Controller Setup"
|
||||||
|
|
|
@ -28,23 +28,37 @@ class InstallpathModel(object):
|
||||||
|
|
||||||
path = 'ubuntu'
|
path = 'ubuntu'
|
||||||
# update() is not run, upon selecting the default choice...
|
# update() is not run, upon selecting the default choice...
|
||||||
source = '/media/filesystem'
|
|
||||||
curtin = {}
|
curtin = {}
|
||||||
|
|
||||||
|
def __init__(self, sources=None):
|
||||||
|
self.cmdline_sources = sources
|
||||||
|
if sources:
|
||||||
|
self.path = 'cmdline'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def paths(self):
|
def paths(self):
|
||||||
return [
|
cmdline = []
|
||||||
|
if self.cmdline_sources:
|
||||||
|
cmdline = [(_('Install from cli provided sources'), 'cmdline')]
|
||||||
|
return cmdline + [
|
||||||
(_('Install Ubuntu'), 'ubuntu'),
|
(_('Install Ubuntu'), 'ubuntu'),
|
||||||
(_('Install MAAS bare-metal cloud (region)'), 'maas_region'),
|
(_('Install MAAS bare-metal cloud (region)'), 'maas_region'),
|
||||||
(_('Install MAAS bare-metal cloud (rack)'), 'maas_rack'),
|
(_('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):
|
def update(self, results):
|
||||||
if self.path == 'ubuntu':
|
self.curtin = {}
|
||||||
self.source = '/media/filesystem'
|
if self.path == 'maas_region':
|
||||||
self.curtin = {}
|
|
||||||
elif self.path == 'maas_region':
|
|
||||||
self.source = '/media/region'
|
|
||||||
self.curtin['debconf_selections'] = {
|
self.curtin['debconf_selections'] = {
|
||||||
'maas-username': ('maas-region-controller maas/username '
|
'maas-username': ('maas-region-controller maas/username '
|
||||||
'string %s' % results['username']),
|
'string %s' % results['username']),
|
||||||
|
@ -108,7 +122,6 @@ class InstallpathModel(object):
|
||||||
'915-maas': ['umount', '/target/proc'],
|
'915-maas': ['umount', '/target/proc'],
|
||||||
}
|
}
|
||||||
elif self.path == 'maas_rack':
|
elif self.path == 'maas_rack':
|
||||||
self.source = '/media/rack'
|
|
||||||
self.curtin['debconf_selections'] = {
|
self.curtin['debconf_selections'] = {
|
||||||
'maas-url': ('maas-rack-controller '
|
'maas-url': ('maas-rack-controller '
|
||||||
'maas-rack-controller/maas-url '
|
'maas-rack-controller/maas-url '
|
||||||
|
@ -132,6 +145,7 @@ class InstallpathModel(object):
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
raise ValueError("invalid Installpath %s" % self.path)
|
raise ValueError("invalid Installpath %s" % self.path)
|
||||||
|
self.curtin['sources'] = self.sources
|
||||||
|
|
||||||
def render(self):
|
def render(self):
|
||||||
return self.curtin
|
return self.curtin
|
||||||
|
|
|
@ -49,7 +49,7 @@ class SubiquityModel:
|
||||||
root = os.path.abspath(".subiquity")
|
root = os.path.abspath(".subiquity")
|
||||||
self.locale = LocaleModel(common['signal'])
|
self.locale = LocaleModel(common['signal'])
|
||||||
self.keyboard = KeyboardModel(root)
|
self.keyboard = KeyboardModel(root)
|
||||||
self.installpath = InstallpathModel()
|
self.installpath = InstallpathModel(sources=common['opts'].sources)
|
||||||
self.network = NetworkModel(support_wlan=False)
|
self.network = NetworkModel(support_wlan=False)
|
||||||
self.filesystem = FilesystemModel(common['prober'])
|
self.filesystem = FilesystemModel(common['prober'])
|
||||||
self.identity = IdentityModel()
|
self.identity = IdentityModel()
|
||||||
|
@ -135,9 +135,7 @@ class SubiquityModel:
|
||||||
'/var/log/installer/curtin-install.log',
|
'/var/log/installer/curtin-install.log',
|
||||||
},
|
},
|
||||||
|
|
||||||
'sources': {
|
'sources': self.installpath.sources,
|
||||||
'rofs': 'cp://%s' % self.installpath.source,
|
|
||||||
},
|
|
||||||
|
|
||||||
'verbosity': 3,
|
'verbosity': 3,
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue