mirror of
https://github.com/f-droid/fdroidserver.git
synced 2025-09-13 22:42:29 +03:00
refactored vm related code from build.py to vmtools.py
This commit is contained in:
parent
fc660048eb
commit
c8234919df
2 changed files with 54 additions and 56 deletions
|
@ -28,7 +28,6 @@ import traceback
|
||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
import tempfile
|
import tempfile
|
||||||
import textwrap
|
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
import logging
|
import logging
|
||||||
|
@ -40,7 +39,6 @@ from . import scanner
|
||||||
from . import vmtools
|
from . import vmtools
|
||||||
from .common import FDroidPopen, SdkToolsPopen
|
from .common import FDroidPopen, SdkToolsPopen
|
||||||
from .exception import FDroidException, BuildException, VCSException
|
from .exception import FDroidException, BuildException, VCSException
|
||||||
from .vmtools import FDroidBuildVmException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import paramiko
|
import paramiko
|
||||||
|
@ -48,58 +46,6 @@ except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def vm_new_get_clean_builder(serverdir, reset=False):
|
|
||||||
if not os.path.isdir(serverdir):
|
|
||||||
if os.path.islink(serverdir):
|
|
||||||
os.unlink(serverdir)
|
|
||||||
logging.info("buildserver path does not exists, creating %s", serverdir)
|
|
||||||
os.makedirs(serverdir)
|
|
||||||
vagrantfile = os.path.join(serverdir, 'Vagrantfile')
|
|
||||||
if not os.path.isfile(vagrantfile):
|
|
||||||
with open(os.path.join('builder', 'Vagrantfile'), 'w') as f:
|
|
||||||
f.write(textwrap.dedent("""\
|
|
||||||
# generated file, do not change.
|
|
||||||
|
|
||||||
Vagrant.configure("2") do |config|
|
|
||||||
config.vm.box = "buildserver"
|
|
||||||
config.vm.synced_folder ".", "/vagrant", disabled: true
|
|
||||||
end
|
|
||||||
"""))
|
|
||||||
vm = vmtools.get_build_vm(serverdir)
|
|
||||||
if reset:
|
|
||||||
logging.info('resetting buildserver by request')
|
|
||||||
elif not vm.vagrant_uuid_okay():
|
|
||||||
logging.info('resetting buildserver, bceause vagrant vm is not okay.')
|
|
||||||
reset = True
|
|
||||||
elif not vm.snapshot_exists('fdroidclean'):
|
|
||||||
logging.info("resetting buildserver, because snapshot 'fdroidclean' is not present.")
|
|
||||||
reset = True
|
|
||||||
|
|
||||||
if reset:
|
|
||||||
vm.destroy()
|
|
||||||
vm.up()
|
|
||||||
vm.suspend()
|
|
||||||
|
|
||||||
if reset:
|
|
||||||
logging.info('buildserver recreated: taking a clean snapshot')
|
|
||||||
vm.snapshot_create('fdroidclean')
|
|
||||||
else:
|
|
||||||
logging.info('builserver ok: reverting to clean snapshot')
|
|
||||||
vm.snapshot_revert('fdroidclean')
|
|
||||||
vm.up()
|
|
||||||
|
|
||||||
try:
|
|
||||||
sshinfo = vm.sshinfo()
|
|
||||||
except FDroidBuildVmException:
|
|
||||||
# workaround because libvirt sometimes likes to forget
|
|
||||||
# about ssh connection info even thou the vm is running
|
|
||||||
vm.halt()
|
|
||||||
vm.up()
|
|
||||||
sshinfo = vm.sshinfo()
|
|
||||||
|
|
||||||
return sshinfo
|
|
||||||
|
|
||||||
|
|
||||||
# Note that 'force' here also implies test mode.
|
# Note that 'force' here also implies test mode.
|
||||||
def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
||||||
"""Do a build on the builder vm.
|
"""Do a build on the builder vm.
|
||||||
|
@ -123,8 +69,7 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
||||||
else:
|
else:
|
||||||
logging.getLogger("paramiko").setLevel(logging.WARN)
|
logging.getLogger("paramiko").setLevel(logging.WARN)
|
||||||
|
|
||||||
# sshinfo = vm_get_clean_builder()
|
sshinfo = vmtools.get_clean_builder('builder')
|
||||||
sshinfo = vm_new_get_clean_builder('builder')
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if not buildserverid:
|
if not buildserverid:
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
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
|
||||||
|
import os
|
||||||
import math
|
import math
|
||||||
import json
|
import json
|
||||||
import tarfile
|
import tarfile
|
||||||
|
@ -31,6 +32,58 @@ from logging import getLogger
|
||||||
logger = getLogger('fdroidserver-vmtools')
|
logger = getLogger('fdroidserver-vmtools')
|
||||||
|
|
||||||
|
|
||||||
|
def get_clean_builder(serverdir, reset=False):
|
||||||
|
if not os.path.isdir(serverdir):
|
||||||
|
if os.path.islink(serverdir):
|
||||||
|
os.unlink(serverdir)
|
||||||
|
logger.info("buildserver path does not exists, creating %s", serverdir)
|
||||||
|
os.makedirs(serverdir)
|
||||||
|
vagrantfile = os.path.join(serverdir, 'Vagrantfile')
|
||||||
|
if not os.path.isfile(vagrantfile):
|
||||||
|
with open(os.path.join('builder', 'Vagrantfile'), 'w') as f:
|
||||||
|
f.write(textwrap.dedent("""\
|
||||||
|
# generated file, do not change.
|
||||||
|
|
||||||
|
Vagrant.configure("2") do |config|
|
||||||
|
config.vm.box = "buildserver"
|
||||||
|
config.vm.synced_folder ".", "/vagrant", disabled: true
|
||||||
|
end
|
||||||
|
"""))
|
||||||
|
vm = get_build_vm(serverdir)
|
||||||
|
if reset:
|
||||||
|
logger.info('resetting buildserver by request')
|
||||||
|
elif not vm.vagrant_uuid_okay():
|
||||||
|
logger.info('resetting buildserver, bceause vagrant vm is not okay.')
|
||||||
|
reset = True
|
||||||
|
elif not vm.snapshot_exists('fdroidclean'):
|
||||||
|
logger.info("resetting buildserver, because snapshot 'fdroidclean' is not present.")
|
||||||
|
reset = True
|
||||||
|
|
||||||
|
if reset:
|
||||||
|
vm.destroy()
|
||||||
|
vm.up()
|
||||||
|
vm.suspend()
|
||||||
|
|
||||||
|
if reset:
|
||||||
|
logger.info('buildserver recreated: taking a clean snapshot')
|
||||||
|
vm.snapshot_create('fdroidclean')
|
||||||
|
else:
|
||||||
|
logger.info('builserver ok: reverting to clean snapshot')
|
||||||
|
vm.snapshot_revert('fdroidclean')
|
||||||
|
vm.up()
|
||||||
|
|
||||||
|
try:
|
||||||
|
sshinfo = vm.sshinfo()
|
||||||
|
except FDroidBuildVmException:
|
||||||
|
# workaround because libvirt sometimes likes to forget
|
||||||
|
# about ssh connection info even thou the vm is running
|
||||||
|
vm.halt()
|
||||||
|
vm.up()
|
||||||
|
sshinfo = vm.sshinfo()
|
||||||
|
|
||||||
|
return sshinfo
|
||||||
|
|
||||||
|
|
||||||
def _check_call(cmd, shell=False, cwd=None):
|
def _check_call(cmd, shell=False, cwd=None):
|
||||||
logger.debug(' '.join(cmd))
|
logger.debug(' '.join(cmd))
|
||||||
return subprocess.check_call(cmd, shell=shell, cwd=cwd)
|
return subprocess.check_call(cmd, shell=shell, cwd=cwd)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue