1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-09-18 19:20:08 +02:00

removed useless vm validity check; attempted to fix vbox support

This commit is contained in:
Michael Pöhn 2017-04-12 17:07:50 +02:00 committed by Hans-Christoph Steiner
parent 1b1d6b7d96
commit 358b00d7aa
2 changed files with 46 additions and 34 deletions

View File

@ -242,9 +242,6 @@ def vm_new_get_clean_builder(serverdir, reset=False):
vm = vmtools.get_build_vm(serverdir) vm = vmtools.get_build_vm(serverdir)
if reset: if reset:
logging.info('resetting buildserver by request') logging.info('resetting buildserver by request')
elif not vm.check_okay():
logging.info('resetting buildserver because it appears to be absent or broken')
reset = True
elif not vm.snapshot_exists('fdroidclean'): elif not vm.snapshot_exists('fdroidclean'):
logging.info("resetting buildserver, because snapshot 'fdroidclean' is not present") logging.info("resetting buildserver, because snapshot 'fdroidclean' is not present")
reset = True reset = True
@ -259,7 +256,7 @@ def vm_new_get_clean_builder(serverdir, reset=False):
vm.snapshot_create('fdroidclean') vm.snapshot_create('fdroidclean')
else: else:
logging.info('builserver ok: reverting to clean snapshot') logging.info('builserver ok: reverting to clean snapshot')
vm.snapshot_revert('droidclean') vm.snapshot_revert('fdroidclean')
vm.up() vm.up()
return get_vagrant_sshinfo() return get_vagrant_sshinfo()

View File

@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from os import remove as rmfile from os import remove as rmfile
from os.path import isdir, isfile, join as joinpath, basename, abspath, expanduser from os.path import isdir, isfile, join as joinpath, basename, abspath, expanduser, exists as pathexists
import math import math
import json import json
import tarfile import tarfile
@ -134,9 +134,6 @@ class FDroidBuildVm():
import vagrant import vagrant
self.vgrnt = vagrant.Vagrant(root=srvdir, out_cm=vagrant.stdout_cm, err_cm=vagrant.stdout_cm) self.vgrnt = vagrant.Vagrant(root=srvdir, out_cm=vagrant.stdout_cm, err_cm=vagrant.stdout_cm)
def check_okay(self):
return True
def up(self, provision=True): def up(self, provision=True):
try: try:
self.vgrnt.up(provision=provision) self.vgrnt.up(provision=provision)
@ -145,9 +142,6 @@ class FDroidBuildVm():
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
raise FDroidBuildVmException("could not bring up vm '%s'" % self.srvname) from e raise FDroidBuildVmException("could not bring up vm '%s'" % self.srvname) from e
def snapshot_create(self, name):
raise NotImplementedError('not implemented, please use a sub-type instance')
def suspend(self): def suspend(self):
logger.info('suspending buildserver') logger.info('suspending buildserver')
try: try:
@ -186,10 +180,6 @@ class FDroidBuildVm():
logger.debug('pruning global vagrant status failed: %s', e) logger.debug('pruning global vagrant status failed: %s', e)
def package(self, output=None, vagrantfile=None, keep_box_file=None): def package(self, output=None, vagrantfile=None, keep_box_file=None):
previous_tmp_dir = joinpath(self.srvdir, '_tmp_package')
if isdir(previous_tmp_dir):
logger.info('found previous vagrant package temp dir \'%s\', deleting it', previous_tmp_dir)
shutil.rmtree(previous_tmp_dir)
self.vgrnt.package(output=output, vagrantfile=vagrantfile) self.vgrnt.package(output=output, vagrantfile=vagrantfile)
def _vagrant_file_name(self, name): def _vagrant_file_name(self, name):
@ -219,10 +209,23 @@ class FDroidBuildVm():
boxname, boxpath) boxname, boxpath)
shutil.rmtree(boxpath) shutil.rmtree(boxpath)
def snapshot_create(self, snapshot_name):
raise NotImplementedError('not implemented, please use a sub-type instance')
def snapshot_list(self):
raise NotImplementedError('not implemented, please use a sub-type instance')
def snapshot_exists(self, snapshot_name):
raise NotImplementedError('not implemented, please use a sub-type instance')
def snapshot_revert(self, snapshot_name):
raise NotImplementedError('not implemented, please use a sub-type instance')
class LibvirtBuildVm(FDroidBuildVm): class LibvirtBuildVm(FDroidBuildVm):
def __init__(self, srvdir): def __init__(self, srvdir):
super().__init__(srvdir) super().__init__(srvdir)
self.provider = 'libvirt'
import libvirt import libvirt
try: try:
@ -230,22 +233,6 @@ class LibvirtBuildVm(FDroidBuildVm):
except libvirt.libvirtError as e: except libvirt.libvirtError as e:
raise FDroidBuildVmException('could not connect to libvirtd: %s' % (e)) raise FDroidBuildVmException('could not connect to libvirtd: %s' % (e))
def check_okay(self):
import libvirt
imagepath = joinpath('var', 'lib', 'libvirt', 'images',
'%s.img' % self._vagrant_file_name(self.srvname))
image_present = False
if isfile(imagepath):
image_present = True
try:
self.conn.lookupByName(self.srvname)
domain_defined = True
except libvirt.libvirtError:
pass
if image_present and domain_defined:
return True
return False
def destroy(self): def destroy(self):
super().destroy() super().destroy()
@ -384,8 +371,13 @@ class LibvirtBuildVm(FDroidBuildVm):
class VirtualboxBuildVm(FDroidBuildVm): class VirtualboxBuildVm(FDroidBuildVm):
def __init__(self, srvdir):
super().__init__(srvdir)
self.provider = 'virtualbox'
def snapshot_create(self, snapshot_name): def snapshot_create(self, snapshot_name):
raise NotImplemented('TODO') logger.info("creating snapshot '%s' for vm '%s'", snapshot_name, self.srvname)
try: try:
_check_call(['VBoxManage', 'snapshot', self.srvname, 'take', 'fdroidclean'], cwd=self.srvdir) _check_call(['VBoxManage', 'snapshot', self.srvname, 'take', 'fdroidclean'], cwd=self.srvdir)
logger.info('...waiting a sec...') logger.info('...waiting a sec...')
@ -395,5 +387,28 @@ class VirtualboxBuildVm(FDroidBuildVm):
'of virtualbox vm %s' 'of virtualbox vm %s'
% self.srvname) from e % self.srvname) from e
def snapshot_available(self, snapshot_name): def snapshot_list(self):
raise NotImplemented('TODO') try:
o = _check_output(['VBoxManage', 'snapshot',
self.srvname, 'list',
'--details'], cwd=self.srvdir)
return o
except subprocess.CalledProcessError as e:
raise FDroidBuildVmException("could not list snapshots "
"of virtualbox vm '%s'"
% (self.srvname)) from e
def snapshot_exists(self, snapshot_name):
return 'fdroidclean' in self.snapshot_list()
def snapshot_revert(self, snapshot_name):
logger.info("reverting vm '%s' to snapshot '%s'",
self.srvname, snapshot_name)
try:
p = _check_call(['VBoxManage', 'snapshot', self.srvname,
'restore', 'fdroidclean'], cwd=self.srvdir)
except subprocess.CalledProcessError as e:
raise FDroidBuildVmException("could not load snapshot "
"'fdroidclean' for vm '%s'"
% (self.srvname)) from e