Puppet: System Administration Automated

Support

Ticket #741: puppet-0.23.0-paludis-try1.diff

File puppet-0.23.0-paludis-try1.diff, 5.1 kB (added by KillerFox, 1 year ago)

package provider: paludis

  • puppet-0.23.0/lib/puppet/provider/package/paludis.rb

    old new  
     1require 'Paludis' 
     2require 'puppet/provider/package' 
     3 
     4Puppet::Type.type(:package).provide :paludis, :parent => Puppet::Provider::Package do 
     5    desc "Provides packaging support for Gentoo's alternative package system called paludis." 
     6 
     7    has_feature :versionable 
     8 
     9    commands :paludis => '/usr/bin/paludis' 
     10 
     11    defaultfor :operatingsystem => :gentoo 
     12 
     13    Paludis::Log.instance.log_level = Paludis::LogLevel::Warning 
     14    @env = Paludis::EnvironmentMaker.instance.make_from_spec('') 
     15 
     16    def get_paludis_instance 
     17        return Paludis::EnvironmentMaker.instance.make_from_spec('') 
     18    end 
     19 
     20    def package_name 
     21        pkg = nil 
     22        begin 
     23            pkg = @env.package_database.fetch_unique_qualified_package_name(@resource[:name]) 
     24        rescue Paludis::NoSuchPackageError 
     25            raise Puppet::PackageError.new('Package does not exists') 
     26        rescue Paludis::AmbiguousPackageNameError => e 
     27            if(!@resource[:category] && !@resource[:category].empty?) 
     28                pkg = Paludis::PackageDepSpec.new('%s/%s' % [:category, :name].collect{ |key| @resource[key]}, Paludis::PackageDepSpecParseMode::Permissive) 
     29                if(@env.package_database.query(Paludis::Query::Package.new(pkg), Paludis::QueryOrder::Whatever).empty?) 
     30                    raise Puppet::PackageError.new("No package names '#{@resource[:name]}' in category '#{@resource[:category]}'") 
     31                end 
     32            else 
     33                raise Puppet::PackageError.new(e.message + "\nPlease specifiy a category") 
     34            end 
     35        end 
     36 
     37        if(!pkg.nil? && pkg.kind_of?(String)) 
     38            pkg = Paludis::QualifiedPackageName.new(pkg) 
     39        end 
     40 
     41        return pkg 
     42    end 
     43 
     44    def self.instances 
     45        packages = Array.new 
     46        @env.package_database.query(Paludis::Query::RepositoryHasInstalledInterface.new, Paludis::QueryOrder::Whatever).each { |p| 
     47            next if(p.name.category == 'virtual') 
     48            pkg = Paludis::PackageDepSpec.new(p.name, Paludis::PackageDepSpecParseMode::Permissive) 
     49            package = { 
     50                :name => p.name.package, 
     51                :ensure => p.version.to_s, 
     52                :category => p.name.category, 
     53                :version_available => @env.package_database.query(Paludis::Query::RepositoryHasInstallableInterface.new & Paludis::Query::NotMasked.new & Paludis::Query::Package.new(p.name), Paludis::QueryOrder::GroupBySlot).last.version.to_s 
     54            } 
     55            packages << new(package) 
     56        } 
     57        return packages 
     58    end 
     59 
     60    #def initialize(resource = nil) 
     61    #    super(resource) 
     62    #end 
     63 
     64    def install 
     65        should = @resource.should(:ensure) 
     66        name = package_name 
     67        unless should == :present or should == :latest 
     68            # We must install a specific version 
     69            name = "=%s-%s" % [name, should] 
     70        end 
     71        paludis '-i', name 
     72    end 
     73 
     74    def update 
     75        self.install 
     76    end 
     77 
     78    def query 
     79        @env = self.get_paludis_instance 
     80        pkg = package_name 
     81        package = { 
     82            :name => pkg.package, 
     83            :category => pkg.category, 
     84            :ensure => :absent, 
     85            :version_available => :absent 
     86        } 
     87        if(p = @env.package_database.query(Paludis::Query::Package.new(pkg) & Paludis::Query::RepositoryHasInstalledInterface.new, Paludis::QueryOrder::GroupBySlot)) 
     88           package[:ensure] = (p.length > 0 ? p.last.version.to_s : :absent) 
     89        end 
     90        if(p = @env.package_database.query(Paludis::Query::RepositoryHasInstallableInterface.new & Paludis::Query::NotMasked.new & Paludis::Query::Package.new(pkg), Paludis::QueryOrder::GroupBySlot)) 
     91           package[:version_available] = (p.length > 0 ? p.last.version.to_s : :absent) 
     92        end 
     93        return package 
     94    end 
     95 
     96    def uninstall 
     97        @env = self.get_paludis_instance 
     98        params = ['-u', (@resource[:rmdepends] == :true ? '--with-unused-dependencies' : nil), package_name].compact 
     99        paludis *params 
     100    end 
     101 
     102    def latest 
     103        return self.query[:version_available] 
     104    end 
     105end 
  • puppet-0.23.0/lib/puppet/type/package.rb

    old new  
    310310            desc "A read-only parameter set by the package." 
    311311        end 
    312312 
     313        newparam(:rmdepends) do 
     314            desc 'Tell paludis to remove all unused-dependencies for a package.' 
     315            defaultto :false 
     316 
     317            newvalues(:true, :false) 
     318        end 
     319 
    313320        newparam(:allowcdrom) do 
    314321            desc "Tells apt to allow cdrom sources in the sources.list file. 
    315322                Normally apt will bail if you try this."