diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Bcfg2/DBSettings.py | 4 | ||||
-rw-r--r-- | src/lib/Bcfg2/Reporting/templates/base.html | 2 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Lint/Bundler.py | 4 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugin/helpers.py | 8 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Metadata.py | 29 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Reporting.py | 6 | ||||
-rw-r--r-- | src/lib/Bcfg2/version.py | 2 |
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 |