summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-06-13 00:10:29 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-06-29 16:28:47 +0200
commitdfbb810feb45574d8f921b4b8bda9d8c86fde569 (patch)
tree471b0a72d27bbd2f0c96790e2716ab356f942f3f
parent6d7b65021b10e6a040aa8723d49d3d985bc196e5 (diff)
downloadbcfg2-dfbb810feb45574d8f921b4b8bda9d8c86fde569.tar.gz
bcfg2-dfbb810feb45574d8f921b4b8bda9d8c86fde569.tar.bz2
bcfg2-dfbb810feb45574d8f921b4b8bda9d8c86fde569.zip
Client/Tools/POSIX: catch multiple VerifyDirectory calls
If a directory should be pruned from all unknown files VerifyDirectory created a new entry each call and the second fails because the file was already removed.
-rw-r--r--src/lib/Bcfg2/Client/Tools/POSIX/Directory.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py b/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py
index 675a4461a..ceb360d7e 100644
--- a/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py
+++ b/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py
@@ -11,6 +11,10 @@ class POSIXDirectory(POSIXTool):
""" Handle <Path type='directory' ...> entries """
__req__ = ['name', 'mode', 'owner', 'group']
+ def __init__(self, logger, setup, config):
+ super(POSIXDirectory, self).__init__(logger, setup, config)
+ self.prune_list = list()
+
def verify(self, entry, modlist):
ondisk = self._exists(entry)
if not ondisk:
@@ -27,8 +31,10 @@ class POSIXDirectory(POSIXTool):
try:
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]
+ if (os.path.join(entry.get('name'),
+ ent) not in modlist and
+ os.path.join(entry.get('name'),
+ ent) not in self.prune_list)]
if extras:
prune = False
msg = "Directory %s contains extra entries: %s" % \
@@ -37,6 +43,7 @@ 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
except OSError:
prune = True