puppet-0.23.0-paludis-try1.diff

KillerFox -, 07/30/2007 10:47 am

Download (5.1 kB)

puppet-0.23.0/lib/puppet/provider/package/paludis.rb 2007-07-24 20:20:10.000000000 +0200
1
require 'Paludis'
2
require 'puppet/provider/package'
3

  
4
Puppet::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
105
end
puppet-0.23.0/lib/puppet/type/package.rb 2007-07-24 19:44:16.000000000 +0200
310 310
            desc "A read-only parameter set by the package."
311 311
        end
312 312

  
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

  
313 320
        newparam(:allowcdrom) do
314 321
            desc "Tells apt to allow cdrom sources in the sources.list file.
315 322
                Normally apt will bail if you try this."