diff --git a/focker/bootstrap.py b/focker/bootstrap.py index 4e0f833..bb79077 100644 --- a/focker/bootstrap.py +++ b/focker/bootstrap.py @@ -15,9 +15,10 @@ def command_bootstrap(args): name = find_prefix(poolname + '/focker/images/', sha256) subprocess.check_output(['zfs', 'create', '-o', 'focker:sha256=' + sha256, name]) zfs_tag(name, tags) - res = subprocess.run(['bsdinstall', 'jail', zfs_mountpoint(name)]) - if res.returncode != 0: - zfs_run(['zfs', 'destroy', '-r', '-f', name]) - raise ValueError('bsdinstall failed') + if not args.dry_run: + res = subprocess.run(['bsdinstall', 'jail', zfs_mountpoint(name)]) + if res.returncode != 0: + zfs_run(['zfs', 'destroy', '-r', '-f', name]) + raise ValueError('bsdinstall failed') subprocess.check_output(['zfs', 'set', 'rdonly=on', name]) subprocess.check_output(['zfs', 'snapshot', name + '@1']) diff --git a/focker/focker.py b/focker/focker.py index 240fdff..b69a6ea 100644 --- a/focker/focker.py +++ b/focker/focker.py @@ -79,6 +79,7 @@ def create_parser(): parser = ListForwarder([subparsers_top.add_parser(cmd) for cmd in ['bootstrap', 'boot', 'bs']]) parser.set_defaults(func=command_bootstrap) parser.add_argument('--tags', '-t', type=str, nargs='+', default=None) + parser.add_argument('--dry-run', '-d', action='store_true') # image subparsers = ListForwarder([ subparsers_top.add_parser(cmd).add_subparsers(dest='L2_command') \ diff --git a/tests/test_bootstrap.py b/tests/test_bootstrap.py index 516bb02..dbe33b0 100644 --- a/tests/test_bootstrap.py +++ b/tests/test_bootstrap.py @@ -1,13 +1,17 @@ import subprocess from focker.zfs import * import re +import os def test_bootstrap(): subprocess.run(['focker', 'image', 'remove', '--force', 'test-focker-bootstrap']) - subprocess.run(['focker', 'bootstrap', '--tags', 'test-focker-bootstrap']) - name, sha256 = zfs_find('test-focker-bootstrap', focker_type='volume') - assert len(name) >= 7 - assert re.search('[a-f]', name[:7]) + subprocess.run(['focker', 'bootstrap', '--dry-run', '--tags', 'test-focker-bootstrap']) + name, sha256 = zfs_find('test-focker-bootstrap', focker_type='image') + basename = os.path.basename(name) + assert len(basename) >= 7 + assert re.search('[a-f]', basename[:7]) assert len(sha256) == 64 - assert name == sha256[:len(name)] + assert basename == sha256[:len(basename)] + assert zfs_exists_snapshot_sha256(sha256) + subprocess.check_output(['zfs', 'destroy', '-r', '-f', name])