convert SubiquityServer.kernel_params to an overengineered class
This commit is contained in:
parent
3e0c91e34b
commit
3d1c8fd6cf
|
@ -16,8 +16,11 @@
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import shlex
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import attr
|
||||||
|
|
||||||
from subiquitycore.log import setup_logger
|
from subiquitycore.log import setup_logger
|
||||||
|
|
||||||
from .common import (
|
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():
|
def make_server_args_parser():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description='SUbiquity - Ubiquity for Servers',
|
description='SUbiquity - Ubiquity for Servers',
|
||||||
|
@ -48,7 +75,9 @@ def make_server_args_parser():
|
||||||
'or autoinstall data from cloud-init.'))
|
'or autoinstall data from cloud-init.'))
|
||||||
with open('/proc/cmdline') as fp:
|
with open('/proc/cmdline') as fp:
|
||||||
cmdline = fp.read()
|
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(
|
parser.add_argument(
|
||||||
'--snaps-from-examples', action='store_const', const=True,
|
'--snaps-from-examples', action='store_const', const=True,
|
||||||
dest="snaps_from_examples",
|
dest="snaps_from_examples",
|
||||||
|
@ -115,6 +144,7 @@ def main():
|
||||||
version = os.environ.get("SNAP_REVISION", "unknown")
|
version = os.environ.get("SNAP_REVISION", "unknown")
|
||||||
logger.info("Starting Subiquity server revision {}".format(version))
|
logger.info("Starting Subiquity server revision {}".format(version))
|
||||||
logger.info("Arguments passed: {}".format(sys.argv))
|
logger.info("Arguments passed: {}".format(sys.argv))
|
||||||
|
logger.debug("Kernel commandline: {}".format(opts.kernel_cmdline))
|
||||||
|
|
||||||
server = SubiquityServer(opts, block_log_dir)
|
server = SubiquityServer(opts, block_log_dir)
|
||||||
|
|
||||||
|
|
|
@ -133,12 +133,11 @@ class RefreshController(SubiquityController):
|
||||||
|
|
||||||
def get_refresh_channel(self):
|
def get_refresh_channel(self):
|
||||||
"""Return the channel we should refresh subiquity to."""
|
"""Return the channel we should refresh subiquity to."""
|
||||||
prefix = "subiquity-channel="
|
channel = self.app.kernel_cmdline.get('subiquity-channel')
|
||||||
for arg in self.app.kernel_cmdline:
|
if channel is not None:
|
||||||
if arg.startswith(prefix):
|
log.debug(
|
||||||
log.debug(
|
"get_refresh_channel: found %s on kernel cmdline", channel)
|
||||||
"get_refresh_channel: found %s on kernel cmdline", arg)
|
return channel
|
||||||
return arg[len(prefix):]
|
|
||||||
if 'channel' in self.ai_data:
|
if 'channel' in self.ai_data:
|
||||||
return self.ai_data['channel']
|
return self.ai_data['channel']
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shlex
|
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
@ -304,7 +303,7 @@ class SubiquityServer(Application):
|
||||||
self.prober = None
|
self.prober = None
|
||||||
else:
|
else:
|
||||||
self.prober = Prober(opts.machine_config, self.debug_flags)
|
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:
|
if opts.snaps_from_examples:
|
||||||
connection = FakeSnapdConnection(
|
connection = FakeSnapdConnection(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
|
|
|
@ -33,7 +33,7 @@ class TestAutoinstallLoad(SubiTestCase):
|
||||||
opts.dry_run = True
|
opts.dry_run = True
|
||||||
opts.output_base = self.tempdir
|
opts.output_base = self.tempdir
|
||||||
opts.machine_config = 'examples/simple.json'
|
opts.machine_config = 'examples/simple.json'
|
||||||
opts.kernel_cmdline = ''
|
opts.kernel_cmdline = {}
|
||||||
opts.autoinstall = None
|
opts.autoinstall = None
|
||||||
self.server = SubiquityServer(opts, None)
|
self.server = SubiquityServer(opts, None)
|
||||||
self.server.base_model = Mock()
|
self.server.base_model = Mock()
|
||||||
|
|
|
@ -29,7 +29,7 @@ def make_app():
|
||||||
parser = make_server_args_parser()
|
parser = make_server_args_parser()
|
||||||
opts, unknown = parser.parse_known_args(['--dry-run'])
|
opts, unknown = parser.parse_known_args(['--dry-run'])
|
||||||
opts.machine_config = NOPROBERARG
|
opts.machine_config = NOPROBERARG
|
||||||
opts.kernel_cmdline = ""
|
opts.kernel_cmdline = {}
|
||||||
opts.snaps_from_examples = False
|
opts.snaps_from_examples = False
|
||||||
app = SystemSetupServer(opts, '')
|
app = SystemSetupServer(opts, '')
|
||||||
app.base_model = app.make_model()
|
app.base_model = app.make_model()
|
||||||
|
|
|
@ -56,7 +56,7 @@ def main():
|
||||||
opts = parser.parse_args(sys.argv[1:])
|
opts = parser.parse_args(sys.argv[1:])
|
||||||
logdir = LOGDIR
|
logdir = LOGDIR
|
||||||
opts.snaps_from_examples = False
|
opts.snaps_from_examples = False
|
||||||
opts.kernel_cmdline = ""
|
opts.kernel_cmdline = {}
|
||||||
opts.machine_config = NOPROBERARG
|
opts.machine_config = NOPROBERARG
|
||||||
if opts.dry_run:
|
if opts.dry_run:
|
||||||
logdir = opts.output_base
|
logdir = opts.output_base
|
||||||
|
|
Loading…
Reference in New Issue