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
|
+
# Author:: Christopher Walters (<cw@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2008, 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
|
+
class Chef
|
|
21
|
+
module Mixin
|
|
22
|
+
module ConvertToClassName
|
|
23
|
+
|
|
24
|
+
def convert_to_class_name(str)
|
|
25
|
+
rname = nil
|
|
26
|
+
regexp = %r{^(.+?)(_(.+))?$}
|
|
27
|
+
|
|
28
|
+
mn = str.match(regexp)
|
|
29
|
+
if mn
|
|
30
|
+
rname = mn[1].capitalize
|
|
31
|
+
|
|
32
|
+
while mn && mn[3]
|
|
33
|
+
mn = mn[3].match(regexp)
|
|
34
|
+
rname << mn[1].capitalize if mn
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
rname
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def convert_to_snake_case(str, namespace=nil)
|
|
42
|
+
str = str.dup
|
|
43
|
+
str.sub!(/^#{namespace}(\:\:)?/, '') if namespace
|
|
44
|
+
str.gsub!(/[A-Z]/) {|s| "_" + s}
|
|
45
|
+
str.downcase!
|
|
46
|
+
str.sub!(/^\_/, "")
|
|
47
|
+
str
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def filename_to_qualified_string(base, filename)
|
|
51
|
+
file_base = File.basename(filename, ".rb")
|
|
52
|
+
base.to_s + (file_base == 'default' ? '' : "_#{file_base}")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
class Chef
|
|
19
|
+
module Mixin
|
|
20
|
+
module CreatePath
|
|
21
|
+
|
|
22
|
+
# Creates a given path, including all directories that lead up to it.
|
|
23
|
+
# Like mkdir_p, but without the leaking.
|
|
24
|
+
#
|
|
25
|
+
# === Parameters
|
|
26
|
+
# file_path<String, Array>:: A string that represents the path to create,
|
|
27
|
+
# or an Array with the path-parts.
|
|
28
|
+
#
|
|
29
|
+
# === Returns
|
|
30
|
+
# The created file_path.
|
|
31
|
+
def create_path(file_path)
|
|
32
|
+
unless file_path.kind_of?(String) || file_path.kind_of?(Array)
|
|
33
|
+
raise ArgumentError, "file_path must be a string or an array!"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
if file_path.kind_of?(String)
|
|
37
|
+
file_path = File.expand_path(file_path).split(File::SEPARATOR)
|
|
38
|
+
file_path.shift if file_path[0] = ''
|
|
39
|
+
unless file_path[0].match("^#{File::SEPARATOR}")
|
|
40
|
+
file_path[0] = "#{File::SEPARATOR}#{file_path[0]}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
file_path.each_index do |i|
|
|
45
|
+
create_path = File.join(file_path[0, i + 1])
|
|
46
|
+
unless File.directory?(create_path)
|
|
47
|
+
Chef::Log.debug("Creating directory #{create_path}")
|
|
48
|
+
Dir.mkdir(create_path)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
File.expand_path(File.join(file_path))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
require 'deep_merge'
|
|
19
|
+
|
|
20
|
+
class Chef
|
|
21
|
+
module Mixin
|
|
22
|
+
class DeepMerge
|
|
23
|
+
def self.merge(first, second)
|
|
24
|
+
first = Mash.new(first).to_hash unless second.kind_of?(Mash)
|
|
25
|
+
first = first.to_hash
|
|
26
|
+
second = Mash.new(second).to_hash unless second.kind_of?(Mash)
|
|
27
|
+
second = second.to_hash
|
|
28
|
+
|
|
29
|
+
Mash.new(first.ko_deep_merge!(second, {:knockout_prefix => '!merge:'}))
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
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/cookbook_loader'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
module Mixin
|
|
23
|
+
module FindPreferredFile
|
|
24
|
+
|
|
25
|
+
def load_cookbook_files(cookbook_id, file_type)
|
|
26
|
+
unless file_type == :remote_file || file_type == :template
|
|
27
|
+
raise ArgumentError, "You must supply :remote_file or :template as the file_type"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
cl = Chef::CookbookLoader.new
|
|
31
|
+
cookbook = cl[cookbook_id]
|
|
32
|
+
raise NotFound unless cookbook
|
|
33
|
+
|
|
34
|
+
files = Hash.new
|
|
35
|
+
|
|
36
|
+
cookbook_method = nil
|
|
37
|
+
|
|
38
|
+
case file_type
|
|
39
|
+
when :remote_file
|
|
40
|
+
cookbook_method = :remote_files
|
|
41
|
+
when :template
|
|
42
|
+
cookbook_method = :template_files
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
cookbook.send(cookbook_method).each do |rf|
|
|
46
|
+
full = File.expand_path(rf)
|
|
47
|
+
name = File.basename(full)
|
|
48
|
+
case file_type
|
|
49
|
+
when :remote_file
|
|
50
|
+
rf =~ /^.+#{cookbook_id}[\\|\/]files[\\|\/](.+?)[\\|\/]#{name}/
|
|
51
|
+
when :template
|
|
52
|
+
rf =~ /^.+#{cookbook_id}[\\|\/]templates[\\|\/](.+?)[\\|\/]#{name}/
|
|
53
|
+
end
|
|
54
|
+
singlecopy = $1
|
|
55
|
+
files[full] = {
|
|
56
|
+
:name => name,
|
|
57
|
+
:singlecopy => singlecopy,
|
|
58
|
+
:file => full,
|
|
59
|
+
}
|
|
60
|
+
end
|
|
61
|
+
Chef::Log.debug("Preferred #{file_type} list: #{files.inspect}")
|
|
62
|
+
|
|
63
|
+
files
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def find_preferred_file(cookbook_id, file_type, file_name, fqdn, platform, version)
|
|
67
|
+
file_list = load_cookbook_files(cookbook_id, file_type)
|
|
68
|
+
|
|
69
|
+
preferences = [
|
|
70
|
+
File.join("host-#{fqdn}", "#{file_name}"),
|
|
71
|
+
File.join("#{platform}-#{version}", "#{file_name}"),
|
|
72
|
+
File.join("#{platform}", "#{file_name}"),
|
|
73
|
+
File.join("default", "#{file_name}")
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
file_list_str = file_list.keys.join("\n")
|
|
77
|
+
Chef::Log.debug("Searching for preferred file in\n#{file_list_str}")
|
|
78
|
+
|
|
79
|
+
preferences.each do |pref|
|
|
80
|
+
Chef::Log.debug("Looking for #{pref}")
|
|
81
|
+
matcher = /^(.+#{pref})$/
|
|
82
|
+
if match = matcher.match(file_list_str)
|
|
83
|
+
return match[1]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
raise Chef::Exceptions::FileNotFound, "Cannot find a preferred file for #{file_name}!"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Christopher Walters (<cw@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2008 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
|
+
class Chef
|
|
21
|
+
module Mixin
|
|
22
|
+
module FromFile
|
|
23
|
+
|
|
24
|
+
# Loads a given ruby file, and runs instance_eval against it in the context of the current
|
|
25
|
+
# object.
|
|
26
|
+
#
|
|
27
|
+
# Raises an IOError if the file cannot be found, or is not readable.
|
|
28
|
+
def from_file(filename)
|
|
29
|
+
if File.exists?(filename) && File.readable?(filename)
|
|
30
|
+
self.instance_eval(IO.read(filename), filename, 1)
|
|
31
|
+
else
|
|
32
|
+
raise IOError, "Cannot open or read #{filename}!"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Loads a given ruby file, and runs class_eval against it in the context of the current
|
|
37
|
+
# object.
|
|
38
|
+
#
|
|
39
|
+
# Raises an IOError if the file cannot be found, or is not readable.
|
|
40
|
+
def class_from_file(filename)
|
|
41
|
+
if File.exists?(filename) && File.readable?(filename)
|
|
42
|
+
self.class_eval(IO.read(filename), filename, 1)
|
|
43
|
+
else
|
|
44
|
+
raise IOError, "Cannot open or read #{filename}!"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
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/platform'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
module Mixin
|
|
23
|
+
module GenerateURL
|
|
24
|
+
|
|
25
|
+
def generate_cookbook_url(url, cookbook, type, node, args=nil)
|
|
26
|
+
Chef::Log.debug("generating cookbook url for url=#{url}, cookbook=#{cookbook.inspect}, type=#{type}, node=#{node}")
|
|
27
|
+
new_url = nil
|
|
28
|
+
if url =~ /^(http|https):\/\//
|
|
29
|
+
new_url = url
|
|
30
|
+
else
|
|
31
|
+
new_url = "cookbooks/#{cookbook}/#{type}?"
|
|
32
|
+
new_url += "id=#{url}"
|
|
33
|
+
new_url = generate_cookbook_url_from_uri(new_url, node, args)
|
|
34
|
+
end
|
|
35
|
+
Chef::Log.debug("generated cookbook url: #{new_url}")
|
|
36
|
+
return new_url
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def generate_cookbook_url_from_uri(uri, node, args=nil)
|
|
40
|
+
platform, version = Chef::Platform.find_platform_and_version(node)
|
|
41
|
+
uri =~ /cookbooks\/(.+?)\/(.+)\?/
|
|
42
|
+
cookbook = $1
|
|
43
|
+
type = $2
|
|
44
|
+
if type == "files" || type == "templates"
|
|
45
|
+
uri += "&platform=#{platform}&version=#{version}&fqdn=#{node[:fqdn]}&node_name=#{node.name}"
|
|
46
|
+
end
|
|
47
|
+
if args
|
|
48
|
+
args.each do |key, value|
|
|
49
|
+
uri += "&#{key}=#{value}"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
uri
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
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/query'
|
|
20
|
+
require 'chef/data_bag'
|
|
21
|
+
require 'chef/data_bag_item'
|
|
22
|
+
|
|
23
|
+
class Chef
|
|
24
|
+
module Mixin
|
|
25
|
+
module Language
|
|
26
|
+
|
|
27
|
+
# Given a hash similar to the one we use for Platforms, select a value from the hash. Supports
|
|
28
|
+
# per platform defaults, along with a single base default. Arrays may be passed as hash keys and
|
|
29
|
+
# will be expanded.
|
|
30
|
+
#
|
|
31
|
+
# === Parameters
|
|
32
|
+
# platform_hash:: A platform-style hash.
|
|
33
|
+
#
|
|
34
|
+
# === Returns
|
|
35
|
+
# value:: Whatever the most specific value of the hash is.
|
|
36
|
+
def value_for_platform(platform_hash)
|
|
37
|
+
result = nil
|
|
38
|
+
|
|
39
|
+
platform_hash.each_pair do |key, value|
|
|
40
|
+
if key.is_a?(Array)
|
|
41
|
+
key.each { |array_key| platform_hash[array_key] = value }
|
|
42
|
+
platform_hash.delete(key)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
if platform_hash.has_key?(@node[:platform])
|
|
46
|
+
if platform_hash[@node[:platform]].has_key?(@node[:platform_version])
|
|
47
|
+
result = platform_hash[@node[:platform]][@node[:platform_version]]
|
|
48
|
+
elsif platform_hash[@node[:platform]].has_key?("default")
|
|
49
|
+
result = platform_hash[@node[:platform]]["default"]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
unless result
|
|
54
|
+
if platform_hash.has_key?("default")
|
|
55
|
+
result = platform_hash["default"]
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
result
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Given a list of platforms, returns true if the current recipe is being run on a node with
|
|
63
|
+
# that platform, false otherwise.
|
|
64
|
+
#
|
|
65
|
+
# === Parameters
|
|
66
|
+
# args:: A list of platforms
|
|
67
|
+
#
|
|
68
|
+
# === Returns
|
|
69
|
+
# true:: If the current platform is in the list
|
|
70
|
+
# false:: If the current platform is not in the list
|
|
71
|
+
def platform?(*args)
|
|
72
|
+
has_platform = false
|
|
73
|
+
|
|
74
|
+
args.flatten.each do |platform|
|
|
75
|
+
has_platform = true if platform == @node[:platform]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
has_platform
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def search(*args, &block)
|
|
82
|
+
# If you pass a block, or have at least the start argument, do raw result parsing
|
|
83
|
+
#
|
|
84
|
+
# Otherwise, do the iteration for the end user
|
|
85
|
+
if Kernel.block_given? || args.length >= 4
|
|
86
|
+
Chef::Search::Query.new.search(*args, &block)
|
|
87
|
+
else
|
|
88
|
+
results = Array.new
|
|
89
|
+
Chef::Search::Query.new.search(*args) do |o|
|
|
90
|
+
results << o
|
|
91
|
+
end
|
|
92
|
+
results
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def data_bag(bag)
|
|
97
|
+
rbag = Chef::DataBag.load(bag)
|
|
98
|
+
rbag.keys
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def data_bag_item(bag, item)
|
|
102
|
+
Chef::DataBagItem.load(bag, item)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|