From 8445d48da32fccd9bb5ae7d6ba3581c25c634498 Mon Sep 17 00:00:00 2001 From: Jimmy Tang Date: Mon, 16 Feb 2015 17:10:50 +0000 Subject: Add homebrew package management Signed-off-by: Jimmy Tang --- doc/releases/1.4.0pre2.txt | 1 + src/lib/Bcfg2/Client/Tools/HomeBrew.py | 54 ++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/lib/Bcfg2/Client/Tools/HomeBrew.py diff --git a/doc/releases/1.4.0pre2.txt b/doc/releases/1.4.0pre2.txt index 572748f73..a5c10777a 100644 --- a/doc/releases/1.4.0pre2.txt +++ b/doc/releases/1.4.0pre2.txt @@ -18,6 +18,7 @@ That said, please help us test the release in non- and preproduction environments. * NagiosGen: Add bundles to configuration +* HomeBrew: Initial add of plugin backwards-incompatible user-facing changes ------------------------------------------ diff --git a/src/lib/Bcfg2/Client/Tools/HomeBrew.py b/src/lib/Bcfg2/Client/Tools/HomeBrew.py new file mode 100644 index 000000000..d2f251230 --- /dev/null +++ b/src/lib/Bcfg2/Client/Tools/HomeBrew.py @@ -0,0 +1,54 @@ +"""This provides Bcfg2 support for homebrew packages.""" + +import Bcfg2.Client.Tools + + +class HomeBrew(Bcfg2.Client.Tools.PkgTool): + """Homebrew package support.""" + name = 'HomeBrew' + __execs__ = ["/usr/local/bin/brew"] + __handles__ = [('Package', 'homebrew')] + __req__ = {'Package': ['name', 'version']} + pkgtype = 'homebrew' + pkgtool = ('/usr/local/bin/brew install %s', ('%s', ['name'])) + + def RefreshPackages(self): + """Refresh memory hashes of packages.""" + pkgcache = self.cmd.run(["/usr/local/bin/brew", + "list", "--versions"]).stdout.splitlines() + self.installed = {} + for pkg in pkgcache: + pkgname, version = pkg.strip().split() + self.logger.debug(" pkgname: %s version: %s" % (pkgname, version)) + self.installed[pkgname] = version + + def VerifyPackage(self, entry, _): + """Verify Package status for entry.""" + self.logger.debug("VerifyPackage: %s : %s" % (entry.get('name'), + entry.get('version'))) + + if entry.attrib['name'] in self.installed: + if (self.installed[entry.attrib['name']] == + entry.attrib['version'] or + entry.attrib['version'] == 'any'): + return True + else: + self.logger.info(" %s: Wrong version installed. " + "Want %s, but have %s" % + (entry.get("name"), + entry.get("version"), + self.installed[entry.get("name")], + )) + + entry.set('current_version', self.installed[entry.get('name')]) + return False + entry.set('current_exists', 'false') + return False + + def Remove(self, packages): + """Remove extra packages.""" + pkg_names = [p.get('name') for p in packages] + self.logger.info("Removing packages: %s" % pkg_names) + self.cmd.run(["/usr/local/bin/brew", "uninstall"] + pkg_names) + self.RefreshPackages() + self.extra = self.FindExtra() -- cgit v1.2.3-1-g7c22