pipeline: remove Assembler class

Now that assemblers are represented via the `Stage` class, the
Assembler class is not needed anymore. Adjust the monitor method
to take an `pipeline.Stage` for the `assembler` method as well.
This commit is contained in:
Christian Kellner 2021-01-18 17:40:54 +00:00
parent 8ccc73d1c3
commit 6c02002cbd
4 changed files with 3 additions and 55 deletions

View file

@ -8,11 +8,10 @@ The utility module `osbuild.util` provides access to common functionality
independent of osbuild but used across the osbuild codebase. independent of osbuild but used across the osbuild codebase.
""" """
from .pipeline import Assembler, Manifest, Pipeline, Stage from .pipeline import Manifest, Pipeline, Stage
__all__ = [ __all__ = [
"Assembler",
"Manifest", "Manifest",
"Pipeline", "Pipeline",
"Stage", "Stage",

View file

@ -66,7 +66,7 @@ class BaseMonitor(abc.ABC):
def stage(self, stage: osbuild.Stage): def stage(self, stage: osbuild.Stage):
"""Called when a stage is being built""" """Called when a stage is being built"""
def assembler(self, assembler: osbuild.Assembler): def assembler(self, assembler: osbuild.Stage):
"""Called when an assembler is being built""" """Called when an assembler is being built"""
def result(self, result: osbuild.pipeline.BuildResult): def result(self, result: osbuild.pipeline.BuildResult):

View file

@ -110,57 +110,6 @@ class Stage:
return BuildResult(self, r.returncode, r.output, api.metadata, api.error) return BuildResult(self, r.returncode, r.output, api.metadata, api.error)
class Assembler:
def __init__(self, name, build, base, options):
self.name = name
self.build = build
self.base = base
self.options = options
self.checkpoint = False
@property
def id(self):
m = hashlib.sha256()
m.update(json.dumps(self.name, sort_keys=True).encode())
m.update(json.dumps(self.build, sort_keys=True).encode())
m.update(json.dumps(self.base, sort_keys=True).encode())
m.update(json.dumps(self.options, sort_keys=True).encode())
return m.hexdigest()
def run(self, tree, runner, build_tree, monitor, libdir, output_dir, var="/var/tmp"):
with buildroot.BuildRoot(build_tree, runner, libdir, var=var) as build_root:
args = {
"tree": "/run/osbuild/tree",
"options": self.options,
"meta": {
"id": self.id
}
}
binds = []
output_dir = os.fspath(output_dir)
os.makedirs(output_dir, exist_ok=True)
binds.append(f"{output_dir}:/run/osbuild/output")
args["output_dir"] = "/run/osbuild/output"
ro_binds = [os.fspath(tree) + ":/run/osbuild/tree"]
api = API(args, monitor)
build_root.register_api(api)
rls = remoteloop.LoopServer()
build_root.register_api(rls)
r = build_root.run([f"/run/osbuild/lib/assemblers/{self.name}"],
monitor,
binds=binds,
readonly_binds=ro_binds)
return BuildResult(self, r.returncode, r.output, api.metadata, api.error)
class Pipeline: class Pipeline:
def __init__(self, runner=None, build=None): def __init__(self, runner=None, build=None):
self.build = build self.build = build

View file

@ -38,7 +38,7 @@ class TapeMonitor(osbuild.monitor.BaseMonitor):
self.counter["stages"] += 1 self.counter["stages"] += 1
self.stages.add(stage.id) self.stages.add(stage.id)
def assembler(self, assembler: osbuild.Assembler): def assembler(self, assembler: osbuild.Stage):
self.counter["assembler"] += 1 self.counter["assembler"] += 1
self.asm = assembler.id self.asm = assembler.id