chef 0.7.16 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of chef might be problematic. Click here for more details.
- data/README.rdoc +11 -10
- data/bin/chef-client +2 -2
- data/bin/chef-solo +1 -1
- data/bin/knife +27 -0
- data/bin/shef +49 -0
- data/distro/README +2 -0
- data/distro/{debian → common}/man/man1/chef-indexer.1 +0 -0
- data/distro/{debian → common}/man/man1/chef-server.1 +0 -0
- data/distro/{debian → common}/man/man8/chef-client.8 +0 -0
- data/distro/{debian → common}/man/man8/chef-solo.8 +0 -0
- data/distro/common/man/man8/knife.8 +375 -0
- data/distro/redhat/etc/init.d/chef-client +8 -4
- data/distro/redhat/etc/init.d/chef-server +16 -15
- data/distro/redhat/etc/init.d/chef-server-webui +78 -0
- data/distro/redhat/etc/init.d/chef-solr +76 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +75 -0
- data/distro/redhat/etc/sysconfig/chef-client +10 -0
- data/distro/redhat/etc/sysconfig/chef-server +10 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +10 -0
- data/distro/redhat/etc/sysconfig/chef-solr +9 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/distro/suse/etc/init.d/chef-client +121 -0
- data/lib/chef.rb +1 -1
- data/lib/chef/api_client.rb +263 -0
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/client.rb +21 -3
- data/lib/chef/application/knife.rb +144 -0
- data/lib/chef/application/server.rb +2 -1
- data/lib/chef/application/solo.rb +9 -2
- data/lib/chef/cache.rb +61 -0
- data/lib/chef/cache/checksum.rb +70 -0
- data/lib/chef/certificate.rb +154 -0
- data/lib/chef/client.rb +123 -220
- data/lib/chef/compile.rb +9 -21
- data/lib/chef/config.rb +67 -10
- data/lib/chef/cookbook.rb +49 -22
- data/lib/chef/cookbook/metadata.rb +85 -5
- data/lib/chef/cookbook_loader.rb +4 -4
- data/lib/chef/couchdb.rb +99 -30
- data/lib/chef/daemon.rb +1 -1
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +219 -0
- data/lib/chef/exceptions.rb +3 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/index_queue/amqp_client.rb +106 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +74 -0
- data/lib/chef/knife.rb +309 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +62 -0
- data/lib/chef/knife/client_delete.rb +37 -0
- data/lib/chef/knife/client_edit.rb +37 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +48 -0
- data/lib/chef/knife/client_show.rb +42 -0
- data/lib/chef/knife/configure.rb +123 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +46 -0
- data/lib/chef/knife/cookbook_delete.rb +41 -0
- data/lib/chef/knife/cookbook_download.rb +57 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +87 -0
- data/lib/chef/knife/cookbook_show.rb +75 -0
- data/lib/chef/knife/cookbook_upload.rb +179 -0
- data/lib/chef/knife/data_bag_create.rb +43 -0
- data/lib/chef/knife/data_bag_delete.rb +43 -0
- data/lib/chef/knife/data_bag_edit.rb +49 -0
- data/lib/chef/knife/data_bag_list.rb +42 -0
- data/lib/chef/knife/data_bag_show.rb +40 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/index_rebuild.rb +51 -0
- data/lib/chef/knife/node_bulk_delete.rb +43 -0
- data/lib/chef/knife/node_create.rb +39 -0
- data/lib/chef/knife/node_delete.rb +36 -0
- data/lib/chef/knife/node_edit.rb +36 -0
- data/lib/chef/knife/node_from_file.rb +42 -0
- data/lib/chef/knife/node_list.rb +41 -0
- data/lib/chef/knife/node_run_list_add.rb +64 -0
- data/lib/chef/knife/node_run_list_remove.rb +45 -0
- data/lib/chef/knife/node_show.rb +46 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +44 -0
- data/lib/chef/knife/role_delete.rb +36 -0
- data/lib/chef/knife/role_edit.rb +37 -0
- data/lib/chef/knife/role_from_file.rb +46 -0
- data/lib/chef/knife/role_list.rb +40 -0
- data/lib/chef/knife/role_show.rb +43 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/ssh.rb +170 -0
- data/lib/chef/log.rb +30 -8
- data/lib/chef/mixin/checksum.rb +2 -7
- data/lib/chef/mixin/command.rb +32 -13
- data/lib/chef/mixin/convert_to_class_name.rb +15 -0
- data/lib/chef/mixin/deep_merge.rb +199 -11
- data/lib/chef/mixin/generate_url.rb +18 -9
- data/lib/chef/mixin/language.rb +29 -1
- data/lib/chef/mixin/language_include_attribute.rb +56 -0
- data/lib/chef/mixin/language_include_recipe.rb +53 -0
- data/lib/chef/mixin/params_validate.rb +25 -12
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +2 -0
- data/lib/chef/mixin/template.rb +11 -1
- data/lib/chef/mixin/xml_escape.rb +87 -0
- data/lib/chef/node.rb +144 -122
- data/lib/chef/openid_registration.rb +12 -5
- data/lib/chef/platform.rb +89 -47
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cron.rb +5 -6
- data/lib/chef/provider/deploy.rb +43 -10
- data/lib/chef/provider/deploy/revision.rb +2 -3
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/file.rb +8 -4
- data/lib/chef/provider/git.rb +10 -5
- data/lib/chef/provider/group/dscl.rb +128 -0
- data/lib/chef/provider/http_request.rb +6 -2
- data/lib/chef/provider/ifconfig.rb +1 -0
- data/lib/chef/provider/link.rb +1 -1
- data/lib/chef/provider/log.rb +53 -0
- data/lib/chef/provider/mdadm.rb +88 -0
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package.rb +1 -1
- data/lib/chef/provider/package/easy_install.rb +106 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +1 -1
- data/lib/chef/provider/package/rpm.rb +10 -8
- data/lib/chef/provider/package/yum-dump.py +22 -3
- data/lib/chef/provider/package/yum.rb +32 -8
- data/lib/chef/provider/package/zypper.rb +132 -0
- data/lib/chef/provider/remote_directory.rb +58 -49
- data/lib/chef/provider/remote_file.rb +1 -1
- data/lib/chef/provider/route.rb +136 -80
- data/lib/chef/provider/ruby_block.rb +18 -1
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/freebsd.rb +0 -1
- data/lib/chef/provider/service/simple.rb +2 -3
- data/lib/chef/provider/service/upstart.rb +191 -0
- data/lib/chef/provider/subversion.rb +12 -4
- data/lib/chef/provider/template.rb +85 -53
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +277 -0
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/recipe.rb +2 -41
- data/lib/chef/resource.rb +9 -3
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/deploy.rb +16 -2
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +21 -2
- data/lib/chef/resource/scm.rb +8 -0
- data/lib/chef/resource/subversion.rb +1 -0
- data/lib/chef/resource/user.rb +5 -2
- data/lib/chef/resource/yum_package.rb +36 -0
- data/lib/chef/resource_collection.rb +17 -9
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/rest.rb +166 -81
- data/lib/chef/role.rb +114 -38
- data/lib/chef/run_list.rb +15 -6
- data/lib/chef/runner.rb +13 -11
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef.rb +220 -0
- data/lib/chef/shef/ext.rb +297 -0
- data/lib/chef/shef/shef_session.rb +175 -0
- data/lib/chef/streaming_cookbook_uploader.rb +187 -0
- data/lib/chef/tasks/chef_repo.rake +53 -155
- data/lib/chef/util/file_edit.rb +94 -96
- data/lib/chef/webui_user.rb +233 -0
- metadata +219 -63
- data/distro/debian/etc/init.d/chef-indexer +0 -175
- data/distro/redhat/etc/chef/client.rb +0 -16
- data/distro/redhat/etc/chef/indexer.rb +0 -10
- data/distro/redhat/etc/chef/server.rb +0 -22
- data/distro/redhat/etc/init.d/chef-indexer +0 -76
- data/lib/chef/application/indexer.rb +0 -141
- data/lib/chef/queue.rb +0 -145
- data/lib/chef/search.rb +0 -88
- data/lib/chef/search/result.rb +0 -64
- data/lib/chef/search_index.rb +0 -77
- data/lib/chef/util/fileedit.rb +0 -121
@@ -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
|
+
|