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 #!/bin/bash
# shellcheck disable=SC2068 # 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 from logger import setup_logging, verbose_option
import click import click
from config import config, config_option from config import config, config_option
from wrapper import enforce_wrap, nowrapper_option
@click.group() @click.group()
@verbose_option @verbose_option
@config_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) setup_logging(verbose)
config.runtime['verbose'] = verbose config.runtime['verbose'] = verbose
config.try_load_file(config_file) config.try_load_file(config_file)
# TODO: move this only to CMDs where it's needed
enforce_wrap(no_wrapper=no_wrapper)
def main(): def main():
return cli(prog_name='kupferbootstrap') return cli(prog_name='kupferbootstrap')
cli.add_command(cmd_cache) cli.add_command(cmd_cache)
cli.add_command(cmd_packages) cli.add_command(cmd_packages)
cli.add_command(cmd_image) cli.add_command(cmd_image)
@ -30,3 +36,6 @@ cli.add_command(cmd_flash)
cli.add_command(cmd_ssh) cli.add_command(cmd_ssh)
cli.add_command(cmd_forwarding) cli.add_command(cmd_forwarding)
cli.add_command(cmd_telnet) cli.add_command(cmd_telnet)
if __name__ == '__main__':
main()

View file

@ -4,28 +4,28 @@ import subprocess
import sys import sys
import appdirs import appdirs
import uuid import uuid
import click
import logging
from config import config
if os.getenv('KUPFERBOOTSTRAP_DOCKER') == '1':
from main import main def wrap_docker():
main()
else:
script_path = os.path.dirname(os.path.abspath(__file__)) script_path = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(script_path, 'version.txt')) as version_file: with open(os.path.join(script_path, 'version.txt')) as version_file:
version = version_file.read().replace('\n', '') version = version_file.read().replace('\n', '')
tag = f'registry.gitlab.com/kupfer/kupferbootstrap:{version}' tag = f'registry.gitlab.com/kupfer/kupferbootstrap:{version}'
if version == 'dev': if version == 'dev':
result = subprocess.run( logging.info(f'Building docker image "{tag}"')
[ cmd = [
'docker', 'docker',
'build', 'build',
'.', '.',
'-t', '-t',
tag, tag,
], ] + (['-q'] if not config.runtime['verbose'] else [])
cwd=script_path, result = subprocess.run(cmd, cwd=script_path, capture_output=True)
)
if result.returncode != 0: 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) exit(1)
else: else:
# Check if the image for the version already exists # Check if the image for the version already exists
@ -39,7 +39,7 @@ else:
capture_output=True, capture_output=True,
) )
if result.stdout == b'': if result.stdout == b'':
print(f'Pulling kupferbootstrap docker image version \'{version}\'') logging.info(f'Pulling kupferbootstrap docker image version \'{version}\'')
subprocess.run([ subprocess.run([
'docker', 'docker',
'pull', 'pull',
@ -66,8 +66,7 @@ else:
'-v', '-v',
f'{os.getenv("KUPFERBOOTSTRAP_PREBUILTS")}:/prebuilts:z', f'{os.getenv("KUPFERBOOTSTRAP_PREBUILTS")}:/prebuilts:z',
] ]
cmd = [
result = subprocess.run([
'docker', 'docker',
'run', 'run',
'--name', '--name',
@ -88,6 +87,22 @@ else:
'-v', '-v',
'/dev:/dev', '/dev:/dev',
#'-v', '/mnt/kupfer:/mnt/kupfer:z', #'-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) 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.',
)