mbailey-chef 0.9.12.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 +172 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +25 -0
- data/bin/knife +26 -0
- data/bin/shef +34 -0
- data/distro/README +2 -0
- data/distro/common/man/man1/chef-indexer.1 +42 -0
- data/distro/common/man/man1/chef-server-webui.1 +106 -0
- data/distro/common/man/man1/chef-server.1 +107 -0
- data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
- data/distro/common/man/man1/chef-solr.1 +55 -0
- data/distro/common/man/man8/chef-client.8 +63 -0
- data/distro/common/man/man8/chef-solo.8 +57 -0
- data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
- data/distro/common/man/man8/knife.8 +1349 -0
- data/distro/common/man/man8/shef.8 +45 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/knife.mkd +832 -0
- data/distro/debian/etc/default/chef-client +4 -0
- data/distro/debian/etc/default/chef-server +9 -0
- data/distro/debian/etc/default/chef-server-webui +9 -0
- data/distro/debian/etc/default/chef-solr +7 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -0
- data/distro/debian/etc/init/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-server-webui.conf +17 -0
- data/distro/debian/etc/init/chef-server.conf +17 -0
- data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
- data/distro/debian/etc/init/chef-solr.conf +17 -0
- data/distro/debian/etc/init.d/chef-client +175 -0
- data/distro/debian/etc/init.d/chef-server +122 -0
- data/distro/debian/etc/init.d/chef-server-webui +123 -0
- data/distro/debian/etc/init.d/chef-solr +177 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
- data/distro/redhat/etc/init.d/chef-client +106 -0
- data/distro/redhat/etc/init.d/chef-server +112 -0
- data/distro/redhat/etc/init.d/chef-server-webui +112 -0
- data/distro/redhat/etc/init.d/chef-solr +104 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
- data/distro/redhat/etc/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
- data/distro/redhat/etc/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-server +14 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
- data/distro/redhat/etc/sysconfig/chef-solr +8 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +246 -0
- data/lib/chef/application/knife.rb +171 -0
- data/lib/chef/application/solo.rb +215 -0
- data/lib/chef/application.rb +127 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +194 -0
- data/lib/chef/checksum.rb +182 -0
- data/lib/chef/checksum_cache.rb +173 -0
- data/lib/chef/client.rb +304 -0
- data/lib/chef/config.rb +240 -0
- data/lib/chef/cookbook/cookbook_collection.rb +44 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata/version.rb +87 -0
- data/lib/chef/cookbook/metadata.rb +500 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +227 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +103 -0
- data/lib/chef/cookbook_version.rb +930 -0
- data/lib/chef/couchdb.rb +239 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +228 -0
- data/lib/chef/exceptions.rb +66 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/index_queue/amqp_client.rb +113 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +76 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
- data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +43 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/bootstrap.rb +181 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +70 -0
- data/lib/chef/knife/client_delete.rb +45 -0
- data/lib/chef/knife/client_edit.rb +45 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +56 -0
- data/lib/chef/knife/client_show.rb +50 -0
- data/lib/chef/knife/configure.rb +140 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
- data/lib/chef/knife/cookbook_create.rb +209 -0
- data/lib/chef/knife/cookbook_delete.rb +143 -0
- data/lib/chef/knife/cookbook_download.rb +130 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +82 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
- data/lib/chef/knife/cookbook_show.rb +98 -0
- data/lib/chef/knife/cookbook_site_download.rb +58 -0
- data/lib/chef/knife/cookbook_site_list.rb +56 -0
- data/lib/chef/knife/cookbook_site_search.rb +51 -0
- data/lib/chef/knife/cookbook_site_share.rb +109 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +52 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +133 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +95 -0
- data/lib/chef/knife/data_bag_create.rb +59 -0
- data/lib/chef/knife/data_bag_delete.rb +48 -0
- data/lib/chef/knife/data_bag_edit.rb +50 -0
- data/lib/chef/knife/data_bag_from_file.rb +44 -0
- data/lib/chef/knife/data_bag_list.rb +43 -0
- data/lib/chef/knife/data_bag_show.rb +41 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/ec2_server_create.rb +216 -0
- data/lib/chef/knife/ec2_server_delete.rb +90 -0
- data/lib/chef/knife/ec2_server_list.rb +88 -0
- data/lib/chef/knife/exec.rb +52 -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 +47 -0
- data/lib/chef/knife/node_delete.rb +44 -0
- data/lib/chef/knife/node_edit.rb +44 -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 +54 -0
- data/lib/chef/knife/rackspace_server_create.rb +156 -0
- data/lib/chef/knife/rackspace_server_delete.rb +57 -0
- data/lib/chef/knife/rackspace_server_list.rb +59 -0
- data/lib/chef/knife/recipe_list.rb +32 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +52 -0
- data/lib/chef/knife/role_delete.rb +44 -0
- data/lib/chef/knife/role_edit.rb +45 -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 +51 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/slicehost_images_list.rb +53 -0
- data/lib/chef/knife/slicehost_server_create.rb +103 -0
- data/lib/chef/knife/slicehost_server_delete.rb +61 -0
- data/lib/chef/knife/slicehost_server_list.rb +64 -0
- data/lib/chef/knife/ssh.rb +328 -0
- data/lib/chef/knife/status.rb +87 -0
- data/lib/chef/knife/terremark_server_create.rb +152 -0
- data/lib/chef/knife/terremark_server_delete.rb +87 -0
- data/lib/chef/knife/terremark_server_list.rb +77 -0
- data/lib/chef/knife/windows_bootstrap.rb +154 -0
- data/lib/chef/knife.rb +522 -0
- data/lib/chef/log.rb +61 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +72 -0
- data/lib/chef/mixin/command.rb +220 -0
- data/lib/chef/mixin/convert_to_class_name.rb +63 -0
- data/lib/chef/mixin/create_path.rb +56 -0
- data/lib/chef/mixin/deep_merge.rb +225 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/find_preferred_file.rb +92 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +156 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +52 -0
- data/lib/chef/mixin/params_validate.rb +225 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
- data/lib/chef/mixin/shell_out.rb +38 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +16 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/node/attribute.rb +465 -0
- data/lib/chef/node.rb +601 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +371 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +100 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/deploy/revision.rb +73 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/deploy.rb +319 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/execute.rb +58 -0
- data/lib/chef/provider/file.rb +213 -0
- data/lib/chef/provider/git.rb +211 -0
- data/lib/chef/provider/group/dscl.rb +121 -0
- data/lib/chef/provider/group/gpasswd.rb +53 -0
- data/lib/chef/provider/group/groupadd.rb +78 -0
- data/lib/chef/provider/group/pw.rb +84 -0
- data/lib/chef/provider/group/usermod.rb +57 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/http_request.rb +122 -0
- data/lib/chef/provider/ifconfig.rb +132 -0
- data/lib/chef/provider/link.rb +161 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +91 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/mount.rb +117 -0
- data/lib/chef/provider/ohai.rb +41 -0
- data/lib/chef/provider/package/apt.rb +110 -0
- data/lib/chef/provider/package/dpkg.rb +112 -0
- data/lib/chef/provider/package/easy_install.rb +114 -0
- data/lib/chef/provider/package/freebsd.rb +123 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +124 -0
- data/lib/chef/provider/package/rpm.rb +101 -0
- data/lib/chef/provider/package/rubygems.rb +462 -0
- data/lib/chef/provider/package/solaris.rb +127 -0
- data/lib/chef/provider/package/yum-dump.py +128 -0
- data/lib/chef/provider/package/yum.rb +222 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/package.rb +160 -0
- data/lib/chef/provider/remote_directory.rb +140 -0
- data/lib/chef/provider/remote_file.rb +120 -0
- data/lib/chef/provider/route.rb +195 -0
- data/lib/chef/provider/ruby_block.rb +33 -0
- data/lib/chef/provider/script.rb +55 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +105 -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 +60 -0
- data/lib/chef/provider/service/simple.rb +118 -0
- data/lib/chef/provider/service/solaris.rb +85 -0
- data/lib/chef/provider/service/upstart.rb +192 -0
- data/lib/chef/provider/service/windows.rb +129 -0
- data/lib/chef/provider/service.rb +128 -0
- data/lib/chef/provider/subversion.rb +159 -0
- data/lib/chef/provider/template.rb +105 -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 +137 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/provider/user.rb +187 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/providers.rb +91 -0
- data/lib/chef/recipe.rb +130 -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/cookbook_file.rb +45 -0
- data/lib/chef/resource/cron.rb +188 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +371 -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/env.rb +58 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/execute.rb +127 -0
- data/lib/chef/resource/file.rb +92 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +49 -0
- data/lib/chef/resource/git.rb +36 -0
- data/lib/chef/resource/group.rb +70 -0
- data/lib/chef/resource/http_request.rb +61 -0
- data/lib/chef/resource/ifconfig.rb +134 -0
- data/lib/chef/resource/link.rb +78 -0
- data/lib/chef/resource/log.rb +62 -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/ohai.rb +40 -0
- data/lib/chef/resource/package.rb +80 -0
- data/lib/chef/resource/pacman_package.rb +33 -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 +109 -0
- data/lib/chef/resource/remote_file.rb +83 -0
- data/lib/chef/resource/route.rb +135 -0
- data/lib/chef/resource/rpm_package.rb +34 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +40 -0
- data/lib/chef/resource/scm.rb +146 -0
- data/lib/chef/resource/script.rb +60 -0
- data/lib/chef/resource/service.rb +160 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +36 -0
- data/lib/chef/resource/template.rb +69 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +130 -0
- data/lib/chef/resource/yum_package.rb +43 -0
- data/lib/chef/resource.rb +523 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_collection.rb +217 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/resource_definition_list.rb +38 -0
- data/lib/chef/resources.rb +64 -0
- data/lib/chef/rest/auth_credentials.rb +78 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/rest.rb +394 -0
- data/lib/chef/role.rb +287 -0
- data/lib/chef/run_context.rb +110 -0
- data/lib/chef/run_list/run_list_expansion.rb +172 -0
- data/lib/chef/run_list/run_list_item.rb +78 -0
- data/lib/chef/run_list.rb +150 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +107 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef/ext.rb +568 -0
- data/lib/chef/shef/model_wrapper.rb +120 -0
- data/lib/chef/shef/shef_rest.rb +28 -0
- data/lib/chef/shef/shef_session.rb +271 -0
- data/lib/chef/shef.rb +325 -0
- data/lib/chef/shell_out.rb +413 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +256 -0
- data/lib/chef/util/file_edit.rb +122 -0
- data/lib/chef/util/windows/net_group.rb +101 -0
- data/lib/chef/util/windows/net_use.rb +121 -0
- data/lib/chef/util/windows/net_user.rb +198 -0
- data/lib/chef/util/windows/volume.rb +59 -0
- data/lib/chef/util/windows.rb +56 -0
- data/lib/chef/version.rb +21 -0
- data/lib/chef/webui_user.rb +231 -0
- data/lib/chef.rb +39 -0
- metadata +533 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Nuo Yan (<nuo@opscode.com>)
|
|
4
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
|
5
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
6
|
+
# License:: Apache License, Version 2.0
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'chef/config'
|
|
22
|
+
require 'chef/mixin/params_validate'
|
|
23
|
+
require 'chef/mixin/from_file'
|
|
24
|
+
require 'chef/couchdb'
|
|
25
|
+
require 'chef/index_queue'
|
|
26
|
+
require 'chef/data_bag'
|
|
27
|
+
require 'extlib'
|
|
28
|
+
require 'json'
|
|
29
|
+
|
|
30
|
+
class Chef
|
|
31
|
+
class DataBagItem
|
|
32
|
+
|
|
33
|
+
include Chef::Mixin::FromFile
|
|
34
|
+
include Chef::Mixin::ParamsValidate
|
|
35
|
+
include Chef::IndexQueue::Indexable
|
|
36
|
+
|
|
37
|
+
DESIGN_DOCUMENT = {
|
|
38
|
+
"version" => 1,
|
|
39
|
+
"language" => "javascript",
|
|
40
|
+
"views" => {
|
|
41
|
+
"all" => {
|
|
42
|
+
"map" => <<-EOJS
|
|
43
|
+
function(doc) {
|
|
44
|
+
if (doc.chef_type == "data_bag_item") {
|
|
45
|
+
emit(doc.name, doc);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
EOJS
|
|
49
|
+
},
|
|
50
|
+
"all_id" => {
|
|
51
|
+
"map" => <<-EOJS
|
|
52
|
+
function(doc) {
|
|
53
|
+
if (doc.chef_type == "data_bag_item") {
|
|
54
|
+
emit(doc.name, doc.name);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
EOJS
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
attr_accessor :couchdb_rev, :couchdb_id, :couchdb
|
|
63
|
+
attr_reader :raw_data
|
|
64
|
+
|
|
65
|
+
# Create a new Chef::DataBagItem
|
|
66
|
+
def initialize(couchdb=nil)
|
|
67
|
+
@couchdb_rev = nil
|
|
68
|
+
@couchdb_id = nil
|
|
69
|
+
@data_bag = nil
|
|
70
|
+
@raw_data = Mash.new
|
|
71
|
+
@couchdb = couchdb || Chef::CouchDB.new
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def chef_server_rest
|
|
75
|
+
Chef::REST.new(Chef::Config[:chef_server_url])
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def self.chef_server_rest
|
|
79
|
+
Chef::REST.new(Chef::Config[:chef_server_url])
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def raw_data
|
|
83
|
+
@raw_data
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def raw_data=(new_data)
|
|
87
|
+
raise Exceptions::ValidationFailed, "Data Bag Items must contain a Hash or Mash!" unless new_data.kind_of?(Hash) || new_data.kind_of?(Mash)
|
|
88
|
+
raise Exceptions::ValidationFailed, "Data Bag Items must have an id key in the hash! #{new_data.inspect}" unless new_data.has_key?("id")
|
|
89
|
+
raise Exceptions::ValidationFailed, "Data Bag Item id does not match alphanumeric/-/_!" unless new_data["id"] =~ /^[\-[:alnum:]_]+$/
|
|
90
|
+
@raw_data = new_data
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def data_bag(arg=nil)
|
|
94
|
+
set_or_return(
|
|
95
|
+
:data_bag,
|
|
96
|
+
arg,
|
|
97
|
+
:regex => /^[\-[:alnum:]_]+$/
|
|
98
|
+
)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def name
|
|
102
|
+
object_name
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def object_name
|
|
106
|
+
raise Exceptions::ValidationFailed, "You must have an 'id' or :id key in the raw data" unless raw_data.has_key?('id')
|
|
107
|
+
raise Exceptions::ValidationFailed, "You must have declared what bag this item belongs to!" unless data_bag
|
|
108
|
+
|
|
109
|
+
id = raw_data['id']
|
|
110
|
+
"data_bag_item_#{data_bag}_#{id}"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def self.object_name(data_bag_name, id)
|
|
114
|
+
"data_bag_item_#{data_bag_name}_#{id}"
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def to_hash
|
|
118
|
+
result = self.raw_data
|
|
119
|
+
result["chef_type"] = "data_bag_item"
|
|
120
|
+
result["data_bag"] = self.data_bag
|
|
121
|
+
result["_rev"] = @couchdb_rev if @couchdb_rev
|
|
122
|
+
result
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Serialize this object as a hash
|
|
126
|
+
def to_json(*a)
|
|
127
|
+
result = {
|
|
128
|
+
"name" => self.object_name,
|
|
129
|
+
"json_class" => self.class.name,
|
|
130
|
+
"chef_type" => "data_bag_item",
|
|
131
|
+
"data_bag" => self.data_bag,
|
|
132
|
+
"raw_data" => self.raw_data
|
|
133
|
+
}
|
|
134
|
+
result["_rev"] = @couchdb_rev if @couchdb_rev
|
|
135
|
+
result.to_json(*a)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Create a Chef::DataBagItem from JSON
|
|
139
|
+
def self.json_create(o)
|
|
140
|
+
bag_item = new
|
|
141
|
+
bag_item.data_bag(o["data_bag"])
|
|
142
|
+
o.delete("data_bag")
|
|
143
|
+
o.delete("chef_type")
|
|
144
|
+
o.delete("json_class")
|
|
145
|
+
o.delete("name")
|
|
146
|
+
if o.has_key?("_rev")
|
|
147
|
+
bag_item.couchdb_rev = o["_rev"]
|
|
148
|
+
o.delete("_rev")
|
|
149
|
+
end
|
|
150
|
+
if o.has_key?("_id")
|
|
151
|
+
bag_item.couchdb_id = o["_id"]
|
|
152
|
+
bag_item.index_id = bag_item.couchdb_id
|
|
153
|
+
o.delete("_id")
|
|
154
|
+
end
|
|
155
|
+
bag_item.raw_data = Mash.new(o["raw_data"])
|
|
156
|
+
bag_item
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# The Data Bag Item behaves like a hash - we pass all that stuff along to @raw_data.
|
|
160
|
+
def method_missing(method_symbol, *args, &block)
|
|
161
|
+
self.raw_data.send(method_symbol, *args, &block)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Load a Data Bag Item by name from CouchDB
|
|
165
|
+
def self.cdb_load(data_bag, name, couchdb=nil)
|
|
166
|
+
(couchdb || Chef::CouchDB.new).load("data_bag_item", object_name(data_bag, name))
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Load a Data Bag Item by name via RESTful API
|
|
170
|
+
def self.load(data_bag, name)
|
|
171
|
+
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{data_bag}/#{name}")
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# Remove this Data Bag Item from CouchDB
|
|
175
|
+
def cdb_destroy
|
|
176
|
+
Chef::Log.debug "destroying data bag item: #{self.inspect}"
|
|
177
|
+
@couchdb.delete("data_bag_item", object_name, @couchdb_rev)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def destroy(data_bag=data_bag, databag_item=name)
|
|
181
|
+
chef_server_rest.delete_rest("data/#{data_bag}/#{databag_item}")
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Save this Data Bag Item to CouchDB
|
|
185
|
+
def cdb_save
|
|
186
|
+
@couchdb_rev = @couchdb.store("data_bag_item", object_name, self)["rev"]
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Save this Data Bag Item via RESTful API
|
|
190
|
+
def save(item_id=@raw_data['id'])
|
|
191
|
+
r = chef_server_rest
|
|
192
|
+
begin
|
|
193
|
+
r.put_rest("data/#{data_bag}/#{item_id}", @raw_data)
|
|
194
|
+
rescue Net::HTTPServerException => e
|
|
195
|
+
raise e unless e.response.code == "404"
|
|
196
|
+
r.post_rest("data/#{data_bag}", @raw_data)
|
|
197
|
+
end
|
|
198
|
+
self
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Create this Data Bag Item via RESTful API
|
|
202
|
+
def create
|
|
203
|
+
chef_server_rest.post_rest("data/#{data_bag}", @raw_data)
|
|
204
|
+
self
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Set up our CouchDB design document
|
|
208
|
+
def self.create_design_document(couchdb=nil)
|
|
209
|
+
(couchdb || Chef::CouchDB.new).create_design_document("data_bag_items", DESIGN_DOCUMENT)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# As a string
|
|
213
|
+
def to_s
|
|
214
|
+
"data_bag_item[#{id}]"
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def pretty_print(pretty_printer)
|
|
218
|
+
pretty_printer.pp({"data_bag_item('#{data_bag}', '#{id}')" => self.to_hash})
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def id
|
|
222
|
+
@raw_data['id']
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
# == Chef::Exceptions
|
|
20
|
+
# Chef's custom exceptions are all contained within the Chef::Exceptions
|
|
21
|
+
# namespace.
|
|
22
|
+
class Exceptions
|
|
23
|
+
class Application < RuntimeError; end
|
|
24
|
+
class Cron < RuntimeError; end
|
|
25
|
+
class Env < RuntimeError; end
|
|
26
|
+
class Exec < RuntimeError; end
|
|
27
|
+
class FileNotFound < RuntimeError; end
|
|
28
|
+
class Package < RuntimeError; end
|
|
29
|
+
class Service < RuntimeError; end
|
|
30
|
+
class Route < RuntimeError; end
|
|
31
|
+
class SearchIndex < RuntimeError; end
|
|
32
|
+
class Override < RuntimeError; end
|
|
33
|
+
class UnsupportedAction < RuntimeError; end
|
|
34
|
+
class MissingLibrary < RuntimeError; end
|
|
35
|
+
class MissingRole < RuntimeError; end
|
|
36
|
+
class CannotDetermineNodeName < RuntimeError; end
|
|
37
|
+
class User < RuntimeError; end
|
|
38
|
+
class Group < RuntimeError; end
|
|
39
|
+
class Link < RuntimeError; end
|
|
40
|
+
class Mount < RuntimeError; end
|
|
41
|
+
class CouchDBNotFound < RuntimeError; end
|
|
42
|
+
class PrivateKeyMissing < RuntimeError; end
|
|
43
|
+
class CannotWritePrivateKey < RuntimeError; end
|
|
44
|
+
class RoleNotFound < RuntimeError; end
|
|
45
|
+
class ValidationFailed < ArgumentError; end
|
|
46
|
+
class InvalidPrivateKey < ArgumentError; end
|
|
47
|
+
class ConfigurationError < ArgumentError; end
|
|
48
|
+
class RedirectLimitExceeded < RuntimeError; end
|
|
49
|
+
class AmbiguousRunlistSpecification < ArgumentError; end
|
|
50
|
+
class CookbookNotFound < RuntimeError; end
|
|
51
|
+
class AttributeNotFound < RuntimeError; end
|
|
52
|
+
class InvalidCommandOption < RuntimeError; end
|
|
53
|
+
class CommandTimeout < RuntimeError; end
|
|
54
|
+
class ShellCommandFailed < RuntimeError; end
|
|
55
|
+
class RequestedUIDUnavailable < RuntimeError; end
|
|
56
|
+
class InvalidHomeDirectory < ArgumentError; end
|
|
57
|
+
class DsclCommandFailed < RuntimeError; end
|
|
58
|
+
class UserIDNotFound < ArgumentError; end
|
|
59
|
+
class GroupIDNotFound < ArgumentError; end
|
|
60
|
+
class InvalidResourceReference < RuntimeError; end
|
|
61
|
+
class ResourceNotFound < RuntimeError; end
|
|
62
|
+
class InvalidResourceSpecification < ArgumentError; end
|
|
63
|
+
class SolrConnectionError < RuntimeError; end
|
|
64
|
+
class IllegalChecksumRevert < RuntimeError; end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2008, 2010 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/log'
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
|
|
24
|
+
# == Chef::FileAccessControl
|
|
25
|
+
# FileAccessControl objects set the owner, group and mode of +file+ to
|
|
26
|
+
# the values specified by a value object, usually a Chef::Resource.
|
|
27
|
+
class FileAccessControl
|
|
28
|
+
UINT = (1 << 32)
|
|
29
|
+
UID_MAX = (1 << 31)
|
|
30
|
+
|
|
31
|
+
attr_reader :resource
|
|
32
|
+
|
|
33
|
+
attr_reader :file
|
|
34
|
+
|
|
35
|
+
# FileAccessControl objects set the owner, group and mode of +file+ to
|
|
36
|
+
# the values specified by +resource+. +file+ is completely independent
|
|
37
|
+
# of any file or path attribute on +resource+, so it is possible to set
|
|
38
|
+
# access control settings on a tempfile (for example).
|
|
39
|
+
# === Arguments:
|
|
40
|
+
# resource: probably a Chef::Resource::File object (or subclass), but
|
|
41
|
+
# this is not required. Must respond to +owner+, +group+,
|
|
42
|
+
# and +mode+
|
|
43
|
+
# file: The file whose access control settings you wish to modify,
|
|
44
|
+
# given as a String.
|
|
45
|
+
def initialize(resource, file)
|
|
46
|
+
@resource, @file = resource, file
|
|
47
|
+
@modified = false
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def modified?
|
|
51
|
+
@modified
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def set_all
|
|
55
|
+
set_owner
|
|
56
|
+
set_group
|
|
57
|
+
set_mode
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Workaround the fact that Ruby's Etc module doesn't believe in negative
|
|
61
|
+
# uids, so negative uids show up as the diminished radix complement of
|
|
62
|
+
# a uint. For example, a uid of -2 is reported as 4294967294
|
|
63
|
+
def dimished_radix_complement(int)
|
|
64
|
+
if int > UID_MAX
|
|
65
|
+
int - UINT
|
|
66
|
+
else
|
|
67
|
+
int
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def target_uid
|
|
72
|
+
return nil if resource.owner.nil?
|
|
73
|
+
if resource.owner.kind_of?(String)
|
|
74
|
+
dimished_radix_complement( Etc.getpwnam(resource.owner).uid )
|
|
75
|
+
elsif resource.owner.kind_of?(Integer)
|
|
76
|
+
resource.owner
|
|
77
|
+
else
|
|
78
|
+
Chef::Log.error("The `owner` parameter of the #@resource resource is set to an invalid value (#{resource.owner.inspect})")
|
|
79
|
+
raise ArgumentError, "cannot resolve #{resource.owner.inspect} to uid, owner must be a string or integer"
|
|
80
|
+
end
|
|
81
|
+
rescue ArgumentError
|
|
82
|
+
raise Chef::Exceptions::UserIDNotFound, "cannot determine user id for '#{resource.owner}', does the user exist on this system?"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def set_owner
|
|
86
|
+
if (uid = target_uid) && (uid != stat.uid)
|
|
87
|
+
Chef::Log.debug("setting owner on #{file} to #{uid}")
|
|
88
|
+
File.chown(uid, nil, file)
|
|
89
|
+
modified
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def target_gid
|
|
94
|
+
return nil if resource.group.nil?
|
|
95
|
+
if resource.group.kind_of?(String)
|
|
96
|
+
dimished_radix_complement( Etc.getgrnam(resource.group).gid )
|
|
97
|
+
elsif resource.group.kind_of?(Integer)
|
|
98
|
+
resource.group
|
|
99
|
+
else
|
|
100
|
+
Chef::Log.error("The `group` parameter of the #@resource resource is set to an invalid value (#{resource.owner.inspect})")
|
|
101
|
+
raise ArgumentError, "cannot resolve #{resource.group.inspect} to gid, group must be a string or integer"
|
|
102
|
+
end
|
|
103
|
+
rescue ArgumentError
|
|
104
|
+
raise Chef::Exceptions::GroupIDNotFound, "cannot determine group id for '#{resource.group}', does the group exist on this system?"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def set_group
|
|
108
|
+
if (gid = target_gid) && (gid != stat.gid)
|
|
109
|
+
Chef::Log.debug("setting group on #{file} to #{gid}")
|
|
110
|
+
File.chown(nil, gid, file)
|
|
111
|
+
modified
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def target_mode
|
|
116
|
+
return nil if resource.mode.nil?
|
|
117
|
+
(resource.mode.respond_to?(:oct) ? resource.mode.oct : resource.mode.to_i) & 007777
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def set_mode
|
|
121
|
+
if (mode = target_mode) && (mode != (stat.mode & 007777))
|
|
122
|
+
Chef::Log.debug("setting mode on #{file} to #{mode.to_s(8)}")
|
|
123
|
+
File.chmod(target_mode, file)
|
|
124
|
+
modified
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def stat
|
|
130
|
+
@stat ||= ::File.stat(file)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
private
|
|
134
|
+
|
|
135
|
+
def modified
|
|
136
|
+
@modified = true
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,218 @@
|
|
|
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
|
+
require 'chef/mixin/params_validate'
|
|
19
|
+
require 'chef/mixin/create_path'
|
|
20
|
+
require 'chef/exceptions'
|
|
21
|
+
require 'json'
|
|
22
|
+
require 'fileutils'
|
|
23
|
+
|
|
24
|
+
class Chef
|
|
25
|
+
class FileCache
|
|
26
|
+
class << self
|
|
27
|
+
include Chef::Mixin::ParamsValidate
|
|
28
|
+
include Chef::Mixin::CreatePath
|
|
29
|
+
|
|
30
|
+
# Write a file to the File Cache.
|
|
31
|
+
#
|
|
32
|
+
# === Parameters
|
|
33
|
+
# path<String>:: The path to the file you want to put in the cache - should
|
|
34
|
+
# be relative to file_cache_path
|
|
35
|
+
# contents<String>:: A string with the contents you want written to the file
|
|
36
|
+
#
|
|
37
|
+
# === Returns
|
|
38
|
+
# true
|
|
39
|
+
def store(path, contents)
|
|
40
|
+
validate(
|
|
41
|
+
{
|
|
42
|
+
:path => path,
|
|
43
|
+
:contents => contents
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
:path => { :kind_of => String },
|
|
47
|
+
:contents => { :kind_of => String },
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
file_path_array = File.split(path)
|
|
52
|
+
file_name = file_path_array.pop
|
|
53
|
+
cache_path = create_cache_path(File.join(file_path_array))
|
|
54
|
+
File.open(File.join(cache_path, file_name), "w") do |io|
|
|
55
|
+
io.print(contents)
|
|
56
|
+
end
|
|
57
|
+
true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Move a file into the cache. Useful with the REST raw file output.
|
|
61
|
+
#
|
|
62
|
+
# === Parameters
|
|
63
|
+
# file<String>:: The path to the file you want in the cache
|
|
64
|
+
# path<String>:: The relative name you want the new file to use
|
|
65
|
+
def move_to(file, path)
|
|
66
|
+
validate(
|
|
67
|
+
{
|
|
68
|
+
:file => file,
|
|
69
|
+
:path => path
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
:file => { :kind_of => String },
|
|
73
|
+
:path => { :kind_of => String },
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
file_path_array = File.split(path)
|
|
78
|
+
file_name = file_path_array.pop
|
|
79
|
+
if File.exists?(file) && File.writable?(file)
|
|
80
|
+
FileUtils.mv(
|
|
81
|
+
file,
|
|
82
|
+
File.join(create_cache_path(File.join(file_path_array), true), file_name)
|
|
83
|
+
)
|
|
84
|
+
else
|
|
85
|
+
raise RuntimeError, "Cannot move #{file} to #{path}!"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Read a file from the File Cache
|
|
90
|
+
#
|
|
91
|
+
# === Parameters
|
|
92
|
+
# path<String>:: The path to the file you want to load - should
|
|
93
|
+
# be relative to file_cache_path
|
|
94
|
+
# read<True/False>:: Whether to return the file contents, or the path.
|
|
95
|
+
# Defaults to true.
|
|
96
|
+
#
|
|
97
|
+
# === Returns
|
|
98
|
+
# String:: A string with the file contents, or the path to the file.
|
|
99
|
+
#
|
|
100
|
+
# === Raises
|
|
101
|
+
# Chef::Exceptions::FileNotFound:: If it cannot find the file in the cache
|
|
102
|
+
def load(path, read=true)
|
|
103
|
+
validate(
|
|
104
|
+
{
|
|
105
|
+
:path => path
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
:path => { :kind_of => String }
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
cache_path = create_cache_path(path, false)
|
|
112
|
+
raise Chef::Exceptions::FileNotFound, "Cannot find #{cache_path} for #{path}!" unless File.exists?(cache_path)
|
|
113
|
+
if read
|
|
114
|
+
File.read(cache_path)
|
|
115
|
+
else
|
|
116
|
+
cache_path
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Delete a file from the File Cache
|
|
121
|
+
#
|
|
122
|
+
# === Parameters
|
|
123
|
+
# path<String>:: The path to the file you want to delete - should
|
|
124
|
+
# be relative to file_cache_path
|
|
125
|
+
#
|
|
126
|
+
# === Returns
|
|
127
|
+
# true
|
|
128
|
+
def delete(path)
|
|
129
|
+
validate(
|
|
130
|
+
{
|
|
131
|
+
:path => path
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
:path => { :kind_of => String },
|
|
135
|
+
}
|
|
136
|
+
)
|
|
137
|
+
cache_path = create_cache_path(path, false)
|
|
138
|
+
if File.exists?(cache_path)
|
|
139
|
+
File.unlink(cache_path)
|
|
140
|
+
end
|
|
141
|
+
true
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# List all the files in the Cache
|
|
145
|
+
#
|
|
146
|
+
# === Returns
|
|
147
|
+
# Array:: An array of files in the cache, suitable for use with load, delete and store
|
|
148
|
+
def list
|
|
149
|
+
find("**#{File::Separator}*")
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
##
|
|
153
|
+
# Find files in the cache by +glob_pattern+
|
|
154
|
+
# === Returns
|
|
155
|
+
# [String] - An array of file cache keys matching the glob
|
|
156
|
+
def find(glob_pattern)
|
|
157
|
+
keys = Array.new
|
|
158
|
+
Dir[File.join(file_cache_path, glob_pattern)].each do |f|
|
|
159
|
+
if File.file?(f)
|
|
160
|
+
keys << f[/^#{Regexp.escape(Dir[file_cache_path].first) + File::Separator}(.+)/, 1]
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
keys
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Whether or not this file exists in the Cache
|
|
167
|
+
#
|
|
168
|
+
# === Parameters
|
|
169
|
+
# path:: The path to the file you want to check - is relative
|
|
170
|
+
# to file_cache_path
|
|
171
|
+
#
|
|
172
|
+
# === Returns
|
|
173
|
+
# True:: If the file exists
|
|
174
|
+
# False:: If it does not
|
|
175
|
+
def has_key?(path)
|
|
176
|
+
validate(
|
|
177
|
+
{
|
|
178
|
+
:path => path
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
:path => { :kind_of => String },
|
|
182
|
+
}
|
|
183
|
+
)
|
|
184
|
+
full_path = create_cache_path(path, false)
|
|
185
|
+
if File.exists?(full_path)
|
|
186
|
+
true
|
|
187
|
+
else
|
|
188
|
+
false
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Create a full path to a given file in the cache. By default,
|
|
193
|
+
# also creates the path if it does not exist.
|
|
194
|
+
#
|
|
195
|
+
# === Parameters
|
|
196
|
+
# path:: The path to create, relative to file_cache_path
|
|
197
|
+
# create_if_missing:: True by default - whether to create the path if it does not exist
|
|
198
|
+
#
|
|
199
|
+
# === Returns
|
|
200
|
+
# String:: The fully expanded path
|
|
201
|
+
def create_cache_path(path, create_if_missing=true)
|
|
202
|
+
cache_dir = File.expand_path(File.join(file_cache_path, path))
|
|
203
|
+
if create_if_missing
|
|
204
|
+
create_path(cache_dir)
|
|
205
|
+
else
|
|
206
|
+
cache_dir
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
private
|
|
211
|
+
|
|
212
|
+
def file_cache_path
|
|
213
|
+
Chef::Config[:file_cache_path]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
end
|