chef 0.7.16 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of chef might be problematic. Click here for more details.
- data/README.rdoc +11 -10
- data/bin/chef-client +2 -2
- data/bin/chef-solo +1 -1
- data/bin/knife +27 -0
- data/bin/shef +49 -0
- data/distro/README +2 -0
- data/distro/{debian → common}/man/man1/chef-indexer.1 +0 -0
- data/distro/{debian → common}/man/man1/chef-server.1 +0 -0
- data/distro/{debian → common}/man/man8/chef-client.8 +0 -0
- data/distro/{debian → common}/man/man8/chef-solo.8 +0 -0
- data/distro/common/man/man8/knife.8 +375 -0
- data/distro/redhat/etc/init.d/chef-client +8 -4
- data/distro/redhat/etc/init.d/chef-server +16 -15
- data/distro/redhat/etc/init.d/chef-server-webui +78 -0
- data/distro/redhat/etc/init.d/chef-solr +76 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +75 -0
- data/distro/redhat/etc/sysconfig/chef-client +10 -0
- data/distro/redhat/etc/sysconfig/chef-server +10 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +10 -0
- data/distro/redhat/etc/sysconfig/chef-solr +9 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/distro/suse/etc/init.d/chef-client +121 -0
- data/lib/chef.rb +1 -1
- data/lib/chef/api_client.rb +263 -0
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/client.rb +21 -3
- data/lib/chef/application/knife.rb +144 -0
- data/lib/chef/application/server.rb +2 -1
- data/lib/chef/application/solo.rb +9 -2
- data/lib/chef/cache.rb +61 -0
- data/lib/chef/cache/checksum.rb +70 -0
- data/lib/chef/certificate.rb +154 -0
- data/lib/chef/client.rb +123 -220
- data/lib/chef/compile.rb +9 -21
- data/lib/chef/config.rb +67 -10
- data/lib/chef/cookbook.rb +49 -22
- data/lib/chef/cookbook/metadata.rb +85 -5
- data/lib/chef/cookbook_loader.rb +4 -4
- data/lib/chef/couchdb.rb +99 -30
- data/lib/chef/daemon.rb +1 -1
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +219 -0
- data/lib/chef/exceptions.rb +3 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/index_queue/amqp_client.rb +106 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +74 -0
- data/lib/chef/knife.rb +309 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +62 -0
- data/lib/chef/knife/client_delete.rb +37 -0
- data/lib/chef/knife/client_edit.rb +37 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +48 -0
- data/lib/chef/knife/client_show.rb +42 -0
- data/lib/chef/knife/configure.rb +123 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +46 -0
- data/lib/chef/knife/cookbook_delete.rb +41 -0
- data/lib/chef/knife/cookbook_download.rb +57 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +87 -0
- data/lib/chef/knife/cookbook_show.rb +75 -0
- data/lib/chef/knife/cookbook_upload.rb +179 -0
- data/lib/chef/knife/data_bag_create.rb +43 -0
- data/lib/chef/knife/data_bag_delete.rb +43 -0
- data/lib/chef/knife/data_bag_edit.rb +49 -0
- data/lib/chef/knife/data_bag_list.rb +42 -0
- data/lib/chef/knife/data_bag_show.rb +40 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/index_rebuild.rb +51 -0
- data/lib/chef/knife/node_bulk_delete.rb +43 -0
- data/lib/chef/knife/node_create.rb +39 -0
- data/lib/chef/knife/node_delete.rb +36 -0
- data/lib/chef/knife/node_edit.rb +36 -0
- data/lib/chef/knife/node_from_file.rb +42 -0
- data/lib/chef/knife/node_list.rb +41 -0
- data/lib/chef/knife/node_run_list_add.rb +64 -0
- data/lib/chef/knife/node_run_list_remove.rb +45 -0
- data/lib/chef/knife/node_show.rb +46 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +44 -0
- data/lib/chef/knife/role_delete.rb +36 -0
- data/lib/chef/knife/role_edit.rb +37 -0
- data/lib/chef/knife/role_from_file.rb +46 -0
- data/lib/chef/knife/role_list.rb +40 -0
- data/lib/chef/knife/role_show.rb +43 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/ssh.rb +170 -0
- data/lib/chef/log.rb +30 -8
- data/lib/chef/mixin/checksum.rb +2 -7
- data/lib/chef/mixin/command.rb +32 -13
- data/lib/chef/mixin/convert_to_class_name.rb +15 -0
- data/lib/chef/mixin/deep_merge.rb +199 -11
- data/lib/chef/mixin/generate_url.rb +18 -9
- data/lib/chef/mixin/language.rb +29 -1
- data/lib/chef/mixin/language_include_attribute.rb +56 -0
- data/lib/chef/mixin/language_include_recipe.rb +53 -0
- data/lib/chef/mixin/params_validate.rb +25 -12
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +2 -0
- data/lib/chef/mixin/template.rb +11 -1
- data/lib/chef/mixin/xml_escape.rb +87 -0
- data/lib/chef/node.rb +144 -122
- data/lib/chef/openid_registration.rb +12 -5
- data/lib/chef/platform.rb +89 -47
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cron.rb +5 -6
- data/lib/chef/provider/deploy.rb +43 -10
- data/lib/chef/provider/deploy/revision.rb +2 -3
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/file.rb +8 -4
- data/lib/chef/provider/git.rb +10 -5
- data/lib/chef/provider/group/dscl.rb +128 -0
- data/lib/chef/provider/http_request.rb +6 -2
- data/lib/chef/provider/ifconfig.rb +1 -0
- data/lib/chef/provider/link.rb +1 -1
- data/lib/chef/provider/log.rb +53 -0
- data/lib/chef/provider/mdadm.rb +88 -0
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package.rb +1 -1
- data/lib/chef/provider/package/easy_install.rb +106 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +1 -1
- data/lib/chef/provider/package/rpm.rb +10 -8
- data/lib/chef/provider/package/yum-dump.py +22 -3
- data/lib/chef/provider/package/yum.rb +32 -8
- data/lib/chef/provider/package/zypper.rb +132 -0
- data/lib/chef/provider/remote_directory.rb +58 -49
- data/lib/chef/provider/remote_file.rb +1 -1
- data/lib/chef/provider/route.rb +136 -80
- data/lib/chef/provider/ruby_block.rb +18 -1
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/freebsd.rb +0 -1
- data/lib/chef/provider/service/simple.rb +2 -3
- data/lib/chef/provider/service/upstart.rb +191 -0
- data/lib/chef/provider/subversion.rb +12 -4
- data/lib/chef/provider/template.rb +85 -53
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +277 -0
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/recipe.rb +2 -41
- data/lib/chef/resource.rb +9 -3
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/deploy.rb +16 -2
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +21 -2
- data/lib/chef/resource/scm.rb +8 -0
- data/lib/chef/resource/subversion.rb +1 -0
- data/lib/chef/resource/user.rb +5 -2
- data/lib/chef/resource/yum_package.rb +36 -0
- data/lib/chef/resource_collection.rb +17 -9
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/rest.rb +166 -81
- data/lib/chef/role.rb +114 -38
- data/lib/chef/run_list.rb +15 -6
- data/lib/chef/runner.rb +13 -11
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef.rb +220 -0
- data/lib/chef/shef/ext.rb +297 -0
- data/lib/chef/shef/shef_session.rb +175 -0
- data/lib/chef/streaming_cookbook_uploader.rb +187 -0
- data/lib/chef/tasks/chef_repo.rake +53 -155
- data/lib/chef/util/file_edit.rb +94 -96
- data/lib/chef/webui_user.rb +233 -0
- metadata +219 -63
- data/distro/debian/etc/init.d/chef-indexer +0 -175
- data/distro/redhat/etc/chef/client.rb +0 -16
- data/distro/redhat/etc/chef/indexer.rb +0 -10
- data/distro/redhat/etc/chef/server.rb +0 -22
- data/distro/redhat/etc/init.d/chef-indexer +0 -76
- data/lib/chef/application/indexer.rb +0 -141
- data/lib/chef/queue.rb +0 -145
- data/lib/chef/search.rb +0 -88
- data/lib/chef/search/result.rb +0 -64
- data/lib/chef/search_index.rb +0 -77
- data/lib/chef/util/fileedit.rb +0 -121
@@ -40,7 +40,7 @@ class Chef
|
|
40
40
|
Chef::Log.debug("Checking for mount point #{@current_resource.mount_point}")
|
41
41
|
|
42
42
|
# only check for existence of non-remote devices
|
43
|
-
if(@new_resource.device !~ /:/ && !::File.exists?(@new_resource.device) )
|
43
|
+
if(@new_resource.device !~ /:/ && @new_resource.device !~ /\/\// && !::File.exists?(@new_resource.device) )
|
44
44
|
raise Chef::Exceptions::Mount, "Device #{@new_resource.device} does not exist"
|
45
45
|
elsif( !::File.exists?(@new_resource.mount_point) )
|
46
46
|
raise Chef::Exceptions::Mount, "Mount point #{@new_resource.mount_point} does not exist"
|
@@ -47,7 +47,7 @@ class Chef
|
|
47
47
|
end
|
48
48
|
|
49
49
|
unless install_version
|
50
|
-
raise(Chef::Exceptions::Package, "No version specified, and no candidate version available
|
50
|
+
raise(Chef::Exceptions::Package, "No version specified, and no candidate version available for #{@new_resource.package_name}")
|
51
51
|
end
|
52
52
|
|
53
53
|
Chef::Log.info("Installing #{@new_resource} version #{install_version}")
|
@@ -0,0 +1,106 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Joe Williams (<joe@joetify.com>)
|
3
|
+
# Copyright:: Copyright (c) 2009 Joe Williams
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef/provider/package'
|
20
|
+
require 'chef/mixin/command'
|
21
|
+
require 'chef/resource/package'
|
22
|
+
class Chef
|
23
|
+
class Provider
|
24
|
+
class Package
|
25
|
+
class EasyInstall < Chef::Provider::Package
|
26
|
+
|
27
|
+
def install_check(name)
|
28
|
+
command = "python -c \"import sys; print sys.path\""
|
29
|
+
check = false
|
30
|
+
status = popen4(command) do |pid, stdin, stdout, stderr|
|
31
|
+
stdout.each do |line|
|
32
|
+
if line.include? "#{name}"
|
33
|
+
check = true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
check
|
38
|
+
end
|
39
|
+
|
40
|
+
def easy_install_binary_path
|
41
|
+
path = @new_resource.easy_install_binary
|
42
|
+
path ? path : 'easy_install'
|
43
|
+
end
|
44
|
+
|
45
|
+
def load_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
|
+
|
50
|
+
# get the currently installed version if installed
|
51
|
+
if install_check(@new_resource.package_name)
|
52
|
+
command = "python -c \"import #{@new_resource.package_name}; print #{@new_resource.package_name}.__path__\""
|
53
|
+
pid, stdin, stdout, stderr = popen4(command)
|
54
|
+
install_location = stdout.readline
|
55
|
+
install_location[/\S\S(.*)\/(.*)-(.*)-py(.*).egg\S/]
|
56
|
+
package_version = $3
|
57
|
+
else
|
58
|
+
package_version = nil
|
59
|
+
end
|
60
|
+
|
61
|
+
if package_version == @new_resource.version
|
62
|
+
Chef::Log.debug("#{@new_resource.package_name} at version #{@new_resource.version}")
|
63
|
+
@current_resource.version(@new_resource.version)
|
64
|
+
else
|
65
|
+
Chef::Log.debug("#{@new_resource.package_name} at version #{package_version}")
|
66
|
+
@current_resource.version(package_version)
|
67
|
+
end
|
68
|
+
|
69
|
+
@current_resource
|
70
|
+
end
|
71
|
+
|
72
|
+
def candidate_version
|
73
|
+
return @candidate_version if @candidate_version
|
74
|
+
|
75
|
+
# do a dry run to get the latest version
|
76
|
+
command = "#{easy_install_binary_path} -n #{@new_resource.package_name}"
|
77
|
+
pid, stdin, stdout, stderr = popen4(command)
|
78
|
+
dry_run_output = ""
|
79
|
+
stdout.each do |line|
|
80
|
+
dry_run_output << line
|
81
|
+
end
|
82
|
+
dry_run_output[/(.*)Best match: (.*) (.*)\n/]
|
83
|
+
@candidate_version = $3
|
84
|
+
@candidate_version
|
85
|
+
end
|
86
|
+
|
87
|
+
def install_package(name, version)
|
88
|
+
run_command(:command => "#{easy_install_binary_path} \"#{name}==#{version}\"")
|
89
|
+
end
|
90
|
+
|
91
|
+
def upgrade_package(name, version)
|
92
|
+
install_package(name, version)
|
93
|
+
end
|
94
|
+
|
95
|
+
def remove_package(name, version)
|
96
|
+
run_command(:command => "#{easy_install_binary_path} -m #{name}")
|
97
|
+
end
|
98
|
+
|
99
|
+
def purge_package(name, version)
|
100
|
+
remove_package(name, version)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Jan Zimmek (<jan.zimmek@web.de>)
|
3
|
+
# Copyright:: Copyright (c) 2010 Jan Zimmek
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef/provider/package'
|
20
|
+
require 'chef/mixin/command'
|
21
|
+
require 'chef/resource/package'
|
22
|
+
|
23
|
+
class Chef
|
24
|
+
class Provider
|
25
|
+
class Package
|
26
|
+
class Pacman < Chef::Provider::Package
|
27
|
+
|
28
|
+
def load_current_resource
|
29
|
+
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
30
|
+
@current_resource.package_name(@new_resource.package_name)
|
31
|
+
|
32
|
+
@current_resource.version(nil)
|
33
|
+
|
34
|
+
Chef::Log.debug("Checking pacman for #{@new_resource.package_name}")
|
35
|
+
status = popen4("pacman -Qi #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
|
36
|
+
stdout.each do |line|
|
37
|
+
case line
|
38
|
+
when /^Version(\s?)*: (.+)$/
|
39
|
+
Chef::Log.debug("Current version is #{$2}")
|
40
|
+
@current_resource.version($2)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
unless status.exitstatus == 0 || status.exitstatus == 1
|
46
|
+
raise Chef::Exceptions::Package, "pacman failed - #{status.inspect}!"
|
47
|
+
end
|
48
|
+
|
49
|
+
@current_resource
|
50
|
+
end
|
51
|
+
|
52
|
+
def candidate_version
|
53
|
+
return @candidate_version if @candidate_version
|
54
|
+
|
55
|
+
status = popen4("pacman -Ss #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
|
56
|
+
stdout.each do |line|
|
57
|
+
case line
|
58
|
+
when /^(extra|core|community)\/#{@new_resource.package_name} (.+)$/
|
59
|
+
# $2 contains a string like "4.4.0-1 (kde kdenetwork)" or "3.10-4 (base)"
|
60
|
+
# simply split by space and use first token
|
61
|
+
@candidate_version = $2.split(" ").first
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
unless status.exitstatus == 0 || status.exitstatus == 1
|
67
|
+
raise Chef::Exceptions::Package, "pacman failed - #{status.inspect}!"
|
68
|
+
end
|
69
|
+
|
70
|
+
unless @candidate_version
|
71
|
+
raise Chef::Exceptions::Package, "pacman does not have a version of package #{@new_resource.package_name}"
|
72
|
+
end
|
73
|
+
|
74
|
+
@candidate_version
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
def install_package(name, version)
|
79
|
+
run_command_with_systems_locale(
|
80
|
+
:command => "pacman --sync --noconfirm --noprogressbar#{expand_options(@new_resource.options)} #{name}"
|
81
|
+
)
|
82
|
+
end
|
83
|
+
|
84
|
+
def upgrade_package(name, version)
|
85
|
+
install_package(name, version)
|
86
|
+
end
|
87
|
+
|
88
|
+
def remove_package(name, version)
|
89
|
+
run_command_with_systems_locale(
|
90
|
+
:command => "pacman --remove --noconfirm --noprogressbar#{expand_options(@new_resource.options)} #{name}"
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
def purge_package(name, version)
|
95
|
+
remove_package(name, version)
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -38,7 +38,7 @@ class Chef
|
|
38
38
|
|
39
39
|
if( ::File.exists?(catdir) )
|
40
40
|
Dir.entries(catdir).each do |entry|
|
41
|
-
if(entry =~ /^#{Regexp.escape(pkg)}\-(\d[\.\d]*((_(alpha|beta|pre|rc|p)\d*)*)?)/)
|
41
|
+
if(entry =~ /^#{Regexp.escape(pkg)}\-(\d[\.\d]*((_(alpha|beta|pre|rc|p)\d*)*)?(-r\d+)?)/)
|
42
42
|
@current_resource.version($1)
|
43
43
|
Chef::Log.debug("Got current version #{$1}")
|
44
44
|
break
|
@@ -69,16 +69,18 @@ class Chef
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def install_package(name, version)
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
unless @current_resource.version
|
73
|
+
run_command_with_systems_locale(
|
74
|
+
:command => "rpm -i #{@new_resource.source}"
|
75
|
+
)
|
76
|
+
else
|
77
|
+
run_command_with_systems_locale(
|
78
|
+
:command => "rpm -U #{@new_resource.source}"
|
79
|
+
)
|
80
|
+
end
|
75
81
|
end
|
76
82
|
|
77
|
-
|
78
|
-
run_command_with_systems_locale(
|
79
|
-
:command => "rpm -U #{@new_resource.source}"
|
80
|
-
)
|
81
|
-
end
|
83
|
+
alias_method :upgrade_package, :install_package
|
82
84
|
|
83
85
|
def remove_package(name, version)
|
84
86
|
if version
|
@@ -45,8 +45,17 @@ failure = False
|
|
45
45
|
try:
|
46
46
|
try:
|
47
47
|
y = yum.YumBase()
|
48
|
-
|
49
|
-
|
48
|
+
try:
|
49
|
+
# Only want our output
|
50
|
+
y.doConfigSetup(errorlevel=0,debuglevel=0)
|
51
|
+
except:
|
52
|
+
# but of course, yum on even moderately old
|
53
|
+
# redhat/centosen doesn't know how to do logging properly
|
54
|
+
# so we duck punch our way to victory
|
55
|
+
def __log(a,b): pass
|
56
|
+
y.doConfigSetup()
|
57
|
+
y.log = __log
|
58
|
+
y.errorlog = __log
|
50
59
|
|
51
60
|
# Yum assumes it can update the cache directory. Disable this for non root
|
52
61
|
# users.
|
@@ -70,7 +79,17 @@ try:
|
|
70
79
|
y.doTsSetup()
|
71
80
|
y.doRpmDBSetup()
|
72
81
|
|
73
|
-
|
82
|
+
try:
|
83
|
+
db = y.doPackageLists('all')
|
84
|
+
except AttributeError:
|
85
|
+
# some people claim that testing for yum.__version__ should be
|
86
|
+
# enough to see if this is required, but I say they're liars.
|
87
|
+
# the yum on 4.8 at least understands yum.__version__ but still
|
88
|
+
# needs to get its repos and sacks set up manually.
|
89
|
+
# Thus, we just try it, fail, and then try again. WCPGW?
|
90
|
+
y.doRepoSetup()
|
91
|
+
y.doSackSetup()
|
92
|
+
db = y.doPackageLists('all')
|
74
93
|
|
75
94
|
y.closeRpmDB()
|
76
95
|
|
@@ -115,6 +115,23 @@ class Chef
|
|
115
115
|
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
116
116
|
@current_resource.package_name(@new_resource.package_name)
|
117
117
|
|
118
|
+
if @new_resource.source
|
119
|
+
unless ::File.exists?(@new_resource.source)
|
120
|
+
raise Chef::Exceptions::Package, "Package #{@new_resource.name} not found: #{@new_resource.source}"
|
121
|
+
end
|
122
|
+
|
123
|
+
Chef::Log.debug("Checking rpm status for #{@new_resource.package_name}")
|
124
|
+
status = popen4("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}") do |pid, stdin, stdout, stderr|
|
125
|
+
stdout.each do |line|
|
126
|
+
case line
|
127
|
+
when /([\w\d_.-]+)\s([\w\d_.-]+)/
|
128
|
+
@current_resource.package_name($1)
|
129
|
+
@new_resource.version($2)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
118
135
|
Chef::Log.debug("Checking yum info for #{@new_resource.package_name}")
|
119
136
|
|
120
137
|
@yum.refresh
|
@@ -133,17 +150,24 @@ class Chef
|
|
133
150
|
end
|
134
151
|
|
135
152
|
def install_package(name, version)
|
136
|
-
|
137
|
-
|
138
|
-
|
153
|
+
if @new_resource.source
|
154
|
+
run_command_with_systems_locale(
|
155
|
+
:command => "yum -d0 -e0 -y localinstall #{@new_resource.source}"
|
156
|
+
)
|
157
|
+
else
|
158
|
+
run_command_with_systems_locale(
|
159
|
+
:command => "yum -d0 -e0 -y install #{name}-#{version}"
|
160
|
+
)
|
161
|
+
end
|
139
162
|
@yum.flush
|
140
163
|
end
|
141
164
|
|
142
165
|
def upgrade_package(name, version)
|
143
|
-
# If we
|
144
|
-
|
166
|
+
# If we're not given a version, running update is the correct
|
167
|
+
# option. If we are, then running install_package is right.
|
168
|
+
unless version
|
145
169
|
run_command_with_systems_locale(
|
146
|
-
:command => "yum -
|
170
|
+
:command => "yum -d0 -e0 -y update #{name}"
|
147
171
|
)
|
148
172
|
@yum.flush
|
149
173
|
else
|
@@ -154,11 +178,11 @@ class Chef
|
|
154
178
|
def remove_package(name, version)
|
155
179
|
if version
|
156
180
|
run_command_with_systems_locale(
|
157
|
-
:command => "yum -
|
181
|
+
:command => "yum -d0 -e0 -y remove #{name}-#{version}"
|
158
182
|
)
|
159
183
|
else
|
160
184
|
run_command_with_systems_locale(
|
161
|
-
:command => "yum -
|
185
|
+
:command => "yum -d0 -e0 -y remove #{name}"
|
162
186
|
)
|
163
187
|
end
|
164
188
|
|
@@ -0,0 +1,132 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef/provider/package'
|
20
|
+
require 'chef/mixin/command'
|
21
|
+
require 'chef/resource/package'
|
22
|
+
require 'singleton'
|
23
|
+
|
24
|
+
class Chef
|
25
|
+
class Provider
|
26
|
+
class Package
|
27
|
+
class Zypper < Chef::Provider::Package
|
28
|
+
|
29
|
+
|
30
|
+
def load_current_resource
|
31
|
+
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
32
|
+
@current_resource.package_name(@new_resource.package_name)
|
33
|
+
|
34
|
+
is_installed=false
|
35
|
+
version=''
|
36
|
+
is_out_of_date=false
|
37
|
+
Chef::Log.debug("Checking zypper for #{@new_resource.package_name}")
|
38
|
+
status = popen4("zypper info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
|
39
|
+
stdout.each do |line|
|
40
|
+
case line
|
41
|
+
when /^Version: (.+)$/
|
42
|
+
version = $1
|
43
|
+
Chef::Log.debug("zypper version=#{$1}")
|
44
|
+
when /^Installed: Yes$/
|
45
|
+
is_installed=true
|
46
|
+
Chef::Log.debug("zypper installed true")
|
47
|
+
|
48
|
+
when /^Installed: No$/
|
49
|
+
is_installed=false
|
50
|
+
Chef::Log.debug("zypper installed false")
|
51
|
+
when /^Status: out-of-date \(version (.+) installed\)$/
|
52
|
+
is_out_of_date=true
|
53
|
+
oud_version=$1
|
54
|
+
Chef::Log.debug("zypper out of date version=#{$1}")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
if is_installed==false
|
60
|
+
@candidate_version=version
|
61
|
+
@current_resource.version(nil)
|
62
|
+
Chef::Log.debug("dentro installed false");
|
63
|
+
end
|
64
|
+
|
65
|
+
if is_installed==true
|
66
|
+
if is_out_of_date==true
|
67
|
+
@current_resource.version(oud_version)
|
68
|
+
@candidate_version=version
|
69
|
+
Chef::Log.debug("dentro installed outofdate");
|
70
|
+
else
|
71
|
+
@current_resource.version(version)
|
72
|
+
@candidate_version=version
|
73
|
+
Chef::Log.debug("dentro installed");
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
unless status.exitstatus == 0
|
79
|
+
raise Chef::Exceptions::Package, "zypper failed - #{status.inspect}!"
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
Chef::Log.debug("zypper current resource #{@current_resource}")
|
84
|
+
@current_resource
|
85
|
+
end
|
86
|
+
|
87
|
+
def install_package(name, version)
|
88
|
+
if version
|
89
|
+
run_command(
|
90
|
+
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
91
|
+
)
|
92
|
+
else
|
93
|
+
run_command(
|
94
|
+
:command => "zypper -n --no-gpg-checks install -l #{name}"
|
95
|
+
)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def upgrade_package(name, version)
|
100
|
+
if version
|
101
|
+
run_command(
|
102
|
+
:command => "zypper -n --no-gpg-checks update -l #{name}=#{version}"
|
103
|
+
)
|
104
|
+
else
|
105
|
+
run_command(
|
106
|
+
:command => "zypper -n --no-gpg-checks update -l #{name}"
|
107
|
+
)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def remove_package(name, version)
|
112
|
+
if version
|
113
|
+
run_command(
|
114
|
+
:command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
|
115
|
+
)
|
116
|
+
else
|
117
|
+
run_command(
|
118
|
+
:command => "zypper -n --no-gpg-checks remove #{name}"
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
def purge_package(name, version)
|
126
|
+
remove_package(name, version)
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|