diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-20 05:11:42 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-20 05:11:42 +0000 |
commit | ac049810032ed655b0ea32650127d38df39e1089 (patch) | |
tree | 2f086aee59062c856ac5ff922ab418984d558c90 /lib/puppet | |
parent | 3f9e918ee20ae9f7002dab983eab16a1461decfd (diff) | |
download | puppet-ac049810032ed655b0ea32650127d38df39e1089.tar.gz puppet-ac049810032ed655b0ea32650127d38df39e1089.tar.xz puppet-ac049810032ed655b0ea32650127d38df39e1089.zip |
Actually adding the ports file that provides freebsd port support
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1122 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet')
-rwxr-xr-x | lib/puppet/type/package/ports.rb | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/puppet/type/package/ports.rb b/lib/puppet/type/package/ports.rb new file mode 100755 index 000000000..de760a092 --- /dev/null +++ b/lib/puppet/type/package/ports.rb @@ -0,0 +1,96 @@ +module Puppet + Puppet.type(:package).newpkgtype(:ports, :openbsd) do + # I hate ports + %w{INTERACTIVE UNAME}.each do |var| + if ENV.include?(var) + ENV.delete(var) + end + end + def install + # -p: create a package + # -N: install if the package is missing, otherwise upgrade + # -P: prefer binary packages + cmd = "/usr/local/sbin/portupgrade -p -N -P #{self[:name]}" + + self.debug "Executing %s" % cmd.inspect + output = %x{#{cmd} 2>&1} + + unless $? == 0 + raise Puppet::PackageError.new(output) + end + end + + # If there are multiple packages, we only use the last one + def latest + cmd = "/usr/local/sbin/portversion -v #{self[:name]}" + + self.debug "Executing %s" % cmd.inspect + output = %x{#{cmd} 2>/dev/null}.chomp + line = output.split("\n").pop + + unless line =~ /^(\S+)\s+(\S)\s+(.+)$/ + # There's no "latest" version, so just return a placeholder + return :latest + end + + pkgstuff = $1 + match = $2 + info = $3 + + unless pkgstuff =~ /^(\w+)-([0-9].+)$/ + raise Puppet::PackageError, + "Could not match package info '%s'" % pkgstuff + end + + name, version = $1, $2 + + if match == "=" or match == ">" + # we're up to date or more recent + return version + end + + # Else, we need to be updated; we need to pull out the new version + + unless info =~ /\((\w+) has (.+)\)/ + raise Puppet::PackageError, + "Could not match version info '%s'" % info + end + + source, newversion = $1, $2 + + debug "Newer version in %s" % source + return newversion + end + + def listcmd + "pkg_info" + end + + def query + list + + if self[:version] and @states[:ensure].is != :absent + return :listed + else + return nil + end + end + + def uninstall + cmd = "/usr/local/sbin/pkg_deinstall #{self[:name]}" + self.debug "Executing %s" % cmd.inspect + output = %x{#{cmd} 2>&1} + + unless $? == 0 + raise Puppet::PackageError.new(output) + end + + end + + def update + install() + end + end +end + +# $Id$ |