summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSol Jerome <solj@ices.utexas.edu>2009-09-26 20:31:42 +0000
committerSol Jerome <solj@ices.utexas.edu>2009-09-26 20:31:42 +0000
commit5223ec6eedd1ba50843ec167a318c4217624cf48 (patch)
treedc97a7f18f2100e464c95afe214eb699870fbf28 /src
parent16be5d99e87e106979cf0ba4b3cb78a91cf5cfa0 (diff)
downloadbcfg2-5223ec6eedd1ba50843ec167a318c4217624cf48.tar.gz
bcfg2-5223ec6eedd1ba50843ec167a318c4217624cf48.tar.bz2
bcfg2-5223ec6eedd1ba50843ec167a318c4217624cf48.zip
POSIX: Add support for nonexistent Path entry types
Allow specification of Path entries which should not exist on the client. This gives the user the ability to explicitly remove Path entries if they exist on the client. Signed-off-by: Sol Jerome <solj@ices.utexas.edu> git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5464 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src')
-rw-r--r--src/lib/Client/Frame.py2
-rw-r--r--src/lib/Client/Tools/POSIX.py30
-rw-r--r--src/lib/Server/Plugins/POSIXCompat.py2
3 files changed, 27 insertions, 7 deletions
diff --git a/src/lib/Client/Frame.py b/src/lib/Client/Frame.py
index 8ab329e7b..3228ab2c2 100644
--- a/src/lib/Client/Frame.py
+++ b/src/lib/Client/Frame.py
@@ -118,7 +118,7 @@ class Frame:
entry.get('name')) for entry in problems])
self.logger.error("")
entries = [(entry.tag, entry.get('name')) for struct in config for entry in struct]
- pkgs = [(entry.get('name'), entry.get('origin')) for struct in config for entry in struct if entry.tag == 'Package']
+ pkgs = [(entry.get('name'), entry.get('origin')) for struct in config for entry in struct if entry.tag == 'Package']
multi = []
for entry in entries[:]:
if entries.count(entry) > 1:
diff --git a/src/lib/Client/Tools/POSIX.py b/src/lib/Client/Tools/POSIX.py
index 81471f910..d956abf3a 100644
--- a/src/lib/Client/Tools/POSIX.py
+++ b/src/lib/Client/Tools/POSIX.py
@@ -79,11 +79,17 @@ def isString(strng):
class POSIX(Bcfg2.Client.Tools.Tool):
'''POSIX File support code'''
name = 'POSIX'
- __handles__ = [('ConfigFile', None), ('Directory', None),
- ('Path', 'ConfigFile'), ('Path', 'Device'),
- ('Path', 'Directory'), ('Path', 'HardLink'),
- ('Path', 'Perms'), ('Path', 'SymLink'),
- ('Permissions', None), ('SymLink', None)]
+ __handles__ = [('ConfigFile', None),
+ ('Directory', None),
+ ('Path', 'ConfigFile'),
+ ('Path', 'Device'),
+ ('Path', 'Directory'),
+ ('Path', 'HardLink'),
+ ('Path', 'Perms'),
+ ('Path', 'SymLink'),
+ ('Path', 'nonexistent'),
+ ('Permissions', None),
+ ('SymLink', None)]
__req__ = {'ConfigFile': ['name', 'owner', 'group', 'perms'],
'Directory': ['name', 'owner', 'group', 'perms'],
'Path': ['name', 'type'],
@@ -376,6 +382,20 @@ class POSIX(Bcfg2.Client.Tools.Tool):
(entry.get('name')))
return False
+ def Verifynonexistent(self, entry, _):
+ '''Verify nonexistent entry'''
+ # return true if path does _not_ exist
+ return not os.path.lexists(entry.get('name'))
+
+ def Installnonexistent(self, entry):
+ '''Remove nonexistent entries'''
+ try:
+ os.remove(entry.get('name'))
+ return True
+ except OSError:
+ self.logger.error('Failed to remove %s' % entry.get('name'))
+ return False
+
def gatherCurrentData(self, entry):
if entry.tag == 'ConfigFile':
try:
diff --git a/src/lib/Server/Plugins/POSIXCompat.py b/src/lib/Server/Plugins/POSIXCompat.py
index 9964bf1f5..00fdbf65c 100644
--- a/src/lib/Server/Plugins/POSIXCompat.py
+++ b/src/lib/Server/Plugins/POSIXCompat.py
@@ -27,7 +27,7 @@ class POSIXCompat(Bcfg2.Server.Plugin.Plugin,
def validate_goals(self, metadata, goals):
for goal in goals:
for entry in goal.getchildren():
- if entry.tag == 'Path':
+ if entry.tag == 'Path' and entry.get('type') != 'nonexistent':
oldentry = entry
entry.tag = entry.get('type')
del entry.attrib['type']