diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-06-14 20:08:47 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-06-14 20:08:47 -0400 |
commit | e43040b084d66702efe1887a9d953b9154732512 (patch) | |
tree | 4240ab12cd944a752daf78d24d7081c4e9a0787b /src/lib/Bcfg2/Server/Plugins/Pkgmgr.py | |
parent | 5dba50f1db4b9807a137a2f40b338010eaf297ea (diff) | |
download | bcfg2-e43040b084d66702efe1887a9d953b9154732512.tar.gz bcfg2-e43040b084d66702efe1887a9d953b9154732512.tar.bz2 bcfg2-e43040b084d66702efe1887a9d953b9154732512.zip |
made bcfg2-lint load lint plugins from server plugins where appropriate
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Pkgmgr.py')
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Pkgmgr.py | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py b/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py index 8d6d85ef2..fcf2045a7 100644 --- a/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py +++ b/src/lib/Bcfg2/Server/Plugins/Pkgmgr.py @@ -1,9 +1,12 @@ '''This module implements a package management scheme for all images''' -import logging import re +import glob +import logging +import lxml.etree import Bcfg2.Server.Plugin -import lxml +import Bcfg2.Server.Lint + try: set except NameError: @@ -169,3 +172,40 @@ class Pkgmgr(Bcfg2.Server.Plugin.PrioDir): def HandleEntry(self, entry, metadata): self.BindEntry(entry, metadata) + + +class PkgmgrLint(Bcfg2.Server.Lint.ServerlessPlugin): + """ find duplicate Pkgmgr entries with the same priority """ + def Run(self): + pset = set() + for pfile in glob.glob(os.path.join(self.config['repo'], 'Pkgmgr', + '*.xml')): + if self.HandlesFile(pfile): + xdata = lxml.etree.parse(pfile).getroot() + # get priority, type, group + priority = xdata.get('priority') + ptype = xdata.get('type') + for pkg in xdata.xpath("//Package"): + if pkg.getparent().tag == 'Group': + grp = pkg.getparent().get('name') + if (type(grp) is not str and + grp.getparent().tag == 'Group'): + pgrp = grp.getparent().get('name') + else: + pgrp = 'none' + else: + grp = 'none' + pgrp = 'none' + ptuple = (pkg.get('name'), priority, ptype, grp, pgrp) + # check if package is already listed with same + # priority, type, grp + if ptuple in pset: + self.LintError("duplicate-package", + "Duplicate Package %s, priority:%s, type:%s" % + (pkg.get('name'), priority, ptype)) + else: + pset.add(ptuple) + + @classmethod + def Errors(cls): + return {"duplicate-packages":"error"} |