runa-chef 0.8.0.1
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/LICENSE +201 -0
- data/README.rdoc +136 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +26 -0
- data/bin/knife +27 -0
- data/bin/shef +45 -0
- data/distro/README +2 -0
- data/distro/common/man/man1/chef-indexer.1 +42 -0
- data/distro/common/man/man1/chef-server.1 +108 -0
- data/distro/common/man/man8/chef-client.8 +61 -0
- data/distro/common/man/man8/chef-solo.8 +58 -0
- data/distro/common/man/man8/knife.8 +359 -0
- data/distro/debian/etc/init.d/chef-client +175 -0
- data/distro/debian/etc/init.d/chef-indexer +175 -0
- data/distro/debian/etc/init.d/chef-server +120 -0
- data/distro/redhat/etc/init.d/chef-client +78 -0
- data/distro/redhat/etc/init.d/chef-indexer +76 -0
- data/distro/redhat/etc/init.d/chef-server +78 -0
- data/distro/redhat/etc/sysconfig/chef-client +10 -0
- data/distro/redhat/etc/sysconfig/chef-indexer +8 -0
- data/distro/redhat/etc/sysconfig/chef-server +10 -0
- data/distro/suse/etc/init.d/chef-client +121 -0
- data/lib/chef.rb +49 -0
- data/lib/chef/api_client.rb +269 -0
- data/lib/chef/application.rb +98 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +214 -0
- data/lib/chef/application/knife.rb +138 -0
- data/lib/chef/application/server.rb +19 -0
- data/lib/chef/application/solo.rb +214 -0
- 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 +323 -0
- data/lib/chef/compile.rb +158 -0
- data/lib/chef/config.rb +195 -0
- data/lib/chef/cookbook.rb +198 -0
- data/lib/chef/cookbook/metadata.rb +487 -0
- data/lib/chef/cookbook/metadata/version.rb +87 -0
- data/lib/chef/cookbook_loader.rb +180 -0
- data/lib/chef/couchdb.rb +273 -0
- data/lib/chef/daemon.rb +170 -0
- data/lib/chef/data_bag.rb +216 -0
- data/lib/chef/data_bag_item.rb +227 -0
- data/lib/chef/exceptions.rb +39 -0
- data/lib/chef/file_cache.rb +205 -0
- data/lib/chef/knife.rb +300 -0
- data/lib/chef/knife/client_bulk_delete.rb +41 -0
- data/lib/chef/knife/client_create.rb +55 -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 +84 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +47 -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 +173 -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/node_bulk_delete.rb +44 -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 +45 -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/log.rb +39 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command.rb +390 -0
- data/lib/chef/mixin/convert_to_class_name.rb +57 -0
- data/lib/chef/mixin/create_path.rb +56 -0
- data/lib/chef/mixin/deep_merge.rb +33 -0
- data/lib/chef/mixin/find_preferred_file.rb +92 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/generate_url.rb +58 -0
- data/lib/chef/mixin/language.rb +107 -0
- 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 +197 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +79 -0
- data/lib/chef/mixin/template.rb +94 -0
- data/lib/chef/nanite.rb +100 -0
- data/lib/chef/node.rb +463 -0
- data/lib/chef/node/attribute.rb +412 -0
- data/lib/chef/openid_registration.rb +181 -0
- data/lib/chef/platform.rb +268 -0
- data/lib/chef/provider.rb +101 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cron.rb +184 -0
- data/lib/chef/provider/deploy.rb +314 -0
- data/lib/chef/provider/deploy/revision.rb +70 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/execute.rb +58 -0
- data/lib/chef/provider/file.rb +195 -0
- data/lib/chef/provider/git.rb +203 -0
- data/lib/chef/provider/group.rb +120 -0
- data/lib/chef/provider/group/dscl.rb +128 -0
- data/lib/chef/provider/group/gpasswd.rb +50 -0
- data/lib/chef/provider/group/groupadd.rb +78 -0
- data/lib/chef/provider/group/pw.rb +88 -0
- data/lib/chef/provider/group/usermod.rb +57 -0
- data/lib/chef/provider/http_request.rb +106 -0
- data/lib/chef/provider/ifconfig.rb +131 -0
- data/lib/chef/provider/link.rb +157 -0
- data/lib/chef/provider/mdadm.rb +88 -0
- data/lib/chef/provider/mount.rb +117 -0
- data/lib/chef/provider/mount/mount.rb +208 -0
- data/lib/chef/provider/package.rb +160 -0
- data/lib/chef/provider/package/apt.rb +110 -0
- data/lib/chef/provider/package/dpkg.rb +109 -0
- data/lib/chef/provider/package/easy_install.rb +106 -0
- data/lib/chef/provider/package/freebsd.rb +153 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/portage.rb +124 -0
- data/lib/chef/provider/package/rpm.rb +99 -0
- data/lib/chef/provider/package/rubygems.rb +136 -0
- data/lib/chef/provider/package/yum-dump.py +125 -0
- data/lib/chef/provider/package/yum.rb +175 -0
- data/lib/chef/provider/package/zypper.rb +132 -0
- data/lib/chef/provider/remote_directory.rb +126 -0
- data/lib/chef/provider/remote_file.rb +141 -0
- data/lib/chef/provider/route.rb +118 -0
- data/lib/chef/provider/ruby_block.rb +33 -0
- data/lib/chef/provider/script.rb +42 -0
- data/lib/chef/provider/service.rb +135 -0
- data/lib/chef/provider/service/debian.rb +64 -0
- data/lib/chef/provider/service/freebsd.rb +156 -0
- data/lib/chef/provider/service/gentoo.rb +54 -0
- data/lib/chef/provider/service/init.rb +71 -0
- data/lib/chef/provider/service/redhat.rb +62 -0
- data/lib/chef/provider/service/simple.rb +114 -0
- data/lib/chef/provider/subversion.rb +156 -0
- data/lib/chef/provider/template.rb +175 -0
- data/lib/chef/provider/user.rb +170 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/useradd.rb +108 -0
- data/lib/chef/recipe.rb +105 -0
- data/lib/chef/resource.rb +380 -0
- data/lib/chef/resource/apt_package.rb +34 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/cron.rb +179 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +359 -0
- data/lib/chef/resource/deploy_revision.rb +35 -0
- data/lib/chef/resource/directory.rb +76 -0
- data/lib/chef/resource/dpkg_package.rb +34 -0
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/execute.rb +127 -0
- data/lib/chef/resource/file.rb +84 -0
- data/lib/chef/resource/gem_package.rb +41 -0
- data/lib/chef/resource/git.rb +36 -0
- data/lib/chef/resource/group.rb +70 -0
- data/lib/chef/resource/http_request.rb +52 -0
- data/lib/chef/resource/ifconfig.rb +134 -0
- data/lib/chef/resource/link.rb +78 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/mount.rb +135 -0
- data/lib/chef/resource/package.rb +80 -0
- data/lib/chef/resource/perl.rb +33 -0
- data/lib/chef/resource/portage_package.rb +33 -0
- data/lib/chef/resource/python.rb +33 -0
- data/lib/chef/resource/remote_directory.rb +91 -0
- data/lib/chef/resource/remote_file.rb +60 -0
- data/lib/chef/resource/route.rb +135 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +39 -0
- data/lib/chef/resource/scm.rb +137 -0
- data/lib/chef/resource/script.rb +51 -0
- data/lib/chef/resource/service.rb +134 -0
- data/lib/chef/resource/subversion.rb +34 -0
- data/lib/chef/resource/template.rb +60 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +101 -0
- data/lib/chef/resource_collection.rb +212 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/rest.rb +298 -0
- data/lib/chef/role.rb +301 -0
- data/lib/chef/run_list.rb +164 -0
- data/lib/chef/runner.rb +130 -0
- data/lib/chef/search/query.rb +71 -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 +185 -0
- data/lib/chef/tasks/chef_repo.rake +245 -0
- data/lib/chef/util/file_edit.rb +125 -0
- data/lib/chef/util/fileedit.rb +121 -0
- data/lib/chef/webui_user.rb +231 -0
- metadata +398 -0
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class CookbookDownload < Knife
|
|
24
|
+
|
|
25
|
+
banner "Sub-Command: cookbook download COOKBOOK (options)"
|
|
26
|
+
|
|
27
|
+
option :file,
|
|
28
|
+
:short => "-f FILE",
|
|
29
|
+
:long => "--file FILE",
|
|
30
|
+
:description => "The filename to write to"
|
|
31
|
+
|
|
32
|
+
def run
|
|
33
|
+
cookbook = rest.get_rest("cookbooks/#{@name_args[0]}")
|
|
34
|
+
version = cookbook["metadata"]["version"]
|
|
35
|
+
Chef::Log.info("Downloading #{@name_args[0]} cookbook version #{version}")
|
|
36
|
+
rest.sign_on_redirect = false
|
|
37
|
+
tf = rest.get_rest("cookbooks/#{@name_args[0]}/_content", true)
|
|
38
|
+
rest.sign_on_redirect = true
|
|
39
|
+
unless config[:file]
|
|
40
|
+
if version
|
|
41
|
+
config[:file] = File.join(Dir.pwd, "#{@name_args[0]}-#{version}.tar.gz")
|
|
42
|
+
else
|
|
43
|
+
config[:file] = File.join(Dir.pwd, "#{@name_args[0]}.tar.gz")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
FileUtils.cp(tf.path, config[:file])
|
|
47
|
+
Chef::Log.info("Cookbook saved: #{config[:file]}")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class Knife
|
|
24
|
+
class CookbookList < Knife
|
|
25
|
+
|
|
26
|
+
banner "Sub-Command: cookbook list (options)"
|
|
27
|
+
|
|
28
|
+
option :with_uri,
|
|
29
|
+
:short => "-w",
|
|
30
|
+
:long => "--with-uri",
|
|
31
|
+
:description => "Show corresponding URIs"
|
|
32
|
+
|
|
33
|
+
def run
|
|
34
|
+
json_pretty_print(format_list_for_display(rest.get_rest('cookbooks')))
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
@@ -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.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,173 @@
|
|
|
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
|
|
133
|
+
cookbook_uploaded = false
|
|
134
|
+
end
|
|
135
|
+
Chef::Log.info("Uploading #{cookbook_name} (#{cookbook_uploaded ? 'new version' : 'first time'})")
|
|
136
|
+
if cookbook_uploaded
|
|
137
|
+
Chef::StreamingCookbookUploader.put(
|
|
138
|
+
"#{Chef::Config[:chef_server_url]}/cookbooks/#{cookbook_name}/_content",
|
|
139
|
+
Chef::Config[:node_name],
|
|
140
|
+
Chef::Config[:client_key],
|
|
141
|
+
{
|
|
142
|
+
:file => File.new(tarball_name),
|
|
143
|
+
:name => cookbook_name
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
else
|
|
147
|
+
Chef::StreamingCookbookUploader.post(
|
|
148
|
+
"#{Chef::Config[:chef_server_url]}/cookbooks",
|
|
149
|
+
Chef::Config[:node_name],
|
|
150
|
+
Chef::Config[:client_key],
|
|
151
|
+
{
|
|
152
|
+
:file => File.new(tarball_name),
|
|
153
|
+
:name => cookbook_name
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
end
|
|
157
|
+
Chef::Log.info("Upload complete!")
|
|
158
|
+
Chef::Log.debug("Removing local tarball at #{tarball_name}")
|
|
159
|
+
FileUtils.rm_rf tarball_name
|
|
160
|
+
Chef::Log.debug("Removing local staging directory at #{tmp_cookbook_dir}")
|
|
161
|
+
FileUtils.rm_rf tmp_cookbook_dir
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
@@ -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.put_rest("data/#{@name_args[0]}/#{@name_args[1]}", 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
|
+
|