summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-08-12 08:47:04 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-08-12 08:47:04 -0400
commite18ff0f6a6f4c35d47d4f344002878e2ebc0fecb (patch)
treeba7bf480f8cb23ec5f699f16ac4c9e16d189eefa /src/lib
parent5c573e00a168c90c5c718566c75aadf736566676 (diff)
parent4201e3b68f392869359493ab9462706f4956e387 (diff)
downloadbcfg2-e18ff0f6a6f4c35d47d4f344002878e2ebc0fecb.tar.gz
bcfg2-e18ff0f6a6f4c35d47d4f344002878e2ebc0fecb.tar.bz2
bcfg2-e18ff0f6a6f4c35d47d4f344002878e2ebc0fecb.zip
Merge branch 'maint'
Conflicts: src/lib/Bcfg2/Server/Admin/Viz.py src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Bcfg2/Reporting/models.py2
-rw-r--r--src/lib/Bcfg2/Server/Admin.py1
-rw-r--r--src/lib/Bcfg2/Server/Core.py10
-rw-r--r--src/lib/Bcfg2/Server/MultiprocessingCore.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Metadata.py13
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/__init__.py10
6 files changed, 28 insertions, 16 deletions
diff --git a/src/lib/Bcfg2/Reporting/models.py b/src/lib/Bcfg2/Reporting/models.py
index 598e1c6ec..fc9523067 100644
--- a/src/lib/Bcfg2/Reporting/models.py
+++ b/src/lib/Bcfg2/Reporting/models.py
@@ -88,7 +88,7 @@ class InteractionManager(models.Manager):
Returns the ids of most recent interactions for clients as of a date.
Arguments:
- maxdate -- datetime object. Most recent date to pull. (dafault None)
+ maxdate -- datetime object. Most recent date to pull. (default None)
"""
from django.db import connection
diff --git a/src/lib/Bcfg2/Server/Admin.py b/src/lib/Bcfg2/Server/Admin.py
index 47ba07482..24cb46bd9 100644
--- a/src/lib/Bcfg2/Server/Admin.py
+++ b/src/lib/Bcfg2/Server/Admin.py
@@ -1128,6 +1128,7 @@ class Viz(_ServerAdminCmd):
'\tcolor="lightblue";',
'\tBundle [ shape="septagon" ];',
'\tGroup [shape="ellipse"];',
+ '\tGroup Category [shape="trapezium"];\n',
'\tProfile [style="bold", shape="ellipse"];',
'\tHblock [label="Host1|Host2|Host3",shape="record"];',
'\tlabel="Key";',
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py
index 360b7868d..501a78bc0 100644
--- a/src/lib/Bcfg2/Server/Core.py
+++ b/src/lib/Bcfg2/Server/Core.py
@@ -939,11 +939,17 @@ class Core(object):
raise xmlrpclib.Fault(xmlrpclib.APPLICATION_ERROR,
"Critical failure: %s" % message)
+ def _get_rmi_objects(self):
+ """ Get a dict (name: object) of all objects that may have RMI
+ calls. Currently, that includes all plugins and the FAM. """
+ rv = {self.fam.__class__.__name__: self.fam}
+ rv.update(self.plugins)
+ return rv
+
def _get_rmi(self):
""" Get a list of RMI calls exposed by plugins """
rmi = dict()
- for pname, pinst in self.plugins.items() + \
- [(self.fam.__class__.__name__, self.fam)]:
+ for pname, pinst in self._get_rmi_objects().items():
for mname in pinst.__rmi__:
rmi["%s.%s" % (pname, mname)] = getattr(pinst, mname)
return rmi
diff --git a/src/lib/Bcfg2/Server/MultiprocessingCore.py b/src/lib/Bcfg2/Server/MultiprocessingCore.py
index cce6bc0c3..517140178 100644
--- a/src/lib/Bcfg2/Server/MultiprocessingCore.py
+++ b/src/lib/Bcfg2/Server/MultiprocessingCore.py
@@ -294,8 +294,7 @@ class ChildCore(Core):
def _get_rmi(self):
rmi = dict()
- for pname, pinst in self.plugins.items() + \
- [(self.fam.__class__.__name__, self.fam)]:
+ for pname, pinst in self._get_rmi_objects().items():
for crmi in pinst.__child_rmi__:
if isinstance(crmi, tuple):
mname = crmi[1]
@@ -429,8 +428,7 @@ class MultiprocessingCore(BuiltinCore):
def _get_rmi(self):
child_rmi = dict()
- for pname, pinst in self.plugins.items() + \
- [(self.fam.__class__.__name__, self.fam)]:
+ for pname, pinst in self._get_rmi_objects().items():
for crmi in pinst.__child_rmi__:
if isinstance(crmi, tuple):
parentname, childname = crmi
@@ -453,6 +451,8 @@ class MultiprocessingCore(BuiltinCore):
(i.e., in the parent process). """
@wraps(parent_rmi)
def inner(*args, **kwargs):
+ """ Function that dispatches an RMI call to child
+ processes and to the (original) parent function. """
self.logger.debug("Dispatching RMI call to %s to children: %s" %
(method, child_rmi))
self.rpc_q.publish(child_rmi, args=args, kwargs=kwargs)
diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py
index 3d82beb87..a6e7700b7 100644
--- a/src/lib/Bcfg2/Server/Plugins/Metadata.py
+++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py
@@ -1097,7 +1097,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
if cname in self.aliases:
return self.aliases[cname]
return cname
- except socket.herror:
+ except (socket.gaierror, socket.herror):
err = "Address resolution error for %s: %s" % (address,
sys.exc_info()[1])
self.logger.error(err)
@@ -1437,7 +1437,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
viz_str.extend(self._viz_groups(egroups, bundles, clientmeta))
if key:
for category in categories:
- viz_str.append('"%s" [label="%s", shape="record", '
+ viz_str.append('"%s" [label="%s", shape="trapezium", '
'style="filled", fillcolor="%s"];' %
(category, category, categories[category]))
return "\n".join("\t" + s for s in viz_str)
@@ -1452,7 +1452,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
instances = {}
rv = []
for client in list(self.clients):
- if include_client(client):
+ if not include_client(client):
continue
if client in self.clientgroups:
grps = self.clientgroups[client]
@@ -1480,9 +1480,10 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
the graph"""
return not clientmeta or bundle in clientmeta.bundles
- bundles = list(set(bund.get('name'))
- for bund in self.groups_xml.xdata.findall('.//Bundle')
- if include_bundle(bund.get('name')))
+ bundles = \
+ list(set(bund.get('name')
+ for bund in self.groups_xml.xdata.findall('.//Bundle')
+ if include_bundle(bund.get('name'))))
bundles.sort()
return ['"bundle-%s" [ label="%s", shape="septagon"];' % (bundle,
bundle)
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
index 7dcc2dccc..5af9c1591 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
@@ -551,7 +551,11 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
if not self.sources.loaded:
# if sources.xml has not received a FAM event yet, defer;
# instantiate a dummy Collection object
- return Collection(metadata, [], self.cachepath, self.data)
+ collection = Collection(metadata, [], self.cachepath, self.data)
+ ckey = collection.cachekey
+ self.groupcache.setdefault(ckey, dict())
+ self.pkgcache.setdefault(ckey, dict())
+ return collection
if metadata.hostname in self.clients:
return self.collections[self.clients[metadata.hostname]]
@@ -588,8 +592,8 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
if cclass != Collection:
self.clients[metadata.hostname] = ckey
self.collections[ckey] = collection
- self.groupcache.setdefault(ckey, dict())
- self.pkgcache.setdefault(ckey, dict())
+ self.groupcache.setdefault(ckey, dict())
+ self.pkgcache.setdefault(ckey, dict())
return collection
def get_additional_data(self, metadata):