mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-16 20:00:11 +01:00
141 lines
5.0 KiB
Python
141 lines
5.0 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import logging
|
||
|
import textwrap
|
||
|
import tempfile
|
||
|
import inspect
|
||
|
from argparse import ArgumentParser
|
||
|
|
||
|
localmodule = os.path.realpath(
|
||
|
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..', '..'))
|
||
|
print('localmodule: ' + localmodule)
|
||
|
if localmodule not in sys.path:
|
||
|
sys.path.insert(0, localmodule)
|
||
|
|
||
|
from fdroidserver.vmtools import get_build_vm
|
||
|
|
||
|
|
||
|
def main(args):
|
||
|
|
||
|
if args.provider != None:
|
||
|
if args.provider not in ('libvirt', 'virtualbox'):
|
||
|
logging.critical('provider: %s not supported.', args.provider)
|
||
|
sys.exit(1)
|
||
|
|
||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||
|
|
||
|
# define a simple vagrant vm 'x'
|
||
|
x_dir = os.path.join(tmpdir, 'x')
|
||
|
os.makedirs(x_dir)
|
||
|
with open(os.path.join(x_dir, 'Vagrantfile'), 'w') as f:
|
||
|
f.write(textwrap.dedent("""\
|
||
|
Vagrant.configure("2") do |config|
|
||
|
config.vm.box = "debian/jessie64"
|
||
|
config.vm.synced_folder ".", "/vagrant", disabled: true
|
||
|
config.ssh.insert_key = false
|
||
|
end
|
||
|
"""))
|
||
|
# define another simple vagrant vm 'y' which uses 'x' as a base box
|
||
|
y_dir = os.path.join(tmpdir, 'y')
|
||
|
os.makedirs(y_dir)
|
||
|
with open(os.path.join(y_dir, 'Vagrantfile'), 'w') as f:
|
||
|
f.write(textwrap.dedent("""\
|
||
|
Vagrant.configure("2") do |config|
|
||
|
config.vm.box = "x"
|
||
|
config.vm.synced_folder ".", "/vagrant", disabled: true
|
||
|
end
|
||
|
"""))
|
||
|
|
||
|
# vagrant file for packaging 'x' box
|
||
|
vgrntf=textwrap.dedent("""\
|
||
|
Vagrant.configure("2") do |config|
|
||
|
|
||
|
config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: "4", nfs_udp: false
|
||
|
|
||
|
config.vm.provider :libvirt do |libvirt|
|
||
|
libvirt.driver = "kvm"
|
||
|
libvirt.connect_via_ssh = false
|
||
|
libvirt.username = "root"
|
||
|
libvirt.storage_pool_name = "default"
|
||
|
end
|
||
|
end
|
||
|
""")
|
||
|
|
||
|
# create a box: x
|
||
|
if not args.skip_create_x:
|
||
|
x = get_build_vm(x_dir, provider=args.provider)
|
||
|
x.destroy()
|
||
|
x.up(provision=True)
|
||
|
x.halt()
|
||
|
x.package(output='x.box', vagrantfile=vgrntf, keep_box_file=False)
|
||
|
x.box_remove('x')
|
||
|
x.box_add('x', 'x.box')
|
||
|
|
||
|
# use previously created box to spin up a new vm
|
||
|
if not args.skip_create_y:
|
||
|
y = get_build_vm(y_dir, provider=args.provider)
|
||
|
y.destroy()
|
||
|
y.up()
|
||
|
|
||
|
# create and restore a snapshot
|
||
|
if not args.skip_snapshot_y:
|
||
|
y = get_build_vm(y_dir, provider=args.provider)
|
||
|
|
||
|
if y.snapshot_exists('clean'):
|
||
|
y.destroy()
|
||
|
y.up()
|
||
|
|
||
|
y.suspend()
|
||
|
y.snapshot_create('clean')
|
||
|
y.up()
|
||
|
|
||
|
logging.info('snapshot \'clean\' exsists: %r', y.snapshot_exists('clean'))
|
||
|
|
||
|
# test if snapshot exists
|
||
|
se = y.snapshot_exists('clean')
|
||
|
logging.info('snapshot \'clean\' available: %r', se)
|
||
|
|
||
|
# revert snapshot
|
||
|
y.suspend()
|
||
|
logging.info('asdf %s', y.snapshot_revert('clean'))
|
||
|
y.resume()
|
||
|
|
||
|
# cleanup
|
||
|
if not args.skip_clean:
|
||
|
x = get_build_vm(x_dir, provider=args.provider)
|
||
|
y = get_build_vm(y_dir, provider=args.provider)
|
||
|
y.destroy()
|
||
|
x.destroy()
|
||
|
x.box_remove('x')
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
logging.basicConfig(format='%(message)s', level=logging.DEBUG)
|
||
|
|
||
|
parser = ArgumentParser(description="""\
|
||
|
This is intended for manually testing vmtools.py
|
||
|
|
||
|
NOTE: Should this test-run fail it might leave traces of vagrant VMs or boxes
|
||
|
on your system. Those vagrant VMs are named 'x' and 'y'.
|
||
|
""")
|
||
|
parser.add_argument('--provider', help="Force this script use supplied "
|
||
|
"provider instead using our auto provider lookup. "
|
||
|
"Supported values: 'libvirt', 'virtualbox'")
|
||
|
parser.add_argument('--skip-create-x', action="store_true", default=False,
|
||
|
help="Skips: Creating 'x' vm, packaging it into a "
|
||
|
"a box and adding it to vagrant.")
|
||
|
parser.add_argument('--skip-create-y', action="store_true", default=False,
|
||
|
help="Skips: Creating 'y' vm. Depends on having "
|
||
|
"box 'x' added to vagrant.")
|
||
|
parser.add_argument('--skip-snapshot-y', action="store_true", default=False,
|
||
|
help="Skips: Taking a snapshot and restoring a "
|
||
|
"a snapshot of 'y' vm. Requires 'y' mv to be "
|
||
|
"present.")
|
||
|
parser.add_argument('--skip-clean', action="store_true", default=False,
|
||
|
help="Skips: Cleaning up mv images and vagrant "
|
||
|
"metadata on the system.")
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
main(args)
|