Make main.py the main entrypoint again and call docker wrapper enforcement from cli() callback

Signed-off-by: InsanePrawn <insane.prawny@gmail.com>
This commit is contained in:
InsanePrawn 2021-09-12 06:10:15 +02:00
parent b87fdf722b
commit d52a615774
3 changed files with 45 additions and 21 deletions

View file

@ -1,4 +1,4 @@
#!/bin/bash
# shellcheck disable=SC2068
python3 "$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")/wrapper.py" $@
python3 "$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")/main.py" $@

11
main.py
View file

@ -9,19 +9,25 @@ from telnet import cmd_telnet
from logger import setup_logging, verbose_option
import click
from config import config, config_option
from wrapper import enforce_wrap, nowrapper_option
@click.group()
@verbose_option
@config_option
def cli(verbose: bool = False, config_file: str = None):
@nowrapper_option
def cli(verbose: bool = False, config_file: str = None, no_wrapper: bool = False):
setup_logging(verbose)
config.runtime['verbose'] = verbose
config.try_load_file(config_file)
# TODO: move this only to CMDs where it's needed
enforce_wrap(no_wrapper=no_wrapper)
def main():
return cli(prog_name='kupferbootstrap')
cli.add_command(cmd_cache)
cli.add_command(cmd_packages)
cli.add_command(cmd_image)
@ -30,3 +36,6 @@ cli.add_command(cmd_flash)
cli.add_command(cmd_ssh)
cli.add_command(cmd_forwarding)
cli.add_command(cmd_telnet)
if __name__ == '__main__':
main()

View file

@ -4,28 +4,28 @@ import subprocess
import sys
import appdirs
import uuid
import click
import logging
from config import config
if os.getenv('KUPFERBOOTSTRAP_DOCKER') == '1':
from main import main
main()
else:
def wrap_docker():
script_path = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(script_path, 'version.txt')) as version_file:
version = version_file.read().replace('\n', '')
tag = f'registry.gitlab.com/kupfer/kupferbootstrap:{version}'
if version == 'dev':
result = subprocess.run(
[
'docker',
'build',
'.',
'-t',
tag,
],
cwd=script_path,
)
logging.info(f'Building docker image "{tag}"')
cmd = [
'docker',
'build',
'.',
'-t',
tag,
] + (['-q'] if not config.runtime['verbose'] else [])
result = subprocess.run(cmd, cwd=script_path, capture_output=True)
if result.returncode != 0:
print(f'Failed to build kupferbootstrap docker image')
logging.fatal('Failed to build docker image:\n' + result.stderr.decode())
exit(1)
else:
# Check if the image for the version already exists
@ -39,7 +39,7 @@ else:
capture_output=True,
)
if result.stdout == b'':
print(f'Pulling kupferbootstrap docker image version \'{version}\'')
logging.info(f'Pulling kupferbootstrap docker image version \'{version}\'')
subprocess.run([
'docker',
'pull',
@ -66,8 +66,7 @@ else:
'-v',
f'{os.getenv("KUPFERBOOTSTRAP_PREBUILTS")}:/prebuilts:z',
]
result = subprocess.run([
cmd = [
'docker',
'run',
'--name',
@ -88,6 +87,22 @@ else:
'-v',
'/dev:/dev',
#'-v', '/mnt/kupfer:/mnt/kupfer:z',
] + [tag, 'kupferbootstrap'] + sys.argv[1:])
] + [tag, 'kupferbootstrap'] + sys.argv[1:]
logging.debug('Wrapping in docker:' + repr(cmd))
result = subprocess.run(cmd)
exit(result.returncode)
def enforce_wrap(no_wrapper=False):
if os.getenv('KUPFERBOOTSTRAP_DOCKER') != '1' and not no_wrapper:
wrap_docker()
nowrapper_option = click.option(
'--no-wrapper',
'no_wrapper',
is_flag=True,
default=False,
help='Disable the docker wrapper. Defaults to autodetection.',
)