From f565382b5291409ac1ab4a96494c566cd9a4dfd4 Mon Sep 17 00:00:00 2001 From: Jan Dobes Date: Wed, 18 Oct 2017 13:18:24 +0200 Subject: [PATCH 15/17] relative imports don't work on both Python 2 and 3 (cherry picked from commit a2339d3a544c0cfbec6cfc5437942a79abe4bd30) Conflicts: koan/app.py koan/utils.py koan/virtinstall.py --- koan/app.py | 34 +++++++++------------------------- koan/imagecreate.py | 7 ++++--- koan/qcreate.py | 11 ++++++----- koan/register.py | 6 +++--- koan/utils.py | 6 ++++-- koan/virtinstall.py | 27 ++++++++++++++------------- koan/vmwcreate.py | 4 ++-- koan/xencreate.py | 7 ++++--- scripts/cobbler-register | 2 +- scripts/koan | 2 +- 10 files changed, 48 insertions(+), 58 deletions(-) diff --git a/koan/app.py b/koan/app.py index 4ae4c90..f5af5e9 100755 --- a/koan/app.py +++ b/koan/app.py @@ -41,7 +41,7 @@ try: #python2 except ImportError: #python3 import xmlrpc.client as xmlrpclib import re -from . import utils +from koan import utils COBBLER_REQUIRED = 1.300 @@ -228,22 +228,6 @@ def main(): #======================================================= -class KoanException(Exception): - - def __init__(self, value, *args): - self.value = value % args - # this is a hack to work around some odd exception handling - # in older pythons - self.from_koan = 1 - - def __str__(self): - return repr(self.value) - - -class KX(KoanException): - pass - - class InfoException(Exception): """ Custom exception for tracking of fatal errors. @@ -1145,9 +1129,9 @@ class Koan: """ pd = profile_data # importing can't throw exceptions any more, don't put it in a sub-method - from . import xencreate - from . import qcreate - from . import imagecreate + from koan import xencreate + from koan import qcreate + from koan import imagecreate arch = self.safe_load(pd,'arch','x86') kextra = self.calc_kernel_args(pd) @@ -1232,11 +1216,11 @@ class Koan: if (self.image is not None) and (pd["image_type"] == "virt-clone"): fullvirt = True uuid = None - from . import imagecreate + from koan import imagecreate creator = imagecreate.start_install elif self.virt_type in [ "xenpv", "xenfv" ]: uuid = self.get_uuid(self.calc_virt_uuid(pd)) - from . import xencreate + from koan import xencreate creator = xencreate.start_install if self.virt_type == "xenfv": fullvirt = True @@ -1244,15 +1228,15 @@ class Koan: elif self.virt_type == "qemu": fullvirt = True uuid = None - from . import qcreate + from koan import qcreate creator = qcreate.start_install can_poll = "qemu" elif self.virt_type == "vmware": - from . import vmwcreate + from koan import vmwcreate uuid = None creator = vmwcreate.start_install elif self.virt_type == "vmwarew": - from . import vmwwcreate + from koan import vmwwcreate uuid = None creator = vmwwcreate.start_install else: diff --git a/koan/imagecreate.py b/koan/imagecreate.py index d70d519..9b98f74 100644 --- a/koan/imagecreate.py +++ b/koan/imagecreate.py @@ -23,9 +23,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA """ -from . import utils -from . import virtinstall +from koan.utils import subprocess_call +from koan import virtinstall + def start_install(*args, **kwargs): cmd = virtinstall.build_commandline("import", *args, **kwargs) - utils.subprocess_call(cmd) + subprocess_call(cmd) diff --git a/koan/qcreate.py b/koan/qcreate.py index d0bafae..73b6abb 100755 --- a/koan/qcreate.py +++ b/koan/qcreate.py @@ -23,10 +23,11 @@ module for creating fullvirt guests via KVM/kqemu/qemu requires python-virtinst-0.200 (or virt-install in later distros). """ -from . import utils -from . import virtinstall from xml.dom.minidom import parseString -from . import app as koan +from koan.utils import subprocess_call +from koan import virtinstall +from koan import app + def start_install(*args, **kwargs): # See http://post-office.corp.redhat.com/archives/satellite-dept-list/2013-December/msg00039.html for discussion on this hack. @@ -37,7 +38,7 @@ def start_install(*args, **kwargs): try: import libvirt except: - raise koan.InfoException("package libvirt is required for installing virtual guests") + raise app.InfoException("package libvirt is required for installing virtual guests") conn = libvirt.openReadOnly(None) # See http://libvirt.org/formatcaps.html capabilities = parseString(conn.getCapabilities()) @@ -49,4 +50,4 @@ def start_install(*args, **kwargs): virtinstall.create_image_file(*args, **kwargs) cmd = virtinstall.build_commandline("qemu:///system", *args, **kwargs) - utils.subprocess_call(cmd) + subprocess_call(cmd) diff --git a/koan/register.py b/koan/register.py index a69f2d1..8ce7db3 100755 --- a/koan/register.py +++ b/koan/register.py @@ -30,7 +30,7 @@ try: #python2 except ImportError: #python3 import xmlrpc.client as xmlrpclib import socket -from . import utils +from koan.utils import connect_to_server, get_network_info # usage: cobbler-register [--server=server] [--hostname=hostname] --profile=foo @@ -127,10 +127,10 @@ class Register: raise InfoException("root access is required to register") print("- preparing to koan home") - self.conn = utils.connect_to_server(self.server, self.port) + self.conn = connect_to_server(self.server, self.port) reg_info = {} print("- gathering network info") - netinfo = utils.get_network_info() + netinfo = get_network_info() reg_info["interfaces"] = netinfo print("- checking hostname") sysname = "" diff --git a/koan/utils.py b/koan/utils.py index 12ec718..607db1f 100644 --- a/koan/utils.py +++ b/koan/utils.py @@ -44,6 +44,7 @@ VIRT_STATE_NAME_MAP = { 6 : "crashed" } + class InfoException(Exception): """ Custom exception for tracking of fatal errors. @@ -54,6 +55,7 @@ class InfoException(Exception): def __str__(self): return repr(self.value) + def setupLogging(appname): """ set up logging ... code borrowed/adapted from virt-manager @@ -253,7 +255,7 @@ def nfsmount(input_path): rc = sub_process.call(mount_cmd) if not rc == 0: shutil.rmtree(tempdir, ignore_errors=True) - raise koan.InfoException("nfs mount failed: %s" % dirpath) + raise InfoException("nfs mount failed: %s" % dirpath) # NOTE: option for a blocking install might be nice, so we could do this # automatically, if supported by virt-install print("after install completes, you may unmount and delete %s" % tempdir) @@ -333,7 +335,7 @@ def os_release(): return (make,float(t)) except ValueError: pass - raise koan.KX("failed to detect local OS version from /etc/redhat-release") + raise InfoException("failed to detect local OS version from /etc/redhat-release") elif check_dist() == "debian": fd = open("/etc/debian_version") diff --git a/koan/virtinstall.py b/koan/virtinstall.py index 5359b2a..ce6c425 100644 --- a/koan/virtinstall.py +++ b/koan/virtinstall.py @@ -30,15 +30,15 @@ import os import re import shlex -from . import app as koan -from . import utils +from koan import app +from koan.utils import subprocess_get_response, nfsmount, make_floppy # The virtinst module will no longer be availabe to import in some # distros. We need to get all the info we need from the virt-install # command line tool. This should work on both old and new variants, # as the virt-install command line tool has always been provided by # python-virtinst (and now the new virt-install rpm). -rc, response = utils.subprocess_get_response( +rc, response = subprocess_get_response( shlex.split('virt-install --version'), True) if rc == 0: virtinst_version = response @@ -63,7 +63,7 @@ try: supported_variants.add(variant) except: try: - rc, response = utils.subprocess_get_response( + rc, response = subprocess_get_response( shlex.split('virt-install --os-variant list')) variants = response.split('\n') for variant in variants: @@ -90,7 +90,7 @@ def _sanitize_disks(disks): if d[1] != 0 or d[0].startswith("/dev"): ret.append((d[0], d[1], driver_type)) else: - raise koan.InfoException("this virtualization type does not work without a disk image, set virt-size in Cobbler to non-zero") + raise app.InfoException("this virtualization type does not work without a disk image, set virt-size in Cobbler to non-zero") return ret @@ -128,7 +128,7 @@ def _sanitize_nics(nics, bridge, profile_bridge, network_count): intf_bridge = intf["virt_bridge"] if intf_bridge == "": if profile_bridge == "": - raise koan.InfoException("virt-bridge setting is not defined in cobbler") + raise app.InfoException("virt-bridge setting is not defined in cobbler") intf_bridge = profile_bridge else: @@ -151,7 +151,8 @@ def create_image_file(disks=None, **kwargs): continue if str(size) == "0": continue - utils.create_qemu_image_file(path, size, driver_type) + # This method doesn't exist and this functionality is probably broken + # create_qemu_image_file(path, size, driver_type) def build_commandline(uri, name=None, @@ -230,12 +231,12 @@ def build_commandline(uri, if is_import: importpath = profile_data.get("file") if not importpath: - raise koan.InfoException("Profile 'file' required for image " + raise app.InfoException("Profile 'file' required for image " "install") elif "file" in profile_data: if is_xen: - raise koan.InfoException("Xen does not work with --image yet") + raise app.InfoException("Xen does not work with --image yet") # this is an image based installation input_path = profile_data["file"] @@ -244,7 +245,7 @@ def build_commandline(uri, # this is not an NFS path cdrom = input_path else: - (tempdir, filename) = utils.nfsmount(input_path) + (tempdir, filename) = nfsmount(input_path) cdrom = os.path.join(tempdir, filename) kickstart = profile_data.get("kickstart","") @@ -252,11 +253,11 @@ def build_commandline(uri, # we have a (windows?) answer file we have to provide # to the ISO. print("I want to make a floppy for %s" % kickstart) - floppy = utils.make_floppy(kickstart) + floppy = make_floppy(kickstart) elif is_qemu or is_xen: # images don't need to source this if not "install_tree" in profile_data: - raise koan.InfoException("Cannot find install source in kickstart file, aborting.") + raise app.InfoException("Cannot find install source in kickstart file, aborting.") if not profile_data["install_tree"].endswith("/"): profile_data["install_tree"] = profile_data["install_tree"] + "/" @@ -277,7 +278,7 @@ def build_commandline(uri, bridge = profile_data["virt_bridge"] if bridge == "": - raise koan.InfoException("virt-bridge setting is not defined in cobbler") + raise app.InfoException("virt-bridge setting is not defined in cobbler") nics = [(bridge, None)] diff --git a/koan/vmwcreate.py b/koan/vmwcreate.py index 33c5819..1b90a27 100755 --- a/koan/vmwcreate.py +++ b/koan/vmwcreate.py @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA import os import random -from . import app as koan +from koan import app IMAGE_DIR = "/var/lib/vmware/images" VMX_DIR = "/var/lib/vmware/vmx" @@ -127,7 +127,7 @@ def start_install(name=None, virt_auto_boot=False): if "file" in profile_data: - raise koan.InfoException("vmware does not work with --image yet") + raise app.InfoException("vmware does not work with --image yet") mac = None if not "interfaces" in profile_data: diff --git a/koan/xencreate.py b/koan/xencreate.py index 7eda3e6..18b2969 100755 --- a/koan/xencreate.py +++ b/koan/xencreate.py @@ -26,9 +26,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA """ -from . import utils -from . import virtinstall +from koan.utils import subprocess_call +from koan import virtinstall + def start_install(*args, **kwargs): cmd = virtinstall.build_commandline("xen:///", *args, **kwargs) - utils.subprocess_call(cmd) + subprocess_call(cmd) diff --git a/scripts/cobbler-register b/scripts/cobbler-register index ed97cfc..3f2ffb1 100755 --- a/scripts/cobbler-register +++ b/scripts/cobbler-register @@ -15,5 +15,5 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. """ import sys -import koan.register as register +from koan import register sys.exit(register.main() or 0) diff --git a/scripts/koan b/scripts/koan index aeccb0e..9c3f445 100755 --- a/scripts/koan +++ b/scripts/koan @@ -15,5 +15,5 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. """ import sys -import koan.app as app +from koan import app sys.exit(app.main() or 0) -- 2.5.5