Sha256: 111579429475c8e3a0ff4d6a228be3b1d84b87630d349de50dbd44cd3bce1569
Contents?: true
Size: 1.77 KB
Versions: 8
Compression:
Stored size: 1.77 KB
Contents
require 'puppet/provider/package' Puppet::Type.type(:package).provide :darwinport, :parent => Puppet::Provider::Package do desc "Package management using DarwinPorts on OS X." confine :operatingsystem => :darwin commands :port => "/opt/local/bin/port" def self.eachpkgashash # list out all of the packages open("| #{command(:port)} list installed") { |process| regex = %r{(\S+)\s+@(\S+)\s+(\S+)} fields = [:name, :ensure, :location] hash = {} # now turn each returned line into a package object process.each { |line| hash.clear if match = regex.match(line) fields.zip(match.captures) { |field,value| hash[field] = value } hash.delete :location hash[:provider] = self.name yield hash.dup else raise Puppet::DevError, "Failed to match dpkg line #{line}" end } } end def self.instances packages = [] eachpkgashash do |hash| packages << new(hash) end packages end def install should = @resource.should(:ensure) # Seems like you can always say 'upgrade' output = port "upgrade", @resource[:name] if output =~ /^Error: No port/ raise Puppet::ExecutionFailure, "Could not find package #{@resource[:name]}" end end def query version = nil self.class.eachpkgashash do |hash| return hash if hash[:name] == @resource[:name] end nil end def latest info = port :search, "^#{@resource[:name]}$" if $CHILD_STATUS != 0 or info =~ /^Error/ return nil end ary = info.split(/\s+/) version = ary[2].sub(/^@/, '') version end def uninstall port :uninstall, @resource[:name] end def update install end end
Version data entries
8 entries across 8 versions & 1 rubygems