]> git.pld-linux.org Git - packages/chef.git/blame - poldek.patch
updated poldek patch for chef-12
[packages/chef.git] / poldek.patch
CommitLineData
0e535bd2
ER
1poldek package manager support
2
3e14fa30 3https://github.com/chef/chef/pull/7482
0e535bd2 4
3e14fa30
ER
5diff --git a/lib/chef/provider/package/poldek.rb b/lib/chef/provider/package/poldek.rb
6new file mode 100644
7index 000000000..63e3961a0
8--- /dev/null
9+++ b/lib/chef/provider/package/poldek.rb
10@@ -0,0 +1,125 @@
0e535bd2
ER
11+#
12+# Author:: Elan Ruusamäe (glen@pld-linux.org)
3e14fa30 13+# Copyright:: Copyright (c) 2013,2018 Elan Ruusamäe
0e535bd2
ER
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+
3e14fa30
ER
42+ provides :package, platform_family: "pld"
43+
0e535bd2
ER
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
3e14fa30
ER
136diff --git a/lib/chef/providers.rb b/lib/chef/providers.rb
137index 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"
c8ed2d9c
ER
141 require "chef/provider/package/openbsd"
142 require "chef/provider/package/pacman"
c8ed2d9c 143 require "chef/provider/package/portage"
3e14fa30 144+require 'chef/provider/package/poldek'
c8ed2d9c
ER
145 require "chef/provider/package/paludis"
146 require "chef/provider/package/rpm"
3e14fa30
ER
147 require "chef/provider/package/rubygems"
148diff --git a/lib/chef/resource/poldek_package.rb b/lib/chef/resource/poldek_package.rb
149new file mode 100644
150index 000000000..cdc8f9209
151--- /dev/null
152+++ b/lib/chef/resource/poldek_package.rb
0e535bd2
ER
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.079899 seconds and 4 git commands to generate.