summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/Bcfg2/DBSettings.py4
-rw-r--r--src/lib/Bcfg2/Reporting/templates/base.html2
-rw-r--r--src/lib/Bcfg2/Server/Lint/Bundler.py4
-rw-r--r--src/lib/Bcfg2/Server/Plugin/helpers.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Metadata.py29
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Reporting.py6
-rw-r--r--src/lib/Bcfg2/version.py2
7 files changed, 39 insertions, 16 deletions
diff --git a/src/lib/Bcfg2/DBSettings.py b/src/lib/Bcfg2/DBSettings.py
index c5b78ed0b..12dba7fba 100644
--- a/src/lib/Bcfg2/DBSettings.py
+++ b/src/lib/Bcfg2/DBSettings.py
@@ -26,8 +26,8 @@ settings = dict( # pylint: disable=C0103
DEBUG=False,
ALLOWED_HOSTS=['*'],
MEDIA_URL='/site_media/',
- MANAGERS=(('Root', 'root')),
- ADMINS=(('Root', 'root')),
+ MANAGERS=(('Root', 'root'),),
+ ADMINS=(('Root', 'root'),),
# Language code for this installation. All choices can be found
# here:
# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
diff --git a/src/lib/Bcfg2/Reporting/templates/base.html b/src/lib/Bcfg2/Reporting/templates/base.html
index ef6799c2b..8b197231c 100644
--- a/src/lib/Bcfg2/Reporting/templates/base.html
+++ b/src/lib/Bcfg2/Reporting/templates/base.html
@@ -93,7 +93,7 @@ This is needed for Django versions less than 1.5
<div style='clear:both'></div>
</div><!-- document -->
<div id="footer">
- <span>Bcfg2 Version 1.3.4</span>
+ <span>Bcfg2 Version 1.4.0pre1</span>
</div>
<div id="calendar_div" style='position:absolute; visibility:hidden; background-color:white; layer-background-color:white;'></div>
diff --git a/src/lib/Bcfg2/Server/Lint/Bundler.py b/src/lib/Bcfg2/Server/Lint/Bundler.py
index 0caf4d7ed..aee15cb5d 100644
--- a/src/lib/Bcfg2/Server/Lint/Bundler.py
+++ b/src/lib/Bcfg2/Server/Lint/Bundler.py
@@ -1,12 +1,12 @@
""" ``bcfg2-lint`` plugin for :ref:`Bundler
-<server-plugins-structures-bundler-index>` """
+<server-plugins-structures-bundler>` """
from Bcfg2.Server.Lint import ServerPlugin
class Bundler(ServerPlugin):
""" Perform various :ref:`Bundler
- <server-plugins-structures-bundler-index>` checks. """
+ <server-plugins-structures-bundler>` checks. """
def Run(self):
self.missing_bundles()
diff --git a/src/lib/Bcfg2/Server/Plugin/helpers.py b/src/lib/Bcfg2/Server/Plugin/helpers.py
index b5ab1c18b..456038c2f 100644
--- a/src/lib/Bcfg2/Server/Plugin/helpers.py
+++ b/src/lib/Bcfg2/Server/Plugin/helpers.py
@@ -647,7 +647,13 @@ class XMLFileBacked(FileBacked):
if el.findall('./%sfallback' % Bcfg2.Server.XI_NAMESPACE):
self.logger.debug(msg)
else:
- self.logger.warning(msg)
+ self.logger.error(msg)
+ # add a FAM monitor for this path. this isn't perfect
+ # -- if there's an xinclude of "*.xml", we'll watch
+ # the literal filename "*.xml". but for non-globbing
+ # filenames, it works fine.
+ if fpath not in self.extra_monitors:
+ self.add_monitor(fpath)
parent = el.getparent()
parent.remove(el)
diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py
index 4c1c31307..1d15656af 100644
--- a/src/lib/Bcfg2/Server/Plugins/Metadata.py
+++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py
@@ -805,6 +805,11 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
def _handle_clients_xml_event(self, _): # pylint: disable=R0912
""" handle all events for clients.xml and files xincluded from
clients.xml """
+ # disable metadata builds during parsing. this prevents
+ # clients from getting bogus metadata during the brief time it
+ # takes to rebuild the clients.xml data
+ self.states['clients.xml'] = False
+
xdata = self.clients_xml.xdata
self.clients = []
self.clientgroups = {}
@@ -866,8 +871,9 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
self.clientgroups[clname].append(profile)
except KeyError:
self.clientgroups[clname] = [profile]
- self.states['clients.xml'] = True
self.update_client_list()
+ self.cache.expire()
+ self.states['clients.xml'] = True
def _get_condition(self, element):
""" Return a predicate that returns True if a client meets
@@ -895,7 +901,15 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
def _handle_groups_xml_event(self, _): # pylint: disable=R0912
""" re-read groups.xml on any event on it """
+ # disable metadata builds during parsing. this prevents
+ # clients from getting bogus metadata during the brief time it
+ # takes to rebuild the groups.xml data
+ self.states['groups.xml'] = False
+
self.groups = {}
+ self.group_membership = dict()
+ self.negated_groups = dict()
+ self.ordered_groups = []
# first, we get a list of all of the groups declared in the
# file. we do this in two stages because the old way of
@@ -920,10 +934,6 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
if grp.get('default', 'false') == 'true':
self.default = grp.get('name')
- self.group_membership = dict()
- self.negated_groups = dict()
- self.ordered_groups = []
-
# confusing loop condition; the XPath query asks for all
# elements under a Group tag under a Groups tag; that is
# infinitely recursive, so "all" elements really means _all_
@@ -956,6 +966,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
self.group_membership.setdefault(gname, [])
self.group_membership[gname].append(
self._aggregate_conditions(conditions))
+ self.cache.expire()
self.states['groups.xml'] = True
def HandleEvent(self, event):
@@ -1466,6 +1477,10 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
self.logger.debug("Metadata: Re-reading client list from database")
old = set(self.clients)
self.clients = self.list_clients()
+
+ # we could do this with set.symmetric_difference(), but we
+ # want detailed numbers of added/removed clients for
+ # logging
new = set(self.clients)
added = new - old
removed = old - new
@@ -1473,9 +1488,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
(len(added), added))
self.logger.debug("Metadata: Removed %s clients: %s" %
(len(removed), removed))
- # we could do this with set.symmetric_difference(), but we
- # want detailed numbers of added/removed clients for
- # logging
+
for client in added.union(removed):
self.cache.expire(client)
diff --git a/src/lib/Bcfg2/Server/Plugins/Reporting.py b/src/lib/Bcfg2/Server/Plugins/Reporting.py
index 8b8ada852..282de8247 100644
--- a/src/lib/Bcfg2/Server/Plugins/Reporting.py
+++ b/src/lib/Bcfg2/Server/Plugins/Reporting.py
@@ -54,7 +54,7 @@ class Reporting(Statistics, Threaded, PullSource):
self.logger.error(msg)
raise PluginInitError(msg)
- def start_threads(self):
+ # This must be loaded here for bcfg2-admin
try:
self.transport = Bcfg2.Options.setup.reporting_transport()
except TransportError:
@@ -63,6 +63,10 @@ class Reporting(Statistics, Threaded, PullSource):
if self.debug_flag:
self.transport.set_debug(self.debug_flag)
+ def start_threads(self):
+ """Nothing to do here"""
+ pass
+
def set_debug(self, debug):
rv = Statistics.set_debug(self, debug)
if self.transport is not None:
diff --git a/src/lib/Bcfg2/version.py b/src/lib/Bcfg2/version.py
index ae82724f3..196d77273 100644
--- a/src/lib/Bcfg2/version.py
+++ b/src/lib/Bcfg2/version.py
@@ -2,7 +2,7 @@
import re
-__version__ = "1.3.4"
+__version__ = "1.4.0pre1"
class Bcfg2VersionInfo(tuple): # pylint: disable=E0012,R0924