summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/GroupLogic.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/GroupLogic.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/GroupLogic.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/GroupLogic.py b/src/lib/Bcfg2/Server/Plugins/GroupLogic.py
index aa336ff23..1da7c8fec 100644
--- a/src/lib/Bcfg2/Server/Plugins/GroupLogic.py
+++ b/src/lib/Bcfg2/Server/Plugins/GroupLogic.py
@@ -4,6 +4,7 @@ template to dynamically set additional groups for clients. """
import os
import lxml.etree
import Bcfg2.Server.Plugin
+from Bcfg2.Server.Plugins.Metadata import MetadataGroup
class GroupLogicConfig(Bcfg2.Server.Plugin.StructFile):
@@ -11,10 +12,17 @@ class GroupLogicConfig(Bcfg2.Server.Plugin.StructFile):
create = lxml.etree.Element("GroupLogic",
nsmap=dict(py="http://genshi.edgewall.org/"))
- def _match(self, item, metadata):
+ def _match(self, item, metadata, *args):
if item.tag == 'Group' and not len(item.getchildren()):
return [item]
- return Bcfg2.Server.Plugin.StructFile._match(self, item, metadata)
+ return Bcfg2.Server.Plugin.StructFile._match(self, item, metadata,
+ *args)
+
+ def _xml_match(self, item, metadata, *args):
+ if item.tag == 'Group' and not len(item.getchildren()):
+ return [item]
+ return Bcfg2.Server.Plugin.StructFile._xml_match(self, item, metadata,
+ *args)
class GroupLogic(Bcfg2.Server.Plugin.Plugin,
@@ -30,5 +38,11 @@ class GroupLogic(Bcfg2.Server.Plugin.Plugin,
should_monitor=True)
def get_additional_groups(self, metadata):
- return [el.get("name")
- for el in self.config.XMLMatch(metadata).findall("Group")]
+ rv = []
+ for el in self.config.XMLMatch(metadata).findall("Group"):
+ if el.get("category"):
+ rv.append(MetadataGroup(el.get("name"),
+ category=el.get("category")))
+ else:
+ rv.append(el.get("name"))
+ return rv