summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-06-13 00:11:03 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2014-02-26 13:38:17 +0100
commita34edf7216132c16ff901d4e38f7212b82c986fd (patch)
tree1ecaa61a170943102322b713239dda3cad71f83c
parent4d2bdfb27d5f69f369379ef65d23c87341b8c797 (diff)
downloadbcfg2-a34edf7216132c16ff901d4e38f7212b82c986fd.tar.gz
bcfg2-a34edf7216132c16ff901d4e38f7212b82c986fd.tar.bz2
bcfg2-a34edf7216132c16ff901d4e38f7212b82c986fd.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.py17
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" %