From 535dd2d6bbcd67e444b2e1ff27d1e81600b22950 Mon Sep 17 00:00:00 2001 From: Joseph Marrero Date: Tue, 18 Oct 2022 11:06:44 -0400 Subject: [PATCH 1/2] create-legacy-oscontainer: use runvm to build legacy oscontainer This introduces a new command to create a oci-archive of the legacy oscontainer that will be pushed with `cosa push-container-manifest` by the pipeline. --- cmd/coreos-assembler.go | 2 +- docs/cosa.md | 1 + src/cmd-create-legacy-oscontainer | 133 ++++++++++++ src/create-legacy-oscontainer.py | 322 ++++++++++++++++++++++++++++++ src/create-legacy-oscontainer.sh | 7 + src/v1.json | 9 +- src/vmdeps.txt | 3 + 7 files changed, 475 insertions(+), 2 deletions(-) create mode 100755 src/cmd-create-legacy-oscontainer create mode 100755 src/create-legacy-oscontainer.py create mode 100755 src/create-legacy-oscontainer.sh diff --git a/cmd/coreos-assembler.go b/cmd/coreos-assembler.go index 1d1394ee2f..21bb463841 100644 --- a/cmd/coreos-assembler.go +++ b/cmd/coreos-assembler.go @@ -13,7 +13,7 @@ import ( // commands we'd expect to use in the local dev path var buildCommands = []string{"init", "fetch", "build", "run", "prune", "clean", "list"} -var advancedBuildCommands = []string{"buildfetch", "buildupload", "oc-adm-release", "push-container", "upload-oscontainer", "buildextend-extensions"} +var advancedBuildCommands = []string{"buildfetch", "buildupload", "oc-adm-release", "push-container", "upload-oscontainer", "buildextend-extensions", "create-legacy-oscontainer"} var buildextendCommands = []string{"aliyun", "aws", "azure", "digitalocean", "exoscale", "gcp", "ibmcloud", "kubevirt", "live", "metal", "metal4k", "nutanix", "openstack", "qemu", "secex", "virtualbox", "vmware", "vultr"} var utilityCommands = []string{"aws-replicate", "build-extensions-container", "compress", "generate-hashlist", "koji-upload", "kola", "push-container-manifest", "remote-build-container", "remote-prune", "remote-session", "sign", "update-variant"} var otherCommands = []string{"shell", "meta"} diff --git a/docs/cosa.md b/docs/cosa.md index beb8132668..3bfc3612e0 100644 --- a/docs/cosa.md +++ b/docs/cosa.md @@ -72,3 +72,4 @@ Those less commonly used commands are listed here: | [tag](https://github.com/coreos/coreos-assembler/blob/main/src/cmd-tag) | Operate on the tags in `builds.json` | [test-coreos-installer](https://github.com/coreos/coreos-assembler/blob/main/src/cmd-test-coreos-installer) | Automate an end-to-end run of coreos-installer with the metal image | [upload-oscontainer](https://github.com/coreos/coreos-assembler/blob/main/src/cmd-upload-oscontainer) | Upload an oscontainer (historical wrapper for `cosa oscontainer`) +| [create-legacy-oscontainer](https://github.com/coreos/coreos-assembler/blob/main/src/cmd-create-legacy-oscontainer) | Create an oscontainer in legacy format (i.e. not OSTree-native) diff --git a/src/cmd-create-legacy-oscontainer b/src/cmd-create-legacy-oscontainer new file mode 100755 index 0000000000..ff18c81fc6 --- /dev/null +++ b/src/cmd-create-legacy-oscontainer @@ -0,0 +1,133 @@ +#!/usr/bin/python3 -u +# Upload an oscontainer. This is a wrapper for +# `cosa oscontainer` that just for historical reasons +# used to live downstream in the redhat-coreos pipeline. +# In the future we should just have one `cosa oscontainer` +# command. + +import argparse +import json +import yaml +import os +import shutil +import subprocess +import sys +from cosalib.cmdlib import sha256sum_file + +cosa_dir = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, cosa_dir) + +from cosalib import cmdlib + + +with open('builds/builds.json') as f: + builds = json.load(f)['builds'] +if len(builds) == 0: + cmdlib.fatal("No builds found") +latest_build = builds[0]['id'] +arch = cmdlib.get_basearch() +latest_build_path = f"builds/{latest_build}/{arch}" + +metapath = f"{latest_build_path}/meta.json" +with open(metapath) as f: + meta = json.load(f) + +name = meta['name'] + '-' + meta['buildid'] + '-oscontainer.' + arch + '.ociarchive' +parser = argparse.ArgumentParser() +parser.add_argument("--arch-tag", help="append arch name to push tag", + action='store_true') +parser.add_argument("--name", help="oscontainer name", + action='store', default=f'{name}') +parser.add_argument("--from", help="Base image", default='scratch', + dest='from_image') +parser.add_argument("--format", help="Format to use for push") +parser.add_argument("--add-directory", help="Copy in all content from referenced directory DIR", + metavar='DIR', action='append', default=[]) + +args = parser.parse_args() + +# for backcompat, we auto-build extensions if they're missing +if os.path.exists('src/config/extensions.yaml'): + if 'extensions' not in meta: + cmdlib.runcmd(['coreos-assembler', 'buildextend-extensions']) + with open(metapath) as f: + meta = json.load(f) + assert 'extensions' in meta + +configdir = os.path.abspath('src/config') +oscconfigpath = f'{configdir}/oscontainer.yaml' +# XXX: fold oscontainer.yaml handling into oscontainer.py +configyaml = {} +if os.path.exists(oscconfigpath): + with open(oscconfigpath) as f: + configyaml = yaml.safe_load(f) + +if 'base' in configyaml: + args.from_image = configyaml['base'] + +print("Preparing to upload oscontainer for build: {}".format(latest_build)) +ostree_commit = meta['ostree-commit'] + +tmprepo = "{}/tmp/repo".format(os.getcwd()) +# if tmprepo is not a directory, but is unexpectedly a file, +# just nuke it +if not os.path.isdir(tmprepo) and os.path.exists(tmprepo): + os.remove(tmprepo) + +# if tmprepo is not a directory and not a file, recreate from +# the tarfile +if not os.path.exists(tmprepo): + os.makedirs(tmprepo, exist_ok=True) + ostree_commit_tar = meta['images']['ostree']['path'] + subprocess.check_call(['tar', '-xf', + f'{latest_build_path}/{ostree_commit_tar}', + '-C', tmprepo]) + +tmp_osreleasedir = 'tmp/usrlib-osrelease' +subprocess.check_call(['rm', '-rf', tmp_osreleasedir]) +cmdlib.runcmd(['/usr/bin/ostree', 'checkout', '--repo', tmprepo, + '--user-mode', '--subpath=/usr/lib/os-release', ostree_commit, + tmp_osreleasedir]) +display_name = None +with open(os.path.join(tmp_osreleasedir, "os-release")) as f: + display_name = subprocess.check_output(['/bin/sh', '-c', 'set -euo pipefail; . /proc/self/fd/0 && echo $NAME'], stdin=f, encoding='UTF-8').strip() +if display_name == "": + raise SystemExit(f"Failed to find NAME= in /usr/lib/os-release in commit {ostree_commit}") +shutil.rmtree(tmp_osreleasedir) + +osc_name_and_tag = f"{args.name}:{latest_build}" +if args.arch_tag: + arch = meta.get("coreos-assembler.basearch", cmdlib.get_basearch) + osc_name_and_tag = f"{args.name}:{latest_build}-{arch}" + +# TODO: Use labels for the build hash and avoid pulling the oscontainer +# every time we want to poll. +# TODO: Remove --from +digestfile = "tmp/oscontainer-digest" +print("Entering vm to build oscontainer for build: {}".format(latest_build)) + +cosa_argv = (['/usr/lib/coreos-assembler/create-legacy-oscontainer.sh', '--workdir=./tmp', 'build', f'--from={args.from_image}']) +for d in args.add_directory: + cosa_argv.append(f'--add-directory="{d}"') +cosa_argv.append(f'--display-name="{display_name}"') +if 'labeled-packages' in configyaml: + pkgs = ' '.join(configyaml['labeled-packages']) + cosa_argv.append(f'--labeled-packages="{pkgs}"') +if args.format is not None: + cosa_argv.append(f'--format={args.format}') +subprocess.check_call(cosa_argv + + [f'--digestfile={digestfile}', + '--push', tmprepo, + meta['ostree-commit'], + osc_name_and_tag]) + +# Inject the oscontainer with SHA256 into the build metadata +oci_archive = f"{latest_build_path}/{args.name}" +meta['images']['legacy-oscontainer'] = {'path': args.name, + 'sha256': sha256sum_file(oci_archive), + 'size': os.path.getsize(oci_archive), + "skip-compression": True} +metapath_new = f"{metapath}.new" +with open(metapath_new, 'w') as f: + json.dump(meta, f, sort_keys=True) +shutil.move(metapath_new, metapath) diff --git a/src/create-legacy-oscontainer.py b/src/create-legacy-oscontainer.py new file mode 100755 index 0000000000..6917ccd663 --- /dev/null +++ b/src/create-legacy-oscontainer.py @@ -0,0 +1,322 @@ +#!/usr/bin/env python3 +# NOTE: PYTHONUNBUFFERED is set in the entrypoint for unbuffered output +# +# An "oscontainer" is an ostree (archive) repository stuck inside +# a Docker/OCI container at /srv/repo. For more information, +# see https://github.com/openshift/pivot +# +# This command manipulates those images. + +import gi + +gi.require_version('OSTree', '1.0') +gi.require_version('RpmOstree', '1.0') + +from gi.repository import GLib, Gio, OSTree, RpmOstree + +import argparse +import json +import os +import shutil +import subprocess +from cosalib import cmdlib +from cosalib.buildah import ( + buildah_base_args +) + +OSCONTAINER_COMMIT_LABEL = 'com.coreos.ostree-commit' + + +def run_get_json(args): + return json.loads(subprocess.check_output(args)) + + +def run_get_string(args): + return subprocess.check_output(args, encoding='UTF-8').strip() + + +def find_commit_from_oscontainer(repo): + """Given an ostree repo, find exactly one commit object in it""" + o = subprocess.check_output(['find', repo + '/objects', '-name', '*.commit'], encoding='UTF-8').strip().split('\n') + if len(o) > 1: + raise SystemExit(f"Multiple commit objects found in {repo}") + d, n = os.path.split(o[0]) + return os.path.basename(d) + n.split('.')[0] + + +# Given a container reference, pull the latest version, then extract the ostree +# repo a new directory dest/repo. +def oscontainer_extract(containers_storage, tmpdir, src, dest, + tls_verify=True, ref=None, cert_dir="", + authfile=""): + dest = os.path.realpath(dest) + subprocess.check_call(["ostree", "--repo=" + dest, "refs"]) + + # FIXME: Today we use skopeo in a hacky way for this. What we + # really want is the equivalent of `oc image extract` as part of + # podman or skopeo. + cmd = ['skopeo'] + # See similar message in oscontainer_build. + if tmpdir is not None: + os.environ['TMPDIR'] = tmpdir + + if not tls_verify: + cmd.append('--tls-verify=false') + + if authfile != "": + cmd.append("--authfile={}".format(authfile)) + if cert_dir != "": + cmd.append("--cert-dir={}".format(cert_dir)) + tmp_tarball = tmpdir + '/container.tar' + cmd += ['copy', "docker://" + src, 'docker-archive://' + tmp_tarball] + cmdlib.runcmd(cmd) + cmdlib.runcmd(['tar', 'xf', tmp_tarball], cwd=tmpdir) + os.unlink(tmp_tarball) + # This is a brutal hack to extract all the layers; we don't even bother with ordering + # because we know we're not removing anything in higher layers. + subprocess.check_call(['find', '-name', '*.tar', '-exec', 'tar', 'xUf', '{}', ';'], cwd=tmpdir) + # Some files/directories aren't writable, and this will cause permission errors + subprocess.check_call(['find', '!', '-perm', '-u+w', '-exec', 'chmod', 'u+w', '{}', ';'], cwd=tmpdir) + + repo = tmpdir + '/srv/repo' + commit = find_commit_from_oscontainer(repo) + print(f"commit: {commit}") + cmdlib.runcmd(["ostree", "--repo=" + dest, "pull-local", repo, commit]) + if ref is not None: + cmdlib.runcmd([ + "ostree", "--repo=" + dest, "refs", '--create=' + ref, commit]) + + +# Given an OSTree repository at src (and exactly one ref) generate an +# oscontainer with it. +def oscontainer_build(containers_storage, tmpdir, src, ref, image_name_and_tag, + base_image, push=False, tls_verify=True, pushformat=None, + add_directories=[], cert_dir="", authfile="", digestfile=None, + display_name=None, labeled_pkgs=[]): + r = OSTree.Repo.new(Gio.File.new_for_path(src)) + r.open(None) + + [_, rev] = r.resolve_rev(ref, True) + if ref != rev: + print("Resolved {} = {}".format(ref, rev)) + [_, ostree_commit, _] = r.load_commit(rev) + ostree_commitmeta = ostree_commit.get_child_value(0) + versionv = ostree_commitmeta.lookup_value( + "version", GLib.VariantType.new("s")) + if versionv: + ostree_version = versionv.get_string() + else: + ostree_version = None + + buildah_base_argv = buildah_base_args(None) + + # In general, we just stick with the default tmpdir set up. But if a + # workdir is provided, then we want to be sure that all the heavy I/O work + # that happens stays in there since e.g. we might be inside a tiny supermin + # appliance. + if tmpdir is not None: + os.environ['TMPDIR'] = tmpdir + + bid = run_get_string(buildah_base_argv + ['from', base_image]) + mnt = run_get_string(buildah_base_argv + ['mount', bid]) + try: + dest_repo = os.path.join(mnt, 'srv/repo') + subprocess.check_call(['mkdir', '-p', dest_repo]) + subprocess.check_call([ + "ostree", "--repo=" + dest_repo, "init", "--mode=archive"]) + # Note that oscontainers don't have refs; we also disable fsync + # because the repo will be put into a container image and the build + # process should handle its own fsync (or choose not to). + print("Copying ostree commit into container: {} ...".format(rev)) + cmdlib.runcmd(["ostree", "--repo=" + dest_repo, "pull-local", "--disable-fsync", src, rev]) + + for d in add_directories: + with os.scandir(d) as it: + for entry in it: + dest = os.path.join(mnt, entry.name) + subprocess.check_call(['/usr/lib/coreos-assembler/cp-reflink', entry.path, dest]) + print(f"Copied in content from: {d}") + + # We use /noentry to trick `podman create` into not erroring out + # on a container with no cmd/entrypoint. It won't actually be run. + config = ['--entrypoint', '["/noentry"]', + '-l', OSCONTAINER_COMMIT_LABEL + '=' + rev] + if ostree_version is not None: + config += ['-l', 'version=' + ostree_version] + + base_pkgs = RpmOstree.db_query_all(r, rev, None) + for pkg in base_pkgs: + name = pkg.get_name() + if name in labeled_pkgs: + config += ['-l', f"com.coreos.rpm.{name}={pkg.get_evr()}.{pkg.get_arch()}"] + + # Generate pkglist.txt in to the oscontainer at / + pkg_list_dest = os.path.join(mnt, 'pkglist.txt') + # should already be sorted, but just re-sort to be sure + nevras = sorted([pkg.get_nevra() for pkg in base_pkgs]) + with open(pkg_list_dest, 'w') as f: + for nevra in nevras: + f.write(nevra) + f.write('\n') + + meta = {} + builddir = None + if os.path.isfile('builds/builds.json'): + with open('builds/builds.json') as fb: + builds = json.load(fb)['builds'] + latest_build = builds[0]['id'] + arch = cmdlib.get_basearch() + builddir = f"builds/{latest_build}/{arch}" + metapath = f"{builddir}/meta.json" + with open(metapath) as f: + meta = json.load(f) + rhcos_commit = meta['coreos-assembler.container-config-git']['commit'] + imagegit = meta.get('coreos-assembler.container-image-git') + if imagegit is not None: + cosa_commit = imagegit['commit'] + config += ['-l', f"com.coreos.coreos-assembler-commit={cosa_commit}"] + config += ['-l', f"com.coreos.redhat-coreos-commit={rhcos_commit}"] + + if 'extensions' in meta: + tarball = os.path.abspath(os.path.join(builddir, meta['extensions']['path'])) + dest_dir = os.path.join(mnt, 'extensions') + os.makedirs(dest_dir, exist_ok=True) + cmdlib.runcmd(["tar", "-xf", tarball], cwd=dest_dir) + + with open(os.path.join(dest_dir, 'extensions.json')) as f: + extensions = json.load(f) + + extensions_label = ';'.join([ext for (ext, obj) in extensions['extensions'].items() + if obj.get('kind', 'os-extension') == 'os-extension']) + config += ['-l', f"com.coreos.os-extensions={extensions_label}"] + + for pkgname in meta['extensions']['manifest']: + if pkgname in labeled_pkgs: + evra = meta['extensions']['manifest'][pkgname] + config += ['-l', f"com.coreos.rpm.{pkgname}={evra}"] + + if display_name is not None: + config += ['-l', 'io.openshift.build.version-display-names=machine-os=' + display_name, + '-l', 'io.openshift.build.versions=machine-os=' + ostree_version] + cmdlib.runcmd(buildah_base_argv + ['config'] + config + [bid]) + print("Committing container...") + iid = run_get_string(buildah_base_argv + ['commit', bid, image_name_and_tag]) + print("{} {}".format(image_name_and_tag, iid)) + finally: + subprocess.call(buildah_base_argv + ['umount', bid], stdout=subprocess.DEVNULL) + subprocess.call(buildah_base_argv + ['rm', bid], stdout=subprocess.DEVNULL) + + if push: + print("Saving container to oci-archive") + podCmd = buildah_base_argv + ['push'] + + if digestfile is not None: + podCmd.append(f'--digestfile={digestfile}') + + if pushformat is not None: + podCmd.append(f'--format={pushformat}') + + # Historically upload-oscontainer would require --name which was in our + # pipeline a repository URL. Going forward create-legacy-oscontainer + # just creates an oci-archive and a url is not a valid name/tag combination. + if '/' in image_name_and_tag: + image_name_and_tag = image_name_and_tag.rsplit('/', 1)[1] + + podCmd.append(image_name_and_tag) + + podCmd.append(f'oci-archive:{builddir}/{image_name_and_tag}') + + cmdlib.runcmd(podCmd) + elif digestfile is not None: + inspect = run_get_json(buildah_base_argv + ['inspect', image_name_and_tag])[0] + with open(digestfile, 'w') as f: + f.write(inspect['Digest']) + + +def main(): + # Parse args and dispatch + parser = argparse.ArgumentParser() + parser.add_argument("--workdir", help="Temporary working directory") + parser.add_argument("--disable-tls-verify", + help="Disable TLS for pushes and pulls", + default=(True if os.environ.get("DISABLE_TLS_VERIFICATION", False) else False), + action="store_true") + parser.add_argument("--cert-dir", help="Extra certificate directories", + default=os.environ.get("OSCONTAINER_CERT_DIR", '')) + parser.add_argument("--authfile", help="Path to authentication file", + action="store", + default=os.environ.get("REGISTRY_AUTH_FILE", '')) + subparsers = parser.add_subparsers(dest='action') + parser_extract = subparsers.add_parser( + 'extract', help='Extract an oscontainer') + parser_extract.add_argument("src", help="Image reference") + parser_extract.add_argument("dest", help="Destination directory") + parser_extract.add_argument("--ref", help="Also set an ostree ref") + parser_build = subparsers.add_parser('build', help='Build an oscontainer') + parser_build.add_argument( + "--from", + help="Base image (default 'scratch')", + default='scratch') + parser_build.add_argument("src", help="OSTree repository") + parser_build.add_argument("rev", help="OSTree ref (or revision)") + parser_build.add_argument("name", help="Image name") + parser_build.add_argument("--display-name", help="Name used for an OpenShift component") + parser_build.add_argument("--add-directory", help="Copy in all content from referenced directory DIR", + metavar='DIR', action='append', default=[]) + parser_build.add_argument("--labeled-packages", help="Packages whose NEVRAs are included as labels on the image") + # For now we forcibly override to v2s2 https://bugzilla.redhat.com/show_bug.cgi?id=2058421 + parser_build.add_argument("--format", help="Pass through push format to buildah", default="v2s2") + parser_build.add_argument( + "--digestfile", + help="Write image digest to file", + action='store', + metavar='FILE') + parser_build.add_argument( + "--push", + help="Push to registry", + action='store_true') + args = parser.parse_args() + + labeled_pkgs = [] + if args.labeled_packages is not None: + labeled_pkgs = args.labeled_packages.split() + + containers_storage = None + tmpdir = None + if args.workdir is not None: + containers_storage = os.path.join(args.workdir, 'containers-storage') + if os.path.exists(containers_storage): + shutil.rmtree(containers_storage) + tmpdir = os.path.join(args.workdir, 'tmp') + if os.path.exists(tmpdir): + shutil.rmtree(tmpdir) + os.makedirs(tmpdir) + + try: + if args.action == 'extract': + oscontainer_extract( + containers_storage, tmpdir, args.src, args.dest, + tls_verify=not args.disable_tls_verify, + cert_dir=args.cert_dir, + ref=args.ref, + authfile=args.authfile) + elif args.action == 'build': + oscontainer_build( + containers_storage, tmpdir, args.src, args.rev, args.name, + getattr(args, 'from'), + display_name=args.display_name, + digestfile=args.digestfile, + add_directories=args.add_directory, + push=args.push, + pushformat=args.format, + tls_verify=not args.disable_tls_verify, + cert_dir=args.cert_dir, + authfile=args.authfile, + labeled_pkgs=labeled_pkgs) + finally: + if containers_storage is not None and os.path.isdir(containers_storage): + shutil.rmtree(containers_storage) + + +if __name__ == '__main__': + main() diff --git a/src/create-legacy-oscontainer.sh b/src/create-legacy-oscontainer.sh new file mode 100755 index 0000000000..5271ff49b9 --- /dev/null +++ b/src/create-legacy-oscontainer.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# shellcheck disable=SC1091 +set -euo pipefail +# Start VM and call buildah +. /usr/lib/coreos-assembler/cmdlib.sh +prepare_build +runvm -- /usr/lib/coreos-assembler/create-legacy-oscontainer.py "$@" diff --git a/src/v1.json b/src/v1.json index e8414ff12d..0c3a3fa92e 100644 --- a/src/v1.json +++ b/src/v1.json @@ -440,6 +440,7 @@ "digitalocean", "exoscale", "extensions-container", + "legacy-oscontainer", "gcp", "kubevirt", "ibmcloud", @@ -486,6 +487,12 @@ "title": "extensions-container", "$ref": "#/definitions/artifact" }, + "legacy-oscontainer": { + "$id": "#/properties/images/properties/legacy-oscontainer", + "type": "object", + "title": "legacy-oscontainer", + "$ref": "#/definitions/artifact" + }, "qemu": { "$id": "#/properties/images/properties/qemu", "type": "object", @@ -970,4 +977,4 @@ "$ref": "#/definitions/image" } } -} \ No newline at end of file +} diff --git a/src/vmdeps.txt b/src/vmdeps.txt index f5f375f2ac..a73a00c066 100644 --- a/src/vmdeps.txt +++ b/src/vmdeps.txt @@ -20,6 +20,9 @@ selinux-policy selinux-policy-targeted policycoreutils # coreos-assembler python3 python3-gobject-base buildah podman skopeo iptables iptables-libs +# legacy-oscontainer +python3-pyyaml python3-botocore python3-flufl-lock python3-tenacity + # luks cryptsetup # filesystems/storage From 005cd815f38f818250fcc7ae8235f54a403402b0 Mon Sep 17 00:00:00 2001 From: Joseph Marrero Date: Thu, 20 Oct 2022 15:01:26 -0400 Subject: [PATCH 2/2] schema: updates for legacy-oscontainer entry These changes come from calling: `make schema && cd mantle && go vendor` --- .../coreos/coreos-assembler/pkg/builds/build.go | 8 ++------ .../coreos/coreos-assembler/pkg/builds/cosa_v1.go | 3 ++- .../coreos/coreos-assembler/pkg/builds/schema_doc.go | 9 ++++++++- pkg/builds/cosa_v1.go | 3 ++- pkg/builds/schema_doc.go | 9 ++++++++- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/build.go b/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/build.go index 40a37035eb..bd5ba408a4 100644 --- a/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/build.go +++ b/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/build.go @@ -24,12 +24,12 @@ import ( "path/filepath" "reflect" "regexp" - "runtime" "sort" "strings" "github.com/pkg/errors" log "github.com/sirupsen/logrus" + coreosarch "github.com/coreos/stream-metadata-go/arch" ) var ( @@ -67,11 +67,7 @@ func BuilderArch() string { if forceArch != "" { return forceArch } - arch := runtime.GOARCH - if arch == "amd64" { - arch = "x86_64" - } - return arch + return coreosarch.CurrentRpmArch() } // defaultWalkFunc walks over a directory and returns a channel of os.FileInfo diff --git a/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/cosa_v1.go b/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/cosa_v1.go index 6a6f0eb210..752888a91f 100644 --- a/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/cosa_v1.go +++ b/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/cosa_v1.go @@ -1,7 +1,7 @@ package builds // generated by 'make schema' -// source hash: 144450d458f89f637ca487d353af3dfd60096ddbf3179da8e2b42b2bd2d0a6eb +// source hash: 3508b2f150e72b8e24151d870789809cf4070cec6b4716966a4e8bc585e0c5f1 type AdvisoryDiff []AdvisoryDiffItems @@ -101,6 +101,7 @@ type BuildArtifacts struct { Iso *Artifact `json:"iso,omitempty"` Kernel *Artifact `json:"kernel,omitempty"` KubeVirt *Artifact `json:"kubevirt,omitempty"` + LegacyOscontainer *Artifact `json:"legacy-oscontainer,omitempty"` LiveInitramfs *Artifact `json:"live-initramfs,omitempty"` LiveIso *Artifact `json:"live-iso,omitempty"` LiveKernel *Artifact `json:"live-kernel,omitempty"` diff --git a/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/schema_doc.go b/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/schema_doc.go index 204ec12074..7c8f985691 100644 --- a/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/schema_doc.go +++ b/mantle/vendor/github.com/coreos/coreos-assembler/pkg/builds/schema_doc.go @@ -1,5 +1,5 @@ // Generated by ./generate-schema.sh -// Source hash: 144450d458f89f637ca487d353af3dfd60096ddbf3179da8e2b42b2bd2d0a6eb +// Source hash: 3508b2f150e72b8e24151d870789809cf4070cec6b4716966a4e8bc585e0c5f1 // DO NOT EDIT package builds @@ -446,6 +446,7 @@ var generatedSchemaJSON = `{ "digitalocean", "exoscale", "extensions-container", + "legacy-oscontainer", "gcp", "kubevirt", "ibmcloud", @@ -492,6 +493,12 @@ var generatedSchemaJSON = `{ "title": "extensions-container", "$ref": "#/definitions/artifact" }, + "legacy-oscontainer": { + "$id": "#/properties/images/properties/legacy-oscontainer", + "type": "object", + "title": "legacy-oscontainer", + "$ref": "#/definitions/artifact" + }, "qemu": { "$id": "#/properties/images/properties/qemu", "type": "object", diff --git a/pkg/builds/cosa_v1.go b/pkg/builds/cosa_v1.go index 6a6f0eb210..752888a91f 100644 --- a/pkg/builds/cosa_v1.go +++ b/pkg/builds/cosa_v1.go @@ -1,7 +1,7 @@ package builds // generated by 'make schema' -// source hash: 144450d458f89f637ca487d353af3dfd60096ddbf3179da8e2b42b2bd2d0a6eb +// source hash: 3508b2f150e72b8e24151d870789809cf4070cec6b4716966a4e8bc585e0c5f1 type AdvisoryDiff []AdvisoryDiffItems @@ -101,6 +101,7 @@ type BuildArtifacts struct { Iso *Artifact `json:"iso,omitempty"` Kernel *Artifact `json:"kernel,omitempty"` KubeVirt *Artifact `json:"kubevirt,omitempty"` + LegacyOscontainer *Artifact `json:"legacy-oscontainer,omitempty"` LiveInitramfs *Artifact `json:"live-initramfs,omitempty"` LiveIso *Artifact `json:"live-iso,omitempty"` LiveKernel *Artifact `json:"live-kernel,omitempty"` diff --git a/pkg/builds/schema_doc.go b/pkg/builds/schema_doc.go index 204ec12074..7c8f985691 100644 --- a/pkg/builds/schema_doc.go +++ b/pkg/builds/schema_doc.go @@ -1,5 +1,5 @@ // Generated by ./generate-schema.sh -// Source hash: 144450d458f89f637ca487d353af3dfd60096ddbf3179da8e2b42b2bd2d0a6eb +// Source hash: 3508b2f150e72b8e24151d870789809cf4070cec6b4716966a4e8bc585e0c5f1 // DO NOT EDIT package builds @@ -446,6 +446,7 @@ var generatedSchemaJSON = `{ "digitalocean", "exoscale", "extensions-container", + "legacy-oscontainer", "gcp", "kubevirt", "ibmcloud", @@ -492,6 +493,12 @@ var generatedSchemaJSON = `{ "title": "extensions-container", "$ref": "#/definitions/artifact" }, + "legacy-oscontainer": { + "$id": "#/properties/images/properties/legacy-oscontainer", + "type": "object", + "title": "legacy-oscontainer", + "$ref": "#/definitions/artifact" + }, "qemu": { "$id": "#/properties/images/properties/qemu", "type": "object",