chef 0.9.18 → 0.10.0.beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +0 -3
- data/distro/arch/etc/rc.d/chef-server +0 -4
- data/distro/arch/etc/rc.d/chef-server-webui +0 -4
- data/distro/arch/etc/rc.d/chef-solr +0 -4
- data/distro/arch/etc/rc.d/chef-solr-indexer +0 -4
- data/lib/chef.rb +3 -3
- data/lib/chef/api_client.rb +1 -1
- data/lib/chef/application.rb +11 -1
- data/lib/chef/application/client.rb +18 -22
- data/lib/chef/application/knife.rb +28 -29
- data/lib/chef/application/solo.rb +14 -12
- data/lib/chef/client.rb +112 -54
- data/lib/chef/config.rb +4 -0
- data/lib/chef/cookbook/chefignore.rb +66 -0
- data/lib/chef/cookbook/cookbook_collection.rb +6 -5
- data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +10 -8
- data/lib/chef/cookbook/metadata.rb +200 -108
- data/lib/chef/cookbook_loader.rb +39 -163
- data/lib/chef/cookbook_uploader.rb +100 -78
- data/lib/chef/cookbook_version.rb +92 -47
- data/lib/chef/cookbook_version_selector.rb +163 -0
- data/lib/chef/couchdb.rb +9 -1
- data/lib/chef/data_bag.rb +1 -1
- data/lib/chef/data_bag_item.rb +1 -1
- data/lib/chef/encrypted_data_bag_item.rb +126 -0
- data/lib/chef/environment.rb +386 -0
- data/lib/chef/exceptions.rb +82 -1
- data/lib/chef/index_queue/amqp_client.rb +15 -12
- data/lib/chef/index_queue/indexable.rb +38 -4
- data/lib/chef/json_compat.rb +3 -3
- data/lib/chef/knife.rb +97 -202
- data/lib/chef/knife/bootstrap.rb +27 -61
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +4 -2
- data/lib/chef/knife/bootstrap/centos5-gems.erb +6 -15
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -4
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +6 -5
- data/lib/chef/knife/client_bulk_delete.rb +6 -3
- data/lib/chef/knife/client_create.rb +13 -10
- data/lib/chef/knife/client_delete.rb +10 -7
- data/lib/chef/knife/client_edit.rb +9 -6
- data/lib/chef/knife/client_list.rb +8 -5
- data/lib/chef/knife/client_reregister.rb +9 -6
- data/lib/chef/knife/client_show.rb +9 -6
- data/lib/chef/knife/configure.rb +15 -19
- data/lib/chef/knife/configure_client.rb +4 -4
- data/lib/chef/knife/cookbook_bulk_delete.rb +11 -8
- data/lib/chef/knife/cookbook_create.rb +120 -55
- data/lib/chef/knife/cookbook_delete.rb +18 -12
- data/lib/chef/knife/cookbook_download.rb +10 -6
- data/lib/chef/knife/cookbook_list.rb +15 -6
- data/lib/chef/knife/cookbook_metadata.rb +41 -21
- data/lib/chef/knife/cookbook_metadata_from_file.rb +4 -0
- data/lib/chef/knife/cookbook_show.rb +16 -5
- data/lib/chef/knife/cookbook_site_download.rb +2 -2
- data/lib/chef/knife/cookbook_site_share.rb +18 -13
- data/lib/chef/knife/cookbook_site_unshare.rb +7 -4
- data/lib/chef/knife/cookbook_site_vendor.rb +21 -18
- data/lib/chef/knife/cookbook_test.rb +14 -14
- data/lib/chef/knife/cookbook_upload.rb +91 -40
- data/lib/chef/knife/data_bag_create.rb +41 -6
- data/lib/chef/knife/data_bag_delete.rb +5 -3
- data/lib/chef/knife/data_bag_edit.rb +55 -11
- data/lib/chef/knife/data_bag_from_file.rb +47 -7
- data/lib/chef/knife/data_bag_list.rb +4 -1
- data/lib/chef/knife/data_bag_show.rb +44 -4
- data/lib/chef/knife/environment_create.rb +53 -0
- data/lib/chef/knife/environment_delete.rb +45 -0
- data/lib/chef/knife/environment_edit.rb +45 -0
- data/lib/chef/knife/environment_from_file.rb +39 -0
- data/lib/chef/knife/environment_list.rb +42 -0
- data/lib/chef/knife/environment_show.rb +46 -0
- data/lib/chef/knife/exec.rb +1 -1
- data/lib/chef/knife/index_rebuild.rb +8 -9
- data/lib/chef/knife/node_bulk_delete.rb +9 -6
- data/lib/chef/knife/node_create.rb +9 -6
- data/lib/chef/knife/node_delete.rb +10 -7
- data/lib/chef/knife/node_edit.rb +129 -10
- data/lib/chef/knife/node_from_file.rb +10 -7
- data/lib/chef/knife/node_list.rb +11 -6
- data/lib/chef/knife/node_run_list_add.rb +10 -7
- data/lib/chef/knife/node_run_list_remove.rb +9 -6
- data/lib/chef/knife/node_show.rb +15 -7
- data/lib/chef/knife/recipe_list.rb +4 -3
- data/lib/chef/knife/role_bulk_delete.rb +9 -6
- data/lib/chef/knife/role_create.rb +9 -6
- data/lib/chef/knife/role_delete.rb +10 -7
- data/lib/chef/knife/role_edit.rb +11 -8
- data/lib/chef/knife/role_from_file.rb +10 -7
- data/lib/chef/knife/role_list.rb +8 -5
- data/lib/chef/knife/role_show.rb +11 -8
- data/lib/chef/knife/search.rb +33 -10
- data/lib/chef/knife/ssh.rb +33 -61
- data/lib/chef/knife/status.rb +7 -4
- data/lib/chef/knife/subcommand_loader.rb +101 -0
- data/lib/chef/knife/tag_create.rb +31 -0
- data/lib/chef/knife/tag_delete.rb +31 -0
- data/lib/chef/knife/tag_list.rb +29 -0
- data/lib/chef/knife/ui.rb +229 -0
- data/lib/chef/knife/windows_bootstrap.rb +8 -5
- data/lib/chef/log.rb +5 -59
- data/lib/chef/mash.rb +211 -0
- data/lib/chef/mixins.rb +1 -2
- data/lib/chef/nil_argument.rb +3 -0
- data/lib/chef/node.rb +96 -34
- data/lib/chef/platform.rb +27 -0
- data/lib/chef/provider/cookbook_file.rb +21 -20
- data/lib/chef/provider/deploy/revision.rb +3 -0
- data/lib/chef/provider/file.rb +20 -11
- data/lib/chef/provider/git.rb +26 -26
- data/lib/chef/provider/group/aix.rb +70 -0
- data/lib/chef/provider/group/groupadd.rb +7 -4
- data/lib/chef/provider/group/usermod.rb +1 -1
- data/lib/chef/provider/package.rb +28 -28
- data/lib/chef/provider/package/dpkg.rb +1 -1
- data/lib/chef/provider/package/portage.rb +50 -39
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +3 -20
- data/lib/chef/provider/remote_directory.rb +0 -2
- data/lib/chef/provider/remote_file.rb +2 -3
- data/lib/chef/provider/service/arch.rb +28 -35
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/subversion.rb +22 -22
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/recipe.rb +10 -12
- data/lib/chef/resource.rb +49 -42
- data/lib/chef/resource/gem_package.rb +7 -3
- data/lib/chef/resource/git.rb +5 -5
- data/lib/chef/resource/package.rb +7 -7
- data/lib/chef/resource/scm.rb +2 -1
- data/lib/chef/resource/solaris_package.rb +0 -1
- data/lib/chef/resource/yum_package.rb +0 -1
- data/lib/chef/rest.rb +7 -16
- data/lib/chef/rest/rest_request.rb +0 -16
- data/lib/chef/role.rb +67 -13
- data/lib/chef/run_context.rb +37 -21
- data/lib/chef/run_list.rb +30 -15
- data/lib/chef/run_list/run_list_expansion.rb +41 -20
- data/lib/chef/run_list/run_list_item.rb +20 -6
- data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
- data/lib/chef/runner.rb +7 -15
- data/lib/chef/search/query.rb +12 -7
- data/lib/chef/shef.rb +6 -7
- data/lib/chef/shef/shef_session.rb +40 -35
- data/lib/chef/shell_out.rb +22 -201
- data/lib/chef/shell_out/unix.rb +224 -0
- data/lib/chef/shell_out/windows.rb +95 -0
- data/lib/chef/solr_query.rb +187 -0
- data/lib/chef/solr_query/lucene.treetop +145 -0
- data/lib/chef/solr_query/lucene_nodes.rb +285 -0
- data/lib/chef/solr_query/query_transform.rb +65 -0
- data/lib/chef/solr_query/solr_http_request.rb +118 -0
- data/lib/chef/version.rb +4 -2
- data/lib/chef/version_class.rb +70 -0
- data/lib/chef/version_constraint.rb +116 -0
- metadata +68 -37
- data/lib/chef/cookbook/metadata/version.rb +0 -87
- data/lib/chef/knife/bluebox_images_list.rb +0 -54
- data/lib/chef/knife/bluebox_server_create.rb +0 -157
- data/lib/chef/knife/bluebox_server_delete.rb +0 -63
- data/lib/chef/knife/bluebox_server_list.rb +0 -59
- data/lib/chef/knife/ec2_instance_data.rb +0 -46
- data/lib/chef/knife/ec2_server_create.rb +0 -218
- data/lib/chef/knife/ec2_server_delete.rb +0 -87
- data/lib/chef/knife/ec2_server_list.rb +0 -89
- data/lib/chef/knife/rackspace_server_create.rb +0 -184
- data/lib/chef/knife/rackspace_server_delete.rb +0 -57
- data/lib/chef/knife/rackspace_server_list.rb +0 -59
- data/lib/chef/knife/slicehost_images_list.rb +0 -53
- data/lib/chef/knife/slicehost_server_create.rb +0 -103
- data/lib/chef/knife/slicehost_server_delete.rb +0 -61
- data/lib/chef/knife/slicehost_server_list.rb +0 -64
- data/lib/chef/knife/terremark_server_create.rb +0 -152
- data/lib/chef/knife/terremark_server_delete.rb +0 -87
- data/lib/chef/knife/terremark_server_list.rb +0 -77
- data/lib/chef/mixin/find_preferred_file.rb +0 -92
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -25,17 +25,17 @@ require 'chef/platform'
|
|
|
25
25
|
class Chef
|
|
26
26
|
class Provider
|
|
27
27
|
class Package < Chef::Provider
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
include Chef::Mixin::Command
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
attr_accessor :candidate_version
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
def initialize(new_resource, run_context)
|
|
34
34
|
super
|
|
35
35
|
@candidate_version = nil
|
|
36
36
|
end
|
|
37
|
-
|
|
38
|
-
def action_install
|
|
37
|
+
|
|
38
|
+
def action_install
|
|
39
39
|
# If we specified a version, and it's not the current version, move to the specified version
|
|
40
40
|
if @new_resource.version != nil && @new_resource.version != @current_resource.version
|
|
41
41
|
install_version = @new_resource.version
|
|
@@ -51,18 +51,18 @@ class Chef
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
Chef::Log.info("Installing #{@new_resource} version #{install_version}")
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
# We need to make sure we handle the preseed file
|
|
56
56
|
if @new_resource.response_file
|
|
57
57
|
preseed_package(@new_resource.package_name, install_version)
|
|
58
58
|
end
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
status = install_package(@new_resource.package_name, install_version)
|
|
61
61
|
if status
|
|
62
62
|
@new_resource.updated_by_last_action(true)
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
def action_upgrade
|
|
67
67
|
if @current_resource.version != candidate_version
|
|
68
68
|
orig_version = @current_resource.version || "uninstalled"
|
|
@@ -73,8 +73,8 @@ class Chef
|
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
|
-
|
|
77
|
-
def action_remove
|
|
76
|
+
|
|
77
|
+
def action_remove
|
|
78
78
|
if removing_package?
|
|
79
79
|
Chef::Log.info("Removing #{@new_resource}")
|
|
80
80
|
remove_package(@current_resource.package_name, @new_resource.version)
|
|
@@ -82,7 +82,7 @@ class Chef
|
|
|
82
82
|
else
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
def removing_package?
|
|
87
87
|
if @current_resource.version.nil?
|
|
88
88
|
false # nothing to remove
|
|
@@ -94,7 +94,7 @@ class Chef
|
|
|
94
94
|
false # we don't have the version we want to remove
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
def action_purge
|
|
99
99
|
if removing_package?
|
|
100
100
|
Chef::Log.info("Purging #{@new_resource}")
|
|
@@ -102,39 +102,39 @@ class Chef
|
|
|
102
102
|
@new_resource.updated_by_last_action(true)
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
|
-
|
|
105
|
+
|
|
106
106
|
def install_package(name, version)
|
|
107
107
|
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :install"
|
|
108
108
|
end
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
def upgrade_package(name, version)
|
|
111
|
-
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :upgrade"
|
|
111
|
+
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :upgrade"
|
|
112
112
|
end
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
def remove_package(name, version)
|
|
115
|
-
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remove"
|
|
115
|
+
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remove"
|
|
116
116
|
end
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
def purge_package(name, version)
|
|
119
|
-
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :purge"
|
|
119
|
+
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :purge"
|
|
120
120
|
end
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
def preseed_package(name, version)
|
|
123
|
-
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support pre-seeding package install/upgrade instructions - don't ask it to!"
|
|
123
|
+
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support pre-seeding package install/upgrade instructions - don't ask it to!"
|
|
124
124
|
end
|
|
125
|
-
|
|
125
|
+
|
|
126
126
|
def get_preseed_file(name, version)
|
|
127
127
|
resource = preseed_resource(name, version)
|
|
128
128
|
Chef::Log.debug("Fetching preseed file to #{resource.path}")
|
|
129
129
|
resource.run_action('create')
|
|
130
|
-
|
|
130
|
+
|
|
131
131
|
if resource.updated_by_last_action?
|
|
132
132
|
resource.path
|
|
133
133
|
else
|
|
134
134
|
false
|
|
135
135
|
end
|
|
136
136
|
end
|
|
137
|
-
|
|
137
|
+
|
|
138
138
|
def preseed_resource(name, version)
|
|
139
139
|
# A directory in our cache to store this cookbook's preseed files in
|
|
140
140
|
file_cache_dir = Chef::FileCache.create_cache_path("preseed/#{@new_resource.cookbook_name}")
|
|
@@ -147,14 +147,14 @@ class Chef
|
|
|
147
147
|
remote_file.cookbook_name = @new_resource.cookbook_name
|
|
148
148
|
remote_file.source(@new_resource.response_file)
|
|
149
149
|
remote_file.backup(false)
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
remote_file
|
|
152
152
|
end
|
|
153
153
|
|
|
154
154
|
def expand_options(options)
|
|
155
155
|
options ? " #{options}" : ""
|
|
156
156
|
end
|
|
157
|
-
|
|
157
|
+
|
|
158
158
|
end
|
|
159
159
|
end
|
|
160
160
|
end
|
|
@@ -24,7 +24,7 @@ class Chef
|
|
|
24
24
|
class Provider
|
|
25
25
|
class Package
|
|
26
26
|
class Dpkg < Chef::Provider::Package::Apt
|
|
27
|
-
DPKG_INFO = /([a-z\d\-\+]+)\t([\w\d
|
|
27
|
+
DPKG_INFO = /([a-z\d\-\+]+)\t([\w\d.-]+)/
|
|
28
28
|
DPKG_INSTALLED = /^Status: install ok installed/
|
|
29
29
|
DPKG_VERSION = /^Version: (.+)$/
|
|
30
30
|
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -24,48 +24,59 @@ class Chef
|
|
|
24
24
|
class Provider
|
|
25
25
|
class Package
|
|
26
26
|
class Portage < Chef::Provider::Package
|
|
27
|
-
|
|
27
|
+
PACKAGE_NAME_PATTERN = %r{(([^/]+)/)?([^/]+)}
|
|
28
|
+
|
|
28
29
|
def load_current_resource
|
|
29
30
|
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
|
30
31
|
@current_resource.package_name(@new_resource.package_name)
|
|
31
32
|
|
|
32
|
-
category = @new_resource.package_name.split('/').first
|
|
33
|
-
pkg = @new_resource.package_name.split('/').last
|
|
34
|
-
|
|
35
33
|
@current_resource.version(nil)
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
_, category_with_slash, category, pkg = %r{^#{PACKAGE_NAME_PATTERN}$}.match(@new_resource.package_name).to_a
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Chef::Log.debug("Got current version #{$1}")
|
|
44
|
-
break
|
|
45
|
-
end
|
|
37
|
+
possibilities = Dir["/var/db/pkg/#{category || "*"}/#{pkg}-*"].map {|d| d.sub(%r{/var/db/pkg/}, "") }
|
|
38
|
+
versions = possibilities.map do |entry|
|
|
39
|
+
if(entry =~ %r{[^/]+/#{Regexp.escape(pkg)}\-(\d[\.\d]*((_(alpha|beta|pre|rc|p)\d*)*)?(-r\d+)?)})
|
|
40
|
+
[$&, $1]
|
|
46
41
|
end
|
|
42
|
+
end.compact
|
|
43
|
+
|
|
44
|
+
if versions.size > 1
|
|
45
|
+
atoms = versions.map {|v| v.first }.sort
|
|
46
|
+
raise Chef::Exceptions::Package, "Multiple packages found for #{@new_resource.package_name}: #{atoms.join(" ")}. Specify a category."
|
|
47
|
+
elsif versions.size == 1
|
|
48
|
+
@current_resource.version(versions.first.last)
|
|
49
|
+
Chef::Log.debug("Got current version #{$1}")
|
|
47
50
|
end
|
|
48
51
|
|
|
49
52
|
@current_resource
|
|
50
53
|
end
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
|
|
55
|
+
|
|
53
56
|
def parse_emerge(package, txt)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
availables = {}
|
|
58
|
+
package_without_category = package.split("/").last
|
|
59
|
+
found_package_name = nil
|
|
60
|
+
|
|
61
|
+
txt.each_line do |line|
|
|
62
|
+
if line =~ /\*\s+#{PACKAGE_NAME_PATTERN}/
|
|
63
|
+
found_package_name = $&.strip
|
|
64
|
+
if found_package_name == package || found_package_name.split("/").last == package_without_category
|
|
65
|
+
availables[found_package_name] = nil
|
|
66
|
+
end
|
|
58
67
|
end
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
elsif line =~ /Latest version installed: (.*)/
|
|
63
|
-
installed = $1
|
|
64
|
-
end
|
|
68
|
+
|
|
69
|
+
if line =~ /Latest version available: (.*)/ && availables.has_key?(found_package_name)
|
|
70
|
+
availables[found_package_name] = $1.strip
|
|
65
71
|
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
if availables.size > 1
|
|
75
|
+
# shouldn't happen if a category is specified so just use `package`
|
|
76
|
+
raise Chef::Exceptions::Package, "Multiple emerge results found for #{package}: #{availables.keys.join(" ")}. Specify a category."
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
availables.values.first
|
|
69
80
|
end
|
|
70
81
|
|
|
71
82
|
def candidate_version
|
|
@@ -83,29 +94,29 @@ class Chef
|
|
|
83
94
|
@candidate_version
|
|
84
95
|
|
|
85
96
|
end
|
|
86
|
-
|
|
87
|
-
|
|
97
|
+
|
|
98
|
+
|
|
88
99
|
def install_package(name, version)
|
|
89
|
-
pkg = "=#{name}-#{version}"
|
|
90
|
-
|
|
100
|
+
pkg = "=#{name}-#{version}"
|
|
101
|
+
|
|
91
102
|
if(version =~ /^\~(.+)/)
|
|
92
103
|
# If we start with a tilde
|
|
93
104
|
pkg = "~#{name}-#{$1}"
|
|
94
105
|
end
|
|
95
|
-
|
|
106
|
+
|
|
96
107
|
run_command_with_systems_locale(
|
|
97
108
|
:command => "emerge -g --color n --nospinner --quiet#{expand_options(@new_resource.options)} #{pkg}"
|
|
98
109
|
)
|
|
99
110
|
end
|
|
100
|
-
|
|
111
|
+
|
|
101
112
|
def upgrade_package(name, version)
|
|
102
113
|
install_package(name, version)
|
|
103
114
|
end
|
|
104
|
-
|
|
115
|
+
|
|
105
116
|
def remove_package(name, version)
|
|
106
117
|
if(version)
|
|
107
118
|
pkg = "=#{@new_resource.package_name}-#{version}"
|
|
108
|
-
else
|
|
119
|
+
else
|
|
109
120
|
pkg = "#{@new_resource.package_name}"
|
|
110
121
|
end
|
|
111
122
|
|
|
@@ -113,11 +124,11 @@ class Chef
|
|
|
113
124
|
:command => "emerge --unmerge --color n --nospinner --quiet#{expand_options(@new_resource.options)} #{pkg}"
|
|
114
125
|
)
|
|
115
126
|
end
|
|
116
|
-
|
|
127
|
+
|
|
117
128
|
def purge_package(name, version)
|
|
118
129
|
remove_package(name, version)
|
|
119
130
|
end
|
|
120
|
-
|
|
131
|
+
|
|
121
132
|
end
|
|
122
133
|
end
|
|
123
134
|
end
|
|
@@ -84,18 +84,9 @@ class Chef
|
|
|
84
84
|
Chef::Log.debug("zypper current resource #{@current_resource}")
|
|
85
85
|
@current_resource
|
|
86
86
|
end
|
|
87
|
-
|
|
88
|
-
#Gets the zypper Version from command output (Returns Floating Point number)
|
|
89
|
-
def zypper_version()
|
|
90
|
-
`zypper -V 2>&1`.scan(/\d+/).join(".").to_f
|
|
91
|
-
end
|
|
92
87
|
|
|
93
88
|
def install_package(name, version)
|
|
94
|
-
if
|
|
95
|
-
run_command(
|
|
96
|
-
:command => "zypper install -y #{name}"
|
|
97
|
-
)
|
|
98
|
-
elsif version
|
|
89
|
+
if version
|
|
99
90
|
run_command(
|
|
100
91
|
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
|
101
92
|
)
|
|
@@ -107,11 +98,7 @@ class Chef
|
|
|
107
98
|
end
|
|
108
99
|
|
|
109
100
|
def upgrade_package(name, version)
|
|
110
|
-
if
|
|
111
|
-
run_command(
|
|
112
|
-
:command => "zypper install -y #{name}"
|
|
113
|
-
)
|
|
114
|
-
elsif version
|
|
101
|
+
if version
|
|
115
102
|
run_command(
|
|
116
103
|
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
|
117
104
|
)
|
|
@@ -123,11 +110,7 @@ class Chef
|
|
|
123
110
|
end
|
|
124
111
|
|
|
125
112
|
def remove_package(name, version)
|
|
126
|
-
if
|
|
127
|
-
run_command(
|
|
128
|
-
:command => "zypper remove -y #{name}"
|
|
129
|
-
)
|
|
130
|
-
elsif version
|
|
113
|
+
if version
|
|
131
114
|
run_command(
|
|
132
115
|
:command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
|
|
133
116
|
)
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
|
|
19
19
|
require 'chef/provider/file'
|
|
20
20
|
require 'chef/rest'
|
|
21
|
-
require 'chef/mixin/find_preferred_file'
|
|
22
21
|
require 'uri'
|
|
23
22
|
require 'tempfile'
|
|
24
23
|
require 'net/https'
|
|
@@ -27,14 +26,14 @@ class Chef
|
|
|
27
26
|
class Provider
|
|
28
27
|
class RemoteFile < Chef::Provider::File
|
|
29
28
|
|
|
30
|
-
include Chef::Mixin::FindPreferredFile
|
|
31
|
-
|
|
32
29
|
def load_current_resource
|
|
33
30
|
super
|
|
34
31
|
@current_resource.checksum(checksum(@current_resource.path)) if ::File.exist?(@current_resource.path)
|
|
35
32
|
end
|
|
36
33
|
|
|
37
34
|
def action_create
|
|
35
|
+
assert_enclosing_directory_exists!
|
|
36
|
+
|
|
38
37
|
Chef::Log.debug("Checking #{@new_resource} for changes")
|
|
39
38
|
|
|
40
39
|
if current_resource_matches_target_checksum?
|
|
@@ -20,16 +20,16 @@ require 'chef/provider/service/init'
|
|
|
20
20
|
require 'chef/mixin/command'
|
|
21
21
|
|
|
22
22
|
class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
def initialize(new_resource, run_context)
|
|
25
25
|
super
|
|
26
26
|
@init_command = "/etc/rc.d/#{@new_resource.service_name}"
|
|
27
27
|
end
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
def load_current_resource
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
raise Chef::Exceptions::Service unless ::File.exists?("/etc/rc.conf")
|
|
32
|
-
raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/
|
|
32
|
+
raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
|
|
33
33
|
|
|
34
34
|
super
|
|
35
35
|
|
|
@@ -38,46 +38,38 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
|
|
|
38
38
|
@current_resource
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
# Get list of all daemons from the file '/etc/rc.conf'.
|
|
42
|
-
# Mutiple lines and background form are supported. Example:
|
|
43
|
-
# DAEMONS=(\
|
|
44
|
-
# foobar \
|
|
45
|
-
# @example \
|
|
46
|
-
# !net \
|
|
47
|
-
# )
|
|
48
41
|
def daemons
|
|
49
42
|
entries = []
|
|
50
|
-
if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/
|
|
51
|
-
entries += $1.
|
|
43
|
+
if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
|
|
44
|
+
entries += $1.split(" ") if $1.length > 0
|
|
52
45
|
end
|
|
53
|
-
|
|
46
|
+
|
|
54
47
|
yield(entries) if block_given?
|
|
55
|
-
|
|
48
|
+
|
|
56
49
|
entries
|
|
57
50
|
end
|
|
58
|
-
|
|
59
|
-
# FIXME: Multiple entries of DAEMONS will cause very bad results :)
|
|
51
|
+
|
|
60
52
|
def update_daemons(entries)
|
|
61
|
-
content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)
|
|
53
|
+
content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/, "DAEMONS=(#{entries.join(' ')})")
|
|
62
54
|
::File.open("/etc/rc.conf", "w") do |f|
|
|
63
55
|
f.write(content)
|
|
64
56
|
end
|
|
65
57
|
end
|
|
66
|
-
|
|
58
|
+
|
|
67
59
|
def enable_service()
|
|
68
60
|
new_daemons = []
|
|
69
61
|
entries = daemons
|
|
70
|
-
|
|
71
|
-
if entries.include?(new_resource.service_name)
|
|
72
|
-
# exists and already enabled
|
|
73
|
-
|
|
62
|
+
|
|
63
|
+
if entries.include?(new_resource.service_name)
|
|
64
|
+
# exists and already enabled
|
|
65
|
+
new_daemons += entries
|
|
74
66
|
else
|
|
75
67
|
if entries.include?("!#{new_resource.service_name}")
|
|
76
68
|
# exists but disabled
|
|
77
69
|
entries.each do |daemon|
|
|
78
|
-
if daemon == "!#{new_resource.service_name}"
|
|
70
|
+
if daemon == "!#{new_resource.service_name}"
|
|
79
71
|
new_daemons << new_resource.service_name
|
|
80
|
-
else
|
|
72
|
+
else
|
|
81
73
|
new_daemons << daemon
|
|
82
74
|
end
|
|
83
75
|
end
|
|
@@ -86,31 +78,32 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
|
|
|
86
78
|
new_daemons += entries
|
|
87
79
|
new_daemons << new_resource.service_name
|
|
88
80
|
end
|
|
89
|
-
update_daemons(new_daemons)
|
|
90
81
|
end
|
|
82
|
+
|
|
83
|
+
update_daemons(new_daemons)
|
|
91
84
|
end
|
|
92
|
-
|
|
85
|
+
|
|
93
86
|
def disable_service()
|
|
94
87
|
new_daemons = []
|
|
95
88
|
entries = daemons
|
|
96
|
-
|
|
89
|
+
|
|
97
90
|
if entries.include?("!#{new_resource.service_name}")
|
|
98
91
|
# exists and disabled
|
|
99
|
-
|
|
92
|
+
new_daemons += entries
|
|
100
93
|
else
|
|
101
|
-
if entries.include?(new_resource.service_name)
|
|
102
|
-
# exists but enabled
|
|
103
|
-
# FIXME: Does arch support !@foobar ?
|
|
94
|
+
if entries.include?(new_resource.service_name)
|
|
95
|
+
# exists but enabled
|
|
104
96
|
entries.each do |daemon|
|
|
105
|
-
if
|
|
97
|
+
if daemon == new_resource.service_name
|
|
106
98
|
new_daemons << "!#{new_resource.service_name}"
|
|
107
|
-
else
|
|
99
|
+
else
|
|
108
100
|
new_daemons << daemon
|
|
109
101
|
end
|
|
110
102
|
end
|
|
111
103
|
end
|
|
112
|
-
update_daemons(new_daemons)
|
|
113
104
|
end
|
|
105
|
+
|
|
106
|
+
update_daemons(new_daemons)
|
|
114
107
|
end
|
|
115
108
|
|
|
116
109
|
end
|