diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2013-06-13 00:11:03 +0200 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2013-07-03 11:58:44 +0200 |
commit | c0c4011a6e7eca85e44f0f022ce3de483c8f4e69 (patch) | |
tree | 8e4ab9fccdf616e78c1f5edac4cca20225fd22f8 | |
parent | f3d4bca31653add18e359f24bf89bae50714d1ad (diff) | |
download | bcfg2-c0c4011a6e7eca85e44f0f022ce3de483c8f4e69.tar.gz bcfg2-c0c4011a6e7eca85e44f0f022ce3de483c8f4e69.tar.bz2 bcfg2-c0c4011a6e7eca85e44f0f022ce3de483c8f4e69.zip |
Client/Tools/POSIX: only execute needed directory installs
Remember the purge actions per Path entry, so that only needed install
actions are executed.
-rw-r--r-- | src/lib/Bcfg2/Client/Tools/POSIX/Directory.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py b/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py index c714a8a6b..24667d162 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py @@ -13,7 +13,7 @@ class POSIXDirectory(POSIXTool): def __init__(self, logger, setup, config): super(POSIXDirectory, self).__init__(logger, setup, config) - self.prune_list = list() + self.prunes = dict() def verify(self, entry, modlist): ondisk = self._exists(entry) @@ -29,12 +29,18 @@ class POSIXDirectory(POSIXTool): if entry.get('prune', 'false').lower() == 'true': # check for any extra entries when prune='true' attribute is set try: + prune_list = list() + if entry.get('name') in self.prunes: + prune_list = self.prunes[entry.get('name')] + else: + self.prunes[entry.get('name')] = list() + extras = [os.path.join(entry.get('name'), ent) for ent in os.listdir(entry.get('name')) if (os.path.join(entry.get('name'), ent) not in modlist and os.path.join(entry.get('name'), - ent) not in self.prune_list)] + ent) not in prune_list)] if extras: prune = False msg = "Directory %s contains extra entries: %s" % \ @@ -43,8 +49,9 @@ class POSIXDirectory(POSIXTool): entry.set('qtext', entry.get('qtext', '') + '\n' + msg) for extra in extras: Bcfg2.Client.XML.SubElement(entry, 'Prune', name=extra) - self.prune_list += extras - elif self.prune_list: + self.prunes[entry.get('name')] += extras + elif entry.get('name') in self.prunes and \ + len(self.prunes[entry.get('name')]) > 0: prune = False except OSError: prune = True @@ -80,6 +87,8 @@ class POSIXDirectory(POSIXTool): try: self.logger.debug("POSIX: Removing %s" % pname) self._remove(pent) + if entry.get('name') in self.prunes: + self.prunes[entry.get('name')].remove(pname) except OSError: err = sys.exc_info()[1] self.logger.error("POSIX: Failed to unlink %s: %s" % |