diff --git a/builder/kojid b/builder/kojid index 938d2d93..3ea7aa7e 100755 --- a/builder/kojid +++ b/builder/kojid @@ -47,7 +47,6 @@ import grp import random import re import rpm -import rpmUtils.arch import shutil import signal import smtplib @@ -64,11 +63,18 @@ from six.moves.configparser import ConfigParser from fnmatch import fnmatch from gzip import GzipFile from optparse import OptionParser, SUPPRESS_HELP -from yum import repoMDObject -import yum.packages -import yum.Errors -#imports for LiveCD, LiveMedia, and Appliance handler +try: + # yum + import rpmUtils.arch + from yum import repoMDObject + import yum.packages + import yum.Errors + yum_available = True +except ImportError: + yum_available = False + +# imports for LiveCD, LiveMedia, and Appliance handler image_enabled = False try: import pykickstart.parser as ksparser diff --git a/koji/daemon.py b/koji/daemon.py index 7d6b4ddd..223cfad6 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -31,7 +31,6 @@ from koji.util import md5_constructor, adler32_constructor, parseStatus, \ import os import signal import logging -from six.moves import urllib from fnmatch import fnmatch import base64 import time @@ -40,6 +39,7 @@ import sys import traceback import errno from six.moves import range +from six.moves import urllib import six @@ -588,7 +588,7 @@ class TaskManager(object): def shutdown(self): """Attempt to shut down cleanly""" - for task_id in self.pids.keys(): + for task_id in self.pids: self.cleanupTask(task_id) self.session.host.freeTasks(to_list(self.tasks.keys())) self.session.host.updateHost(task_load=0.0, ready=False) @@ -628,7 +628,7 @@ class TaskManager(object): return local_br = self._scanLocalBuildroots() # get info on local_only buildroots (most likely expired) - local_only = [id for id in six.iterkeys(local_br) if id not in db_br] + local_only = [id for id in local_br if id not in db_br] if local_only: missed_br = self.session.listBuildroots(buildrootID=tuple(local_only)) #get all the task info in one call @@ -860,7 +860,7 @@ class TaskManager(object): # Note: we may still take an assigned task below #sort available capacities for each of our bins avail = {} - for bin in six.iterkeys(bins): + for bin in bins: avail[bin] = [host['capacity'] - host['task_load'] for host in bin_hosts[bin]] avail[bin].sort() avail[bin].reverse() diff --git a/koji/tasks.py b/koji/tasks.py index 32397d55..5194190f 100644 --- a/koji/tasks.py +++ b/koji/tasks.py @@ -19,21 +19,24 @@ # Authors: # Mike McLean # Mike Bonnet - from __future__ import absolute_import + +import logging +import os +import pprint +import random +import shutil +import signal +import time + +import six.moves.xmlrpc_client +import six.moves.urllib.request +from six.moves import range + import koji import koji.plugin import koji.util -import os -import logging -import six.moves.xmlrpc_client -import signal -import shutil -import random -import time -import pprint -import six.moves.urllib.request -from six.moves import range + def scan_mounts(topdir): """Search path for mountpoints""" diff --git a/plugins/builder/runroot.py b/plugins/builder/runroot.py index f2f0bffd..23eb507b 100644 --- a/plugins/builder/runroot.py +++ b/plugins/builder/runroot.py @@ -7,6 +7,7 @@ import six.moves.configparser import os import platform import re +import subprocess import koji.tasks from koji.tasks import scan_mounts @@ -304,8 +305,10 @@ class RunRootTask(koji.tasks.BaseTaskHandler): failed = [] self.logger.info("Unmounting (runroot): %s" % mounts) for dir in mounts: - (rv, output) = commands.getstatusoutput("umount -l '%s'" % dir) - if rv != 0: + proc = subprocess.Popen(["umount", "-l", dir], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if proc.wait() != 0: + output = proc.stdout.read() + output += proc.stderr.read() failed.append("%s: %s" % (dir, output)) if failed: msg = "Unable to unmount: %s" % ', '.join(failed)