1 poldek package manager support
3 https://github.com/chef/chef/pull/7482
5 diff --git a/lib/chef/provider/package/poldek.rb b/lib/chef/provider/package/poldek.rb
7 index 000000000..63e3961a0
9 +++ b/lib/chef/provider/package/poldek.rb
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
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
20 +# http://www.apache.org/licenses/LICENSE-2.0
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.
30 +require 'chef/provider/package'
31 +require 'chef/mixin/shell_out'
32 +require 'chef/resource/package'
33 +require 'chef/mixin/get_source_from_package'
38 + class Poldek < Chef::Provider::Package
39 + include Chef::Mixin::ShellOut
40 + attr_accessor :is_virtual_package
42 + provides :package, platform_family: "pld"
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)
50 + @current_resource # modified by check_package_state
53 + def check_package_state()
54 + Chef::Log.debug("#{@new_resource} checking package #{@new_resource.package_name}")
57 + @current_resource.version(nil)
59 + out = shell_out!("rpm -q #{@new_resource.package_name}", :env => nil, :returns => [0,1])
61 + Chef::Log.debug("rpm STDOUT: #{out.stdout}");
62 + version = version_from_nvra(out.stdout)
64 + @current_resource.version(version)
72 + def candidate_version
73 + Chef::Log.debug("poldek check candidate version for #{@new_resource.package_name}");
74 + return @candidate_version if @candidate_version
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])
80 + Chef::Log.debug("poldek STDOUT: #{out.stdout}");
81 + version = version_from_nvra(out.stdout)
83 + @candidate_version = version
86 + unless @candidate_version
87 + raise Chef::Exceptions::Package, "poldek does not have a version of package #{@new_resource.package_name}"
92 + def install_package(name, version)
93 + Chef::Log.debug("#{@new_resource} installing package #{name}-#{version}")
94 + package = "#{name}-#{version}"
96 + out = shell_out!("poldek --noask #{expand_options(@new_resource.options)} -u #{package}", :env => nil)
99 + def upgrade_package(name, version)
100 + Chef::Log.debug("#{@new_resource} upgrading package #{name}-#{version}")
101 + install_package(name, version)
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)
110 + def purge_package(name, version)
111 + remove_package(name, version)
115 + @@updated = Hash.new
117 + def version_from_nvra(stdout)
118 + stdout[/^#{Regexp.escape(@new_resource.package_name)}-(.+)/, 1]
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
125 + if @@updated[checksum]
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
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
150 index 000000000..cdc8f9209
152 +++ b/lib/chef/resource/poldek_package.rb
155 +# Author:: Elan Ruusamäe (glen@pld-linux.org)
156 +# Copyright:: Copyright (c) 2013 Elan Ruusamäe
157 +# License:: Apache License, Version 2.0
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
163 +# http://www.apache.org/licenses/LICENSE-2.0
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.
172 +require 'chef/resource/package'
173 +require 'chef/provider/package/poldek'
177 + class PoldekPackage < Chef::Resource::Package
179 + def initialize(name, run_context=nil)
181 + @resource_name = :poldek_package
182 + @provider = Chef::Provider::Package::Poldek