TrueCar-chef 0.10.0.beta.3
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 +171 -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/arch/etc/conf.d/chef-client.conf +5 -0
- data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
- data/distro/arch/etc/conf.d/chef-server.conf +10 -0
- data/distro/arch/etc/conf.d/chef-solr-indexer.conf +8 -0
- data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
- data/distro/arch/etc/rc.d/chef-client +76 -0
- data/distro/arch/etc/rc.d/chef-server +78 -0
- data/distro/arch/etc/rc.d/chef-server-webui +78 -0
- data/distro/arch/etc/rc.d/chef-solr +78 -0
- data/distro/arch/etc/rc.d/chef-solr-indexer +78 -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 +865 -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 +8 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -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 +176 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -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/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.rb +40 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application.rb +137 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +242 -0
- data/lib/chef/application/knife.rb +169 -0
- data/lib/chef/application/solo.rb +217 -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 +189 -0
- data/lib/chef/client.rb +362 -0
- data/lib/chef/config.rb +244 -0
- data/lib/chef/cookbook/chefignore.rb +66 -0
- data/lib/chef/cookbook/cookbook_collection.rb +45 -0
- data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata.rb +592 -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 +103 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +125 -0
- data/lib/chef/cookbook_version.rb +979 -0
- data/lib/chef/cookbook_version_selector.rb +163 -0
- data/lib/chef/couchdb.rb +247 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +223 -0
- data/lib/chef/data_bag_item.rb +267 -0
- data/lib/chef/encrypted_data_bag_item.rb +126 -0
- data/lib/chef/environment.rb +386 -0
- data/lib/chef/exceptions.rb +153 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/index_queue/amqp_client.rb +116 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +109 -0
- data/lib/chef/json_compat.rb +52 -0
- data/lib/chef/knife.rb +424 -0
- data/lib/chef/knife/bootstrap.rb +185 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +47 -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 +46 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/client_bulk_delete.rb +43 -0
- data/lib/chef/knife/client_create.rb +73 -0
- data/lib/chef/knife/client_delete.rb +48 -0
- data/lib/chef/knife/client_edit.rb +48 -0
- data/lib/chef/knife/client_list.rb +43 -0
- data/lib/chef/knife/client_reregister.rb +59 -0
- data/lib/chef/knife/client_show.rb +53 -0
- data/lib/chef/knife/configure.rb +136 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +61 -0
- data/lib/chef/knife/cookbook_create.rb +274 -0
- data/lib/chef/knife/cookbook_delete.rb +149 -0
- data/lib/chef/knife/cookbook_download.rb +134 -0
- data/lib/chef/knife/cookbook_list.rb +50 -0
- data/lib/chef/knife/cookbook_metadata.rb +102 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
- data/lib/chef/knife/cookbook_show.rb +101 -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 +114 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +145 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +146 -0
- data/lib/chef/knife/data_bag_create.rb +94 -0
- data/lib/chef/knife/data_bag_delete.rb +51 -0
- data/lib/chef/knife/data_bag_edit.rb +94 -0
- data/lib/chef/knife/data_bag_from_file.rb +85 -0
- data/lib/chef/knife/data_bag_list.rb +46 -0
- data/lib/chef/knife/data_bag_show.rb +81 -0
- data/lib/chef/knife/environment_create.rb +53 -0
- data/lib/chef/knife/environment_delete.rb +45 -0
- data/lib/chef/knife/environment_edit.rb +45 -0
- data/lib/chef/knife/environment_from_file.rb +39 -0
- data/lib/chef/knife/environment_list.rb +42 -0
- data/lib/chef/knife/environment_show.rb +46 -0
- data/lib/chef/knife/exec.rb +51 -0
- data/lib/chef/knife/index_rebuild.rb +50 -0
- data/lib/chef/knife/node_bulk_delete.rb +46 -0
- data/lib/chef/knife/node_create.rb +50 -0
- data/lib/chef/knife/node_delete.rb +47 -0
- data/lib/chef/knife/node_edit.rb +163 -0
- data/lib/chef/knife/node_from_file.rb +45 -0
- data/lib/chef/knife/node_list.rb +46 -0
- data/lib/chef/knife/node_run_list_add.rb +67 -0
- data/lib/chef/knife/node_run_list_remove.rb +48 -0
- data/lib/chef/knife/node_show.rb +62 -0
- data/lib/chef/knife/recipe_list.rb +33 -0
- data/lib/chef/knife/role_bulk_delete.rb +47 -0
- data/lib/chef/knife/role_create.rb +55 -0
- data/lib/chef/knife/role_delete.rb +47 -0
- data/lib/chef/knife/role_edit.rb +48 -0
- data/lib/chef/knife/role_from_file.rb +49 -0
- data/lib/chef/knife/role_list.rb +43 -0
- data/lib/chef/knife/role_show.rb +54 -0
- data/lib/chef/knife/search.rb +123 -0
- data/lib/chef/knife/ssh.rb +318 -0
- data/lib/chef/knife/status.rb +90 -0
- data/lib/chef/knife/subcommand_loader.rb +101 -0
- data/lib/chef/knife/tag_create.rb +31 -0
- data/lib/chef/knife/tag_delete.rb +31 -0
- data/lib/chef/knife/tag_list.rb +29 -0
- data/lib/chef/knife/ui.rb +227 -0
- data/lib/chef/knife/windows_bootstrap.rb +157 -0
- data/lib/chef/log.rb +39 -0
- data/lib/chef/mash.rb +211 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command.rb +221 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +76 -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/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +165 -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 +40 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +15 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/numeric.rb +7 -0
- data/lib/chef/monkey_patches/regexp.rb +34 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/nil_argument.rb +3 -0
- data/lib/chef/node.rb +661 -0
- data/lib/chef/node/attribute.rb +487 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +409 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +101 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/deploy.rb +320 -0
- data/lib/chef/provider/deploy/revision.rb +80 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/erl_call.rb +100 -0
- data/lib/chef/provider/execute.rb +60 -0
- data/lib/chef/provider/file.rb +222 -0
- data/lib/chef/provider/git.rb +221 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/group/aix.rb +70 -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 +81 -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/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.rb +117 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/ohai.rb +41 -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 +112 -0
- data/lib/chef/provider/package/easy_install.rb +136 -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 +135 -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 +261 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/remote_directory.rb +138 -0
- data/lib/chef/provider/remote_file.rb +119 -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.rb +128 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +130 -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/insserv.rb +52 -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 +146 -0
- data/lib/chef/provider/subversion.rb +194 -0
- data/lib/chef/provider/template.rb +105 -0
- data/lib/chef/provider/user.rb +187 -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/providers.rb +93 -0
- data/lib/chef/recipe.rb +128 -0
- data/lib/chef/resource.rb +530 -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 +57 -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 +99 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +53 -0
- data/lib/chef/resource/git.rb +37 -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 +147 -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_collection.rb +217 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -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.rb +386 -0
- data/lib/chef/rest/auth_credentials.rb +71 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/role.rb +341 -0
- data/lib/chef/run_context.rb +126 -0
- data/lib/chef/run_list.rb +165 -0
- data/lib/chef/run_list/run_list_expansion.rb +193 -0
- data/lib/chef/run_list/run_list_item.rb +92 -0
- data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +99 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +65 -0
- data/lib/chef/shef.rb +326 -0
- data/lib/chef/shef/ext.rb +569 -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 +284 -0
- data/lib/chef/shell_out.rb +238 -0
- data/lib/chef/shell_out/unix.rb +223 -0
- data/lib/chef/shell_out/windows.rb +98 -0
- data/lib/chef/solr_query.rb +187 -0
- data/lib/chef/solr_query/lucene.treetop +150 -0
- data/lib/chef/solr_query/lucene_nodes.rb +285 -0
- data/lib/chef/solr_query/query_transform.rb +65 -0
- data/lib/chef/solr_query/solr_http_request.rb +118 -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.rb +56 -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/version.rb +23 -0
- data/lib/chef/version_class.rb +70 -0
- data/lib/chef/version_constraint.rb +116 -0
- data/lib/chef/webui_user.rb +231 -0
- metadata +600 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright 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
|
+
class Chef
|
|
20
|
+
# == Chef::Exceptions
|
|
21
|
+
# Chef's custom exceptions are all contained within the Chef::Exceptions
|
|
22
|
+
# namespace.
|
|
23
|
+
class Exceptions
|
|
24
|
+
class Application < RuntimeError; end
|
|
25
|
+
class Cron < RuntimeError; end
|
|
26
|
+
class Env < RuntimeError; end
|
|
27
|
+
class Exec < RuntimeError; end
|
|
28
|
+
class ErlCall < RuntimeError; end
|
|
29
|
+
class FileNotFound < RuntimeError; end
|
|
30
|
+
class Package < RuntimeError; end
|
|
31
|
+
class Service < RuntimeError; end
|
|
32
|
+
class Route < RuntimeError; end
|
|
33
|
+
class SearchIndex < RuntimeError; end
|
|
34
|
+
class Override < RuntimeError; end
|
|
35
|
+
class UnsupportedAction < RuntimeError; end
|
|
36
|
+
class MissingLibrary < RuntimeError; end
|
|
37
|
+
class MissingRole < RuntimeError; end
|
|
38
|
+
class CannotDetermineNodeName < RuntimeError; end
|
|
39
|
+
class User < RuntimeError; end
|
|
40
|
+
class Group < RuntimeError; end
|
|
41
|
+
class Link < RuntimeError; end
|
|
42
|
+
class Mount < RuntimeError; end
|
|
43
|
+
class CouchDBNotFound < RuntimeError; end
|
|
44
|
+
class PrivateKeyMissing < RuntimeError; end
|
|
45
|
+
class CannotWritePrivateKey < RuntimeError; end
|
|
46
|
+
class RoleNotFound < RuntimeError; end
|
|
47
|
+
class ValidationFailed < ArgumentError; end
|
|
48
|
+
class InvalidPrivateKey < ArgumentError; end
|
|
49
|
+
class ConfigurationError < ArgumentError; end
|
|
50
|
+
class RedirectLimitExceeded < RuntimeError; end
|
|
51
|
+
class AmbiguousRunlistSpecification < ArgumentError; end
|
|
52
|
+
class CookbookNotFound < RuntimeError; end
|
|
53
|
+
# Cookbook loader used to raise an argument error when cookbook not found.
|
|
54
|
+
# for back compat, need to raise an error that inherits from ArgumentError
|
|
55
|
+
class CookbookNotFoundInRepo < ArgumentError; end
|
|
56
|
+
class AttributeNotFound < RuntimeError; end
|
|
57
|
+
class InvalidCommandOption < RuntimeError; end
|
|
58
|
+
class CommandTimeout < RuntimeError; end
|
|
59
|
+
class ShellCommandFailed < RuntimeError; end
|
|
60
|
+
class RequestedUIDUnavailable < RuntimeError; end
|
|
61
|
+
class InvalidHomeDirectory < ArgumentError; end
|
|
62
|
+
class DsclCommandFailed < RuntimeError; end
|
|
63
|
+
class UserIDNotFound < ArgumentError; end
|
|
64
|
+
class GroupIDNotFound < ArgumentError; end
|
|
65
|
+
class InvalidResourceReference < RuntimeError; end
|
|
66
|
+
class ResourceNotFound < RuntimeError; end
|
|
67
|
+
class InvalidResourceSpecification < ArgumentError; end
|
|
68
|
+
class SolrConnectionError < RuntimeError; end
|
|
69
|
+
class IllegalChecksumRevert < RuntimeError; end
|
|
70
|
+
class CookbookVersionNameMismatch < ArgumentError; end
|
|
71
|
+
class MissingParentDirectory < RuntimeError; end
|
|
72
|
+
class UnresolvableGitReference < RuntimeError; end
|
|
73
|
+
class InvalidEnvironmentRunListSpecification < ArgumentError; end
|
|
74
|
+
class InvalidDataBagItemID < ArgumentError; end
|
|
75
|
+
class InvalidDataBagName < ArgumentError; end
|
|
76
|
+
class EnclosingDirectoryDoesNotExist < ArgumentError; end
|
|
77
|
+
|
|
78
|
+
class ObsoleteDependencySyntax < ArgumentError; end
|
|
79
|
+
|
|
80
|
+
# A different version of a cookbook was added to a
|
|
81
|
+
# VersionedRecipeList than the one already there.
|
|
82
|
+
class CookbookVersionConflict < ArgumentError ; end
|
|
83
|
+
|
|
84
|
+
# does not follow X.Y.Z format. ArgumentError?
|
|
85
|
+
class InvalidCookbookVersion < ArgumentError; end
|
|
86
|
+
|
|
87
|
+
# version constraint should be a string or array, or it doesn't
|
|
88
|
+
# match OP VERSION. ArgumentError?
|
|
89
|
+
class InvalidVersionConstraint < ArgumentError; end
|
|
90
|
+
|
|
91
|
+
class CookbookVersionSelection
|
|
92
|
+
|
|
93
|
+
# Compound exception: In run_list expansion and resolution,
|
|
94
|
+
# run_list items referred to cookbooks that don't exist and/or
|
|
95
|
+
# have no versions available.
|
|
96
|
+
class InvalidRunListItems < StandardError
|
|
97
|
+
attr_reader :non_existent_cookbooks
|
|
98
|
+
attr_reader :cookbooks_with_no_matching_versions
|
|
99
|
+
|
|
100
|
+
def initialize(message, non_existent_cookbooks, cookbooks_with_no_matching_versions)
|
|
101
|
+
super(message)
|
|
102
|
+
|
|
103
|
+
@non_existent_cookbooks = non_existent_cookbooks
|
|
104
|
+
@cookbooks_with_no_matching_versions = cookbooks_with_no_matching_versions
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def to_json(*a)
|
|
108
|
+
result = {
|
|
109
|
+
"message" => message,
|
|
110
|
+
"non_existent_cookbooks" => non_existent_cookbooks,
|
|
111
|
+
"cookbooks_with_no_versions" => cookbooks_with_no_matching_versions
|
|
112
|
+
}
|
|
113
|
+
result.to_json(*a)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# In run_list expansion and resolution, a constraint was
|
|
118
|
+
# unsatisfiable.
|
|
119
|
+
#
|
|
120
|
+
# This exception may not be the complete error report. If you
|
|
121
|
+
# resolve the misconfiguration represented by this exception and
|
|
122
|
+
# re-solve, you may get another exception
|
|
123
|
+
class UnsatisfiableRunListItem < StandardError
|
|
124
|
+
attr_reader :run_list_item
|
|
125
|
+
attr_reader :non_existent_cookbooks, :most_constrained_cookbooks
|
|
126
|
+
|
|
127
|
+
# most_constrained_cookbooks: if I were to remove constraints
|
|
128
|
+
# regarding these cookbooks, I would get a solution or move on
|
|
129
|
+
# to the next error (deeper in the graph). An item in this list
|
|
130
|
+
# may be unsatisfiable, but when resolved may also reveal
|
|
131
|
+
# further unsatisfiable constraints; this condition would not be
|
|
132
|
+
# reported.
|
|
133
|
+
def initialize(message, run_list_item, non_existent_cookbooks, most_constrained_cookbooks)
|
|
134
|
+
super(message)
|
|
135
|
+
|
|
136
|
+
@run_list_item = run_list_item
|
|
137
|
+
@non_existent_cookbooks = non_existent_cookbooks
|
|
138
|
+
@most_constrained_cookbooks = most_constrained_cookbooks
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def to_json(*a)
|
|
142
|
+
result = {
|
|
143
|
+
"message" => message,
|
|
144
|
+
"unsatisfiable_run_list_item" => run_list_item,
|
|
145
|
+
"non_existent_cookbooks" => non_existent_cookbooks,
|
|
146
|
+
"most_constrained_cookbooks" => most_constrained_cookbooks
|
|
147
|
+
}
|
|
148
|
+
result.to_json(*a)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
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 << 32) - 10
|
|
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 'chef/json_compat'
|
|
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
|