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.

Files changed (180) hide show
  1. data/README.rdoc +11 -10
  2. data/bin/chef-client +2 -2
  3. data/bin/chef-solo +1 -1
  4. data/bin/knife +27 -0
  5. data/bin/shef +49 -0
  6. data/distro/README +2 -0
  7. data/distro/{debian → common}/man/man1/chef-indexer.1 +0 -0
  8. data/distro/{debian → common}/man/man1/chef-server.1 +0 -0
  9. data/distro/{debian → common}/man/man8/chef-client.8 +0 -0
  10. data/distro/{debian → common}/man/man8/chef-solo.8 +0 -0
  11. data/distro/common/man/man8/knife.8 +375 -0
  12. data/distro/redhat/etc/init.d/chef-client +8 -4
  13. data/distro/redhat/etc/init.d/chef-server +16 -15
  14. data/distro/redhat/etc/init.d/chef-server-webui +78 -0
  15. data/distro/redhat/etc/init.d/chef-solr +76 -0
  16. data/distro/redhat/etc/init.d/chef-solr-indexer +75 -0
  17. data/distro/redhat/etc/sysconfig/chef-client +10 -0
  18. data/distro/redhat/etc/sysconfig/chef-server +10 -0
  19. data/distro/redhat/etc/sysconfig/chef-server-webui +10 -0
  20. data/distro/redhat/etc/sysconfig/chef-solr +9 -0
  21. data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
  22. data/distro/suse/etc/init.d/chef-client +121 -0
  23. data/lib/chef.rb +1 -1
  24. data/lib/chef/api_client.rb +263 -0
  25. data/lib/chef/application.rb +1 -1
  26. data/lib/chef/application/client.rb +21 -3
  27. data/lib/chef/application/knife.rb +144 -0
  28. data/lib/chef/application/server.rb +2 -1
  29. data/lib/chef/application/solo.rb +9 -2
  30. data/lib/chef/cache.rb +61 -0
  31. data/lib/chef/cache/checksum.rb +70 -0
  32. data/lib/chef/certificate.rb +154 -0
  33. data/lib/chef/client.rb +123 -220
  34. data/lib/chef/compile.rb +9 -21
  35. data/lib/chef/config.rb +67 -10
  36. data/lib/chef/cookbook.rb +49 -22
  37. data/lib/chef/cookbook/metadata.rb +85 -5
  38. data/lib/chef/cookbook_loader.rb +4 -4
  39. data/lib/chef/couchdb.rb +99 -30
  40. data/lib/chef/daemon.rb +1 -1
  41. data/lib/chef/data_bag.rb +215 -0
  42. data/lib/chef/data_bag_item.rb +219 -0
  43. data/lib/chef/exceptions.rb +3 -0
  44. data/lib/chef/index_queue.rb +29 -0
  45. data/lib/chef/index_queue/amqp_client.rb +106 -0
  46. data/lib/chef/index_queue/consumer.rb +76 -0
  47. data/lib/chef/index_queue/indexable.rb +74 -0
  48. data/lib/chef/knife.rb +309 -0
  49. data/lib/chef/knife/client_bulk_delete.rb +40 -0
  50. data/lib/chef/knife/client_create.rb +62 -0
  51. data/lib/chef/knife/client_delete.rb +37 -0
  52. data/lib/chef/knife/client_edit.rb +37 -0
  53. data/lib/chef/knife/client_list.rb +40 -0
  54. data/lib/chef/knife/client_reregister.rb +48 -0
  55. data/lib/chef/knife/client_show.rb +42 -0
  56. data/lib/chef/knife/configure.rb +123 -0
  57. data/lib/chef/knife/cookbook_bulk_delete.rb +46 -0
  58. data/lib/chef/knife/cookbook_delete.rb +41 -0
  59. data/lib/chef/knife/cookbook_download.rb +57 -0
  60. data/lib/chef/knife/cookbook_list.rb +41 -0
  61. data/lib/chef/knife/cookbook_metadata.rb +87 -0
  62. data/lib/chef/knife/cookbook_show.rb +75 -0
  63. data/lib/chef/knife/cookbook_upload.rb +179 -0
  64. data/lib/chef/knife/data_bag_create.rb +43 -0
  65. data/lib/chef/knife/data_bag_delete.rb +43 -0
  66. data/lib/chef/knife/data_bag_edit.rb +49 -0
  67. data/lib/chef/knife/data_bag_list.rb +42 -0
  68. data/lib/chef/knife/data_bag_show.rb +40 -0
  69. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  70. data/lib/chef/knife/index_rebuild.rb +51 -0
  71. data/lib/chef/knife/node_bulk_delete.rb +43 -0
  72. data/lib/chef/knife/node_create.rb +39 -0
  73. data/lib/chef/knife/node_delete.rb +36 -0
  74. data/lib/chef/knife/node_edit.rb +36 -0
  75. data/lib/chef/knife/node_from_file.rb +42 -0
  76. data/lib/chef/knife/node_list.rb +41 -0
  77. data/lib/chef/knife/node_run_list_add.rb +64 -0
  78. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  79. data/lib/chef/knife/node_show.rb +46 -0
  80. data/lib/chef/knife/role_bulk_delete.rb +44 -0
  81. data/lib/chef/knife/role_create.rb +44 -0
  82. data/lib/chef/knife/role_delete.rb +36 -0
  83. data/lib/chef/knife/role_edit.rb +37 -0
  84. data/lib/chef/knife/role_from_file.rb +46 -0
  85. data/lib/chef/knife/role_list.rb +40 -0
  86. data/lib/chef/knife/role_show.rb +43 -0
  87. data/lib/chef/knife/search.rb +94 -0
  88. data/lib/chef/knife/ssh.rb +170 -0
  89. data/lib/chef/log.rb +30 -8
  90. data/lib/chef/mixin/checksum.rb +2 -7
  91. data/lib/chef/mixin/command.rb +32 -13
  92. data/lib/chef/mixin/convert_to_class_name.rb +15 -0
  93. data/lib/chef/mixin/deep_merge.rb +199 -11
  94. data/lib/chef/mixin/generate_url.rb +18 -9
  95. data/lib/chef/mixin/language.rb +29 -1
  96. data/lib/chef/mixin/language_include_attribute.rb +56 -0
  97. data/lib/chef/mixin/language_include_recipe.rb +53 -0
  98. data/lib/chef/mixin/params_validate.rb +25 -12
  99. data/lib/chef/mixin/recipe_definition_dsl_core.rb +2 -0
  100. data/lib/chef/mixin/template.rb +11 -1
  101. data/lib/chef/mixin/xml_escape.rb +87 -0
  102. data/lib/chef/node.rb +144 -122
  103. data/lib/chef/openid_registration.rb +12 -5
  104. data/lib/chef/platform.rb +89 -47
  105. data/lib/chef/provider/breakpoint.rb +36 -0
  106. data/lib/chef/provider/cron.rb +5 -6
  107. data/lib/chef/provider/deploy.rb +43 -10
  108. data/lib/chef/provider/deploy/revision.rb +2 -3
  109. data/lib/chef/provider/erl_call.rb +72 -0
  110. data/lib/chef/provider/file.rb +8 -4
  111. data/lib/chef/provider/git.rb +10 -5
  112. data/lib/chef/provider/group/dscl.rb +128 -0
  113. data/lib/chef/provider/http_request.rb +6 -2
  114. data/lib/chef/provider/ifconfig.rb +1 -0
  115. data/lib/chef/provider/link.rb +1 -1
  116. data/lib/chef/provider/log.rb +53 -0
  117. data/lib/chef/provider/mdadm.rb +88 -0
  118. data/lib/chef/provider/mount/mount.rb +1 -1
  119. data/lib/chef/provider/package.rb +1 -1
  120. data/lib/chef/provider/package/easy_install.rb +106 -0
  121. data/lib/chef/provider/package/pacman.rb +101 -0
  122. data/lib/chef/provider/package/portage.rb +1 -1
  123. data/lib/chef/provider/package/rpm.rb +10 -8
  124. data/lib/chef/provider/package/yum-dump.py +22 -3
  125. data/lib/chef/provider/package/yum.rb +32 -8
  126. data/lib/chef/provider/package/zypper.rb +132 -0
  127. data/lib/chef/provider/remote_directory.rb +58 -49
  128. data/lib/chef/provider/remote_file.rb +1 -1
  129. data/lib/chef/provider/route.rb +136 -80
  130. data/lib/chef/provider/ruby_block.rb +18 -1
  131. data/lib/chef/provider/service/arch.rb +109 -0
  132. data/lib/chef/provider/service/freebsd.rb +0 -1
  133. data/lib/chef/provider/service/simple.rb +2 -3
  134. data/lib/chef/provider/service/upstart.rb +191 -0
  135. data/lib/chef/provider/subversion.rb +12 -4
  136. data/lib/chef/provider/template.rb +85 -53
  137. data/lib/chef/provider/user.rb +1 -1
  138. data/lib/chef/provider/user/dscl.rb +277 -0
  139. data/lib/chef/provider/user/useradd.rb +1 -0
  140. data/lib/chef/recipe.rb +2 -41
  141. data/lib/chef/resource.rb +9 -3
  142. data/lib/chef/resource/breakpoint.rb +35 -0
  143. data/lib/chef/resource/deploy.rb +16 -2
  144. data/lib/chef/resource/easy_install_package.rb +41 -0
  145. data/lib/chef/resource/erl_call.rb +83 -0
  146. data/lib/chef/resource/freebsd_package.rb +35 -0
  147. data/lib/chef/resource/log.rb +62 -0
  148. data/lib/chef/resource/mdadm.rb +82 -0
  149. data/lib/chef/resource/pacman_package.rb +33 -0
  150. data/lib/chef/resource/ruby_block.rb +21 -2
  151. data/lib/chef/resource/scm.rb +8 -0
  152. data/lib/chef/resource/subversion.rb +1 -0
  153. data/lib/chef/resource/user.rb +5 -2
  154. data/lib/chef/resource/yum_package.rb +36 -0
  155. data/lib/chef/resource_collection.rb +17 -9
  156. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  157. data/lib/chef/rest.rb +166 -81
  158. data/lib/chef/role.rb +114 -38
  159. data/lib/chef/run_list.rb +15 -6
  160. data/lib/chef/runner.rb +13 -11
  161. data/lib/chef/search/query.rb +60 -0
  162. data/lib/chef/shef.rb +220 -0
  163. data/lib/chef/shef/ext.rb +297 -0
  164. data/lib/chef/shef/shef_session.rb +175 -0
  165. data/lib/chef/streaming_cookbook_uploader.rb +187 -0
  166. data/lib/chef/tasks/chef_repo.rake +53 -155
  167. data/lib/chef/util/file_edit.rb +94 -96
  168. data/lib/chef/webui_user.rb +233 -0
  169. metadata +219 -63
  170. data/distro/debian/etc/init.d/chef-indexer +0 -175
  171. data/distro/redhat/etc/chef/client.rb +0 -16
  172. data/distro/redhat/etc/chef/indexer.rb +0 -10
  173. data/distro/redhat/etc/chef/server.rb +0 -22
  174. data/distro/redhat/etc/init.d/chef-indexer +0 -76
  175. data/lib/chef/application/indexer.rb +0 -141
  176. data/lib/chef/queue.rb +0 -145
  177. data/lib/chef/search.rb +0 -88
  178. data/lib/chef/search/result.rb +0 -64
  179. data/lib/chef/search_index.rb +0 -77
  180. data/lib/chef/util/fileedit.rb +0 -121
