From db6a56510dd25c8ddf873f6f4dc23101d0d37536 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 31 Oct 2012 20:20:43 +0000 Subject: plugin: ExtraGroups --- schemas/metadata.xsd | 5 +++++ src/lib/Server/Plugins/ExtraGroups.py | 42 +++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/lib/Server/Plugins/ExtraGroups.py diff --git a/schemas/metadata.xsd b/schemas/metadata.xsd index 58f9e8029..0ac4204b5 100644 --- a/schemas/metadata.xsd +++ b/schemas/metadata.xsd @@ -21,6 +21,11 @@ + + + + + diff --git a/src/lib/Server/Plugins/ExtraGroups.py b/src/lib/Server/Plugins/ExtraGroups.py new file mode 100644 index 000000000..e2a9a5591 --- /dev/null +++ b/src/lib/Server/Plugins/ExtraGroups.py @@ -0,0 +1,42 @@ +""" +The ExtraGroups plugin allows for assigning s to s in the +Metadata/groups.xml file. + +Written by Holger Weiss . +""" + +import os +import lxml.etree +import Bcfg2.Server.Plugin + +class ExtraGroups(Bcfg2.Server.Plugin.Plugin, Bcfg2.Server.Plugin.Connector): + name = 'ExtraGroups' + version = '1' + + def __init__(self, core, datastore): + Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore) + Bcfg2.Server.Plugin.Connector.__init__(self) + self.groups_xml = os.path.dirname(self.data) + '/Metadata/groups.xml' + + def get_additional_groups(self, metadata): + try: + xdata = lxml.etree.parse(self.groups_xml) + except lxml.etree.XMLSyntaxError: + self.logger.error('Failed to parse %s' % self.groups_xml) + return + includes = [ent.get('href') for ent in + xdata.findall('./{http://www.w3.org/2001/XInclude}include')] + if includes: + try: + xdata.xinclude() + except lxml.etree.XIncludeError: + self.logger.error('Failed to process XInclude for file %s' % + self.groups_xml) + extra_groups = [] + for group in xdata.xpath('//Groups/Group'): + if metadata.hostname in [item.get('name') + for item in group.findall('./Client')]: + extra_groups.append(group.get('name')) + extra_groups.extend([item.get('name') + for item in group.findall('./Group')]) + return extra_groups -- cgit v1.2.3-1-g7c22