Merge pull request #1304 from mwhudson/storage-version-kernel-command-line

take storage version from kernel command line
This commit is contained in:
Michael Hudson-Doyle 2022-06-02 20:00:50 +12:00 committed by GitHub
commit 05f057a4e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 13 deletions

View File

@ -16,8 +16,11 @@
import argparse
import logging
import os
import shlex
import sys
import attr
from subiquitycore.log import setup_logger
from .common import (
@ -26,6 +29,30 @@ from .common import (
)
@attr.s(auto_attribs=True)
class CommandLineParams:
_raw: str
_tokens: set = attr.Factory(set)
_values: dict = attr.Factory(dict)
@classmethod
def from_cmdline(cls, cmdline):
r = cls(cmdline)
for tok in shlex.split(cmdline):
if '=' in tok:
k, v = tok.split('=', 1)
r._values[k] = v
else:
r._tokens.add(tok)
return r
def __contains__(self, item):
return item in self._tokens
def get(self, key, default=None):
return self._values.get(key, default)
def make_server_args_parser():
parser = argparse.ArgumentParser(
description='SUbiquity - Ubiquity for Servers',
@ -48,7 +75,9 @@ def make_server_args_parser():
'or autoinstall data from cloud-init.'))
with open('/proc/cmdline') as fp:
cmdline = fp.read()
parser.add_argument('--kernel-cmdline', action='store', default=cmdline)
parser.add_argument(
'--kernel-cmdline', action='store', default=cmdline,
type=CommandLineParams.from_cmdline)
parser.add_argument(
'--snaps-from-examples', action='store_const', const=True,
dest="snaps_from_examples",
@ -72,7 +101,7 @@ def make_server_args_parser():
default='.subiquity',
help='in dryrun, control basedir of files')
parser.add_argument(
'--storage-version', action='store', type=int, default=1)
'--storage-version', action='store', type=int)
parser.add_argument(
'--use-os-prober', action='store_true', default=False)
return parser
@ -86,6 +115,9 @@ def main():
from subiquity.server.server import SubiquityServer
parser = make_server_args_parser()
opts = parser.parse_args(sys.argv[1:])
if opts.storage_version is None:
opts.storage_version = int(opts.kernel_cmdline.get(
'subiquity-storage-version', 1))
logdir = LOGDIR
if opts.dry_run:
if opts.snaps_from_examples is None:
@ -115,6 +147,7 @@ def main():
version = os.environ.get("SNAP_REVISION", "unknown")
logger.info("Starting Subiquity server revision {}".format(version))
logger.info("Arguments passed: {}".format(sys.argv))
logger.debug("Kernel commandline: {}".format(opts.kernel_cmdline))
server = SubiquityServer(opts, block_log_dir)

View File

@ -133,12 +133,11 @@ class RefreshController(SubiquityController):
def get_refresh_channel(self):
"""Return the channel we should refresh subiquity to."""
prefix = "subiquity-channel="
for arg in self.app.kernel_cmdline:
if arg.startswith(prefix):
channel = self.app.kernel_cmdline.get('subiquity-channel')
if channel is not None:
log.debug(
"get_refresh_channel: found %s on kernel cmdline", arg)
return arg[len(prefix):]
"get_refresh_channel: found %s on kernel cmdline", channel)
return channel
if 'channel' in self.ai_data:
return self.ai_data['channel']

View File

@ -16,7 +16,6 @@
import asyncio
import logging
import os
import shlex
import sys
import time
from typing import List, Optional
@ -304,7 +303,7 @@ class SubiquityServer(Application):
self.prober = None
else:
self.prober = Prober(opts.machine_config, self.debug_flags)
self.kernel_cmdline = shlex.split(opts.kernel_cmdline)
self.kernel_cmdline = opts.kernel_cmdline
if opts.snaps_from_examples:
connection = FakeSnapdConnection(
os.path.join(

View File

@ -33,7 +33,7 @@ class TestAutoinstallLoad(SubiTestCase):
opts.dry_run = True
opts.output_base = self.tempdir
opts.machine_config = 'examples/simple.json'
opts.kernel_cmdline = ''
opts.kernel_cmdline = {}
opts.autoinstall = None
self.server = SubiquityServer(opts, None)
self.server.base_model = Mock()

View File

@ -29,7 +29,7 @@ def make_app():
parser = make_server_args_parser()
opts, unknown = parser.parse_known_args(['--dry-run'])
opts.machine_config = NOPROBERARG
opts.kernel_cmdline = ""
opts.kernel_cmdline = {}
opts.snaps_from_examples = False
app = SystemSetupServer(opts, '')
app.base_model = app.make_model()

View File

@ -56,7 +56,7 @@ def main():
opts = parser.parse_args(sys.argv[1:])
logdir = LOGDIR
opts.snaps_from_examples = False
opts.kernel_cmdline = ""
opts.kernel_cmdline = {}
opts.machine_config = NOPROBERARG
if opts.dry_run:
logdir = opts.output_base