1 poldek package manager support
3 https://tickets.opscode.com/browse/CHEF-4476
4 https://github.com/opscode/chef/pull/1225
6 --- chef-11.12.8/lib/chef/provider/package/poldek.rb 1970-01-01 02:00:00.000000000 +0200
7 +++ chef-11.12.8.poldek/lib/chef/provider/package/poldek.rb 2014-12-04 18:27:24.468416380 +0200
10 +# Author:: Elan Ruusamäe (glen@pld-linux.org)
11 +# Copyright:: Copyright (c) 2013 Elan Ruusamäe
12 +# License:: Apache License, Version 2.0
14 +# Licensed under the Apache License, Version 2.0 (the "License");
15 +# you may not use this file except in compliance with the License.
16 +# You may obtain a copy of the License at
18 +# http://www.apache.org/licenses/LICENSE-2.0
20 +# Unless required by applicable law or agreed to in writing, software
21 +# distributed under the License is distributed on an "AS IS" BASIS,
22 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 +# See the License for the specific language governing permissions and
24 +# limitations under the License.
28 +require 'chef/provider/package'
29 +require 'chef/mixin/shell_out'
30 +require 'chef/resource/package'
31 +require 'chef/mixin/get_source_from_package'
36 + class Poldek < Chef::Provider::Package
37 + include Chef::Mixin::ShellOut
38 + attr_accessor :is_virtual_package
40 + def load_current_resource
41 + Chef::Log.debug("#{@new_resource} loading current resource")
42 + @current_resource = Chef::Resource::Package.new(@new_resource.name)
43 + @current_resource.package_name(@new_resource.package_name)
44 + @current_resource.version(nil)
46 + @current_resource # modified by check_package_state
49 + def check_package_state()
50 + Chef::Log.debug("#{@new_resource} checking package #{@new_resource.package_name}")
53 + @current_resource.version(nil)
55 + out = shell_out!("rpm -q #{@new_resource.package_name}", :env => nil, :returns => [0,1])
57 + Chef::Log.debug("rpm STDOUT: #{out.stdout}");
58 + version = version_from_nvra(out.stdout)
60 + @current_resource.version(version)
68 + def candidate_version
69 + Chef::Log.debug("poldek check candidate version for #{@new_resource.package_name}");
70 + return @candidate_version if @candidate_version
73 + cmd = "poldek -q --uniq --skip-installed #{expand_options(@new_resource.options)} --cmd 'ls #{@new_resource.package_name}'"
74 + out = shell_out!(cmd, :env => nil, :returns => [0,1,255])
76 + Chef::Log.debug("poldek STDOUT: #{out.stdout}");
77 + version = version_from_nvra(out.stdout)
79 + @candidate_version = version
82 + unless @candidate_version
83 + raise Chef::Exceptions::Package, "poldek does not have a version of package #{@new_resource.package_name}"
88 + def install_package(name, version)
89 + Chef::Log.debug("#{@new_resource} installing package #{name}-#{version}")
90 + package = "#{name}-#{version}"
92 + out = shell_out!("poldek --noask #{expand_options(@new_resource.options)} -u #{package}", :env => nil)
95 + def upgrade_package(name, version)
96 + Chef::Log.debug("#{@new_resource} upgrading package #{name}-#{version}")
97 + install_package(name, version)
100 + def remove_package(name, version)
101 + Chef::Log.debug("#{@new_resource} removing package #{name}-#{version}")
102 + package = "#{name}-#{version}"
103 + out = shell_out!("poldek --noask #{expand_options(@new_resource.options)} -e #{package}", :env => nil)
106 + def purge_package(name, version)
107 + remove_package(name, version)
111 + @@updated = Hash.new
113 + def version_from_nvra(stdout)
114 + stdout[/^#{Regexp.escape(@new_resource.package_name)}-(.+)/, 1]
117 + def update_indexes()
118 + Chef::Log.debug("#{@new_resource} call update indexes #{expand_options(@new_resource.options)}")
119 + checksum = Digest::MD5.hexdigest(@new_resource.options || '').to_s
121 + if @@updated[checksum]
124 + Chef::Log.debug("#{@new_resource} updating package indexes: #{expand_options(@new_resource.options)}")
125 + shell_out!("poldek --up #{expand_options(@new_resource.options)}", :env => nil)
126 + @@updated[checksum] = true
132 --- chef-11.14.2/lib/chef/providers.rb~ 2014-12-04 18:38:06.000000000 +0200
133 +++ chef-11.14.2/lib/chef/providers.rb 2014-12-04 18:38:39.567794339 +0200
135 require "chef/provider/package/macports"
136 require "chef/provider/package/pacman"
137 require "chef/provider/package/portage"
138 +require "chef/provider/package/poldek"
139 require "chef/provider/package/paludis"
140 require "chef/provider/package/rpm"
141 require "chef/provider/package/rubygems"
142 --- chef-11.12.8/lib/chef/resource/poldek_package.rb 1970-01-01 02:00:00.000000000 +0200
143 +++ chef-11.12.8.poldek/lib/chef/resource/poldek_package.rb 2014-12-04 18:27:24.438414927 +0200
146 +# Author:: Elan Ruusamäe (glen@pld-linux.org)
147 +# Copyright:: Copyright (c) 2013 Elan Ruusamäe
148 +# License:: Apache License, Version 2.0
150 +# Licensed under the Apache License, Version 2.0 (the "License");
151 +# you may not use this file except in compliance with the License.
152 +# You may obtain a copy of the License at
154 +# http://www.apache.org/licenses/LICENSE-2.0
156 +# Unless required by applicable law or agreed to in writing, software
157 +# distributed under the License is distributed on an "AS IS" BASIS,
158 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159 +# See the License for the specific language governing permissions and
160 +# limitations under the License.
163 +require 'chef/resource/package'
164 +require 'chef/provider/package/poldek'
168 + class PoldekPackage < Chef::Resource::Package
170 + def initialize(name, run_context=nil)
172 + @resource_name = :poldek_package
173 + @provider = Chef::Provider::Package::Poldek