@@ -1,88 +0,0 @@
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/search/result'
20
- require 'ferret'
21
-
22
- class Chef
23
- class Search
24
-
25
- attr_reader :index
26
-
27
- def initialize
28
- @index = Ferret::Index::Index.new(:path => Chef::Config[:search_index_path])
29
- end
30
-
31
- def search(type, query="*", attributes=[], &block)
32
- search_query = build_search_query(type, query)
33
- start_time = Time.now
34
- results = []
35
- block ||= lambda { |b| b }
36
-
37
- @index.search_each(search_query, :limit => :all) do |id, score|
38
- results << block.call(build_hash(@index.doc(id)))
39
- end
40
-
41
- Chef::Log.debug("Search #{search_query} complete in #{Time.now - start_time} seconds")
42
-
43
- attributes.empty? ? results : filter_by_attributes(results,attributes)
44
- end
45
-
46
- def filter_by_attributes(results, attributes)
47
- results.collect do |r|
48
- nr = Hash.new
49
- nr[:index_name] = r[:index_name]
50
- nr[:id] = r[:id]
51
- attributes.each do |attrib|
52
- if r.has_key?(attrib)
53
- nr[attrib] = r[attrib]
54
- end
55
- end
56
- nr
57
- end
58
- end
59
-
60
- private :filter_by_attributes
61
-
62
- def list_indexes
63
- indexes = Hash.new
64
- @index.search_each("index_name:*", :limit => :all) do |id, score|
65
- indexes[@index.doc(id)["index_name"]] = true
66
- end
67
- indexes.keys
68
- end
69
-
70
- def has_index?(index)
71
- list_indexes.detect { |i| i == index }
72
- end
73
-
74
- private
75
- def build_search_query(type, query)
76
- query = "id:*" if query == '*'
77
- "index_name:#{type} AND (#{query})"
78
- end
79
-
80
- def build_hash(doc)
81
- result = Chef::Search::Result.new
82
- doc.fields.each do |f|
83
- result[f] = doc[f]
84
- end
85
- result
86
- end
87
- end
88
- end
@@ -1,64 +0,0 @@
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 'extlib'
20
-
21
- class Chef
22
- class Search
23
- class Result
24
-
25
- def initialize
26
- proc = lambda do |h,k|
27
- newhash = Mash.new(&proc)
28
- h.each do |pk, pv|
29
- rx = /^#{k.to_s}_/
30
- if pk =~ rx
31
- newhash[ pk.gsub(rx,'') ] = pv
32
- end
33
- end
34
- newhash
35
- end
36
- @internal = Mash.new(&proc)
37
- end
38
-
39
- def method_missing(symbol, *args, &block)
40
- @internal.send(symbol, *args, &block)
41
- end
42
-
43
- # Serialize this object as a hash
44
- def to_json(*a)
45
- result = {
46
- 'json_class' => self.class.name,
47
- 'results' => @internal
48
- }
49
- result.to_json(*a)
50
- end
51
-
52
- # Create a Chef::Search::Result from JSON
53
- def self.json_create(o)
54
- result = self.new
55
- o['results'].each do |k,v|
56
- result[k] = v
57
- end
58
- result
59
- end
60
- end
61
- end
62
- end
63
-
64
-
@@ -1,77 +0,0 @@
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 'ferret'
20
-
21
- class Chef
22
- class SearchIndex
23
-
24
- attr_reader :index
25
-
26
- def initialize
27
- @index = Ferret::Index::Index.new(
28
- :path => Chef::Config[:search_index_path],
29
- :key => [ :id ]
30
- )
31
- end
32
-
33
- def add(new_object)
34
- index_hash = create_index_object(new_object)
35
- Chef::Log.debug("Indexing #{index_hash[:index_name]} with #{index_hash.inspect}")
36
- @index.add_document(index_hash)
37
- end
38
-
39
- def create_index_object(new_object)
40
- index_hash = nil
41
-
42
- if new_object.respond_to?(:to_index)
43
- index_hash = new_object.to_index
44
- elsif new_object.kind_of?(Hash)
45
- index_hash = new_object
46
- else
47
- raise Chef::Exceptions::SearchIndex, "Cannot transform argument to a Hash!"
48
- end
49
-
50
- unless index_hash.has_key?(:index_name) || index_hash.has_key?("index_name")
51
- raise Chef::Exceptions::SearchIndex, "Cannot index without an index_name key: #{index_hash.inspect}"
52
- end
53
-
54
- unless index_hash.has_key?(:id) || index_hash.has_key?("id")
55
- raise Chef::Exceptions::SearchIndex, "Cannot index without an id key: #{index_hash.inspect}"
56
- end
57
-
58
- sanitized_hash = Hash.new
59
- index_hash.each do |k,v|
60
- sanitized_hash[k.to_sym] = v
61
- end
62
-
63
- sanitized_hash
64
- end
65
-
66
- def delete(index_obj)
67
- to_delete = create_index_object(index_obj)
68
- Chef::Log.debug("Removing #{to_delete.inspect} from the #{to_delete[:index_name]} index")
69
- @index.delete(to_delete[:id])
70
- end
71
-
72
- def commit
73
- @index.commit
74
- end
75
-
76
- end
77
- end
@@ -1,121 +0,0 @@
1
- #
2
- # Author:: Nuo Yan (<nuo@opscode.com>)
3
- # Copyright:: Copyright (c) 2009 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
- require 'ftools'
19
- require 'fileutils'
20
- require 'tempfile'
21
-
22
- class FileEdit
23
-
24
- private
25
-
26
- attr_accessor :original_pathname, :contents, :file_edited
27
-
28
- public
29
-
30
- def initialize(filepath)
31
- @original_pathname = filepath
32
- @file_edited = false
33
-
34
- raise ArgumentError, "File doesn't exist" unless File.exist? @original_pathname
35
- raise ArgumentError, "File is blank" unless (@contents = File.new(@original_pathname).readlines).length > 0
36
- end
37
-
38
- #search the file line by line and match each line with the given regex
39
- #if matched, replace the whole line with newline.
40
- def search_file_replace_line(regex, newline)
41
- search_match(regex, newline, 'r', 1)
42
- end
43
-
44
- #search the file line by line and match each line with the given regex
45
- #if matched, replace the match (all occurances) with the replace parameter
46
- def search_file_replace(regex, replace)
47
- search_match(regex, replace, 'r', 2)
48
- end
49
-
50
- #search the file line by line and match each line with the given regex
51
- #if matched, delete the line
52
- def search_file_delete_line(regex)
53
- search_match(regex, " ", 'd', 1)
54
- end
55
-
56
- #search the file line by line and match each line with the given regex
57
- #if matched, delete the match (all occurances) from the line
58
- def search_file_delete(regex)
59
- search_match(regex, " ", 'd', 2)
60
- end
61
-
62
- #search the file line by line and match each line with the given regex
63
- #if matched, insert newline after each matching line
64
- def insert_line_after_match(regex, newline)
65
- search_match(regex, newline, 'i', 0)
66
- end
67
-
68
- #Make a copy of old_file and write new file out (only if file changed)
69
- def write_file
70
-
71
- # file_edited is false when there was no match in the whole file and thus no contents have changed.
72
- if file_edited
73
- backup_pathname = original_pathname + ".old"
74
- File.copy(original_pathname, backup_pathname)
75
- Tempfile.open("w") do |newfile|
76
- contents.each do |line|
77
- newfile.puts(line)
78
- end
79
- newfile.flush
80
- FileUtils.mv(newfile.path, original_pathname)
81
- end
82
- end
83
- self.file_edited = false
84
-
85
- end
86
-
87
- private
88
-
89
- #helper method to do the match, replace, delete, and insert operations
90
- #command is the switch of delete, replace, and insert ('d', 'r', 'i')
91
- #method is to control operation on whole line or only the match (1 for line, 2 for match)
92
- def search_match(regex, replace, command, method)
93
-
94
- #convert regex to a Regexp object (if not already is one) and store it in exp.
95
- exp = Regexp.new(regex)
96
-
97
- #loop through contents and do the appropriate operation depending on 'command' and 'method'
98
- new_contents = []
99
-
100
- contents.each do |line|
101
- if line.match(exp)
102
- self.file_edited = true
103
- case
104
- when command == 'r'
105
- new_contents << ((method == 1) ? replace : line.gsub!(exp, replace))
106
- when command == 'd'
107
- if method == 2
108
- new_contents << line.gsub!(exp, "")
109
- end
110
- when command == 'i'
111
- new_contents << line
112
- new_contents << replace
113
- end
114
- else
115
- new_contents << line
116
- end
117
- end
118
-
119
- self.contents = new_contents
120
- end
121
- end