summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Bcfg2/Server')
-rw-r--r--src/lib/Bcfg2/Server/Admin.py58
-rw-r--r--src/lib/Bcfg2/Server/Cache.py2
-rw-r--r--src/lib/Bcfg2/Server/Core.py10
-rwxr-xr-xsrc/lib/Bcfg2/Server/Encryption.py10
-rw-r--r--src/lib/Bcfg2/Server/FileMonitor/Inotify.py5
-rw-r--r--src/lib/Bcfg2/Server/FileMonitor/__init__.py4
-rw-r--r--src/lib/Bcfg2/Server/Info.py106
-rw-r--r--src/lib/Bcfg2/Server/Lint/Bundler.py6
-rw-r--r--src/lib/Bcfg2/Server/Lint/Cfg.py8
-rw-r--r--src/lib/Bcfg2/Server/Lint/Comments.py20
-rw-r--r--src/lib/Bcfg2/Server/Lint/Genshi.py6
-rw-r--r--src/lib/Bcfg2/Server/Lint/GroupNames.py4
-rw-r--r--src/lib/Bcfg2/Server/Lint/InfoXML.py4
-rw-r--r--src/lib/Bcfg2/Server/Lint/Jinja2.py4
-rw-r--r--src/lib/Bcfg2/Server/Lint/MergeFiles.py4
-rw-r--r--src/lib/Bcfg2/Server/Lint/Metadata.py4
-rw-r--r--src/lib/Bcfg2/Server/Lint/RequiredAttrs.py8
-rw-r--r--src/lib/Bcfg2/Server/Lint/TemplateAbuse.py6
-rw-r--r--src/lib/Bcfg2/Server/Lint/TemplateHelper.py2
-rw-r--r--src/lib/Bcfg2/Server/Lint/Validate.py4
-rw-r--r--src/lib/Bcfg2/Server/Lint/__init__.py14
-rw-r--r--src/lib/Bcfg2/Server/MultiprocessingCore.py14
-rw-r--r--src/lib/Bcfg2/Server/Plugin/base.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugin/helpers.py26
-rw-r--r--src/lib/Bcfg2/Server/Plugins/AWSTags.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Bundler.py4
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py4
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py12
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Deps.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Ldap.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Metadata.py16
-rw-r--r--src/lib/Bcfg2/Server/Plugins/POSIXCompat.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Pac.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Pkgng.py4
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Source.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Yum.py6
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/YumHelper.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/__init__.py4
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Pkgmgr.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Probes.py10
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Properties.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/PuppetENC.py6
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Rules.py2
-rw-r--r--src/lib/Bcfg2/Server/Plugins/SSHbase.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/TemplateHelper.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Trigger.py2
-rw-r--r--src/lib/Bcfg2/Server/Reports/reports/models.py2
-rw-r--r--src/lib/Bcfg2/Server/SSLServer.py2
-rw-r--r--src/lib/Bcfg2/Server/migrations/0001_initial.py2
-rw-r--r--src/lib/Bcfg2/Server/south_migrations/0001_initial.py20
50 files changed, 237 insertions, 236 deletions
diff --git a/src/lib/Bcfg2/Server/Admin.py b/src/lib/Bcfg2/Server/Admin.py
index 0accd0361..98ce9e524 100644
--- a/src/lib/Bcfg2/Server/Admin.py
+++ b/src/lib/Bcfg2/Server/Admin.py
@@ -92,8 +92,8 @@ def print_table(rows, justify='left', hdr=True, vdelim=" ", padding=1):
# Print out the table
print(borderline)
for row in rows:
- print(vdelim.join([justify(str(item), width)
- for (item, width) in zip(row, col_widths)]))
+ print((vdelim.join([justify(str(item), width)
+ for (item, width) in zip(row, col_widths)])))
if hdr:
print(borderline)
hdr = False
@@ -173,7 +173,7 @@ class Backup(AdminCmd):
out = tarfile.open(os.path.join(datastore, filename), mode=mode)
out.add(datastore, os.path.basename(datastore))
out.close()
- print("Archive %s was stored under %s" % (filename, datastore))
+ print(("Archive %s was stored under %s" % (filename, datastore)))
class Client(_ServerAdminCmd):
@@ -199,8 +199,8 @@ class Client(_ServerAdminCmd):
for i in setup.attributes:
attr, val = i.split('=', 1)
if attr not in self.valid_attribs:
- print("Attribute %s unknown. Valid attributes: %s" %
- (attr, self.valid_attribs))
+ print(("Attribute %s unknown. Valid attributes: %s" %
+ (attr, self.valid_attribs)))
raise SystemExit(1)
attr_d[attr] = val
return attr_d
@@ -387,7 +387,7 @@ class Compare(AdminCmd):
for el in bundle.getchildren():
elements2["%s:%s" % (el.tag, el.get("name"))] = el
- for el in elements1.values():
+ for el in list(elements1.values()):
elid = "%s:%s" % (el.tag, el.get("name"))
if elid not in elements2:
self.removed("Element %s" % elid, host)
@@ -428,16 +428,16 @@ class Compare(AdminCmd):
lines=setup.diff_lines))
self.changed("\n".join(err), host)
- for el in elements2.values():
+ for el in list(elements2.values()):
elid = "%s:%s" % (el.tag, el.get("name"))
if elid not in elements2:
self.removed("Element %s" % elid, host)
- for change, hosts in self.changes.items():
+ for change, hosts in list(self.changes.items()):
hlist = [h for h in hosts if h is not None]
if len(files) > 1 and len(hlist):
- print("===== %s =====" %
- "\n ".join(hostnames2ranges(hlist)))
+ print(("===== %s =====" %
+ "\n ".join(hostnames2ranges(hlist))))
print(change)
if len(files) > 1 and len(hlist):
print("")
@@ -636,7 +636,7 @@ bcfg2 = %s
result = safe_input("\nWarning: %s already exists. "
"Overwrite? [y/N]: " % self.data['configfile'])
if result not in ['Y', 'y']:
- print("Leaving %s unchanged" % self.data['configfile'])
+ print(("Leaving %s unchanged" % self.data['configfile']))
return
try:
open(self.data['configfile'], "w").write(confdata)
@@ -654,10 +654,10 @@ bcfg2 = %s
try:
os.makedirs(path)
self._init_plugins()
- print("Repository created successfuly in %s" %
- self.data['repopath'])
+ print(("Repository created successfuly in %s" %
+ self.data['repopath']))
except OSError:
- print("Failed to create %s." % path)
+ print(("Failed to create %s." % path))
# Create the configuration file and SSL key
self.create_conf()
@@ -674,21 +674,21 @@ bcfg2 = %s
"-newkey", "rsa:2048",
"-keyout", self.data['keypath'], "-noout"])
if not key.success:
- print("Error generating key: %s" % key.error)
+ print(("Error generating key: %s" % key.error))
return
os.chmod(self.data['keypath'], stat.S_IRUSR | stat.S_IWUSR) # 0600
csr = cmd.run(["openssl", "req", "-batch", "-new", "-subj", subject,
"-key", self.data['keypath']])
if not csr.success:
- print("Error generating certificate signing request: %s" %
- csr.error)
+ print(("Error generating certificate signing request: %s" %
+ csr.error))
return
cert = cmd.run(["openssl", "x509", "-req", "-days", "1000",
"-signkey", self.data['keypath'],
"-out", self.data['certpath']],
inputdata=csr.stdout)
if not cert.success:
- print("Error signing certificate: %s" % cert.error)
+ print(("Error signing certificate: %s" % cert.error))
return
@@ -774,9 +774,9 @@ class Pull(_ServerAdminCmd):
try:
self.PullEntry(*line.split(None, 3))
except SystemExit:
- print(" for %s" % line)
+ print((" for %s" % line))
except:
- print("Bad entry: %s" % line.strip())
+ print(("Bad entry: %s" % line.strip()))
else:
self.PullEntry(setup.hostname, setup.entrytype, setup.entryname)
@@ -818,10 +818,10 @@ class Pull(_ServerAdminCmd):
if choice.all:
print(" => global entry")
elif choice.group:
- print(" => group entry: %s (prio %d)" %
- (choice.group, choice.prio))
+ print((" => group entry: %s (prio %d)" %
+ (choice.group, choice.prio)))
else:
- print(" => host entry: %s" % (choice.hostname))
+ print((" => host entry: %s" % (choice.hostname)))
# flush input buffer
ans = safe_input("Use this entry? [yN]: ") in ['y', 'Y']
@@ -979,8 +979,8 @@ if HAS_REPORTS:
(start_count - cls.objects.count(),
cls.__name__))
except: # pylint: disable=W0702
- print("Failed to prune %s: %s" %
- (cls.__name__, sys.exc_info()[1]))
+ print(("Failed to prune %s: %s" %
+ (cls.__name__, sys.exc_info()[1])))
class InitReports(AdminCmd):
""" Initialize the Reporting database """
@@ -1003,8 +1003,8 @@ if HAS_REPORTS:
""" Print Reporting database statistics """
def run(self, _):
for cls in self.reports_classes:
- print("%s has %s records" % (cls.__name__,
- cls.objects.count()))
+ print(("%s has %s records" % (cls.__name__,
+ cls.objects.count())))
class PurgeReports(_ReportsCmd):
""" Purge records from the Reporting database """
@@ -1198,7 +1198,7 @@ class Viz(_ServerAdminCmd):
if not result.success:
self.errExit("Error running %s: %s" % (cmd, result.error))
if not setup.outfile:
- print(result.stdout)
+ print((result.stdout))
class Xcmd(_ProxyAdminCmd):
@@ -1223,7 +1223,7 @@ class CLI(Bcfg2.Options.CommandRegistry):
def __init__(self):
Bcfg2.Options.CommandRegistry.__init__(self)
- self.register_commands(globals().values(), parent=AdminCmd)
+ self.register_commands(list(globals().values()), parent=AdminCmd)
parser = Bcfg2.Options.get_parser(
description="Manage a running Bcfg2 server",
components=[self])
diff --git a/src/lib/Bcfg2/Server/Cache.py b/src/lib/Bcfg2/Server/Cache.py
index b3b906b2c..cba36d7d5 100644
--- a/src/lib/Bcfg2/Server/Cache.py
+++ b/src/lib/Bcfg2/Server/Cache.py
@@ -127,7 +127,7 @@ class _CacheRegistry(dict):
for :class:`Bcfg2.Server.Cache._Cache` objects that have been
instantiated via :func:`Bcfg2.Server.Cache.Cache`. """
tags = frozenset(tags)
- for key in self.keys():
+ for key in list(self.keys()):
if key.issuperset(tags) and len(key.difference(tags)) == 1:
yield key
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py
index a1ee24e18..78eed4b3e 100644
--- a/src/lib/Bcfg2/Server/Core.py
+++ b/src/lib/Bcfg2/Server/Core.py
@@ -301,7 +301,7 @@ class Core(object):
:returns: list of :attr:`Bcfg2.Server.Plugin.base.Plugin`
objects
"""
- return sorted([plugin for plugin in self.plugins.values()
+ return sorted([plugin for plugin in list(self.plugins.values())
if isinstance(plugin, base_cls)],
key=lambda p: (p.sort_order, p.name))
@@ -312,7 +312,7 @@ class Core(object):
while not self.terminate.isSet():
self.terminate.wait(Bcfg2.Options.setup.performance_interval)
if not self.terminate.isSet():
- for name, stats in self.get_statistics(None).items():
+ for name, stats in list(self.get_statistics(None).items()):
self.logger.info("Performance statistics: "
"%s min=%.06f, max=%.06f, average=%.06f, "
"count=%d" % ((name, ) + stats))
@@ -1041,7 +1041,7 @@ class Core(object):
def _get_rmi(self):
""" Get a list of RMI calls exposed by plugins """
rmi = dict()
- for pname, pinst in self._get_rmi_objects().items():
+ for pname, pinst in list(self._get_rmi_objects().items()):
for mname in pinst.__rmi__:
rmi["%s.%s" % (pname, mname)] = getattr(pinst, mname)
return rmi
@@ -1076,7 +1076,7 @@ class Core(object):
for name, func in inspect.getmembers(self, callable)
if (getattr(func, "exposed", False) and
self.check_acls(address, name))]
- methods.extend([m for m in self._get_rmi().keys()
+ methods.extend([m for m in list(self._get_rmi().keys())
if self.check_acls(address, m)])
return methods
@@ -1323,7 +1323,7 @@ class Core(object):
"""
if debug not in [True, False]:
debug = debug.lower() == "true"
- for plugin in self.plugins.values():
+ for plugin in list(self.plugins.values()):
plugin.set_debug(debug)
rv = self.set_core_debug(address, debug)
return self.fam.set_debug(debug) and rv
diff --git a/src/lib/Bcfg2/Server/Encryption.py b/src/lib/Bcfg2/Server/Encryption.py
index c6cd4232e..bc12eb129 100755
--- a/src/lib/Bcfg2/Server/Encryption.py
+++ b/src/lib/Bcfg2/Server/Encryption.py
@@ -199,7 +199,7 @@ def bruteforce_decrypt(crypted, passphrases=None, algorithm=None):
:raises: :class:`M2Crypto.EVP.EVPError`, if the data cannot be decrypted
"""
if passphrases is None:
- passphrases = Bcfg2.Options.setup.passphrases.values()
+ passphrases = list(Bcfg2.Options.setup.passphrases.values())
for passwd in passphrases:
try:
return ssl_decrypt(crypted, passwd, algorithm=algorithm)
@@ -278,7 +278,7 @@ class CryptoTool(object):
(pname, Bcfg2.Options.setup.config))
else:
if len(Bcfg2.Options.setup.passphrases) == 1:
- pname, passphrase = Bcfg2.Options.setup.passphrases.items()[0]
+ pname, passphrase = list(Bcfg2.Options.setup.passphrases.items())[0]
self.logger.info("Using passphrase %s" % pname)
return (pname, passphrase)
elif len(Bcfg2.Options.setup.passphrases) > 1:
@@ -399,9 +399,9 @@ class PropertiesCryptoMixin(object):
elt.remove(child)
else:
elt = element
- print(lxml.etree.tostring(
+ print((lxml.etree.tostring(
elt,
- xml_declaration=False).decode("UTF-8").strip())
+ xml_declaration=False).decode("UTF-8").strip()))
ans = safe_input("Encrypt this element? [y/N] ")
if not ans.lower().startswith("y"):
elements.remove(element)
@@ -664,7 +664,7 @@ class CLI(object):
continue
if Bcfg2.Options.setup.stdout:
if len(Bcfg2.Options.setup.files) > 1:
- print("----- %s -----" % fname)
+ print(("----- %s -----" % fname))
print(data)
if len(Bcfg2.Options.setup.files) > 1:
print("")
diff --git a/src/lib/Bcfg2/Server/FileMonitor/Inotify.py b/src/lib/Bcfg2/Server/FileMonitor/Inotify.py
index 8f6e136fd..6ed938e18 100644
--- a/src/lib/Bcfg2/Server/FileMonitor/Inotify.py
+++ b/src/lib/Bcfg2/Server/FileMonitor/Inotify.py
@@ -7,6 +7,7 @@ import pyinotify
from Bcfg2.Compat import reduce # pylint: disable=W0622
from Bcfg2.Server.FileMonitor import Event
from Bcfg2.Server.FileMonitor.Pseudo import Pseudo
+from functools import reduce
class Inotify(Pseudo, pyinotify.ProcessEvent):
@@ -32,7 +33,7 @@ class Inotify(Pseudo, pyinotify.ProcessEvent):
#: The pyinotify event mask. We only ask for events that are
#: listed in :attr:`action_map`
- mask = reduce(lambda x, y: x | y, action_map.keys())
+ mask = reduce(lambda x, y: x | y, list(action_map.keys()))
def __init__(self):
Pseudo.__init__(self)
@@ -106,7 +107,7 @@ class Inotify(Pseudo, pyinotify.ProcessEvent):
:type ievent: pyinotify._Event
"""
action = ievent.maskname
- for amask, aname in self.action_map.items():
+ for amask, aname in list(self.action_map.items()):
if ievent.mask & amask:
action = aname
break
diff --git a/src/lib/Bcfg2/Server/FileMonitor/__init__.py b/src/lib/Bcfg2/Server/FileMonitor/__init__.py
index c10677804..0f51e0d2b 100644
--- a/src/lib/Bcfg2/Server/FileMonitor/__init__.py
+++ b/src/lib/Bcfg2/Server/FileMonitor/__init__.py
@@ -327,7 +327,7 @@ class FileMonitor(Debuggable):
:attr:`Bcfg2.Server.FileMonitor.FileMonitor.handles` for
debugging purposes. """
rv = dict()
- for watch, handler in self.handles.items():
+ for watch, handler in list(self.handles.items()):
rv[watch] = getattr(handler, "name", handler.__class__.__name__)
return rv
@@ -377,7 +377,7 @@ try:
except ImportError:
pass
-for fdrv in reversed(sorted(available.keys(),
+for fdrv in reversed(sorted(list(available.keys()),
key=lambda k: available[k].__priority__)):
if fdrv in available:
available['default'] = available[fdrv]
diff --git a/src/lib/Bcfg2/Server/Info.py b/src/lib/Bcfg2/Server/Info.py
index 044dcdf0c..cd9a98c86 100644
--- a/src/lib/Bcfg2/Server/Info.py
+++ b/src/lib/Bcfg2/Server/Info.py
@@ -38,10 +38,10 @@ def print_tabular(rows):
for index in range(len(rows[0]))])
fstring = (" %%-%ss |" * len(cmax)) % cmax
fstring = ('|'.join([" %%-%ss "] * len(cmax))) % cmax
- print(fstring % rows[0])
- print((sum(cmax) + (len(cmax) * 2) + (len(cmax) - 1)) * '=')
+ print((fstring % rows[0]))
+ print(((sum(cmax) + (len(cmax) * 2) + (len(cmax) - 1)) * '='))
for row in rows[1:]:
- print(fstring % row)
+ print((fstring % row))
def display_trace(trace):
@@ -137,7 +137,7 @@ class Debug(InfoCmd):
Bcfg2.Options.Option(
"--interpreter", cf=("bcfg2-info", "interpreter"),
env="BCFG2_INFO_INTERPRETER",
- choices=interpreters.keys(), default=default_interpreter)]
+ choices=list(interpreters.keys()), default=default_interpreter)]
def run(self, setup):
if setup.cmd_list:
@@ -167,7 +167,7 @@ class Build(InfoCmd):
pretty_print=True)
except IOError:
err = sys.exc_info()[1]
- print("Failed to write %s: %s" % (setup.filename, err))
+ print(("Failed to write %s: %s" % (setup.filename, err)))
class Builddir(InfoCmd):
@@ -200,8 +200,8 @@ dir>. This only handles file entries, and does not respect 'owner' or
entry.get("type") not in self.blacklisted_types):
failure = entry.get("failure")
if failure is not None:
- print("Skipping entry %s:%s with bind failure: %s" %
- (entry.tag, entry.get("name"), failure))
+ print(("Skipping entry %s:%s with bind failure: %s" %
+ (entry.tag, entry.get("name"), failure)))
continue
entry.set('name',
os.path.join(setup.directory,
@@ -228,8 +228,8 @@ class Buildfile(InfoCmd):
try:
self.core.Bind(entry, self.core.build_metadata(setup.hostname))
except: # pylint: disable=W0702
- print("Failed to build entry %s for host %s" % (setup.filename,
- setup.hostname))
+ print(("Failed to build entry %s for host %s" % (setup.filename,
+ setup.hostname)))
raise
try:
setup.outfile.write(
@@ -238,7 +238,7 @@ class Buildfile(InfoCmd):
setup.outfile.write("\n")
except IOError:
err = sys.exc_info()[1]
- print("Failed to write %s: %s" % (setup.outfile.name, err))
+ print(("Failed to write %s: %s" % (setup.outfile.name, err)))
class BuildAllMixin(object):
@@ -265,7 +265,7 @@ class BuildAllMixin(object):
except OSError:
err = sys.exc_info()[1]
if err.errno != 17:
- print("Could not create %s: %s" % (setup.directory, err))
+ print(("Could not create %s: %s" % (setup.directory, err)))
return 1
clients = self.get_client_list(setup.hostname)
for client in clients:
@@ -324,16 +324,16 @@ class Buildbundle(InfoCmd):
if fname in bundler.entries:
bundle = bundler.entries[bundle]
if not bundle:
- print("No such bundle %s" % setup.bundle)
+ print(("No such bundle %s" % setup.bundle))
return 1
try:
metadata = self.core.build_metadata(setup.hostname)
- print(lxml.etree.tostring(bundle.XMLMatch(metadata),
+ print((lxml.etree.tostring(bundle.XMLMatch(metadata),
xml_declaration=False,
- pretty_print=True).decode('UTF-8'))
+ pretty_print=True).decode('UTF-8')))
except: # pylint: disable=W0702
- print("Failed to render bundle %s for host %s: %s" %
- (setup.bundle, setup.hostname, sys.exc_info()[1]))
+ print(("Failed to render bundle %s for host %s: %s" %
+ (setup.bundle, setup.hostname, sys.exc_info()[1])))
raise
@@ -358,12 +358,12 @@ class Automatch(InfoCmd):
if (not Bcfg2.Options.setup.force and
not Bcfg2.Options.setup.automatch and
pfile.xdata.get("automatch", "false").lower() != "true"):
- print("Automatch not enabled on %s" % setup.propertyfile)
+ print(("Automatch not enabled on %s" % setup.propertyfile))
else:
metadata = self.core.build_metadata(setup.hostname)
- print(lxml.etree.tostring(pfile.XMLMatch(metadata),
+ print((lxml.etree.tostring(pfile.XMLMatch(metadata),
xml_declaration=False,
- pretty_print=True).decode('UTF-8'))
+ pretty_print=True).decode('UTF-8')))
class ExpireCache(InfoCmd):
@@ -437,7 +437,7 @@ class Config(InfoCmd):
value = getattr(setup, option.dest)
if any(issubclass(a.__class__,
Bcfg2.Options.ComponentAction)
- for a in option.actions.values()):
+ for a in list(option.actions.values())):
if not setup.raw:
try:
if option.action.islist:
@@ -473,15 +473,15 @@ class Probes(InfoCmd):
if setup.pretty:
for probe in probes:
pname = probe.get("name")
- print("=" * (len(pname) + 2))
- print(" %s" % pname)
- print("=" * (len(pname) + 2))
+ print(("=" * (len(pname) + 2)))
+ print((" %s" % pname))
+ print(("=" * (len(pname) + 2)))
print("")
- print(probe.text)
+ print((probe.text))
print("")
else:
- print(lxml.etree.tostring(probes, xml_declaration=False,
- pretty_print=True).decode('UTF-8'))
+ print((lxml.etree.tostring(probes, xml_declaration=False,
+ pretty_print=True).decode('UTF-8')))
class Showentries(InfoCmd):
@@ -494,8 +494,8 @@ class Showentries(InfoCmd):
try:
metadata = self.core.build_metadata(setup.hostname)
except Bcfg2.Server.Plugin.MetadataConsistencyError:
- print("Unable to build metadata for %s: %s" % (setup.hostname,
- sys.exc_info()[1]))
+ print(("Unable to build metadata for %s: %s" % (setup.hostname,
+ sys.exc_info()[1])))
structures = self.core.GetStructures(metadata)
output = [('Entry Type', 'Name')]
etypes = None
@@ -540,39 +540,39 @@ class Showclient(InfoCmd):
try:
metadata = self.core.build_metadata(client)
except Bcfg2.Server.Plugin.MetadataConsistencyError:
- print("Could not build metadata for %s: %s" %
- (client, sys.exc_info()[1]))
+ print(("Could not build metadata for %s: %s" %
+ (client, sys.exc_info()[1])))
continue
fmt = "%-10s %s"
- print(fmt % ("Hostname:", metadata.hostname))
- print(fmt % ("Profile:", metadata.profile))
+ print((fmt % ("Hostname:", metadata.hostname)))
+ print((fmt % ("Profile:", metadata.profile)))
group_fmt = "%-10s %-30s %s"
header = False
for group in sorted(list(metadata.groups)):
category = ""
- for cat, grp in metadata.categories.items():
+ for cat, grp in list(metadata.categories.items()):
if grp == group:
category = "Category: %s" % cat
break
if not header:
- print(group_fmt % ("Groups:", group, category))
+ print((group_fmt % ("Groups:", group, category)))
header = True
else:
- print(group_fmt % ("", group, category))
+ print((group_fmt % ("", group, category)))
if metadata.bundles:
sorted_bundles = sorted(list(metadata.bundles))
- print(fmt % ("Bundles:", sorted_bundles[0]))
+ print((fmt % ("Bundles:", sorted_bundles[0])))
for bnd in sorted_bundles[1:]:
- print(fmt % ("", bnd))
+ print((fmt % ("", bnd)))
if metadata.connectors:
print("Connector data")
- print("=" * 80)
+ print(("=" * 80))
for conn in metadata.connectors:
if getattr(metadata, conn):
- print(fmt % (conn + ":", getattr(metadata, conn)))
- print("=" * 80)
+ print((fmt % (conn + ":", getattr(metadata, conn))))
+ print(("=" * 80))
class Mappings(InfoCmd):
@@ -625,10 +625,10 @@ class PackageResolve(InfoCmd):
pkgs._build_packages(metadata, indep, # pylint: disable=W0212
structures)
- print("%d new packages added" % len(indep.getchildren()))
+ print(("%d new packages added" % len(indep.getchildren())))
if len(indep.getchildren()):
- print(" %s" % "\n ".join(lxml.etree.tostring(p)
- for p in indep.getchildren()))
+ print((" %s" % "\n ".join(lxml.etree.tostring(p)
+ for p in indep.getchildren())))
class Packagesources(InfoCmd):
@@ -645,10 +645,10 @@ class Packagesources(InfoCmd):
try:
metadata = self.core.build_metadata(setup.hostname)
except Bcfg2.Server.Plugin.MetadataConsistencyError:
- print("Unable to build metadata for %s: %s" % (setup.hostname,
- sys.exc_info()[1]))
+ print(("Unable to build metadata for %s: %s" % (setup.hostname,
+ sys.exc_info()[1])))
return 1
- print(pkgs.get_collection(metadata).sourcelist())
+ print((pkgs.get_collection(metadata).sourcelist()))
class Query(InfoCmd):
@@ -677,7 +677,7 @@ class Query(InfoCmd):
elif setup.querybundles:
res = self.core.metadata.get_client_names_by_bundles(
setup.querybundles)
- print("\n".join(res))
+ print(("\n".join(res)))
class Quit(InfoCmd):
@@ -791,7 +791,7 @@ class ProfileTemplates(InfoCmd):
# print out per-file results
tmpltimes = []
- for tmpl, ptimes in times.items():
+ for tmpl, ptimes in list(times.items()):
try:
mean = float(sum(ptimes)) / len(ptimes)
except ZeroDivisionError:
@@ -801,10 +801,10 @@ class ProfileTemplates(InfoCmd):
std = self.stdev(ptimes)
if mean > 0.01 or median > 0.01 or std > 1 or setup.templates:
tmpltimes.append((tmpl, mean, median, std))
- print("%-50s %-9s %-11s %6s" %
- ("Template", "Mean Time", "Median Time", "σ"))
+ print(("%-50s %-9s %-11s %6s" %
+ ("Template", "Mean Time", "Median Time", "σ")))
for info in reversed(sorted(tmpltimes, key=operator.itemgetter(1))):
- print("%-50s %9.02f %11.02f %6.02f" % info)
+ print(("%-50s %9.02f %11.02f %6.02f" % info))
if HAS_PROFILE:
@@ -856,7 +856,7 @@ class CLI(cmd.Cmd, Bcfg2.Options.CommandRegistry):
Bcfg2.Options.CommandRegistry.__init__(self)
self.prompt = 'bcfg2-info> '
- self.register_commands(globals().values(), parent=InfoCmd)
+ self.register_commands(list(globals().values()), parent=InfoCmd)
parser = Bcfg2.Options.get_parser(
description="Inspect a running Bcfg2 server",
components=[self, InfoCore])
@@ -872,7 +872,7 @@ class CLI(cmd.Cmd, Bcfg2.Options.CommandRegistry):
print("Profiling functionality not available.")
self.core = InfoCore(self)
- for command in self.commands.values():
+ for command in list(self.commands.values()):
command.core = self.core
def run(self):
diff --git a/src/lib/Bcfg2/Server/Lint/Bundler.py b/src/lib/Bcfg2/Server/Lint/Bundler.py
index 7b024229b..7bf6f0baa 100644
--- a/src/lib/Bcfg2/Server/Lint/Bundler.py
+++ b/src/lib/Bcfg2/Server/Lint/Bundler.py
@@ -11,7 +11,7 @@ class Bundler(ServerPlugin):
def Run(self):
self.missing_bundles()
- for bundle in self.core.plugins['Bundler'].entries.values():
+ for bundle in list(self.core.plugins['Bundler'].entries.values()):
if self.HandlesFile(bundle.name):
self.bundle_names(bundle)
@@ -32,11 +32,11 @@ class Bundler(ServerPlugin):
ref_bundles = set([b.get("name")
for b in groupdata.findall("//Bundle")])
- for bundle in self.core.plugins['Bundler'].bundles.values():
+ for bundle in list(self.core.plugins['Bundler'].bundles.values()):
ref_bundles |= set([rb.get("name") for rb in
bundle.xdata.findall(".//RequiredBundle")])
- allbundles = self.core.plugins['Bundler'].bundles.keys()
+ allbundles = list(self.core.plugins['Bundler'].bundles.keys())
for bundle in ref_bundles:
if bundle not in allbundles:
self.LintError("bundle-not-found",
diff --git a/src/lib/Bcfg2/Server/Lint/Cfg.py b/src/lib/Bcfg2/Server/Lint/Cfg.py
index 13b04a6b8..e4eba2619 100644
--- a/src/lib/Bcfg2/Server/Lint/Cfg.py
+++ b/src/lib/Bcfg2/Server/Lint/Cfg.py
@@ -29,8 +29,8 @@ class Cfg(ServerPlugin):
""" Check that a single entryset doesn't have multiple
non-specific (i.e., 'all') handlers. """
cfg = self.core.plugins['Cfg']
- for eset in cfg.entries.values():
- alls = [e for e in eset.entries.values()
+ for eset in list(cfg.entries.values()):
+ alls = [e for e in list(eset.entries.values())
if (e.specific.all and
issubclass(e.__class__, CfgGenerator))]
if len(alls) > 1:
@@ -98,9 +98,9 @@ class Cfg(ServerPlugin):
# next, get a list of all files known to Cfg
cfg_files = set()
- for root, eset in cfg.entries.items():
+ for root, eset in list(cfg.entries.items()):
cfg_files.update(os.path.join(cfg.data, root.lstrip("/"), fname)
- for fname in eset.entries.keys())
+ for fname in list(eset.entries.keys()))
# finally, compare the two
unknown_files = all_files - cfg_files
diff --git a/src/lib/Bcfg2/Server/Lint/Comments.py b/src/lib/Bcfg2/Server/Lint/Comments.py
index fbe84de87..7061dee3f 100644
--- a/src/lib/Bcfg2/Server/Lint/Comments.py
+++ b/src/lib/Bcfg2/Server/Lint/Comments.py
@@ -180,7 +180,7 @@ class Comments(Bcfg2.Server.Lint.ServerPlugin):
def check_bundles(self):
""" Check bundle files for required comments. """
if 'Bundler' in self.core.plugins:
- for bundle in self.core.plugins['Bundler'].entries.values():
+ for bundle in list(self.core.plugins['Bundler'].entries.values()):
xdata = None
rtype = ""
try:
@@ -197,7 +197,7 @@ class Comments(Bcfg2.Server.Lint.ServerPlugin):
""" Check Properties files for required comments. """
if 'Properties' in self.core.plugins:
props = self.core.plugins['Properties']
- for propfile, pdata in props.entries.items():
+ for propfile, pdata in list(props.entries.items()):
if os.path.splitext(propfile)[1] == ".xml":
self.check_xml(pdata.name, pdata.xdata, 'properties')
@@ -243,8 +243,8 @@ class Comments(Bcfg2.Server.Lint.ServerPlugin):
""" Check Cfg files and ``info.xml`` files for required
comments. """
if 'Cfg' in self.core.plugins:
- for entryset in self.core.plugins['Cfg'].entries.values():
- for entry in entryset.entries.values():
+ for entryset in list(self.core.plugins['Cfg'].entries.values()):
+ for entry in list(entryset.entries.values()):
rtype = None
if isinstance(entry, CfgGenshiGenerator):
rtype = "genshi"
@@ -265,7 +265,7 @@ class Comments(Bcfg2.Server.Lint.ServerPlugin):
def check_probes(self):
""" Check Probes for required comments """
if 'Probes' in self.core.plugins:
- for probe in self.core.plugins['Probes'].probes.entries.values():
+ for probe in list(self.core.plugins['Probes'].probes.entries.values()):
self.check_plaintext(probe.name, probe.data, "probes")
def check_xml(self, filename, xdata, rtype):
@@ -319,21 +319,21 @@ class Comments(Bcfg2.Server.Lint.ServerPlugin):
for line in lines:
# we check for both '$<keyword>:' and '$<keyword>$' to see
# if the keyword just hasn't been expanded
- for (keyword, status) in found.items():
+ for (keyword, status) in list(found.items()):
if not status:
if '$%s:' % keyword in line:
found[keyword] = True
elif '$%s$' % keyword in line:
found[keyword] = None
- unexpanded = [keyword for (keyword, status) in found.items()
+ unexpanded = [keyword for (keyword, status) in list(found.items())
if status is None]
if unexpanded:
self.LintError("unexpanded-keywords",
"%s: Required keywords(s) found but not "
"expanded: %s" %
(filename, ", ".join(unexpanded)))
- missing = [keyword for (keyword, status) in found.items()
+ missing = [keyword for (keyword, status) in list(found.items())
if status is False]
if missing:
self.LintError("keywords-not-found",
@@ -345,11 +345,11 @@ class Comments(Bcfg2.Server.Lint.ServerPlugin):
found = dict((k, False) for k in self.required_comments(rtype))
for line in lines:
- for (comment, status) in found.items():
+ for (comment, status) in list(found.items()):
if not status:
found[comment] = comment in line
- missing = [comment for (comment, status) in found.items()
+ missing = [comment for (comment, status) in list(found.items())
if status is False]
if missing:
self.LintError("comments-not-found",
diff --git a/src/lib/Bcfg2/Server/Lint/Genshi.py b/src/lib/Bcfg2/Server/Lint/Genshi.py
index a2581e70b..fb12e4254 100644
--- a/src/lib/Bcfg2/Server/Lint/Genshi.py
+++ b/src/lib/Bcfg2/Server/Lint/Genshi.py
@@ -36,8 +36,8 @@ class Genshi(Bcfg2.Server.Lint.ServerPlugin):
def check_cfg(self):
""" Check genshi templates in Cfg for syntax errors. """
- for entryset in self.core.plugins['Cfg'].entries.values():
- for entry in entryset.entries.values():
+ for entryset in list(self.core.plugins['Cfg'].entries.values()):
+ for entry in list(entryset.entries.values()):
if (self.HandlesFile(entry.name) and
isinstance(entry, CfgGenshiGenerator) and
not entry.template):
@@ -47,7 +47,7 @@ class Genshi(Bcfg2.Server.Lint.ServerPlugin):
def check_bundler(self):
""" Check templates in Bundler for syntax errors. """
loader = TemplateLoader()
- for entry in self.core.plugins['Bundler'].entries.values():
+ for entry in list(self.core.plugins['Bundler'].entries.values()):
if (self.HandlesFile(entry.name) and
entry.template is not None):
self.check_template(loader, entry.name, cls=MarkupTemplate)
diff --git a/src/lib/Bcfg2/Server/Lint/GroupNames.py b/src/lib/Bcfg2/Server/Lint/GroupNames.py
index e28080300..3bfb4949f 100644
--- a/src/lib/Bcfg2/Server/Lint/GroupNames.py
+++ b/src/lib/Bcfg2/Server/Lint/GroupNames.py
@@ -34,7 +34,7 @@ class GroupNames(Bcfg2.Server.Lint.ServerPlugin):
def check_rules(self):
""" Check groups used in the Rules plugin for validity. """
- for rules in self.core.plugins['Rules'].entries.values():
+ for rules in list(self.core.plugins['Rules'].entries.values()):
if not self.HandlesFile(rules.name):
continue
xdata = rules.pnode.data
@@ -44,7 +44,7 @@ class GroupNames(Bcfg2.Server.Lint.ServerPlugin):
def check_bundles(self):
""" Check groups used in the Bundler plugin for validity. """
- for bundle in self.core.plugins['Bundler'].entries.values():
+ for bundle in list(self.core.plugins['Bundler'].entries.values()):
if self.HandlesFile(bundle.name) and bundle.template is None:
self.check_entries(bundle.xdata.xpath("//Group"),
bundle.name)
diff --git a/src/lib/Bcfg2/Server/Lint/InfoXML.py b/src/lib/Bcfg2/Server/Lint/InfoXML.py
index 950a86f01..cd21371e7 100644
--- a/src/lib/Bcfg2/Server/Lint/InfoXML.py
+++ b/src/lib/Bcfg2/Server/Lint/InfoXML.py
@@ -29,11 +29,11 @@ class InfoXML(Bcfg2.Server.Lint.ServerPlugin):
if 'Cfg' not in self.core.plugins:
return
- for filename, entryset in self.core.plugins['Cfg'].entries.items():
+ for filename, entryset in list(self.core.plugins['Cfg'].entries.items()):
infoxml_fname = os.path.join(entryset.path, "info.xml")
if self.HandlesFile(infoxml_fname):
found = False
- for entry in entryset.entries.values():
+ for entry in list(entryset.entries.values()):
if isinstance(entry, CfgInfoXML):
self.check_infoxml(infoxml_fname,
entry.infoxml.xdata)
diff --git a/src/lib/Bcfg2/Server/Lint/Jinja2.py b/src/lib/Bcfg2/Server/Lint/Jinja2.py
index 333249cc2..0b177d640 100644
--- a/src/lib/Bcfg2/Server/Lint/Jinja2.py
+++ b/src/lib/Bcfg2/Server/Lint/Jinja2.py
@@ -34,8 +34,8 @@ class Jinja2(Bcfg2.Server.Lint.ServerPlugin):
def check_cfg(self):
""" Check jinja2 templates in Cfg for syntax errors. """
- for entryset in self.core.plugins['Cfg'].entries.values():
- for entry in entryset.entries.values():
+ for entryset in list(self.core.plugins['Cfg'].entries.values()):
+ for entry in list(entryset.entries.values()):
if (self.HandlesFile(entry.name) and
isinstance(entry, CfgJinja2Generator)):
self.check_template(entry)
diff --git a/src/lib/Bcfg2/Server/Lint/MergeFiles.py b/src/lib/Bcfg2/Server/Lint/MergeFiles.py
index 3b89e507a..b1a0fa8ef 100644
--- a/src/lib/Bcfg2/Server/Lint/MergeFiles.py
+++ b/src/lib/Bcfg2/Server/Lint/MergeFiles.py
@@ -48,8 +48,8 @@ class MergeFiles(Bcfg2.Server.Lint.ServerPlugin):
if not hdlr.__specific__:
ignore.extend(hdlr.__basenames__)
- for filename, entryset in self.core.plugins['Cfg'].entries.items():
- candidates = dict([(f, e) for f, e in entryset.entries.items()
+ for filename, entryset in list(self.core.plugins['Cfg'].entries.items()):
+ candidates = dict([(f, e) for f, e in list(entryset.entries.items())
if (isinstance(e, CfgGenerator) and
is_string(e.data,
Bcfg2.Options.setup.encoding) and
diff --git a/src/lib/Bcfg2/Server/Lint/Metadata.py b/src/lib/Bcfg2/Server/Lint/Metadata.py
index e445892d1..3c1d49a45 100644
--- a/src/lib/Bcfg2/Server/Lint/Metadata.py
+++ b/src/lib/Bcfg2/Server/Lint/Metadata.py
@@ -131,7 +131,7 @@ class Metadata(ServerPlugin):
groups[grpname] = grp
else: # group has no options
groups[grpname] = grp
- for grpname, grps in duplicates.items():
+ for grpname, grps in list(duplicates.items()):
self.LintError("duplicate-group",
"Group %s is defined multiple times:\n%s" %
(grpname,
@@ -154,7 +154,7 @@ class Metadata(ServerPlugin):
entries[el.get("name")].append(self.RenderXML(el))
else:
entries[el.get("name")] = [self.RenderXML(el)]
- for ename, els in entries.items():
+ for ename, els in list(entries.items()):
if len(els) > 1:
self.LintError("duplicate-%s" % etype,
"%s %s is defined multiple times:\n%s" %
diff --git a/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py b/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py
index 56b4e7477..6d872bfa5 100644
--- a/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py
+++ b/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py
@@ -230,7 +230,7 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
if 'Rules' not in self.core.plugins:
return
- for rules in self.core.plugins['Rules'].entries.values():
+ for rules in list(self.core.plugins['Rules'].entries.values()):
xdata = rules.pnode.data
for path in xdata.xpath("//Path"):
self.check_entry(path,
@@ -243,7 +243,7 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
if 'Bundler' not in self.core.plugins:
return
- for bundle in self.core.plugins['Bundler'].entries.values():
+ for bundle in list(self.core.plugins['Bundler'].entries.values()):
if self.HandlesFile(bundle.name) and bundle.template is None:
for path in bundle.xdata.xpath(
"//*[substring(name(), 1, 5) = 'Bound']"):
@@ -327,7 +327,7 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
"Text content of %s %s in %s is malformed\n%s" %
(tag, name, filename, self.RenderXML(entry)))
- if not attrs.issuperset(required_attrs.keys()):
+ if not attrs.issuperset(list(required_attrs.keys())):
self.LintError(
"required-attrs-missing",
"The following required attribute(s) are missing for %s "
@@ -338,7 +338,7 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
set(required_attrs.keys()).difference(attrs)]),
self.RenderXML(entry)))
- for attr, fmt in required_attrs.items():
+ for attr, fmt in list(required_attrs.items()):
if fmt and attr in attrs and not fmt(entry.attrib[attr]):
self.LintError(
"required-attr-format",
diff --git a/src/lib/Bcfg2/Server/Lint/TemplateAbuse.py b/src/lib/Bcfg2/Server/Lint/TemplateAbuse.py
index a437c1318..8ca2ccaed 100644
--- a/src/lib/Bcfg2/Server/Lint/TemplateAbuse.py
+++ b/src/lib/Bcfg2/Server/Lint/TemplateAbuse.py
@@ -26,8 +26,8 @@ class TemplateAbuse(Bcfg2.Server.Lint.ServerPlugin):
def Run(self):
if 'Cfg' in self.core.plugins:
- for entryset in self.core.plugins['Cfg'].entries.values():
- for entry in entryset.entries.values():
+ for entryset in list(self.core.plugins['Cfg'].entries.values()):
+ for entry in list(entryset.entries.values()):
if (self.HandlesFile(entry.name) and
any(isinstance(entry, t) for t in self.templates)):
self.check_template(entryset, entry)
@@ -60,7 +60,7 @@ class TemplateAbuse(Bcfg2.Server.Lint.ServerPlugin):
return
# finally, check for executable permissions in info.xml
- for entry in entryset.entries.values():
+ for entry in list(entryset.entries.values()):
if isinstance(entry, CfgInfoXML):
for pinfo in entry.infoxml.xdata.xpath("//FileInfo/Info"):
try:
diff --git a/src/lib/Bcfg2/Server/Lint/TemplateHelper.py b/src/lib/Bcfg2/Server/Lint/TemplateHelper.py
index 98faa269d..403437bc0 100644
--- a/src/lib/Bcfg2/Server/Lint/TemplateHelper.py
+++ b/src/lib/Bcfg2/Server/Lint/TemplateHelper.py
@@ -31,7 +31,7 @@ class TemplateHelper(ServerPlugin):
self.reserved_defaults = dummy.reserved_defaults
def Run(self):
- for helper in self.core.plugins['TemplateHelper'].entries.values():
+ for helper in list(self.core.plugins['TemplateHelper'].entries.values()):
if self.HandlesFile(helper.name):
self.check_helper(helper.name)
diff --git a/src/lib/Bcfg2/Server/Lint/Validate.py b/src/lib/Bcfg2/Server/Lint/Validate.py
index 146f18b0c..7bccce87c 100644
--- a/src/lib/Bcfg2/Server/Lint/Validate.py
+++ b/src/lib/Bcfg2/Server/Lint/Validate.py
@@ -71,7 +71,7 @@ class Validate(Bcfg2.Server.Lint.ServerlessPlugin):
def Run(self):
- for path, schemaname in self.filesets.items():
+ for path, schemaname in list(self.filesets.items()):
try:
filelist = self.filelists[path]
except KeyError:
@@ -211,7 +211,7 @@ class Validate(Bcfg2.Server.Lint.ServerlessPlugin):
values are lists of the full paths to all files in the Bcfg2
repository (or given with ``bcfg2-lint --stdin``) that match
the glob."""
- for path in self.filesets.keys():
+ for path in list(self.filesets.keys()):
if '/**/' in path:
if self.files is not None:
self.filelists[path] = self.list_matching_files(path)
diff --git a/src/lib/Bcfg2/Server/Lint/__init__.py b/src/lib/Bcfg2/Server/Lint/__init__.py
index 66c8180f4..23ec65a58 100644
--- a/src/lib/Bcfg2/Server/Lint/__init__.py
+++ b/src/lib/Bcfg2/Server/Lint/__init__.py
@@ -188,7 +188,7 @@ class ErrorHandler(object):
#: A dict of registered errors
self.errortypes = dict()
if errors is not None:
- self.RegisterErrors(dict(errors.items()))
+ self.RegisterErrors(dict(list(errors.items())))
def RegisterErrors(self, errors):
""" Register a dict of errors that a plugin may raise. The
@@ -199,7 +199,7 @@ class ErrorHandler(object):
:param errors: The error dict
:type errors: dict
"""
- for err, action in errors.items():
+ for err, action in list(errors.items()):
if err not in self.errortypes:
if "warn" in action:
self.errortypes[err] = self.warn
@@ -400,9 +400,9 @@ class CLI(object):
for plugin in self.serverplugins + self.serverlessplugins:
self.errorhandler.RegisterErrors(getattr(plugin, 'Errors')())
- print("%-35s %-35s" % ("Error name", "Handler"))
- for err, handler in self.errorhandler.errortypes.items():
- print("%-35s %-35s" % (err, handler.__name__))
+ print(("%-35s %-35s" % ("Error name", "Handler")))
+ for err, handler in list(self.errorhandler.errortypes.items()):
+ print(("%-35s %-35s" % (err, handler.__name__)))
return 0
if not self.serverplugins and not self.serverlessplugins:
@@ -429,8 +429,8 @@ class CLI(object):
if (self.errorhandler.errors or
self.errorhandler.warnings or
Bcfg2.Options.setup.verbose):
- print("%d errors" % self.errorhandler.errors)
- print("%d warnings" % self.errorhandler.warnings)
+ print(("%d errors" % self.errorhandler.errors))
+ print(("%d warnings" % self.errorhandler.warnings))
if self.errorhandler.errors:
return 2
diff --git a/src/lib/Bcfg2/Server/MultiprocessingCore.py b/src/lib/Bcfg2/Server/MultiprocessingCore.py
index 4bf3e4a27..d02b5f852 100644
--- a/src/lib/Bcfg2/Server/MultiprocessingCore.py
+++ b/src/lib/Bcfg2/Server/MultiprocessingCore.py
@@ -53,7 +53,7 @@ class RPCQueue(Bcfg2.Server.Plugin.Debuggable):
def publish(self, method, args=None, kwargs=None):
""" Publish an RPC call to the queue for consumption by all
subscribers. """
- for queue in self._queues.values():
+ for queue in list(self._queues.values()):
queue.put((None, (method, args or [], kwargs or dict())))
def rpc(self, dest, method, args=None, kwargs=None):
@@ -84,7 +84,7 @@ class RPCQueue(Bcfg2.Server.Plugin.Debuggable):
""" Close queues and connections. """
self._terminate.set()
self.logger.debug("Closing RPC queues")
- for name, queue in self._queues.items():
+ for name, queue in list(self._queues.items()):
self.logger.debug("Closing RPC queue to %s" % name)
queue.close()
@@ -258,7 +258,7 @@ class ChildCore(Core):
def _get_rmi(self):
rmi = dict()
- for pname, pinst in self._get_rmi_objects().items():
+ for pname, pinst in list(self._get_rmi_objects().items()):
for crmi in pinst.__child_rmi__:
if isinstance(crmi, tuple):
mname = crmi[1]
@@ -394,7 +394,7 @@ class MultiprocessingCore(BuiltinCore):
def _get_rmi(self):
child_rmi = dict()
- for pname, pinst in self._get_rmi_objects().items():
+ for pname, pinst in list(self._get_rmi_objects().items()):
for crmi in pinst.__child_rmi__:
if isinstance(crmi, tuple):
parentname, childname = crmi
@@ -404,7 +404,7 @@ class MultiprocessingCore(BuiltinCore):
"%s.%s" % (pname, childname)
rmi = BuiltinCore._get_rmi(self)
- for method in rmi.keys():
+ for method in list(rmi.keys()):
if method in child_rmi:
rmi[method] = self._child_rmi_wrapper(method,
rmi[method],
@@ -439,7 +439,7 @@ class MultiprocessingCore(BuiltinCore):
@exposed
def GetConfig(self, address):
client = self.resolve_client(address)[0]
- childname = self.children.next()
+ childname = next(self.children)
self.logger.debug("Building configuration for %s on %s" % (client,
childname))
return self.rpc_q.rpc(childname, "GetConfig", args=[client])
@@ -455,7 +455,7 @@ class MultiprocessingCore(BuiltinCore):
"Child-1", to uniquely identify this set of statistics),
and aggregates it with the set of running totals that are
kept from all cores. """
- for statname, vals in newstats.items():
+ for statname, vals in list(newstats.items()):
if statname.startswith("ChildCore:"):
statname = statname[5:]
if prefix:
diff --git a/src/lib/Bcfg2/Server/Plugin/base.py b/src/lib/Bcfg2/Server/Plugin/base.py
index 549f7b543..747d9992a 100644
--- a/src/lib/Bcfg2/Server/Plugin/base.py
+++ b/src/lib/Bcfg2/Server/Plugin/base.py
@@ -95,7 +95,7 @@ class Plugin(Debuggable):
def set_debug(self, debug):
self.debug_log("%s: debug = %s" % (self.name, self.debug_flag),
flag=True)
- for entry in self.Entries.values():
+ for entry in list(self.Entries.values()):
if isinstance(entry, Debuggable):
entry.set_debug(debug)
return Debuggable.set_debug(self, debug)
diff --git a/src/lib/Bcfg2/Server/Plugin/helpers.py b/src/lib/Bcfg2/Server/Plugin/helpers.py
index ca0fe8188..45b8101dc 100644
--- a/src/lib/Bcfg2/Server/Plugin/helpers.py
+++ b/src/lib/Bcfg2/Server/Plugin/helpers.py
@@ -145,7 +145,7 @@ def _get_template_data(func_name, args, default=_sentinel):
source = dict()
for prov in providers:
pdata = getattr(prov, func_name)(*args)
- for key, val in pdata.items():
+ for key, val in list(pdata.items()):
if key not in rv:
rv[key] = val
source[key] = prov
@@ -348,7 +348,7 @@ class DirectoryBacked(Debuggable):
self.add_directory_monitor('')
def set_debug(self, debug):
- for entry in self.entries.values():
+ for entry in list(self.entries.values()):
if isinstance(entry, Debuggable):
entry.set_debug(debug)
return Debuggable.set_debug(self, debug)
@@ -379,7 +379,7 @@ class DirectoryBacked(Debuggable):
:returns: None
"""
dirpathname = os.path.join(self.data, relative)
- if relative not in self.handles.values():
+ if relative not in list(self.handles.values()):
if not os.path.isdir(dirpathname):
self.logger.error("%s is not a directory" % dirpathname)
return
@@ -801,7 +801,7 @@ class StructFile(XMLFileBacked):
""" recursive helper for
:func:`Bcfg2.Server.Plugin.helpers.StructFile.Match` """
if self._include_element(item, metadata, *args):
- if item.tag in self._include_tests.keys():
+ if item.tag in list(self._include_tests.keys()):
rv = []
if self._include_element(item, metadata, *args):
for child in item.iterchildren():
@@ -854,7 +854,7 @@ class StructFile(XMLFileBacked):
""" recursive helper for
:func:`Bcfg2.Server.Plugin.helpers.StructFile.XMLMatch` """
if self._include_element(item, metadata, *args):
- if item.tag in self._include_tests.keys():
+ if item.tag in list(self._include_tests.keys()):
for child in item.iterchildren():
item.remove(child)
item.getparent().append(child)
@@ -945,7 +945,7 @@ class InfoXML(StructFile):
elif len(fileinfo) > 1:
self.logger.warning("Multiple file metadata found in %s for %s" %
(self.name, entry.get('name')))
- for attr, val in fileinfo[0].attrib.items():
+ for attr, val in list(fileinfo[0].attrib.items()):
entry.set(attr, val)
@@ -1003,7 +1003,7 @@ class PrioDir(Plugin, Generator, XMLDirectoryBacked):
def HandleEvent(self, event):
XMLDirectoryBacked.HandleEvent(self, event)
self.Entries = {}
- for src in self.entries.values():
+ for src in list(self.entries.values()):
for child in src.xdata.iterchildren():
if child.tag in ['Group', 'Client']:
continue
@@ -1040,7 +1040,7 @@ class PrioDir(Plugin, Generator, XMLDirectoryBacked):
:returns: None
"""
matching = []
- for src in self.entries.values():
+ for src in list(self.entries.values()):
for candidate in src.XMLMatch(metadata).xpath("//%s" % entry.tag):
if self._matches(entry, metadata, candidate):
matching.append((src, candidate))
@@ -1297,7 +1297,7 @@ class EntrySet(Debuggable):
def set_debug(self, debug):
rv = Debuggable.set_debug(self, debug)
- for entry in self.entries.values():
+ for entry in list(self.entries.values()):
entry.set_debug(debug)
return rv
@@ -1634,7 +1634,7 @@ class GroupSpool(Plugin, Generator):
return self.handles[event.requestID].rstrip("/")
def set_debug(self, debug):
- for entry in self.entries.values():
+ for entry in list(self.entries.values()):
if hasattr(entry, "set_debug"):
entry.set_debug(debug)
return Plugin.set_debug(self, debug)
@@ -1738,14 +1738,14 @@ class CallableDict(MutableMapping):
return len(self._getters)
def __iter__(self):
- return iter(self._getters.keys())
+ return iter(list(self._getters.keys()))
def _current_data(self):
""" Return a dict with the current available static data
and ``unknown`` for all callable values.
"""
rv = dict()
- for key in self._getters.keys():
+ for key in list(self._getters.keys()):
if callable(self._getters[key]):
rv[key] = 'unknown'
else:
@@ -1777,7 +1777,7 @@ class OnDemandDict(CallableDict):
def _current_data(self):
rv = super(OnDemandDict, self)._current_data()
- for (key, value) in rv.items():
+ for (key, value) in list(rv.items()):
if key in self._values:
rv[key] = value
return rv
diff --git a/src/lib/Bcfg2/Server/Plugins/AWSTags.py b/src/lib/Bcfg2/Server/Plugins/AWSTags.py
index 556805bde..d823a3986 100644
--- a/src/lib/Bcfg2/Server/Plugins/AWSTags.py
+++ b/src/lib/Bcfg2/Server/Plugins/AWSTags.py
@@ -26,7 +26,7 @@ class AWSTagPattern(object):
def get_groups(self, tags):
""" Get groups that apply to the given tag set """
- for key, value in tags.items():
+ for key, value in list(tags.items()):
name_match = self.name.search(key)
if name_match:
if self.value is not None:
diff --git a/src/lib/Bcfg2/Server/Plugins/Bundler.py b/src/lib/Bcfg2/Server/Plugins/Bundler.py
index 4f5a79465..bbdf62866 100644
--- a/src/lib/Bcfg2/Server/Plugins/Bundler.py
+++ b/src/lib/Bcfg2/Server/Plugins/Bundler.py
@@ -58,7 +58,7 @@ class Bundler(Plugin,
def HandleEvent(self, event):
XMLDirectoryBacked.HandleEvent(self, event)
self.bundles = dict([(b.bundle_name, b)
- for b in self.entries.values()])
+ for b in list(self.entries.values())])
def validate_structures(self, metadata, structures):
""" Translate <Path glob='...'/> entries into <Path name='...'/>
@@ -66,7 +66,7 @@ class Bundler(Plugin,
for struct in structures:
for pathglob in struct.xpath("//Path[@glob]"):
for plugin in self.core.plugins_by_type(Generator):
- for match in fnmatch.filter(plugin.Entries['Path'].keys(),
+ for match in fnmatch.filter(list(plugin.Entries['Path'].keys()),
pathglob.get("glob")):
lxml.etree.SubElement(pathglob.getparent(),
"Path", name=match)
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py
index 84309b5dd..2a452f345 100644
--- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py
@@ -50,9 +50,9 @@ class CfgCheetahGenerator(CfgGenerator):
def get_data(self, entry, metadata):
template = Template(self.data.decode(Bcfg2.Options.setup.encoding),
compilerSettings=self.settings)
- for key, val in get_template_data(
+ for key, val in list(get_template_data(
entry, metadata, self.name,
- default=DefaultCheetahDataProvider()).items():
+ default=DefaultCheetahDataProvider()).items()):
setattr(template, key, val)
return template.respond()
get_data.__doc__ = CfgGenerator.get_data.__doc__
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
index 44d980967..e4013a347 100644
--- a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
@@ -10,7 +10,7 @@ import Bcfg2.Options
import Bcfg2.Server.Plugin
from Bcfg2.Server.Plugin import PluginExecutionError
# pylint: disable=W0622
-from Bcfg2.Compat import u_str, unicode, b64encode, any, walk_packages
+from Bcfg2.Compat import u_str, str, b64encode, any, walk_packages
# pylint: enable=W0622
try:
@@ -511,7 +511,7 @@ class CfgDefaultInfo(CfgInfo):
__init__.__doc__ = CfgInfo.__init__.__doc__.split(".. -----")[0]
def bind_info_to_entry(self, entry, _):
- for key, value in Bcfg2.Server.Plugin.default_path_metadata().items():
+ for key, value in list(Bcfg2.Server.Plugin.default_path_metadata().items()):
entry.attrib[key] = value
bind_info_to_entry.__doc__ = CfgInfo.bind_info_to_entry.__doc__
@@ -527,7 +527,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
def set_debug(self, debug):
rv = Bcfg2.Server.Plugin.EntrySet.set_debug(self, debug)
- for entry in self.entries.values():
+ for entry in list(self.entries.values()):
entry.set_debug(debug)
return rv
@@ -648,7 +648,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
data = b64encode(data)
else:
try:
- if not isinstance(data, unicode):
+ if not isinstance(data, str):
if not isinstance(data, str):
data = data.decode('utf-8')
data = u_str(data, Bcfg2.Options.setup.encoding)
@@ -688,7 +688,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
:returns: list of Cfg handler classes
"""
rv = []
- for ent in self.entries.values():
+ for ent in list(self.entries.values()):
if (isinstance(ent, handler_type) and
(not ent.__specific__ or ent.specific.matches(metadata))):
rv.append(ent)
@@ -786,7 +786,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
verifiers_by_class[cls] = [verifier]
else:
verifiers_by_class[cls].append(verifier)
- for verifiers in verifiers_by_class.values():
+ for verifiers in list(verifiers_by_class.values()):
verifier = self.best_matching(metadata, verifiers)
verifier.verify_entry(entry, metadata, data)
diff --git a/src/lib/Bcfg2/Server/Plugins/Deps.py b/src/lib/Bcfg2/Server/Plugins/Deps.py
index 1872e68af..7288698db 100644
--- a/src/lib/Bcfg2/Server/Plugins/Deps.py
+++ b/src/lib/Bcfg2/Server/Plugins/Deps.py
@@ -65,7 +65,7 @@ class Deps(Bcfg2.Server.Plugin.PrioDir,
# tuples of (PriorityStructFile, element) for each
# matching element and the structfile that contains it
matching = []
- for deps in self.entries.values():
+ for deps in list(self.entries.values()):
el = deps.find("/%s[name='%s']" % (entry.tag,
entry.get("name")))
if el:
diff --git a/src/lib/Bcfg2/Server/Plugins/Ldap.py b/src/lib/Bcfg2/Server/Plugins/Ldap.py
index 770419ba5..cb82d962e 100644
--- a/src/lib/Bcfg2/Server/Plugins/Ldap.py
+++ b/src/lib/Bcfg2/Server/Plugins/Ldap.py
@@ -210,7 +210,7 @@ class LdapConnection(Debuggable):
self.conn = ldap.initialize(self.get_uri())
if self.options is not None:
- for (option, value) in self.options.items():
+ for (option, value) in list(self.options.items()):
self.conn.set_option(option, value)
if self.binddn is not None and self.bindpw is not None:
diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py
index b912d3725..bdefd4b45 100644
--- a/src/lib/Bcfg2/Server/Plugins/Metadata.py
+++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py
@@ -959,7 +959,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
def HandleEvent(self, event):
"""Handle update events for data files."""
- for handles, event_handler in self.handlers.items():
+ for handles, event_handler in list(self.handlers.items()):
if handles(event):
# clear the entire cache when we get an event for any
# metadata file
@@ -968,7 +968,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
# clear out the list of category suppressions that
# have been warned about, since this may change when
# clients.xml or groups.xml changes.
- for group in self.groups.values():
+ for group in list(self.groups.values()):
group.warned = []
event_handler(event)
@@ -1120,7 +1120,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
self.groups[grpname].category):
categories[self.groups[grpname].category] = grpname
groups.update(newgroups)
- for grpname, predicates in self.negated_groups.items():
+ for grpname, predicates in list(self.negated_groups.items()):
if grpname not in groups:
continue
if any(p(client, groups, categories) for p in predicates):
@@ -1289,16 +1289,16 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
def get_all_group_names(self):
""" return a list of all group names """
all_groups = set()
- all_groups.update(self.groups.keys())
- all_groups.update(self.group_membership.keys())
- all_groups.update(self.negated_groups.keys())
- for grp in self.clientgroups.values():
+ all_groups.update(list(self.groups.keys()))
+ all_groups.update(list(self.group_membership.keys()))
+ all_groups.update(list(self.negated_groups.keys()))
+ for grp in list(self.clientgroups.values()):
all_groups.update(grp)
return all_groups
def get_all_groups_in_category(self, category):
""" return a list of names of groups in the given category """
- return set([g.name for g in self.groups.values()
+ return set([g.name for g in list(self.groups.values())
if g.category == category])
def get_client_names_by_profiles(self, profiles):
diff --git a/src/lib/Bcfg2/Server/Plugins/POSIXCompat.py b/src/lib/Bcfg2/Server/Plugins/POSIXCompat.py
index cf53c5866..1cd5e059e 100644
--- a/src/lib/Bcfg2/Server/Plugins/POSIXCompat.py
+++ b/src/lib/Bcfg2/Server/Plugins/POSIXCompat.py
@@ -24,5 +24,5 @@ class POSIXCompat(Bcfg2.Server.Plugin.Plugin,
for goal in goals:
for entry in goal.getchildren():
- if entry.tag == 'Path' and 'mode' in entry.keys():
+ if entry.tag == 'Path' and 'mode' in list(entry.keys()):
entry.set('perms', entry.get('mode'))
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Pac.py b/src/lib/Bcfg2/Server/Plugins/Packages/Pac.py
index e3432c934..9d019b46a 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Pac.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Pac.py
@@ -160,7 +160,7 @@ class PacSource(Source):
pkg = parse_db_file(tar.extractfile(tarinfo))
packages[prefix].update(pkg)
- for pkg in packages.values():
+ for pkg in list(packages.values()):
pkgname = pkg['%NAME%'][0]
self.pkgnames.add(pkgname)
bdeps[barch][pkgname] = []
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Pkgng.py b/src/lib/Bcfg2/Server/Plugins/Packages/Pkgng.py
index 5248ad896..230be2ccd 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Pkgng.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Pkgng.py
@@ -87,10 +87,10 @@ class PkgngSource(Source):
self.logger.error("Packages: Failed to read file %s" % fname)
raise
for line in packagesite.readlines():
- pkg = json.loads(unicode(line, errors='ignore'))
+ pkg = json.loads(str(line, errors='ignore'))
pkgname = pkg['name']
self.pkgnames.add(pkgname)
if 'deps' in pkg:
- bdeps[barch][pkgname] = pkg['deps'].keys()
+ bdeps[barch][pkgname] = list(pkg['deps'].keys())
self.process_files(bdeps, dict())
read_files.__doc__ = Source.read_files.__doc__
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Source.py b/src/lib/Bcfg2/Server/Plugins/Packages/Source.py
index 574dbd851..d6529eb20 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Source.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Source.py
@@ -310,7 +310,7 @@ class Source(Debuggable): # pylint: disable=R0902
opts = xsource.findall("Options")
for el in opts:
repoopts = dict([(k, v)
- for k, v in el.attrib.items()
+ for k, v in list(el.attrib.items())
if k != "clientonly" and k != "serveronly"])
if el.get("clientonly", "false").lower() == "false":
self.server_options.update(repoopts)
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
index acb11f1ab..6732f4179 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
@@ -405,7 +405,7 @@ class YumCollection(Collection):
mainopts['debuglevel'] = "2"
try:
- for opt, val in Bcfg2.Options.setup.yum_options.items():
+ for opt, val in list(Bcfg2.Options.setup.yum_options.items()):
if opt not in self.option_blacklist:
mainopts[opt] = val
except ConfigParser.NoSectionError:
@@ -486,7 +486,7 @@ class YumCollection(Collection):
opts = source.server_options
else:
opts = source.client_options
- for opt, val in opts.items():
+ for opt, val in list(opts.items()):
config.set(reponame, opt, val)
if raw:
@@ -805,7 +805,7 @@ class YumCollection(Collection):
packages[pkg[0]].append(pkg)
except KeyError:
packages[pkg[0]] = [pkg]
- for name, instances in packages.items():
+ for name, instances in list(packages.items()):
pkgattrs = dict(type=self.ptype,
origin='Packages',
name=name)
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/YumHelper.py b/src/lib/Bcfg2/Server/Plugins/Packages/YumHelper.py
index 89cc23090..93e8092b4 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/YumHelper.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/YumHelper.py
@@ -290,16 +290,16 @@ class HelperSubcommand(Bcfg2.Options.Subcommand):
except ValueError:
self.logger.error("Error decoding JSON input: %s" %
sys.exc_info()[1])
- print(json.dumps(self.fallback))
+ print((json.dumps(self.fallback)))
return 2
try:
- print(json.dumps(self._run(setup, data)))
+ print((json.dumps(self._run(setup, data))))
except: # pylint: disable=W0702
self.logger.error("Unexpected error running %s: %s" %
(self.__class__.__name__.lower(),
sys.exc_info()[1]), exc_info=1)
- print(json.dumps(self.fallback))
+ print((json.dumps(self.fallback)))
return 2
return 0
@@ -388,7 +388,7 @@ class CLI(Bcfg2.Options.CommandRegistry):
def __init__(self):
Bcfg2.Options.CommandRegistry.__init__(self)
- self.register_commands(globals().values(), parent=HelperSubcommand)
+ self.register_commands(list(globals().values()), parent=HelperSubcommand)
parser = Bcfg2.Options.get_parser("Bcfg2 yum helper",
components=[self])
parser.add_options(self.subcommand_options)
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
index 1a9673891..eb8322ad6 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
@@ -166,7 +166,7 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
def set_debug(self, debug):
rv = Bcfg2.Server.Plugin.Plugin.set_debug(self, debug)
self.sources.set_debug(debug)
- for collection in self.collections.values():
+ for collection in list(self.collections.values()):
collection.set_debug(debug)
return rv
set_debug.__doc__ = Bcfg2.Server.Plugin.Plugin.set_debug.__doc__
@@ -366,7 +366,7 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
gkey = hash(tuple(groups))
if gkey not in gcache:
gcache[gkey] = collection.get_groups(groups)
- for pkgs in gcache[gkey].values():
+ for pkgs in list(gcache[gkey].values()):
base.update(pkgs)
# essential pkgs are those marked as such by the distribution
diff --git a/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py b/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py
index 7c6ab0ed7..436fdbcec 100644
--- a/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py
+++ b/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py
@@ -20,7 +20,7 @@ class FuzzyDict(dict):
if mdata:
return dict.__getitem__(self, mdata.groupdict()['name'])
else:
- print("got non-string key %s" % str(key))
+ print(("got non-string key %s" % str(key)))
return dict.__getitem__(self, key)
def __contains__(self, key):
@@ -29,7 +29,7 @@ class FuzzyDict(dict):
if mdata:
return dict.__contains__(self, mdata.groupdict()['name'])
else:
- print("got non-string key %s" % str(key))
+ print(("got non-string key %s" % str(key)))
return dict.__contains__(self, key)
def get(self, key, default=None):
@@ -66,7 +66,7 @@ class PNode(object):
pdict['Package'] = set()
for child in data.getchildren():
attrs = set(data.attrib.keys()).difference(
- child.attrib.keys() + ['name'])
+ list(child.attrib.keys()) + ['name'])
for attr in attrs:
try:
child.set(attr, data.get(attr))
@@ -284,7 +284,7 @@ class Pkgmgr(Bcfg2.Server.Plugin.PrioDir):
def HandlesEntry(self, entry, metadata):
return (
entry.tag == 'Package' and
- entry.get('name').split(':')[0] in self.Entries['Package'].keys())
+ entry.get('name').split(':')[0] in list(self.Entries['Package'].keys()))
def HandleEntry(self, entry, metadata):
self.BindEntry(entry, metadata)
diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py
index 270bfa62d..1d9603798 100644
--- a/src/lib/Bcfg2/Server/Plugins/Probes.py
+++ b/src/lib/Bcfg2/Server/Plugins/Probes.py
@@ -10,7 +10,7 @@ import lxml.etree
import Bcfg2.Server
import Bcfg2.Server.Cache
import Bcfg2.Server.Plugin
-from Bcfg2.Compat import unicode, any # pylint: disable=W0622
+from Bcfg2.Compat import str, any # pylint: disable=W0622
import Bcfg2.Server.FileMonitor
from Bcfg2.Logger import Debuggable
from Bcfg2.Server.Statistics import track_statistics
@@ -178,7 +178,7 @@ class DBProbeStore(ProbeStore, Bcfg2.Server.Plugin.DatabaseBacked):
Bcfg2.Server.Cache.expire("Probes", "probedata", hostname)
self._datacache[hostname] = ClientProbeDataSet()
expire_metadata = False
- for probe, pdata in data.items():
+ for probe, pdata in list(data.items()):
self._datacache[hostname][probe] = pdata
try:
record, created = ProbesDataModel.objects.get_or_create(
@@ -196,7 +196,7 @@ class DBProbeStore(ProbeStore, Bcfg2.Server.Plugin.DatabaseBacked):
record.save()
expire_metadata = True
qset = ProbesDataModel.objects.filter(
- hostname=hostname).exclude(probe__in=data.keys())
+ hostname=hostname).exclude(probe__in=list(data.keys()))
if len(qset):
qset.delete()
expire_metadata = True
@@ -283,7 +283,7 @@ class XMLProbeStore(ProbeStore):
Bcfg2.Server.Cache.expire("Probes", "probedata", hostname)
self._datacache[hostname] = ClientProbeDataSet()
expire_metadata = False
- for probe, pdata in data.items():
+ for probe, pdata in list(data.items()):
olddata = self._datacache[hostname].get(probe, ProbeData(''))
self._datacache[hostname][probe] = pdata
expire_metadata |= olddata != data
@@ -308,7 +308,7 @@ class ProbeData(str): # pylint: disable=E0012,R0924
ProbeData objects as XML, JSON, or YAML data """
def __new__(cls, data):
# prevent double encoding utf-8 in python3
- if isinstance(data, unicode) and not isinstance(data, str):
+ if isinstance(data, str) and not isinstance(data, str):
return str.__new__(cls, data.encode('utf-8'))
else:
return str.__new__(cls, data)
diff --git a/src/lib/Bcfg2/Server/Plugins/Properties.py b/src/lib/Bcfg2/Server/Plugins/Properties.py
index e6549b714..2ea383249 100644
--- a/src/lib/Bcfg2/Server/Plugins/Properties.py
+++ b/src/lib/Bcfg2/Server/Plugins/Properties.py
@@ -288,7 +288,7 @@ class Properties(Bcfg2.Server.Plugin.Plugin,
def get_additional_data(self, metadata):
rv = dict()
- for fname, pfile in self.entries.items():
+ for fname, pfile in list(self.entries.items()):
rv[fname] = pfile.get_additional_data(metadata)
return rv
get_additional_data.__doc__ = \
diff --git a/src/lib/Bcfg2/Server/Plugins/PuppetENC.py b/src/lib/Bcfg2/Server/Plugins/PuppetENC.py
index e2d8a058f..c5795c69b 100644
--- a/src/lib/Bcfg2/Server/Plugins/PuppetENC.py
+++ b/src/lib/Bcfg2/Server/Plugins/PuppetENC.py
@@ -41,7 +41,7 @@ class PuppetENC(Bcfg2.Server.Plugin.Plugin,
def _run_encs(self, metadata):
""" Run all Puppet ENCs """
cache = dict(groups=[], params=dict())
- for enc in self.entries.keys():
+ for enc in list(self.entries.keys()):
epath = os.path.join(self.data, enc)
self.debug_log("PuppetENC: Running ENC %s for %s" %
(enc, metadata.hostname))
@@ -73,8 +73,8 @@ class PuppetENC(Bcfg2.Server.Plugin.Plugin,
cache['groups'].extend(groups)
else:
self.debug_log("ENC %s adding groups to %s: %s" %
- (enc, metadata.hostname, groups.keys()))
- for group, params in groups.items():
+ (enc, metadata.hostname, list(groups.keys())))
+ for group, params in list(groups.items()):
cache['groups'].append(group)
if params:
cache['params'].update(params)
diff --git a/src/lib/Bcfg2/Server/Plugins/Rules.py b/src/lib/Bcfg2/Server/Plugins/Rules.py
index cf659251c..776a905ca 100644
--- a/src/lib/Bcfg2/Server/Plugins/Rules.py
+++ b/src/lib/Bcfg2/Server/Plugins/Rules.py
@@ -29,7 +29,7 @@ class Rules(Bcfg2.Server.Plugin.PrioDir):
self._regex_cache = dict()
def HandlesEntry(self, entry, metadata):
- for src in self.entries.values():
+ for src in list(self.entries.values()):
for candidate in src.XMLMatch(metadata).xpath("//%s" % entry.tag):
if self._matches(entry, metadata, candidate):
return True
diff --git a/src/lib/Bcfg2/Server/Plugins/SSHbase.py b/src/lib/Bcfg2/Server/Plugins/SSHbase.py
index 08acc4d8d..ecdb6d9ed 100644
--- a/src/lib/Bcfg2/Server/Plugins/SSHbase.py
+++ b/src/lib/Bcfg2/Server/Plugins/SSHbase.py
@@ -226,7 +226,7 @@ class SSHbase(Bcfg2.Server.Plugin.Plugin,
if pubk.endswith('.pub')]
pubkeys.sort()
for pubkey in pubkeys:
- for entry in sorted(self.entries[pubkey].entries.values(),
+ for entry in sorted(list(self.entries[pubkey].entries.values()),
key=lambda e: (e.specific.hostname or
e.specific.group)):
specific = entry.specific
@@ -421,9 +421,9 @@ class SSHbase(Bcfg2.Server.Plugin.Plugin,
self.entries[entry.get('name')].bind_entry(entry, metadata)
is_bound = True
except Bcfg2.Server.Plugin.PluginExecutionError:
- print("Failed to bind %s: %s") % (
+ print(("Failed to bind %s: %s") % (
lxml.etree.tostring(entry),
- sys.exc_info()[1])
+ sys.exc_info()[1]))
def GenerateHostKeyPair(self, client, filename):
"""Generate new host key pair for client."""
@@ -497,7 +497,7 @@ class SSHbase(Bcfg2.Server.Plugin.Plugin,
try:
open(filename, 'w').write(entry['text'])
if log:
- print("Wrote file %s" % filename)
+ print(("Wrote file %s" % filename))
except KeyError:
self.logger.error("Failed to pull %s. This file does not "
"currently exist on the client" %
diff --git a/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py b/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
index ff67571fa..030f4d74a 100644
--- a/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
+++ b/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
@@ -31,9 +31,9 @@ class HelperModule(Debuggable):
self.defaults = []
default_prov = DefaultTemplateDataProvider()
- self.reserved_defaults = default_prov.get_template_data(
+ self.reserved_defaults = list(default_prov.get_template_data(
lxml.etree.Element("Path", name="/dummy"),
- None, None).keys() + ["path"]
+ None, None).keys()) + ["path"]
def HandleEvent(self, event=None):
""" HandleEvent is called whenever the FAM registers an event.
@@ -119,12 +119,12 @@ class TemplateHelper(Plugin, Connector, DirectoryBacked, TemplateDataProvider):
def get_additional_data(self, _):
return dict([(h._module_name, h) # pylint: disable=W0212
- for h in self.entries.values()])
+ for h in list(self.entries.values())])
def get_template_data(self, *_):
rv = dict()
source = dict()
- for helper in self.entries.values():
+ for helper in list(self.entries.values()):
for key in helper.defaults:
if key not in rv:
rv[key] = getattr(helper, key)
diff --git a/src/lib/Bcfg2/Server/Plugins/Trigger.py b/src/lib/Bcfg2/Server/Plugins/Trigger.py
index 12672de7d..807b196d7 100644
--- a/src/lib/Bcfg2/Server/Plugins/Trigger.py
+++ b/src/lib/Bcfg2/Server/Plugins/Trigger.py
@@ -46,6 +46,6 @@ class Trigger(Bcfg2.Server.Plugin.Plugin,
def end_client_run(self, metadata):
args = [metadata.hostname, '-p', metadata.profile, '-g',
':'.join([g for g in metadata.groups])]
- for notifier in self.entries.keys():
+ for notifier in list(self.entries.keys()):
npath = os.path.join(self.data, notifier)
self.async_run([npath] + args)
diff --git a/src/lib/Bcfg2/Server/Reports/reports/models.py b/src/lib/Bcfg2/Server/Reports/reports/models.py
index 67aa425d9..d7da08381 100644
--- a/src/lib/Bcfg2/Server/Reports/reports/models.py
+++ b/src/lib/Bcfg2/Server/Reports/reports/models.py
@@ -6,7 +6,7 @@ try:
from django.db import models
except ImproperlyConfigured:
e = sys.exc_info()[1]
- print("Reports: unable to import django models: %s" % e)
+ print(("Reports: unable to import django models: %s" % e))
sys.exit(1)
from django.db import connection
diff --git a/src/lib/Bcfg2/Server/SSLServer.py b/src/lib/Bcfg2/Server/SSLServer.py
index 1f8febd0e..f0e8696cf 100644
--- a/src/lib/Bcfg2/Server/SSLServer.py
+++ b/src/lib/Bcfg2/Server/SSLServer.py
@@ -424,7 +424,7 @@ class XMLRPCServer(SocketServer.ThreadingMixIn, SSLServer,
except AttributeError:
name = "unknown"
if hasattr(instance, '_get_rmi'):
- for fname, func in instance._get_rmi().items():
+ for fname, func in list(instance._get_rmi().items()):
self.register_function(func, name=fname)
self.logger.info("serving %s at %s" % (name, self.url))
diff --git a/src/lib/Bcfg2/Server/migrations/0001_initial.py b/src/lib/Bcfg2/Server/migrations/0001_initial.py
index 3b3dca455..c81293ce7 100644
--- a/src/lib/Bcfg2/Server/migrations/0001_initial.py
+++ b/src/lib/Bcfg2/Server/migrations/0001_initial.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.9 on 2016-08-17 18:52
-from __future__ import unicode_literals
+
import Bcfg2.Server.Plugin.helpers
from django.db import migrations, models
diff --git a/src/lib/Bcfg2/Server/south_migrations/0001_initial.py b/src/lib/Bcfg2/Server/south_migrations/0001_initial.py
index 864c311e5..4037208a0 100644
--- a/src/lib/Bcfg2/Server/south_migrations/0001_initial.py
+++ b/src/lib/Bcfg2/Server/south_migrations/0001_initial.py
@@ -9,15 +9,15 @@ class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'MetadataClientModel'
- db.create_table(u'Server_metadataclientmodel', (
+ db.create_table('Server_metadataclientmodel', (
('hostname', self.gf('django.db.models.fields.CharField')(max_length=255, primary_key=True)),
('version', self.gf('django.db.models.fields.CharField')(max_length=31, null=True)),
))
db.send_create_signal('Server', ['MetadataClientModel'])
# Adding model 'ProbesDataModel'
- db.create_table(u'Server_probesdatamodel', (
- (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ db.create_table('Server_probesdatamodel', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('hostname', self.gf('django.db.models.fields.CharField')(max_length=255)),
('probe', self.gf('django.db.models.fields.CharField')(max_length=255)),
('timestamp', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
@@ -26,8 +26,8 @@ class Migration(SchemaMigration):
db.send_create_signal('Server', ['ProbesDataModel'])
# Adding model 'ProbesGroupsModel'
- db.create_table(u'Server_probesgroupsmodel', (
- (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ db.create_table('Server_probesgroupsmodel', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('hostname', self.gf('django.db.models.fields.CharField')(max_length=255)),
('group', self.gf('django.db.models.fields.CharField')(max_length=255)),
))
@@ -36,13 +36,13 @@ class Migration(SchemaMigration):
def backwards(self, orm):
# Deleting model 'MetadataClientModel'
- db.delete_table(u'Server_metadataclientmodel')
+ db.delete_table('Server_metadataclientmodel')
# Deleting model 'ProbesDataModel'
- db.delete_table(u'Server_probesdatamodel')
+ db.delete_table('Server_probesdatamodel')
# Deleting model 'ProbesGroupsModel'
- db.delete_table(u'Server_probesgroupsmodel')
+ db.delete_table('Server_probesgroupsmodel')
models = {
@@ -55,7 +55,7 @@ class Migration(SchemaMigration):
'Meta': {'object_name': 'ProbesDataModel'},
'data': ('django.db.models.fields.TextField', [], {'null': 'True'}),
'hostname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'probe': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
},
@@ -63,7 +63,7 @@ class Migration(SchemaMigration):
'Meta': {'object_name': 'ProbesGroupsModel'},
'group': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'hostname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}