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.
|
|
@@ -21,13 +21,17 @@ require 'chef/resource/package'
|
|
|
21
21
|
class Chef
|
|
22
22
|
class Resource
|
|
23
23
|
class GemPackage < Chef::Resource::Package
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
def initialize(name, run_context=nil)
|
|
26
26
|
super
|
|
27
27
|
@resource_name = :gem_package
|
|
28
28
|
@provider = Chef::Provider::Package::Rubygems
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
def source(arg=nil)
|
|
32
|
+
set_or_return(:source, arg, :kind_of => [ String, Array ])
|
|
33
|
+
end
|
|
34
|
+
|
|
31
35
|
# Sets a custom gem_binary to run for gem commands.
|
|
32
36
|
def gem_binary(gem_cmd=nil)
|
|
33
37
|
set_or_return(:gem_binary,gem_cmd,:kind_of => [ String ])
|
data/lib/chef/resource/git.rb
CHANGED
|
@@ -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.
|
|
@@ -21,16 +21,16 @@ require "chef/resource/scm"
|
|
|
21
21
|
class Chef
|
|
22
22
|
class Resource
|
|
23
23
|
class Git < Chef::Resource::Scm
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
def initialize(name, run_context=nil)
|
|
26
26
|
super
|
|
27
27
|
@resource_name = :git
|
|
28
28
|
@provider = Chef::Provider::Git
|
|
29
29
|
end
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
alias :branch :revision
|
|
32
32
|
alias :reference :revision
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
end
|
|
@@ -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.
|
|
@@ -21,7 +21,7 @@ require 'chef/resource'
|
|
|
21
21
|
class Chef
|
|
22
22
|
class Resource
|
|
23
23
|
class Package < Chef::Resource
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
def initialize(name, run_context=nil)
|
|
26
26
|
super
|
|
27
27
|
@resource_name = :package
|
|
@@ -34,7 +34,7 @@ class Chef
|
|
|
34
34
|
@options = nil
|
|
35
35
|
@allowed_actions.push(:install, :upgrade, :remove, :purge)
|
|
36
36
|
end
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
def package_name(arg=nil)
|
|
39
39
|
set_or_return(
|
|
40
40
|
:package_name,
|
|
@@ -42,7 +42,7 @@ class Chef
|
|
|
42
42
|
:kind_of => [ String ]
|
|
43
43
|
)
|
|
44
44
|
end
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
def version(arg=nil)
|
|
47
47
|
set_or_return(
|
|
48
48
|
:version,
|
|
@@ -50,7 +50,7 @@ class Chef
|
|
|
50
50
|
:kind_of => [ String ]
|
|
51
51
|
)
|
|
52
52
|
end
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
def response_file(arg=nil)
|
|
55
55
|
set_or_return(
|
|
56
56
|
:response_file,
|
|
@@ -58,7 +58,7 @@ class Chef
|
|
|
58
58
|
:kind_of => [ String ]
|
|
59
59
|
)
|
|
60
60
|
end
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
def source(arg=nil)
|
|
63
63
|
set_or_return(
|
|
64
64
|
:source,
|
data/lib/chef/resource/scm.rb
CHANGED
|
@@ -22,7 +22,7 @@ require 'chef/resource'
|
|
|
22
22
|
class Chef
|
|
23
23
|
class Resource
|
|
24
24
|
class Scm < Chef::Resource
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
def initialize(name, run_context=nil)
|
|
27
27
|
super
|
|
28
28
|
@destination = name
|
|
@@ -33,6 +33,7 @@ class Chef
|
|
|
33
33
|
@ssh_wrapper = nil
|
|
34
34
|
@depth = nil
|
|
35
35
|
@allowed_actions.push(:checkout, :export, :sync, :diff, :log)
|
|
36
|
+
@action = [:sync]
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
def destination(arg=nil)
|
data/lib/chef/rest.rb
CHANGED
|
@@ -298,12 +298,13 @@ class Chef
|
|
|
298
298
|
retry
|
|
299
299
|
end
|
|
300
300
|
raise Timeout::Error, "Timeout connecting to #{url.host}:#{url.port} for #{rest_request.path}, giving up"
|
|
301
|
-
rescue Net::
|
|
302
|
-
if
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
301
|
+
rescue Net::HTTPServerException
|
|
302
|
+
if res.kind_of?(Net::HTTPForbidden)
|
|
303
|
+
if http_retry_count - http_attempts + 1 > 0
|
|
304
|
+
Chef::Log.error("Received 403 Forbidden against #{url.host}:#{url.port} for #{rest_request.path}, retry #{http_attempts}/#{http_retry_count}")
|
|
305
|
+
sleep(http_retry_delay)
|
|
306
|
+
retry
|
|
307
|
+
end
|
|
307
308
|
end
|
|
308
309
|
raise
|
|
309
310
|
end
|
|
@@ -358,7 +359,6 @@ class Chef
|
|
|
358
359
|
headers["Content-Type"] = 'application/json' if json_body
|
|
359
360
|
headers['Content-Length'] = json_body.bytesize.to_s if json_body
|
|
360
361
|
headers.merge!(authentication_headers(method, url, json_body)) if sign_requests?
|
|
361
|
-
headers.merge!(Chef::Config[:custom_http_headers]) if Chef::Config[:custom_http_headers]
|
|
362
362
|
headers
|
|
363
363
|
end
|
|
364
364
|
|
|
@@ -374,15 +374,6 @@ class Chef
|
|
|
374
374
|
response.read_body do |chunk|
|
|
375
375
|
tf.write(chunk)
|
|
376
376
|
size += chunk.size
|
|
377
|
-
if Chef::Log.verbose
|
|
378
|
-
if size == 0
|
|
379
|
-
Chef::Log.debug("#{url.path} done (0 length file)")
|
|
380
|
-
elsif total == 0
|
|
381
|
-
Chef::Log.debug("#{url.path} (zero content length or no Content-Length header)")
|
|
382
|
-
else
|
|
383
|
-
Chef::Log.debug("#{url.path}" + " %d%% done (%d of %d)" % [(size * 100) / total, size, total])
|
|
384
|
-
end
|
|
385
|
-
end
|
|
386
377
|
end
|
|
387
378
|
tf.close
|
|
388
379
|
tf
|
|
@@ -23,26 +23,11 @@
|
|
|
23
23
|
require 'uri'
|
|
24
24
|
require 'net/http'
|
|
25
25
|
require 'chef/rest/cookie_jar'
|
|
26
|
-
require 'ohai' #used in user agent string.
|
|
27
26
|
require 'chef/version'
|
|
28
27
|
|
|
29
28
|
class Chef
|
|
30
29
|
class REST
|
|
31
30
|
class RESTRequest
|
|
32
|
-
|
|
33
|
-
engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
|
34
|
-
|
|
35
|
-
UA_COMMON = "/#{::Chef::VERSION} (#{engine}-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}; ohai-#{Ohai::VERSION}; #{RUBY_PLATFORM}; +http://opscode.com)"
|
|
36
|
-
DEFAULT_UA = "Chef Client" << UA_COMMON
|
|
37
|
-
|
|
38
|
-
def self.user_agent=(ua)
|
|
39
|
-
@user_agent = ua
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def self.user_agent
|
|
43
|
-
@user_agent ||= DEFAULT_UA
|
|
44
|
-
end
|
|
45
|
-
|
|
46
31
|
attr_reader :method, :url, :headers, :http_client, :http_request
|
|
47
32
|
|
|
48
33
|
def initialize(method, url, req_body, base_headers={})
|
|
@@ -196,7 +181,6 @@ class Chef
|
|
|
196
181
|
@http_request.body = request_body if (request_body && @http_request.request_body_permitted?)
|
|
197
182
|
# Optionally handle HTTP Basic Authentication
|
|
198
183
|
@http_request.basic_auth(url.user, url.password) if url.user
|
|
199
|
-
@http_request['User-Agent'] = self.class.user_agent
|
|
200
184
|
end
|
|
201
185
|
|
|
202
186
|
end
|
data/lib/chef/role.rb
CHANGED
|
@@ -24,7 +24,7 @@ require 'chef/mixin/from_file'
|
|
|
24
24
|
require 'chef/couchdb'
|
|
25
25
|
require 'chef/run_list'
|
|
26
26
|
require 'chef/index_queue'
|
|
27
|
-
require '
|
|
27
|
+
require 'chef/mash'
|
|
28
28
|
require 'chef/json_compat'
|
|
29
29
|
|
|
30
30
|
class Chef
|
|
@@ -68,7 +68,7 @@ class Chef
|
|
|
68
68
|
@description = ''
|
|
69
69
|
@default_attributes = Mash.new
|
|
70
70
|
@override_attributes = Mash.new
|
|
71
|
-
@
|
|
71
|
+
@env_run_lists = {"_default" => Chef::RunList.new}
|
|
72
72
|
@couchdb_rev = nil
|
|
73
73
|
@couchdb_id = nil
|
|
74
74
|
@couchdb = couchdb || Chef::CouchDB.new
|
|
@@ -104,15 +104,42 @@ class Chef
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def run_list(*args)
|
|
107
|
-
(args.length > 0)
|
|
107
|
+
if (args.length > 0)
|
|
108
|
+
@env_run_lists["_default"].reset!(args)
|
|
109
|
+
end
|
|
110
|
+
@env_run_lists["_default"]
|
|
108
111
|
end
|
|
109
112
|
|
|
110
113
|
alias_method :recipes, :run_list
|
|
111
114
|
|
|
112
|
-
#
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
115
|
+
# For run_list expansion
|
|
116
|
+
def run_list_for(environment)
|
|
117
|
+
if env_run_lists[environment].nil?
|
|
118
|
+
env_run_lists["_default"]
|
|
119
|
+
else
|
|
120
|
+
env_run_lists[environment]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def active_run_list_for(environment)
|
|
125
|
+
@env_run_lists.has_key?(environment) ? environment : '_default'
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Per environment run lists
|
|
129
|
+
def env_run_lists(env_run_lists=nil)
|
|
130
|
+
if (!env_run_lists.nil?)
|
|
131
|
+
unless env_run_lists.key?("_default")
|
|
132
|
+
msg = "_default key is required in env_run_lists.\n"
|
|
133
|
+
msg << "(env_run_lists: #{env_run_lists.inspect})"
|
|
134
|
+
raise Chef::Exceptions::InvalidEnvironmentRunListSpecification, msg
|
|
135
|
+
end
|
|
136
|
+
@env_run_lists.clear
|
|
137
|
+
env_run_lists.each { |k,v| @env_run_lists[k] = Chef::RunList.new(*Array(v))}
|
|
138
|
+
end
|
|
139
|
+
@env_run_lists
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
alias :env_run_list :env_run_lists
|
|
116
143
|
|
|
117
144
|
def default_attributes(arg=nil)
|
|
118
145
|
set_or_return(
|
|
@@ -131,6 +158,8 @@ class Chef
|
|
|
131
158
|
end
|
|
132
159
|
|
|
133
160
|
def to_hash
|
|
161
|
+
env_run_lists_without_default = @env_run_lists.dup
|
|
162
|
+
env_run_lists_without_default.delete("_default")
|
|
134
163
|
result = {
|
|
135
164
|
"name" => @name,
|
|
136
165
|
"description" => @description,
|
|
@@ -138,7 +167,8 @@ class Chef
|
|
|
138
167
|
"default_attributes" => @default_attributes,
|
|
139
168
|
"override_attributes" => @override_attributes,
|
|
140
169
|
"chef_type" => "role",
|
|
141
|
-
"run_list" =>
|
|
170
|
+
"run_list" => run_list,
|
|
171
|
+
"env_run_lists" => env_run_lists_without_default
|
|
142
172
|
}
|
|
143
173
|
result["_rev"] = couchdb_rev if couchdb_rev
|
|
144
174
|
result
|
|
@@ -149,6 +179,15 @@ class Chef
|
|
|
149
179
|
to_hash.to_json(*a)
|
|
150
180
|
end
|
|
151
181
|
|
|
182
|
+
def update_from!(o)
|
|
183
|
+
description(o.description)
|
|
184
|
+
recipes(o.recipes) if defined?(o.recipes)
|
|
185
|
+
default_attributes(o.default_attributes)
|
|
186
|
+
override_attributes(o.override_attributes)
|
|
187
|
+
env_run_lists(o.env_run_lists) unless o.env_run_lists.nil?
|
|
188
|
+
self
|
|
189
|
+
end
|
|
190
|
+
|
|
152
191
|
# Create a Chef::Role from JSON
|
|
153
192
|
def self.json_create(o)
|
|
154
193
|
role = new
|
|
@@ -156,11 +195,18 @@ class Chef
|
|
|
156
195
|
role.description(o["description"])
|
|
157
196
|
role.default_attributes(o["default_attributes"])
|
|
158
197
|
role.override_attributes(o["override_attributes"])
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
198
|
+
|
|
199
|
+
# _default run_list is in 'run_list' for newer clients, and
|
|
200
|
+
# 'recipes' for older clients.
|
|
201
|
+
env_run_list_hash = {"_default" => (o.has_key?("run_list") ? o["run_list"] : o["recipes"])}
|
|
202
|
+
|
|
203
|
+
# Clients before 0.10 do not include env_run_lists, so only
|
|
204
|
+
# merge if it's there.
|
|
205
|
+
if o["env_run_lists"]
|
|
206
|
+
env_run_list_hash.merge!(o["env_run_lists"])
|
|
207
|
+
end
|
|
208
|
+
role.env_run_lists(env_run_list_hash)
|
|
209
|
+
|
|
164
210
|
role.couchdb_rev = o["_rev"] if o.has_key?("_rev")
|
|
165
211
|
role.index_id = role.couchdb_id
|
|
166
212
|
role.couchdb_id = o["_id"] if o.has_key?("_id")
|
|
@@ -206,6 +252,14 @@ class Chef
|
|
|
206
252
|
end
|
|
207
253
|
end
|
|
208
254
|
|
|
255
|
+
def environment(env_name)
|
|
256
|
+
chef_server_rest.get_rest("roles/#{@name}/environments/#{env_name}")
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def environments
|
|
260
|
+
chef_server_rest.get_rest("roles/#{@name}/environments")
|
|
261
|
+
end
|
|
262
|
+
|
|
209
263
|
# Remove this role from the CouchDB
|
|
210
264
|
def cdb_destroy
|
|
211
265
|
couchdb.delete("role", @name, couchdb_rev)
|
data/lib/chef/run_context.rb
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
9
|
# you may not use this file except in compliance with the License.
|
|
10
10
|
# You may obtain a copy of the License at
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
#
|
|
13
|
+
#
|
|
14
14
|
# Unless required by applicable law or agreed to in writing, software
|
|
15
15
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
16
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -47,32 +47,61 @@ class Chef
|
|
|
47
47
|
@cookbook_collection = cookbook_collection
|
|
48
48
|
@resource_collection = Chef::ResourceCollection.new
|
|
49
49
|
@definitions = Hash.new
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
# TODO: 5/18/2010 cw/timh - See note on Chef::Node's
|
|
52
52
|
# cookbook_collection attr_accessor
|
|
53
53
|
node.cookbook_collection = cookbook_collection
|
|
54
|
+
end
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
def load(run_list_expansion)
|
|
57
|
+
load_libraries
|
|
58
|
+
load_lwrp_providers
|
|
59
|
+
load_lwrp_resources
|
|
60
|
+
load_attributes
|
|
61
|
+
load_resource_definitions
|
|
62
|
+
|
|
63
|
+
# Precendence rules state that roles' attributes come after
|
|
64
|
+
# cookbooks. Now we've loaded attributes from cookbooks with
|
|
65
|
+
# load_attributes, apply the expansion attributes (loaded from
|
|
66
|
+
# roles) to the node.
|
|
67
|
+
@node.apply_expansion_attributes(run_list_expansion)
|
|
68
|
+
|
|
69
|
+
run_list_expansion.recipes.each do |recipe|
|
|
70
|
+
# TODO: timh/cw, 5-14-2010: It's distasteful to be including
|
|
71
|
+
# the DSL in a class outside the context of the DSL
|
|
72
|
+
include_recipe(recipe)
|
|
73
|
+
end
|
|
56
74
|
end
|
|
57
75
|
|
|
58
|
-
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def load_libraries
|
|
59
80
|
foreach_cookbook_load_segment(:libraries) do |cookbook_name, filename|
|
|
60
81
|
Chef::Log.debug("Loading cookbook #{cookbook_name}'s library file: #{filename}")
|
|
61
82
|
require filename
|
|
62
83
|
end
|
|
63
|
-
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def load_lwrp_providers
|
|
64
87
|
foreach_cookbook_load_segment(:providers) do |cookbook_name, filename|
|
|
65
88
|
Chef::Log.debug("Loading cookbook #{cookbook_name}'s providers from #{filename}")
|
|
66
89
|
Chef::Provider.build_from_file(cookbook_name, filename)
|
|
67
90
|
end
|
|
68
|
-
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def load_lwrp_resources
|
|
69
94
|
foreach_cookbook_load_segment(:resources) do |cookbook_name, filename|
|
|
70
95
|
Chef::Log.debug("Loading cookbook #{cookbook_name}'s resources from #{filename}")
|
|
71
96
|
Chef::Resource.build_from_file(cookbook_name, filename)
|
|
72
97
|
end
|
|
98
|
+
end
|
|
73
99
|
|
|
100
|
+
def load_attributes
|
|
74
101
|
node.load_attributes
|
|
102
|
+
end
|
|
75
103
|
|
|
104
|
+
def load_resource_definitions
|
|
76
105
|
foreach_cookbook_load_segment(:definitions) do |cookbook_name, filename|
|
|
77
106
|
Chef::Log.debug("Loading cookbook #{cookbook_name}'s definitions from #{filename}")
|
|
78
107
|
resourcelist = Chef::ResourceDefinitionList.new
|
|
@@ -82,21 +111,8 @@ class Chef
|
|
|
82
111
|
newval
|
|
83
112
|
end
|
|
84
113
|
end
|
|
85
|
-
|
|
86
|
-
# Retrieve the fully expanded list of recipes for the node by
|
|
87
|
-
# resolving roles; this step also merges attributes into the
|
|
88
|
-
# node from the roles/recipes included.
|
|
89
|
-
recipe_names = node.expand!
|
|
90
|
-
|
|
91
|
-
recipe_names.each do |recipe_name|
|
|
92
|
-
# TODO: timh/cw, 5-14-2010: It's distasteful to be including
|
|
93
|
-
# the DSL in a class outside the context of the DSL
|
|
94
|
-
include_recipe(recipe_name)
|
|
95
|
-
end
|
|
96
114
|
end
|
|
97
115
|
|
|
98
|
-
private
|
|
99
|
-
|
|
100
116
|
def foreach_cookbook_load_segment(segment, &block)
|
|
101
117
|
cookbook_collection.each do |cookbook_name, cookbook|
|
|
102
118
|
segment_filenames = cookbook.segment_filenames(segment)
|
|
@@ -105,6 +121,6 @@ class Chef
|
|
|
105
121
|
end
|
|
106
122
|
end
|
|
107
123
|
end
|
|
108
|
-
|
|
124
|
+
|
|
109
125
|
end
|
|
110
126
|
end
|