summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2011-06-15 12:21:17 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2011-06-15 12:21:17 -0400
commit5f93d780fc2dcd6ba35179acd61c05754d1e4fbc (patch)
tree41ad024f9da76953161a4fb6a3b7e193e481e941 /src/lib/Server/Plugins
parentac578f15ca785d9b1fcd0d42bfa3ffd017985e78 (diff)
downloadbcfg2-5f93d780fc2dcd6ba35179acd61c05754d1e4fbc.tar.gz
bcfg2-5f93d780fc2dcd6ba35179acd61c05754d1e4fbc.tar.bz2
bcfg2-5f93d780fc2dcd6ba35179acd61c05754d1e4fbc.zip
made StructFile.Match() work with Group/Client tags inside other tags
Diffstat (limited to 'src/lib/Server/Plugins')
-rw-r--r--src/lib/Server/Plugins/Properties.py45
1 files changed, 9 insertions, 36 deletions
diff --git a/src/lib/Server/Plugins/Properties.py b/src/lib/Server/Plugins/Properties.py
index dea797a10..95565f2e4 100644
--- a/src/lib/Server/Plugins/Properties.py
+++ b/src/lib/Server/Plugins/Properties.py
@@ -7,42 +7,15 @@ import Bcfg2.Server.Plugin
class PropertyFile(Bcfg2.Server.Plugin.StructFile):
"""Class for properties files."""
def Index(self):
- """Build internal data structures."""
- if type(self.data) is not lxml.etree._Element:
- try:
- self.data = lxml.etree.XML(self.data)
- except lxml.etree.XMLSyntaxError:
- Bcfg2.Server.Plugin.logger.error("Failed to parse %s" %
- self.name)
-
- self.fragments = {}
- work = {lambda x: True: self.data.getchildren()}
- while work:
- (predicate, worklist) = work.popitem()
- self.fragments[predicate] = \
- [item for item in worklist
- if (item.tag != 'Group' and
- item.tag != 'Client' and
- not isinstance(item,
- lxml.etree._Comment))]
- for item in worklist:
- cmd = None
- if item.tag == 'Group':
- if item.get('negate', 'false').lower() == 'true':
- cmd = "lambda x:'%s' not in x.groups and predicate(x)"
- else:
- cmd = "lambda x:'%s' in x.groups and predicate(x)"
- elif item.tag == 'Client':
- if item.get('negate', 'false').lower() == 'true':
- cmd = "lambda x:x.hostname != '%s' and predicate(x)"
- else:
- cmd = "lambda x:x.hostname == '%s' and predicate(x)"
- # else, ignore item
- if cmd is not None:
- newpred = eval(cmd % item.get('name'),
- {'predicate':predicate})
- work[newpred] = item.getchildren()
-
+ """Build local data structures."""
+ try:
+ xdata = XML(self.data)
+ except XMLSyntaxError:
+ self.label = None
+ self.entries = []
+ return
+ self.label = xdata.attrib[self.__identifier__]
+ self.entries = xdata.getchildren()
class PropDirectoryBacked(Bcfg2.Server.Plugin.DirectoryBacked):