diff --git a/example/gateway/focker-compose.yml b/example/gateway/focker-compose.yml index b9096ba..f076a86 100644 --- a/example/gateway/focker-compose.yml +++ b/example/gateway/focker-compose.yml @@ -1,4 +1,4 @@ -prebuild: +exec.prebuild: - python3 getmetadata.py diff --git a/focker/compose.py b/focker/compose.py index 2bfc962..55cc809 100644 --- a/focker/compose.py +++ b/focker/compose.py @@ -27,6 +27,22 @@ from .misc import focker_lock, \ focker_unlock +def exec_prebuild(spec, path): + if isinstance(spec, str): + spec = [ spec ] + if not isinstance(spec, list): + raise ValueError('exec.prebuild should be a string or a list of strings') + spec = ' && '.join(spec) + print('Running exec.build command:', spec) + spec = [ '/bin/sh', '-c', spec ] + oldwd = os.getcwd() + os.chdir(path) + res = subprocess.run(spec) + if res.returncode != 0: + raise RuntimeError('exec.prebuild failed') + os.chdir(oldwd) + + def build_volumes(spec): poolname = zfs_poolname() for tag, params in spec.items(): @@ -103,6 +119,8 @@ def command_compose_build(args): print('path:', path) with open(args.filename, 'r') as f: spec = yaml.safe_load(f) + if 'exec.prebuild' in spec: + exec_prebuild(spec['exec.prebuild'], path) if 'volumes' in spec: build_volumes(spec['volumes']) if 'images' in spec: