cobbler/SOURCES/0004-Python-3-compatible-pr...

716 lines
27 KiB
Diff

From d045ccd1730c6211252cd68cd69d387895df9641 Mon Sep 17 00:00:00 2001
From: Tomas Kasparek <tkasparek@redhat.com>
Date: Mon, 5 Mar 2018 11:15:58 +0100
Subject: [PATCH 04/17] Python 3 compatible prints
---
koan/app.py | 106 ++++++++++++++++++++++++++--------------------------
koan/register.py | 24 ++++++------
koan/utils.py | 36 +++++++++---------
koan/virtinstall.py | 12 +++---
koan/vmwcreate.py | 22 +++++------
5 files changed, 100 insertions(+), 100 deletions(-)
diff --git a/koan/app.py b/koan/app.py
index e4e8a6d..ce8c8c3 100755
--- a/koan/app.py
+++ b/koan/app.py
@@ -217,11 +217,11 @@ def main():
(xa, xb, tb) = sys.exc_info()
try:
getattr(e,"from_koan")
- print str(e)[1:-1] # nice exception, no traceback needed
+ print(str(e)[1:-1]) # nice exception, no traceback needed
except:
- print xa
- print xb
- print string.join(traceback.format_list(traceback.extract_tb(tb)))
+ print(xa)
+ print(xb)
+ print(string.join(traceback.format_list(traceback.extract_tb(tb))))
return 1
return 0
@@ -307,9 +307,9 @@ class Koan:
if not os.getuid() == 0:
if self.is_virt:
- print "warning: running as non root"
+ print("warning: running as non root")
else:
- print "this operation requires root access"
+ print("this operation requires root access")
return 3
# if both --profile and --system were ommitted, autodiscover
@@ -372,20 +372,20 @@ class Koan:
try:
available_profiles = self.xmlrpc_server.get_profiles()
except:
- traceback.print_exc()
+ traceback.print(_exc())
self.connect_fail()
- print "\n- which profile to install?\n"
+ print("\n- which profile to install?\n")
for x in available_profiles:
- print "%s" % x["name"]
+ print("%s" % x["name"])
sys.stdout.write("\n?>")
data = sys.stdin.readline().strip()
for x in available_profiles:
- print "comp (%s,%s)" % (x["name"],data)
+ print("comp (%s,%s)" % (x["name"],data))
if x["name"] == data:
return data
return None
@@ -432,7 +432,7 @@ class Koan:
else:
return None
elif len(detected_systems) == 1:
- print "- Auto detected: %s" % detected_systems[0]
+ print("- Auto detected: %s" % detected_systems[0])
return detected_systems[0]
#---------------------------------------------------
@@ -509,7 +509,7 @@ class Koan:
raise InfoException("xmlfile based installations are not supported")
elif profile_data.has_key("file"):
- print "- ISO or Image based installation, always uses --virt-type=qemu"
+ print("- ISO or Image based installation, always uses --virt-type=qemu")
self.virt_type = "qemu"
else:
@@ -525,7 +525,7 @@ class Koan:
# assume Xen, we'll check to see if virt-type is really usable later.
raise InfoException, "Not running a Xen kernel and qemu is not installed"
- print "- no virt-type specified, auto-selecting %s" % self.virt_type
+ print("- no virt-type specified, auto-selecting %s" % self.virt_type)
# now that we've figured out our virt-type, let's see if it is really usable
# rather than showing obscure error messages from Xen to the user :)
@@ -628,9 +628,9 @@ class Koan:
break
if self.safe_load(profile_data,"install_tree"):
- print "install_tree:", profile_data["install_tree"]
+ print("install_tree:", profile_data["install_tree"])
else:
- print "warning: kickstart found but no install_tree found"
+ print("warning: kickstart found but no install_tree found")
except:
# unstable to download the kickstart, however this might not
@@ -646,7 +646,7 @@ class Koan:
data = self.get_data(what)
for x in data:
if x.has_key("name"):
- print x["name"]
+ print(x["name"])
return True
#---------------------------------------------------
@@ -658,7 +658,7 @@ class Koan:
value = profile_data[x]
if x == 'kernel_options':
value = self.calc_kernel_args(profile_data)
- print "%20s : %s" % (x, value)
+ print("%20s : %s" % (x, value))
return self.net_install(after_download)
#---------------------------------------------------
@@ -702,9 +702,9 @@ class Koan:
template_files = utils.input_string_or_hash(template_files)
template_keys = template_files.keys()
- print "- template map: %s" % template_files
+ print("- template map: %s" % template_files)
- print "- processing for files to download..."
+ print("- processing for files to download...")
for src in template_keys:
dest = template_files[src]
save_as = dest
@@ -713,7 +713,7 @@ class Koan:
if not save_as.startswith("/"):
# this is a file in the template system that is not to be downloaded
continue
- print "- file: %s" % save_as
+ print("- file: %s" % save_as)
pattern = "http://%s/cblr/svc/op/template/%s/%s/path/%s"
if profile_data.has_key("interfaces"):
@@ -780,7 +780,7 @@ class Koan:
'--command-line=%s' % (k_args,),
self.safe_load(profile_data,'kernel_local')
])
- print "Kernel loaded; run 'kexec -e' to execute"
+ print("Kernel loaded; run 'kexec -e' to execute")
return self.net_install(after_download)
@@ -900,25 +900,25 @@ class Koan:
# Any post-grubby processing required (e.g. ybin, zipl, lilo)?
if arch.startswith("ppc") and "grub2" not in probe_output:
# FIXME - CHRP hardware uses a 'PPC PReP Boot' partition and doesn't require running ybin
- print "- applying ybin changes"
+ print("- applying ybin changes")
cmd = [ "/sbin/ybin" ]
utils.subprocess_call(cmd)
elif arch.startswith("s390"):
- print "- applying zipl changes"
+ print("- applying zipl changes")
cmd = [ "/sbin/zipl" ]
utils.subprocess_call(cmd)
else:
# if grubby --bootloader-probe returns lilo,
# apply lilo changes
if boot_probe_ret_code == 0 and string.find(probe_output, "lilo") != -1:
- print "- applying lilo changes"
+ print("- applying lilo changes")
cmd = [ "/sbin/lilo" ]
utils.subprocess_call(cmd)
if not self.add_reinstall_entry:
- print "- reboot to apply changes"
+ print("- reboot to apply changes")
else:
- print "- reinstallation entry added"
+ print("- reinstallation entry added")
return self.net_install(after_download)
@@ -986,7 +986,7 @@ class Koan:
else:
data = getattr(self.xmlrpc_server, "get_%s_for_koan" % what)(name)
except:
- traceback.print_exc()
+ traceback.print(_exc())
self.connect_fail()
if data == {}:
raise InfoException("No entry/entries found")
@@ -1049,15 +1049,15 @@ class Koan:
initrd = "http://%s/cobbler/images/%s/%s" % (self.server, distro, initrd_short)
try:
- print "downloading initrd %s to %s" % (initrd_short, initrd_save)
- print "url=%s" % initrd
+ print("downloading initrd %s to %s" % (initrd_short, initrd_save))
+ print("url=%s" % initrd)
utils.urlgrab(initrd,initrd_save)
- print "downloading kernel %s to %s" % (kernel_short, kernel_save)
- print "url=%s" % kernel
+ print("downloading kernel %s to %s" % (kernel_short, kernel_save))
+ print("url=%s" % kernel)
utils.urlgrab(kernel,kernel_save)
except:
- traceback.print_exc()
+ traceback.print(_exc())
raise InfoException, "error downloading files"
profile_data['kernel_local'] = kernel_save
profile_data['initrd_local'] = initrd_save
@@ -1166,11 +1166,11 @@ class Koan:
noreboot = self.virtinstall_noreboot,
)
- print results
+ print(results)
if can_poll is not None and self.should_poll:
import libvirt
- print "- polling for virt completion"
+ print("- polling for virt completion")
conn = None
if can_poll == "xen":
conn = libvirt.open(None)
@@ -1183,14 +1183,14 @@ class Koan:
time.sleep(3)
state = utils.get_vm_state(conn, virtname)
if state == "running":
- print "- install is still running, sleeping for 1 minute (%s)" % ct
+ print("- install is still running, sleeping for 1 minute (%s)" % ct)
ct = ct + 1
time.sleep(60)
elif state == "crashed":
- print "- the install seems to have crashed."
+ print("- the install seems to have crashed.")
return "failed"
elif state == "shutdown":
- print "- shutdown VM detected, is the install done? Restarting!"
+ print("- shutdown VM detected, is the install done? Restarting!")
utils.find_vm(conn, virtname).create()
return results
else:
@@ -1202,7 +1202,7 @@ class Koan:
elif self.virt_type == "qemu":
utils.libvirt_enable_autostart(virtname)
else:
- print "- warning: don't know how to autoboot this virt type yet"
+ print("- warning: don't know how to autoboot this virt type yet")
# else...
return results
@@ -1255,8 +1255,8 @@ class Koan:
disks.append([path,size])
counter = counter + 1
if len(disks) == 0:
- print "paths: ", paths
- print "sizes: ", sizes
+ print("paths: ", paths)
+ print("sizes: ", sizes)
raise InfoException, "Disk configuration not resolvable!"
return disks
@@ -1320,7 +1320,7 @@ class Koan:
if size is None or size == '':
err = True
if err:
- print "invalid file size specified, using defaults"
+ print("invalid file size specified, using defaults")
return default_filesize
return int(size)
@@ -1339,7 +1339,7 @@ class Koan:
if size is None or size == '' or int(size) < default_ram:
err = True
if err:
- print "invalid RAM size specified, using defaults."
+ print("invalid RAM size specified, using defaults.")
return default_ram
return int(size)
@@ -1353,7 +1353,7 @@ class Koan:
try:
isize = int(size)
except:
- traceback.print_exc()
+ traceback.print(_exc())
return default_cpus
return isize
@@ -1386,7 +1386,7 @@ class Koan:
if my_id is None or my_id == '' or not uuid_re.match(id):
err = True
if err and my_id is not None:
- print "invalid UUID specified. randomizing..."
+ print("invalid UUID specified. randomizing...")
return None
return my_id
@@ -1415,7 +1415,7 @@ class Koan:
else:
prefix = "/var/lib/vmware/images/"
if not os.path.exists(prefix):
- print "- creating: %s" % prefix
+ print("- creating: %s" % prefix)
os.makedirs(prefix)
return [ "%s/%s-disk0" % (prefix, name) ]
@@ -1456,7 +1456,7 @@ class Koan:
elif not os.path.exists(location) and os.path.isdir(os.path.dirname(location)):
return location
elif not os.path.exists(os.path.dirname(location)):
- print "- creating: %s" % os.path.dirname(location)
+ print("- creating: %s" % os.path.dirname(location))
os.makedirs(os.path.dirname(location))
return location
else:
@@ -1470,21 +1470,21 @@ class Koan:
else:
# it's a volume group, verify that it exists
args = "vgs -o vg_name"
- print "%s" % args
+ print("%s" % args)
vgnames = sub_process.Popen(args, shell=True, stdout=sub_process.PIPE).communicate()[0]
- print vgnames
+ print(vgnames)
if vgnames.find(location) == -1:
raise InfoException, "The volume group [%s] does not exist." % location
# check free space
args = "LANG=C vgs --noheadings -o vg_free --units g %s" % location
- print args
+ print(args)
cmd = sub_process.Popen(args, stdout=sub_process.PIPE, shell=True)
freespace_str = cmd.communicate()[0]
freespace_str = freespace_str.split("\n")[0].strip()
freespace_str = freespace_str.lower().replace("g","") # remove gigabytes
- print "(%s)" % freespace_str
+ print("(%s)" % freespace_str)
freespace = int(float(freespace_str))
virt_size = self.calc_virt_filesize(pd)
@@ -1498,16 +1498,16 @@ class Koan:
# look for LVM partition named foo, create if doesn't exist
args = "lvs -o lv_name %s" % location
- print "%s" % args
+ print("%s" % args)
lvs_str=sub_process.Popen(args, stdout=sub_process.PIPE, shell=True).communicate()[0]
- print lvs_str
+ print(lvs_str)
name = "%s-disk%s" % (name,offset)
# have to create it?
if lvs_str.find(name) == -1:
args = "lvcreate -L %sG -n %s %s" % (virt_size, name, location)
- print "%s" % args
+ print("%s" % args)
lv_create = sub_process.call(args, shell=True)
if lv_create != 0:
raise InfoException, "LVM creation failed"
diff --git a/koan/register.py b/koan/register.py
index cabd4a6..1157e5c 100755
--- a/koan/register.py
+++ b/koan/register.py
@@ -65,7 +65,7 @@ def main():
(options, args) = p.parse_args()
#if not os.getuid() == 0:
- # print "koan requires root access"
+ # print("koan requires root access")
# return 3
try:
@@ -80,11 +80,11 @@ def main():
(xa, xb, tb) = sys.exc_info()
try:
getattr(e,"from_koan")
- print str(e)[1:-1] # nice exception, no traceback needed
+ print(str(e)[1:-1]) # nice exception, no traceback needed
except:
- print xa
- print xb
- print string.join(traceback.format_list(traceback.extract_tb(tb)))
+ print(xa)
+ print(xb)
+ print(string.join(traceback.format_list(traceback.extract_tb(tb))))
return 1
return 0
@@ -127,13 +127,13 @@ class Register:
if os.getuid() != 0:
raise InfoException("root access is required to register")
- print "- preparing to koan home"
+ print("- preparing to koan home")
self.conn = utils.connect_to_server(self.server, self.port)
reg_info = {}
- print "- gathering network info"
+ print("- gathering network info")
netinfo = utils.get_network_info()
reg_info["interfaces"] = netinfo
- print "- checking hostname"
+ print("- checking hostname")
sysname = ""
if self.hostname != "" and self.hostname != "*AUTO*":
hostname = self.hostname
@@ -171,14 +171,14 @@ class Register:
if not self.batch:
self.conn.register_new_system(reg_info)
- print "- registration successful, new system name: %s" % sysname
+ print("- registration successful, new system name: %s" % sysname)
else:
try:
self.conn.register_new_system(reg_info)
- print "- registration successful, new system name: %s" % sysname
+ print("- registration successful, new system name: %s" % sysname)
except:
- traceback.print_exc()
- print "- registration failed, ignoring because of --batch"
+ traceback.print(_exc())
+ print("- registration failed, ignoring because of --batch")
return
diff --git a/koan/utils.py b/koan/utils.py
index b8247e2..77d53b2 100644
--- a/koan/utils.py
+++ b/koan/utils.py
@@ -90,7 +90,7 @@ def urlread(url):
parts of urlread and urlgrab from urlgrabber, in ways that
are less cool and less efficient.
"""
- print "- reading URL: %s" % url
+ print("- reading URL: %s" % url)
if url is None or url == "":
raise InfoException, "invalid URL: %s" % url
@@ -109,7 +109,7 @@ def urlread(url):
subprocess_call(cmd)
return data
except:
- traceback.print_exc()
+ traceback.print(_exc())
raise InfoException, "Couldn't mount and read URL: %s" % url
elif url[0:4] == "http":
@@ -119,7 +119,7 @@ def urlread(url):
fd.close()
return data
except:
- traceback.print_exc()
+ traceback.print(_exc())
raise InfoException, "Couldn't download: %s" % url
elif url[0:4] == "file":
try:
@@ -147,7 +147,7 @@ def subprocess_call(cmd,ignore_rc=0):
"""
Wrapper around subprocess.call(...)
"""
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = sub_process.call(cmd)
if rc != 0 and not ignore_rc:
raise InfoException, "command failed (%s)" % rc
@@ -157,7 +157,7 @@ def subprocess_get_response(cmd, ignore_rc=False):
"""
Wrapper around subprocess.check_output(...)
"""
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = 0
result = ""
p = sub_process.Popen(cmd, stdout=sub_process.PIPE, stderr=sub_process.STDOUT)
@@ -219,7 +219,7 @@ def input_string_or_hash(options,delim=None,allow_multiples=True):
def hash_to_string(hash):
"""
- Convert a hash to a printable string.
+ Convert a hash to a print(able string.)
used primarily in the kernel options string
and for some legacy stuff where koan expects strings
(though this last part should be changed to hashes)
@@ -232,7 +232,7 @@ def hash_to_string(hash):
if value is None:
buffer = buffer + str(key) + " "
elif type(value) == list:
- # this value is an array, so we print out every
+ # this value is an array, so we print(out every)
# key=value
for item in value:
buffer = buffer + str(key) + "=" + str(item) + " "
@@ -251,14 +251,14 @@ def nfsmount(input_path):
mount_cmd = [
"/bin/mount", "-t", "nfs", "-o", "ro", dirpath, tempdir
]
- print "- running: %s" % mount_cmd
+ print("- running: %s" % mount_cmd)
rc = sub_process.call(mount_cmd)
if not rc == 0:
shutil.rmtree(tempdir, ignore_errors=True)
raise koan.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
+ print("after install completes, you may unmount and delete %s" % tempdir)
return (tempdir, filename)
@@ -411,7 +411,7 @@ def get_network_info():
"module" : module
}
- # print interfaces
+ # print(interfaces)
return interfaces
def connect_to_server(server=None,port=None):
@@ -431,7 +431,7 @@ def connect_to_server(server=None,port=None):
"https://%s/cobbler_api" % (server),
]
for url in try_urls:
- print "- looking for Cobbler at %s" % url
+ print("- looking for Cobbler at %s" % url)
server = __try_connect(url)
if server is not None:
return server
@@ -467,18 +467,18 @@ def libvirt_enable_autostart(domain_name):
def make_floppy(kickstart):
(fd, floppy_path) = tempfile.mkstemp(suffix='.floppy', prefix='tmp', dir="/tmp")
- print "- creating floppy image at %s" % floppy_path
+ print("- creating floppy image at %s" % floppy_path)
# create the floppy image file
cmd = "dd if=/dev/zero of=%s bs=1440 count=1024" % floppy_path
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = os.system(cmd)
if not rc == 0:
raise InfoException("dd failed")
# vfatify
cmd = "mkdosfs %s" % floppy_path
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = os.system(cmd)
if not rc == 0:
raise InfoException("mkdosfs failed")
@@ -486,19 +486,19 @@ def make_floppy(kickstart):
# mount the floppy
mount_path = tempfile.mkdtemp(suffix=".mnt", prefix='tmp', dir="/tmp")
cmd = "mount -o loop -t vfat %s %s" % (floppy_path, mount_path)
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = os.system(cmd)
if not rc == 0:
raise InfoException("mount failed")
# download the kickstart file onto the mounted floppy
- print "- downloading %s" % kickstart
+ print("- downloading %s" % kickstart)
save_file = os.path.join(mount_path, "unattended.txt")
urlgrabber.urlgrab(kickstart,filename=save_file)
# umount
cmd = "umount %s" % mount_path
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = os.system(cmd)
if not rc == 0:
raise InfoException("umount failed")
@@ -522,7 +522,7 @@ def __try_connect(url):
xmlrpc_server.ping()
return xmlrpc_server
except:
- traceback.print_exc()
+ traceback.print(_exc())
return None
diff --git a/koan/virtinstall.py b/koan/virtinstall.py
index ca11e04..2d1f3df 100644
--- a/koan/virtinstall.py
+++ b/koan/virtinstall.py
@@ -191,7 +191,7 @@ def build_commandline(uri,
oldstyle_accelerate = False
if not virtinst_version:
- print ("- warning: old virt-install detected, a lot of features will be disabled")
+ print(("- warning: old virt-install detected, a lot of features will be disabled"))
disable_autostart = True
disable_boot_opt = True
disable_virt_type = True
@@ -239,7 +239,7 @@ def build_commandline(uri,
# this is an image based installation
input_path = profile_data["file"]
- print "- using image location %s" % input_path
+ print("- using image location %s" % input_path)
if input_path.find(":") == -1:
# this is not an NFS path
cdrom = input_path
@@ -251,7 +251,7 @@ def build_commandline(uri,
if kickstart != "":
# we have a (windows?) answer file we have to provide
# to the ISO.
- print "I want to make a floppy for %s" % kickstart
+ print("I want to make a floppy for %s" % kickstart)
floppy = utils.make_floppy(kickstart)
elif is_qemu or is_xen:
# images don't need to source this
@@ -378,7 +378,7 @@ def build_commandline(uri,
# compatibility in virt-install grumble grumble.
cmd += "--os-variant %s" % os_version + ".0 "
else:
- print ("- warning: virt-install doesn't know this os_version, defaulting to generic26")
+ print(("- warning: virt-install doesn't know this os_version, defaulting to generic26"))
cmd += "--os-variant generic26 "
else:
distro = "unix"
@@ -394,8 +394,8 @@ def build_commandline(uri,
cmd += "--disk path=%s " % importpath
for path, size, driver_type in disks:
- print ("- adding disk: %s of size %s (driver type=%s)" %
- (path, size, driver_type))
+ print(("- adding disk: %s of size %s (driver type=%s)" %
+ (path, size, driver_type)))
cmd += "--disk path=%s" % (path)
if str(size) != "0":
cmd += ",size=%s" % size
diff --git a/koan/vmwcreate.py b/koan/vmwcreate.py
index 372173a..97e0ba2 100755
--- a/koan/vmwcreate.py
+++ b/koan/vmwcreate.py
@@ -77,7 +77,7 @@ def random_mac():
def make_disk(disksize,image):
cmd = "vmware-vdiskmanager -c -a lsilogic -s %sGb -t 0 %s" % (disksize, image)
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = os.system(cmd)
if rc != 0:
raise VirtCreateException("command failed")
@@ -96,7 +96,7 @@ def make_vmx(path,vmdk_image,image_name,mac_address,memory):
def register_vmx(vmx_file):
cmd = "vmware-cmd -s register %s" % vmx_file
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = os.system(cmd)
if rc!=0:
raise VirtCreateException("vmware registration failed")
@@ -104,7 +104,7 @@ def register_vmx(vmx_file):
def start_vm(vmx_file):
os.chmod(vmx_file,0755)
cmd = "vmware-cmd %s start" % vmx_file
- print "- %s" % cmd
+ print("- %s" % cmd)
rc = os.system(cmd)
if rc != 0:
raise VirtCreateException("vm start failed")
@@ -129,19 +129,19 @@ def start_install(name=None,
mac = None
if not profile_data.has_key("interfaces"):
- print "- vmware installation requires a system, not a profile"
+ print("- vmware installation requires a system, not a profile")
return 1
for iname in profile_data["interfaces"]:
intf = profile_data["interfaces"][iname]
mac = intf["mac_address"]
if mac is None:
- print "- no MAC information available in this record, cannot install"
+ print("- no MAC information available in this record, cannot install")
return 1
- print "DEBUG: name=%s" % name
- print "DEBUG: ram=%s" % ram
- print "DEBUG: mac=%s" % mac
- print "DEBUG: disks=%s" % disks
+ print("DEBUG: name=%s" % name)
+ print("DEBUG: ram=%s" % ram)
+ print("DEBUG: mac=%s" % mac)
+ print("DEBUG: disks=%s" % disks)
# starts vmware using PXE. disk/mem info come from Cobbler
# rest of the data comes from PXE which is also intended
# to be managed by Cobbler.
@@ -158,10 +158,10 @@ def start_install(name=None,
disksize = disks[0][1]
image = "%s/%s" % (IMAGE_DIR, name)
- print "- saving virt disk image as %s" % image
+ print("- saving virt disk image as %s" % image)
make_disk(disksize,image)
vmx = "%s/%s" % (VMX_DIR, name)
- print "- saving vmx file as %s" % vmx
+ print("- saving vmx file as %s" % vmx)
make_vmx(vmx,image,name,mac,ram)
register_vmx(vmx)
start_vm(vmx)
--
2.5.5