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
@@ -0,0 +1,87 @@
1
+ #
2
+ #
3
+ # Author:: Adam Jacob (<adam@opscode.com>)
4
+ # Copyright:: Copyright (c) 2009 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'chef/knife'
21
+
22
+ class Chef
23
+ class Knife
24
+ class CookbookMetadata < Knife
25
+
26
+ banner "Sub-Command: cookbook metadata COOKBOOK (options)"
27
+
28
+ option :cookbook_path,
29
+ :short => "-o PATH:PATH",
30
+ :long => "--cookbook-path PATH:PATH",
31
+ :description => "A colon-separated path to look for cookbooks in",
32
+ :proc => lambda { |o| o.split(":") }
33
+
34
+ option :all,
35
+ :short => "-a",
36
+ :long => "--all",
37
+ :description => "Generate metadata for all cookbooks, rather than just a single cookbook"
38
+
39
+ def run
40
+ if config[:cookbook_path]
41
+ Chef::Config[:cookbook_path] = config[:cookbook_path]
42
+ else
43
+ config[:cookbook_path] = Chef::Config[:cookbook_path]
44
+ end
45
+
46
+ if config[:all]
47
+ cl = Chef::CookbookLoader.new
48
+ cl.each do |cookbook|
49
+ generate_metadata(cookbook.name.to_s)
50
+ end
51
+ else
52
+ generate_metadata(@name_args[0])
53
+ end
54
+ end
55
+
56
+ def generate_metadata(cookbook)
57
+ Chef::Log.info("Generating metadata for #{cookbook}")
58
+ config[:cookbook_path].reverse.each do |path|
59
+ file = File.expand_path(File.join(path, cookbook, 'metadata.rb'))
60
+ if File.exists?(file)
61
+ Chef::Log.info("Generating from #{file}")
62
+ md = Chef::Cookbook::Metadata.new
63
+ md.name(cookbook)
64
+ md.from_file(file)
65
+ json_file = File.join(File.dirname(file), 'metadata.json')
66
+ File.open(json_file, "w") do |f|
67
+ f.write(JSON.pretty_generate(md))
68
+ end
69
+ generated = true
70
+ Chef::Log.info("Generated #{json_file}")
71
+ else
72
+ Chef::Log.debug("No #{file} found; skipping!")
73
+ end
74
+ end
75
+ end
76
+
77
+ end
78
+ end
79
+ end
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
@@ -0,0 +1,75 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@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
+
19
+ require 'chef/knife'
20
+ require 'json'
21
+ require 'uri'
22
+
23
+ class Chef
24
+ class Knife
25
+ class CookbookShow < Knife
26
+
27
+ banner "Sub-Command: cookbook show COOKBOOK [PART] [FILENAME] (options)"
28
+
29
+ option :fqdn,
30
+ :short => "-f FQDN",
31
+ :long => "--fqdn FQDN",
32
+ :description => "The FQDN of the host to see the file for"
33
+
34
+ option :platform,
35
+ :short => "-p PLATFORM",
36
+ :long => "--platform PLATFORM",
37
+ :description => "The platform to see the file for"
38
+
39
+ option :platform_version,
40
+ :short => "-V VERSION",
41
+ :long => "--platform-version VERSION",
42
+ :description => "The platform version to see the file for"
43
+
44
+ def run
45
+ case @name_args.length
46
+ when 3 # We are showing a specific file
47
+ arguments = { :id => @name_args[2] }
48
+ arguments[:fqdn] = config[:fqdn] if config.has_key?(:fqdn)
49
+ arguments[:platform] = config[:platform] if config.has_key?(:platform)
50
+ arguments[:version] = config[:platform_version] if config.has_key?(:platform_version)
51
+ result = rest.get_rest("cookbooks/#{@name_args[0]}/#{@name_args[1]}?#{make_query_params(arguments)}")
52
+ pretty_print(result)
53
+ when 2 # We are showing a specific part of the cookbook
54
+ result = rest.get_rest("cookbooks/#{@name_args[0]}")
55
+ json_pretty_print(result[@name_args[1]])
56
+ when 1 # We are showing the whole cookbook data
57
+ json_pretty_print(rest.get_rest("cookbooks/#{@name_args[0]}"))
58
+ end
59
+ end
60
+
61
+ def make_query_params(req_opts)
62
+ query_part = Array.new
63
+ req_opts.keys.sort { |a,b| a.to_s <=> b.to_s }.each do |key|
64
+ query_part << "#{key}=#{URI.escape(req_opts[key])}"
65
+ end
66
+ query_part.join("&")
67
+ end
68
+
69
+ end
70
+ end
71
+ end
72
+
73
+
74
+
75
+
@@ -0,0 +1,179 @@
1
+ #
2
+ #
3
+ # Author:: Adam Jacob (<adam@opscode.com>)
4
+ # Copyright:: Copyright (c) 2009 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'chef/knife'
21
+ require 'chef/streaming_cookbook_uploader'
22
+ require 'chef/cache/checksum'
23
+
24
+ class Chef
25
+ class Knife
26
+ class CookbookUpload < Knife
27
+
28
+ banner "Sub-Command: cookbook upload COOKBOOK (options)"
29
+
30
+ option :cookbook_path,
31
+ :short => "-o PATH:PATH",
32
+ :long => "--cookbook-path PATH:PATH",
33
+ :description => "A colon-separated path to look for cookbooks in",
34
+ :proc => lambda { |o| o.split(":") }
35
+
36
+ option :all,
37
+ :short => "-a",
38
+ :long => "--all",
39
+ :description => "Upload all cookbooks, rather than just a single cookbook"
40
+
41
+ def run
42
+ if config[:cookbook_path]
43
+ Chef::Config[:cookbook_path] = config[:cookbook_path]
44
+ else
45
+ config[:cookbook_path] = Chef::Config[:cookbook_path]
46
+ end
47
+
48
+ if config[:all]
49
+ cl = Chef::CookbookLoader.new
50
+ cl.each do |cookbook|
51
+ Chef::Log.info("** #{cookbook.name.to_s} **")
52
+ upload_cookbook(cookbook.name.to_s)
53
+ end
54
+ else
55
+ upload_cookbook(@name_args[0])
56
+ end
57
+ end
58
+
59
+ def test_ruby(cookbook_dir)
60
+ Dir[File.join(cookbook_dir, '**', '*.rb')].each do |ruby_file|
61
+ Chef::Log.info("Testing #{ruby_file} for syntax errors...")
62
+ Chef::Mixin::Command.run_command(:command => "ruby -c #{ruby_file}")
63
+ end
64
+ end
65
+
66
+ def test_templates(cookbook_dir)
67
+ Dir[File.join(cookbook_dir, '**', '*.erb')].each do |erb_file|
68
+ Chef::Log.info("Testing template #{erb_file} for syntax errors...")
69
+ Chef::Mixin::Command.run_command(:command => "sh -c 'erubis -x #{erb_file} | ruby -c'")
70
+ end
71
+ end
72
+
73
+ def upload_cookbook(cookbook_name)
74
+
75
+ if cookbook_name =~ /^#{File::SEPARATOR}/
76
+ child_folders = cookbook_name
77
+ cookbook_name = File.basename(cookbook_name)
78
+ else
79
+ child_folders = config[:cookbook_path].inject([]) do |r, e|
80
+ r << File.join(e, cookbook_name)
81
+ r
82
+ end
83
+ end
84
+
85
+ tmp_cookbook_tarball = Tempfile.new("chef-#{cookbook_name}")
86
+ tmp_cookbook_tarball.close
87
+ tarball_name = "#{tmp_cookbook_tarball.path}.tar.gz"
88
+ File.unlink(tmp_cookbook_tarball.path)
89
+
90
+ tmp_cookbook_path = Tempfile.new("chef-#{cookbook_name}-build")
91
+ tmp_cookbook_path.close
92
+ tmp_cookbook_dir = tmp_cookbook_path.path
93
+ File.unlink(tmp_cookbook_dir)
94
+ FileUtils.mkdir_p(tmp_cookbook_dir)
95
+
96
+ Chef::Log.debug("Staging at #{tmp_cookbook_dir}")
97
+
98
+ found_cookbook = false
99
+
100
+ child_folders.each do |file_path|
101
+ if File.directory?(file_path)
102
+ found_cookbook = true
103
+ Chef::Log.info("Copying from #{file_path} to #{tmp_cookbook_dir}")
104
+ FileUtils.cp_r(file_path, tmp_cookbook_dir, :remove_destination => true)
105
+ else
106
+ Chef::Log.info("Nothing to copy from #{file_path}")
107
+ end
108
+ end
109
+
110
+ unless found_cookbook
111
+ Chef::Log.fatal("Could not find cookbook #{cookbook_name}!")
112
+ exit 17
113
+ end
114
+
115
+ test_ruby(tmp_cookbook_dir)
116
+ test_templates(tmp_cookbook_dir)
117
+
118
+ # First, generate metadata
119
+ kcm = Chef::Knife::CookbookMetadata.new
120
+ kcm.config[:cookbook_path] = [ tmp_cookbook_dir ]
121
+ kcm.name_args = [ cookbook_name ]
122
+ kcm.run
123
+
124
+ Chef::Log.info("Creating tarball at #{tarball_name}")
125
+ Chef::Mixin::Command.run_command(
126
+ :command => "tar -C #{tmp_cookbook_dir} -cvzf #{tarball_name} ./#{cookbook_name}"
127
+ )
128
+
129
+ begin
130
+ cb = rest.get_rest("cookbooks/#{cookbook_name}")
131
+ cookbook_uploaded = true
132
+ rescue Net::HTTPServerException => e
133
+ case e.response.code
134
+ when "404"
135
+ cookbook_uploaded = false
136
+ when "401"
137
+ Chef::Log.fatal "Failed to fetch remote cookbook '#{cookbook_name}' due to authentication failure (#{e}), check your client configuration (username, key)"
138
+ exit 18
139
+ end
140
+ end
141
+
142
+ if cookbook_uploaded
143
+ Chef::StreamingCookbookUploader.put(
144
+ "#{Chef::Config[:chef_server_url]}/cookbooks/#{cookbook_name}/_content",
145
+ Chef::Config[:node_name],
146
+ Chef::Config[:client_key],
147
+ {
148
+ :file => File.new(tarball_name),
149
+ :name => cookbook_name
150
+ }
151
+ )
152
+ else
153
+ Chef::StreamingCookbookUploader.post(
154
+ "#{Chef::Config[:chef_server_url]}/cookbooks",
155
+ Chef::Config[:node_name],
156
+ Chef::Config[:client_key],
157
+ {
158
+ :file => File.new(tarball_name),
159
+ :name => cookbook_name
160
+ }
161
+ )
162
+ end
163
+ Chef::Log.info("Upload complete!")
164
+ Chef::Log.debug("Removing local tarball at #{tarball_name}")
165
+ FileUtils.rm_rf tarball_name
166
+ Chef::Log.debug("Removing local staging directory at #{tmp_cookbook_dir}")
167
+ FileUtils.rm_rf tmp_cookbook_dir
168
+ end
169
+
170
+ end
171
+ end
172
+ end
173
+
174
+
175
+
176
+
177
+
178
+
179
+
@@ -0,0 +1,43 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@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
+
19
+ require 'chef/knife'
20
+ require 'chef/data_bag'
21
+
22
+ class Chef
23
+ class Knife
24
+ class DataBagCreate < Knife
25
+
26
+ banner "Sub-Command: data bag create BAG [ITEM] (options)"
27
+
28
+ def run
29
+ if @name_args.length == 2
30
+ create_object({ "id" => @name_args[1] }, "data_bag_item[#{@name_args[1]}]") do |output|
31
+ rest.post_rest("data/#{@name_args[0]}", output)
32
+ end
33
+ else
34
+ rest.post_rest("data", { "name" => @name_args[0] })
35
+ Chef::Log.info("Created data_bag[#{@name_args[0]}]")
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+
43
+
@@ -0,0 +1,43 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@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
+
19
+ require 'chef/knife'
20
+ require 'chef/data_bag'
21
+
22
+ class Chef
23
+ class Knife
24
+ class DataBagDelete < Knife
25
+
26
+ banner "Sub-Command: data bag delete BAG [ITEM] (options)"
27
+
28
+ def run
29
+ if @name_args.length == 2
30
+ delete_object(Chef::DataBagItem, @name_args[1], "data_bag_item") do
31
+ rest.delete_rest("data/#{@name_args[0]}/#{@name_args[1]}")
32
+ end
33
+ else
34
+ delete_object(Chef::DataBag, @name_args[0], "data_bag") do
35
+ rest.delete_rest("data/#{@name_args[0]}")
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+
@@ -0,0 +1,49 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@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
+
19
+ require 'chef/knife'
20
+ require 'chef/data_bag_item'
21
+
22
+ class Chef
23
+ class Knife
24
+ class DataBagEdit < Knife
25
+
26
+ banner "Sub-Command: data bag edit BAG ITEM (options)"
27
+
28
+ def run
29
+ if @name_args.length != 2
30
+ Chef::Log.fatal("You must supply the data bag and an item to edit!")
31
+ exit 42
32
+ else
33
+ object = Chef::DataBagItem.load(@name_args[0], @name_args[1])
34
+
35
+ output = edit_data(object)
36
+
37
+ rest.put_rest("data/#{@name_args[0]}/#{@name_args[1]}", output)
38
+
39
+ Chef::Log.info("Saved data_bag_item[#{@name_args[1]}]")
40
+
41
+ json_pretty_print(format_for_display(object)) if config[:print_after]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+
49
+