mirror of
https://github.com/f-droid/fdroidserver.git
synced 2025-09-14 23:12:46 +03:00
run black to reformat code that does not have WIP merge requests
This commit is contained in:
parent
2e6cad57aa
commit
307cf8958c
9 changed files with 519 additions and 207 deletions
|
@ -42,14 +42,18 @@ def get_clean_builder(serverdir):
|
|||
vagrantfile = os.path.join(serverdir, 'Vagrantfile')
|
||||
if not os.path.isfile(vagrantfile):
|
||||
with open(vagrantfile, 'w') as f:
|
||||
f.write(textwrap.dedent("""\
|
||||
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)
|
||||
logging.info('destroying buildserver before build')
|
||||
vm.destroy()
|
||||
|
@ -119,25 +123,37 @@ def get_build_vm(srvdir, provider=None):
|
|||
if kvm_installed and vbox_installed:
|
||||
logging.debug('both kvm and vbox are installed.')
|
||||
elif kvm_installed:
|
||||
logging.debug('libvirt is the sole installed and supported vagrant provider, selecting \'libvirt\'')
|
||||
logging.debug(
|
||||
'libvirt is the sole installed and supported vagrant provider, selecting \'libvirt\''
|
||||
)
|
||||
return LibvirtBuildVm(abssrvdir)
|
||||
elif vbox_installed:
|
||||
logging.debug('virtualbox is the sole installed and supported vagrant provider, selecting \'virtualbox\'')
|
||||
logging.debug(
|
||||
'virtualbox is the sole installed and supported vagrant provider, selecting \'virtualbox\''
|
||||
)
|
||||
return VirtualboxBuildVm(abssrvdir)
|
||||
else:
|
||||
logging.debug('could not confirm that either virtualbox or kvm/libvirt are installed')
|
||||
logging.debug(
|
||||
'could not confirm that either virtualbox or kvm/libvirt are installed'
|
||||
)
|
||||
|
||||
# try guessing provider from .../srvdir/.vagrant internals
|
||||
vagrant_libvirt_path = os.path.join(abssrvdir, '.vagrant', 'machines',
|
||||
'default', 'libvirt')
|
||||
has_libvirt_machine = isdir(vagrant_libvirt_path) \
|
||||
and len(os.listdir(vagrant_libvirt_path)) > 0
|
||||
vagrant_virtualbox_path = os.path.join(abssrvdir, '.vagrant', 'machines',
|
||||
'default', 'virtualbox')
|
||||
has_vbox_machine = isdir(vagrant_virtualbox_path) \
|
||||
and len(os.listdir(vagrant_virtualbox_path)) > 0
|
||||
vagrant_libvirt_path = os.path.join(
|
||||
abssrvdir, '.vagrant', 'machines', 'default', 'libvirt'
|
||||
)
|
||||
has_libvirt_machine = (
|
||||
isdir(vagrant_libvirt_path) and len(os.listdir(vagrant_libvirt_path)) > 0
|
||||
)
|
||||
vagrant_virtualbox_path = os.path.join(
|
||||
abssrvdir, '.vagrant', 'machines', 'default', 'virtualbox'
|
||||
)
|
||||
has_vbox_machine = (
|
||||
isdir(vagrant_virtualbox_path) and len(os.listdir(vagrant_virtualbox_path)) > 0
|
||||
)
|
||||
if has_libvirt_machine and has_vbox_machine:
|
||||
logging.info('build vm provider lookup found virtualbox and libvirt, defaulting to \'virtualbox\'')
|
||||
logging.info(
|
||||
'build vm provider lookup found virtualbox and libvirt, defaulting to \'virtualbox\''
|
||||
)
|
||||
return VirtualboxBuildVm(abssrvdir)
|
||||
elif has_libvirt_machine:
|
||||
logging.debug('build vm provider lookup found \'libvirt\'')
|
||||
|
@ -149,12 +165,15 @@ def get_build_vm(srvdir, provider=None):
|
|||
# try guessing provider from available buildserver boxes
|
||||
available_boxes = []
|
||||
import vagrant
|
||||
|
||||
boxes = vagrant.Vagrant().box_list()
|
||||
for box in boxes:
|
||||
if box.name == "buildserver":
|
||||
available_boxes.append(box.provider)
|
||||
if "libvirt" in available_boxes and "virtualbox" in available_boxes:
|
||||
logging.info('basebox lookup found virtualbox and libvirt boxes, defaulting to \'virtualbox\'')
|
||||
logging.info(
|
||||
'basebox lookup found virtualbox and libvirt boxes, defaulting to \'virtualbox\''
|
||||
)
|
||||
return VirtualboxBuildVm(abssrvdir)
|
||||
elif "libvirt" in available_boxes:
|
||||
logging.info('\'libvirt\' buildserver box available, using that')
|
||||
|
@ -171,7 +190,7 @@ class FDroidBuildVmException(FDroidException):
|
|||
pass
|
||||
|
||||
|
||||
class FDroidBuildVm():
|
||||
class FDroidBuildVm:
|
||||
"""Abstract base class for working with FDroids build-servers.
|
||||
|
||||
Use the factory method `fdroidserver.vmtools.get_build_vm()` for
|
||||
|
@ -188,11 +207,18 @@ class FDroidBuildVm():
|
|||
self.vgrntfile = os.path.join(srvdir, 'Vagrantfile')
|
||||
self.srvuuid = self._vagrant_fetch_uuid()
|
||||
if not isdir(srvdir):
|
||||
raise FDroidBuildVmException("Can not init vagrant, directory %s not present" % (srvdir))
|
||||
raise FDroidBuildVmException(
|
||||
"Can not init vagrant, directory %s not present" % (srvdir)
|
||||
)
|
||||
if not isfile(self.vgrntfile):
|
||||
raise FDroidBuildVmException("Can not init vagrant, '%s' not present" % (self.vgrntfile))
|
||||
raise FDroidBuildVmException(
|
||||
"Can not init vagrant, '%s' not present" % (self.vgrntfile)
|
||||
)
|
||||
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 up(self, provision=True):
|
||||
global lock
|
||||
|
@ -302,7 +328,9 @@ class FDroidBuildVm():
|
|||
"""
|
||||
boxfile = abspath(boxfile)
|
||||
if not isfile(boxfile):
|
||||
raise FDroidBuildVmException('supplied boxfile \'%s\' does not exist', boxfile)
|
||||
raise FDroidBuildVmException(
|
||||
'supplied boxfile \'%s\' does not exist', boxfile
|
||||
)
|
||||
self.vgrnt.box_add(boxname, abspath(boxfile), force=force)
|
||||
|
||||
def box_remove(self, boxname):
|
||||
|
@ -310,11 +338,13 @@ class FDroidBuildVm():
|
|||
_check_call(['vagrant', 'box', 'remove', '--all', '--force', boxname])
|
||||
except subprocess.CalledProcessError as e:
|
||||
logging.debug('tried removing box %s, but is did not exist: %s', boxname, e)
|
||||
boxpath = os.path.join(expanduser('~'), '.vagrant',
|
||||
self._vagrant_file_name(boxname))
|
||||
boxpath = os.path.join(
|
||||
expanduser('~'), '.vagrant', self._vagrant_file_name(boxname)
|
||||
)
|
||||
if isdir(boxpath):
|
||||
logging.info("attempting to remove box '%s' by deleting: %s",
|
||||
boxname, boxpath)
|
||||
logging.info(
|
||||
"attempting to remove box '%s' by deleting: %s", boxname, boxpath
|
||||
)
|
||||
shutil.rmtree(boxpath)
|
||||
|
||||
def sshinfo(self):
|
||||
|
@ -325,11 +355,11 @@ class FDroidBuildVm():
|
|||
A dictionary containing 'hostname', 'port', 'user' and 'idfile'
|
||||
"""
|
||||
import paramiko
|
||||
|
||||
try:
|
||||
sshconfig_path = os.path.join(self.srvdir, 'sshconfig')
|
||||
with open(sshconfig_path, 'wb') as fp:
|
||||
fp.write(_check_output(['vagrant', 'ssh-config'],
|
||||
cwd=self.srvdir))
|
||||
fp.write(_check_output(['vagrant', 'ssh-config'], cwd=self.srvdir))
|
||||
vagranthost = 'default' # Host in ssh config file
|
||||
sshconfig = paramiko.SSHConfig()
|
||||
with open(sshconfig_path, 'r') as f:
|
||||
|
@ -340,10 +370,12 @@ class FDroidBuildVm():
|
|||
idfile = idfile[0]
|
||||
elif idfile.startswith('"') and idfile.endswith('"'):
|
||||
idfile = idfile[1:-1]
|
||||
return {'hostname': sshconfig['hostname'],
|
||||
'port': int(sshconfig['port']),
|
||||
'user': sshconfig['user'],
|
||||
'idfile': idfile}
|
||||
return {
|
||||
'hostname': sshconfig['hostname'],
|
||||
'port': int(sshconfig['port']),
|
||||
'user': sshconfig['user'],
|
||||
'idfile': idfile,
|
||||
}
|
||||
except subprocess.CalledProcessError as e:
|
||||
raise FDroidBuildVmException("Error getting ssh config") from e
|
||||
|
||||
|
@ -411,21 +443,27 @@ class LibvirtBuildVm(FDroidBuildVm):
|
|||
# TODO use a libvirt storage pool to ensure the img file is readable
|
||||
if not os.access(imagepath, os.R_OK):
|
||||
logging.warning(_('Cannot read "{path}"!').format(path=imagepath))
|
||||
_check_call(['sudo', '/bin/chmod', '-R', 'a+rX', '/var/lib/libvirt/images'])
|
||||
_check_call(
|
||||
['sudo', '/bin/chmod', '-R', 'a+rX', '/var/lib/libvirt/images']
|
||||
)
|
||||
shutil.copy2(imagepath, 'box.img')
|
||||
_check_call(['qemu-img', 'rebase', '-p', '-b', '', 'box.img'])
|
||||
img_info_raw = _check_output(['qemu-img', 'info', '--output=json', 'box.img'])
|
||||
img_info_raw = _check_output(
|
||||
['qemu-img', 'info', '--output=json', 'box.img']
|
||||
)
|
||||
img_info = json.loads(img_info_raw.decode('utf-8'))
|
||||
metadata = {"provider": "libvirt",
|
||||
"format": img_info['format'],
|
||||
"virtual_size": math.ceil(img_info['virtual-size'] / (1024. ** 3)),
|
||||
}
|
||||
metadata = {
|
||||
"provider": "libvirt",
|
||||
"format": img_info['format'],
|
||||
"virtual_size": math.ceil(img_info['virtual-size'] / (1024.0 ** 3)),
|
||||
}
|
||||
|
||||
logging.debug('preparing metadata.json for box %s', output)
|
||||
with open('metadata.json', 'w') as fp:
|
||||
fp.write(json.dumps(metadata))
|
||||
logging.debug('preparing Vagrantfile for box %s', output)
|
||||
vagrantfile = textwrap.dedent("""\
|
||||
vagrantfile = textwrap.dedent(
|
||||
"""\
|
||||
Vagrant.configure("2") do |config|
|
||||
config.ssh.username = "vagrant"
|
||||
config.ssh.password = "vagrant"
|
||||
|
@ -440,11 +478,18 @@ class LibvirtBuildVm(FDroidBuildVm):
|
|||
libvirt.memory = {memory}
|
||||
|
||||
end
|
||||
end""".format_map({'memory': str(int(domainInfo[1] / 1024)), 'cpus': str(domainInfo[3])}))
|
||||
end""".format_map(
|
||||
{
|
||||
'memory': str(int(domainInfo[1] / 1024)),
|
||||
'cpus': str(domainInfo[3]),
|
||||
}
|
||||
)
|
||||
)
|
||||
with open('Vagrantfile', 'w') as fp:
|
||||
fp.write(vagrantfile)
|
||||
try:
|
||||
import libarchive
|
||||
|
||||
with libarchive.file_writer(output, 'gnutar', 'gzip') as tar:
|
||||
logging.debug('adding files to box %s ...', output)
|
||||
tar.add_files('metadata.json', 'Vagrantfile', 'box.img')
|
||||
|
@ -506,6 +551,7 @@ class LibvirtBuildVm(FDroidBuildVm):
|
|||
|
||||
def snapshot_exists(self, snapshot_name):
|
||||
import libvirt
|
||||
|
||||
try:
|
||||
dom = self.conn.lookupByName(self.srvname)
|
||||
return dom.snapshotLookupByName(snapshot_name) is not None
|
||||
|
@ -515,6 +561,7 @@ class LibvirtBuildVm(FDroidBuildVm):
|
|||
def snapshot_revert(self, snapshot_name):
|
||||
logging.info("reverting vm '%s' to snapshot '%s'", self.srvname, snapshot_name)
|
||||
import libvirt
|
||||
|
||||
try:
|
||||
dom = self.conn.lookupByName(self.srvname)
|
||||
snap = dom.snapshotLookupByName(snapshot_name)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue