
A new container registry was added recently in the fd.o infrastructure.
It is located in a datacenter that does not charge for bandwidth usage,
and aims to become the canonical registry in the future. It is however
currently configured to be a partial mirror of registry.fd.o, where
only the most-downloaded container images can be found.
The address of the new registry is specified in mesa/mesa's CI
variables, which means forks will default to registry.fd.o. However,
Valve Infra DUTs do not have access to the internet, and instead use
another cache proxy hosted locally on the CI gateways. This forced
Benjamin to overwrite the registry URL from harbor.freedesktop.org to
registry.freedesktop.org in 0bd9a062e1
("CI: Overwrite valve infra's
registry").
After adding support for the new registry in valve infra, then
deploying the update, we are now able to make use of the new container
registry. This commit simply rewrites the URL harbor.freedesktop.org
into `{{ harbor_fdo_registry }}`. This variable is set in the valve
infra to point to the `host:ip` of the service, which means changes to
the way we deploy this service can be done on the valve-infra side
without needing to make changes to every project that makes use of our
machines.
Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7913
Acked-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Signed-off-by: Martin Roukala (né Peres) <martin.roukala@mupuf.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20450>
108 lines
4.7 KiB
Python
Executable File
108 lines
4.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Copyright © 2022 Valve Corporation
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
# copy of this software and associated documentation files (the "Software"),
|
|
# to deal in the Software without restriction, including without limitation
|
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
# and/or sell copies of the Software, and to permit persons to whom the
|
|
# Software is furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice (including the next
|
|
# paragraph) shall be included in all copies or substantial portions of the
|
|
# Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
# IN THE SOFTWARE.
|
|
|
|
from jinja2 import Environment, FileSystemLoader
|
|
from argparse import ArgumentParser
|
|
from os import environ, path
|
|
import json
|
|
|
|
|
|
parser = ArgumentParser()
|
|
parser.add_argument('--ci-job-id')
|
|
parser.add_argument('--container-cmd')
|
|
parser.add_argument('--initramfs-url')
|
|
parser.add_argument('--job-success-regex')
|
|
parser.add_argument('--job-warn-regex')
|
|
parser.add_argument('--kernel-url')
|
|
parser.add_argument('--log-level', type=int)
|
|
parser.add_argument('--poweroff-delay', type=int)
|
|
parser.add_argument('--session-end-regex')
|
|
parser.add_argument('--session-reboot-regex')
|
|
parser.add_argument('--tags', nargs='?', default='')
|
|
parser.add_argument('--template', default='b2c.yml.jinja2.jinja2')
|
|
parser.add_argument('--timeout-boot-minutes', type=int)
|
|
parser.add_argument('--timeout-boot-retries', type=int)
|
|
parser.add_argument('--timeout-first-minutes', type=int)
|
|
parser.add_argument('--timeout-first-retries', type=int)
|
|
parser.add_argument('--timeout-minutes', type=int)
|
|
parser.add_argument('--timeout-overall-minutes', type=int)
|
|
parser.add_argument('--timeout-retries', type=int)
|
|
parser.add_argument('--job-volume-exclusions', nargs='?', default='')
|
|
parser.add_argument('--volume', action='append')
|
|
parser.add_argument('--mount-volume', action='append')
|
|
parser.add_argument('--local-container', default=environ.get('B2C_LOCAL_CONTAINER', 'alpine:latest'))
|
|
parser.add_argument('--working-dir')
|
|
args = parser.parse_args()
|
|
|
|
env = Environment(loader=FileSystemLoader(path.dirname(args.template)),
|
|
trim_blocks=True, lstrip_blocks=True)
|
|
|
|
template = env.get_template(path.basename(args.template))
|
|
|
|
values = {}
|
|
values['ci_job_id'] = args.ci_job_id
|
|
values['container_cmd'] = args.container_cmd
|
|
values['initramfs_url'] = args.initramfs_url
|
|
values['job_success_regex'] = args.job_success_regex
|
|
values['job_warn_regex'] = args.job_warn_regex
|
|
values['kernel_url'] = args.kernel_url
|
|
values['log_level'] = args.log_level
|
|
values['poweroff_delay'] = args.poweroff_delay
|
|
values['session_end_regex'] = args.session_end_regex
|
|
values['session_reboot_regex'] = args.session_reboot_regex
|
|
try:
|
|
values['tags'] = json.loads(args.tags)
|
|
except json.decoder.JSONDecodeError:
|
|
values['tags'] = args.tags.split(",")
|
|
values['template'] = args.template
|
|
values['timeout_boot_minutes'] = args.timeout_boot_minutes
|
|
values['timeout_boot_retries'] = args.timeout_boot_retries
|
|
values['timeout_first_minutes'] = args.timeout_first_minutes
|
|
values['timeout_first_retries'] = args.timeout_first_retries
|
|
values['timeout_minutes'] = args.timeout_minutes
|
|
values['timeout_overall_minutes'] = args.timeout_overall_minutes
|
|
values['timeout_retries'] = args.timeout_retries
|
|
if len(args.job_volume_exclusions) > 0:
|
|
exclusions = args.job_volume_exclusions.split(",")
|
|
values['job_volume_exclusions'] = [excl for excl in exclusions if len(excl) > 0]
|
|
if args.volume is not None:
|
|
values['volumes'] = args.volume
|
|
if args.mount_volume is not None:
|
|
values['mount_volumes'] = args.mount_volume
|
|
values['working_dir'] = args.working_dir
|
|
|
|
assert(len(args.local_container) > 0)
|
|
|
|
# Use the gateway's pull-through registry caches to reduce load on fd.o.
|
|
values['local_container'] = args.local_container
|
|
for url, replacement in [('registry.freedesktop.org', '{{ fdo_proxy_registry }}'),
|
|
('harbor.freedesktop.org', '{{ harbor_fdo_registry }}')]:
|
|
values['local_container'] = values['local_container'].replace(url, replacement)
|
|
|
|
if 'B2C_KERNEL_CMDLINE_EXTRAS' in environ:
|
|
values['cmdline_extras'] = environ['B2C_KERNEL_CMDLINE_EXTRAS']
|
|
|
|
f = open(path.splitext(path.basename(args.template))[0], "w")
|
|
f.write(template.render(values))
|
|
f.close()
|