9 from argparse import ArgumentParser
11 localmodule = os.path.realpath(
12 os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..', '..'))
13 print('localmodule: ' + localmodule)
14 if localmodule not in sys.path:
15 sys.path.insert(0, localmodule)
17 from fdroidserver.vmtools import get_build_vm
22 if args.provider != None:
23 if args.provider not in ('libvirt', 'virtualbox'):
24 logging.critical('provider: %s not supported.', args.provider)
27 with tempfile.TemporaryDirectory() as tmpdir:
29 # define a simple vagrant vm 'x'
30 x_dir = os.path.join(tmpdir, 'x')
32 with open(os.path.join(x_dir, 'Vagrantfile'), 'w') as f:
33 f.write(textwrap.dedent("""\
34 Vagrant.configure("2") do |config|
35 config.vm.box = "debian/jessie64"
36 config.vm.synced_folder ".", "/vagrant", disabled: true
37 config.ssh.insert_key = false
40 # define another simple vagrant vm 'y' which uses 'x' as a base box
41 y_dir = os.path.join(tmpdir, 'y')
43 with open(os.path.join(y_dir, 'Vagrantfile'), 'w') as f:
44 f.write(textwrap.dedent("""\
45 Vagrant.configure("2") do |config|
47 config.vm.synced_folder ".", "/vagrant", disabled: true
51 # vagrant file for packaging 'x' box
52 vgrntf=textwrap.dedent("""\
53 Vagrant.configure("2") do |config|
55 config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: "4", nfs_udp: false
57 config.vm.provider :libvirt do |libvirt|
58 libvirt.driver = "kvm"
59 libvirt.connect_via_ssh = false
60 libvirt.username = "root"
61 libvirt.storage_pool_name = "default"
67 if not args.skip_create_x:
68 x = get_build_vm(x_dir, provider=args.provider)
72 x.package(output='x.box', vagrantfile=vgrntf, keep_box_file=False)
74 x.box_add('x', 'x.box')
76 # use previously created box to spin up a new vm
77 if not args.skip_create_y:
78 y = get_build_vm(y_dir, provider=args.provider)
82 # create and restore a snapshot
83 if not args.skip_snapshot_y:
84 y = get_build_vm(y_dir, provider=args.provider)
86 if y.snapshot_exists('clean'):
91 y.snapshot_create('clean')
94 logging.info('snapshot \'clean\' exsists: %r', y.snapshot_exists('clean'))
96 # test if snapshot exists
97 se = y.snapshot_exists('clean')
98 logging.info('snapshot \'clean\' available: %r', se)
102 logging.info('asdf %s', y.snapshot_revert('clean'))
106 if not args.skip_clean:
107 x = get_build_vm(x_dir, provider=args.provider)
108 y = get_build_vm(y_dir, provider=args.provider)
113 if __name__ == '__main__':
114 logging.basicConfig(format='%(message)s', level=logging.DEBUG)
116 parser = ArgumentParser(description="""\
117 This is intended for manually testing vmtools.py
119 NOTE: Should this test-run fail it might leave traces of vagrant VMs or boxes
120 on your system. Those vagrant VMs are named 'x' and 'y'.
122 parser.add_argument('--provider', help="Force this script use supplied "
123 "provider instead using our auto provider lookup. "
124 "Supported values: 'libvirt', 'virtualbox'")
125 parser.add_argument('--skip-create-x', action="store_true", default=False,
126 help="Skips: Creating 'x' vm, packaging it into a "
127 "a box and adding it to vagrant.")
128 parser.add_argument('--skip-create-y', action="store_true", default=False,
129 help="Skips: Creating 'y' vm. Depends on having "
130 "box 'x' added to vagrant.")
131 parser.add_argument('--skip-snapshot-y', action="store_true", default=False,
132 help="Skips: Taking a snapshot and restoring a "
133 "a snapshot of 'y' vm. Requires 'y' mv to be "
135 parser.add_argument('--skip-clean', action="store_true", default=False,
136 help="Skips: Cleaning up mv images and vagrant "
137 "metadata on the system.")
138 args = parser.parse_args()