]> git.pld-linux.org Git - packages/chef.git/blob - poldek.patch
updated poldek patch for chef-12
[packages/chef.git] / poldek.patch
1 poldek package manager support
2
3 https://github.com/chef/chef/pull/7482
4
5 diff --git a/lib/chef/provider/package/poldek.rb b/lib/chef/provider/package/poldek.rb
6 new file mode 100644
7 index 000000000..63e3961a0
8 --- /dev/null
9 +++ b/lib/chef/provider/package/poldek.rb
10 @@ -0,0 +1,125 @@
11 +#
12 +# Author:: Elan Ruusamäe (glen@pld-linux.org)
13 +# Copyright:: Copyright (c) 2013,2018 Elan Ruusamäe
14 +# License:: Apache License, Version 2.0
15 +#
16 +# Licensed under the Apache License, Version 2.0 (the "License");
17 +# you may not use this file except in compliance with the License.
18 +# You may obtain a copy of the License at
19 +#
20 +#     http://www.apache.org/licenses/LICENSE-2.0
21 +#
22 +# Unless required by applicable law or agreed to in writing, software
23 +# distributed under the License is distributed on an "AS IS" BASIS,
24 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 +# See the License for the specific language governing permissions and
26 +# limitations under the License.
27 +#
28 +
29 +require 'digest/md5'
30 +require 'chef/provider/package'
31 +require 'chef/mixin/shell_out'
32 +require 'chef/resource/package'
33 +require 'chef/mixin/get_source_from_package'
34 +
35 +class Chef
36 +  class Provider
37 +    class Package
38 +      class Poldek < Chef::Provider::Package
39 +        include Chef::Mixin::ShellOut
40 +        attr_accessor :is_virtual_package
41 +
42 +        provides :package, platform_family: "pld"
43 +
44 +        def load_current_resource
45 +            Chef::Log.debug("#{@new_resource} loading current resource")
46 +            @current_resource = Chef::Resource::Package.new(@new_resource.name)
47 +            @current_resource.package_name(@new_resource.package_name)
48 +            @current_resource.version(nil)
49 +            check_package_state
50 +            @current_resource # modified by check_package_state
51 +        end
52 +
53 +        def check_package_state()
54 +            Chef::Log.debug("#{@new_resource} checking package #{@new_resource.package_name}")
55 +
56 +            installed = false
57 +            @current_resource.version(nil)
58 +
59 +            out = shell_out!("rpm -q #{@new_resource.package_name}", :env => nil, :returns => [0,1])
60 +            if out.stdout
61 +                Chef::Log.debug("rpm STDOUT: #{out.stdout}");
62 +                version = version_from_nvra(out.stdout)
63 +                if version
64 +                    @current_resource.version(version)
65 +                    installed = true
66 +                end
67 +            end
68 +
69 +            return installed
70 +        end
71 +
72 +        def candidate_version
73 +            Chef::Log.debug("poldek check candidate version for #{@new_resource.package_name}");
74 +            return @candidate_version if @candidate_version
75 +
76 +            update_indexes
77 +            cmd = "poldek -q --uniq --skip-installed #{expand_options(@new_resource.options)} --cmd 'ls #{@new_resource.package_name}'"
78 +            out = shell_out!(cmd, :env => nil, :returns => [0,1,255])
79 +            if out.stdout
80 +                Chef::Log.debug("poldek STDOUT: #{out.stdout}");
81 +                version = version_from_nvra(out.stdout)
82 +                if version
83 +                    @candidate_version = version
84 +                end
85 +            end
86 +            unless @candidate_version
87 +                raise Chef::Exceptions::Package, "poldek does not have a version of package #{@new_resource.package_name}"
88 +            end
89 +            @candidate_version
90 +        end
91 +
92 +        def install_package(name, version)
93 +            Chef::Log.debug("#{@new_resource} installing package #{name}-#{version}")
94 +            package = "#{name}-#{version}"
95 +            update_indexes
96 +            out = shell_out!("poldek --noask #{expand_options(@new_resource.options)} -u #{package}", :env => nil)
97 +        end
98 +
99 +        def upgrade_package(name, version)
100 +            Chef::Log.debug("#{@new_resource} upgrading package #{name}-#{version}")
101 +            install_package(name, version)
102 +        end
103 +
104 +        def remove_package(name, version)
105 +            Chef::Log.debug("#{@new_resource} removing package #{name}-#{version}")
106 +            package = "#{name}-#{version}"
107 +            out = shell_out!("poldek --noask #{expand_options(@new_resource.options)} -e #{package}", :env => nil)
108 +        end
109 +
110 +        def purge_package(name, version)
111 +            remove_package(name, version)
112 +        end
113 +
114 +        private
115 +        @@updated = Hash.new
116 +
117 +        def version_from_nvra(stdout)
118 +            stdout[/^#{Regexp.escape(@new_resource.package_name)}-(.+)/, 1]
119 +        end
120 +
121 +        def update_indexes()
122 +            Chef::Log.debug("#{@new_resource} call update indexes #{expand_options(@new_resource.options)}")
123 +            checksum = Digest::MD5.hexdigest(@new_resource.options || '').to_s
124 +
125 +            if @@updated[checksum]
126 +                return
127 +            end
128 +            Chef::Log.debug("#{@new_resource} updating package indexes: #{expand_options(@new_resource.options)}")
129 +            shell_out!("poldek --up #{expand_options(@new_resource.options)}", :env => nil)
130 +            @@updated[checksum] = true
131 +        end
132 +      end
133 +    end
134 +  end
135 +end
136 diff --git a/lib/chef/providers.rb b/lib/chef/providers.rb
137 index cd265b061..075ffd7e8 100644
138 --- a/lib/chef/providers.rb
139 +++ b/lib/chef/providers.rb
140 @@ -74,6 +74,7 @@ require "chef/provider/package/macports"
141  require "chef/provider/package/openbsd"
142  require "chef/provider/package/pacman"
143  require "chef/provider/package/portage"
144 +require 'chef/provider/package/poldek'
145  require "chef/provider/package/paludis"
146  require "chef/provider/package/rpm"
147  require "chef/provider/package/rubygems"
148 diff --git a/lib/chef/resource/poldek_package.rb b/lib/chef/resource/poldek_package.rb
149 new file mode 100644
150 index 000000000..cdc8f9209
151 --- /dev/null
152 +++ b/lib/chef/resource/poldek_package.rb
153 @@ -0,0 +1,34 @@
154 +#
155 +# Author:: Elan Ruusamäe (glen@pld-linux.org)
156 +# Copyright:: Copyright (c) 2013 Elan Ruusamäe
157 +# License:: Apache License, Version 2.0
158 +#
159 +# Licensed under the Apache License, Version 2.0 (the "License");
160 +# you may not use this file except in compliance with the License.
161 +# You may obtain a copy of the License at
162 +#
163 +#     http://www.apache.org/licenses/LICENSE-2.0
164 +#
165 +# Unless required by applicable law or agreed to in writing, software
166 +# distributed under the License is distributed on an "AS IS" BASIS,
167 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
168 +# See the License for the specific language governing permissions and
169 +# limitations under the License.
170 +#
171 +
172 +require 'chef/resource/package'
173 +require 'chef/provider/package/poldek'
174 +
175 +class Chef
176 +  class Resource
177 +    class PoldekPackage < Chef::Resource::Package
178 +
179 +      def initialize(name, run_context=nil)
180 +        super
181 +        @resource_name = :poldek_package
182 +        @provider = Chef::Provider::Package::Poldek
183 +      end
184 +
185 +    end
186 +  end
187 +end
This page took 0.082465 seconds and 4 git commands to generate.