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,195 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Bryan McLellan (btm@loftninjas.org)
|
|
3
|
+
# Author:: Toomas Pelberg (toomasp@gmx.net)
|
|
4
|
+
# Copyright:: Copyright (c) 2009 Bryan McLellan
|
|
5
|
+
# Copyright:: Copyright (c) 2010 Toomas Pelberg
|
|
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/log'
|
|
22
|
+
require 'chef/mixin/command'
|
|
23
|
+
require 'chef/provider'
|
|
24
|
+
|
|
25
|
+
class Chef
|
|
26
|
+
class Provider
|
|
27
|
+
class Cron
|
|
28
|
+
class Solaris < Chef::Provider::Cron
|
|
29
|
+
include Chef::Mixin::Command
|
|
30
|
+
|
|
31
|
+
CRON_PATTERN = /([-0-9*,\/]+)\s([-0-9*,\/]+)\s([-0-9*,\/]+)\s([-0-9*,\/]+)\s([-0-9*,\/]+)\s(.*)/
|
|
32
|
+
|
|
33
|
+
def initialize(new_resource, run_context)
|
|
34
|
+
super(new_resource, run_context)
|
|
35
|
+
@cron_exists = false
|
|
36
|
+
@cron_empty = false
|
|
37
|
+
end
|
|
38
|
+
attr_accessor :cron_exists, :cron_empty
|
|
39
|
+
|
|
40
|
+
def load_current_resource
|
|
41
|
+
crontab_lines = []
|
|
42
|
+
@current_resource = Chef::Resource::Cron.new(@new_resource.name)
|
|
43
|
+
@current_resource.user(@new_resource.user)
|
|
44
|
+
status = popen4("crontab -l #{@new_resource.user}") do |pid, stdin, stdout, stderr|
|
|
45
|
+
stdout.each_line { |line| crontab_lines << line }
|
|
46
|
+
end
|
|
47
|
+
if status.exitstatus > 1
|
|
48
|
+
raise Chef::Exceptions::Cron, "Error determining state of #{@new_resource.name}, exit: #{status.exitstatus}"
|
|
49
|
+
elsif status.exitstatus == 0
|
|
50
|
+
cron_found = false
|
|
51
|
+
crontab_lines.each do |line|
|
|
52
|
+
case line.chomp
|
|
53
|
+
when "# Chef Name: #{@new_resource.name}"
|
|
54
|
+
Chef::Log.debug("Found cron '#{@new_resource.name}'")
|
|
55
|
+
cron_found = true
|
|
56
|
+
@cron_exists = true
|
|
57
|
+
next
|
|
58
|
+
when /^MAILTO=(\S*)/
|
|
59
|
+
@current_resource.mailto($1) if cron_found
|
|
60
|
+
next
|
|
61
|
+
when /^PATH=(\S*)/
|
|
62
|
+
@current_resource.path($1) if cron_found
|
|
63
|
+
next
|
|
64
|
+
when /^SHELL=(\S*)/
|
|
65
|
+
@current_resource.shell($1) if cron_found
|
|
66
|
+
next
|
|
67
|
+
when /^HOME=(\S*)/
|
|
68
|
+
@current_resource.home($1) if cron_found
|
|
69
|
+
next
|
|
70
|
+
when CRON_PATTERN
|
|
71
|
+
if cron_found
|
|
72
|
+
@current_resource.minute($1)
|
|
73
|
+
@current_resource.hour($2)
|
|
74
|
+
@current_resource.day($3)
|
|
75
|
+
@current_resource.month($4)
|
|
76
|
+
@current_resource.weekday($5)
|
|
77
|
+
@current_resource.command($6)
|
|
78
|
+
cron_found=false
|
|
79
|
+
end
|
|
80
|
+
next
|
|
81
|
+
else
|
|
82
|
+
next
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
Chef::Log.debug("Cron '#{@new_resource.name}' not found") unless @cron_exists
|
|
86
|
+
elsif status.exitstatus == 1
|
|
87
|
+
Chef::Log.debug("Cron empty for '#{@new_resource.user}'")
|
|
88
|
+
@cron_empty = true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
@current_resource
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def compare_cron
|
|
95
|
+
[ :minute, :hour, :day, :month, :weekday, :command, :mailto, :path, :shell, :home ].any? do |cron_var|
|
|
96
|
+
!@new_resource.send(cron_var).nil? && @new_resource.send(cron_var) != @current_resource.send(cron_var)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def write_crontab(crontab)
|
|
101
|
+
tempcron = Tempfile.new("chef-cron")
|
|
102
|
+
tempcron << crontab
|
|
103
|
+
tempcron.flush
|
|
104
|
+
tempcron.chmod(0644)
|
|
105
|
+
status = run_command(:command => "/usr/bin/crontab #{tempcron.path}",:user => @new_resource.user)
|
|
106
|
+
if(status == 0)
|
|
107
|
+
@new_resource.updated_by_last_action(true)
|
|
108
|
+
else
|
|
109
|
+
@new_resource.updated_by_last_action(false)
|
|
110
|
+
end
|
|
111
|
+
tempcron.close!
|
|
112
|
+
return status
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def action_create
|
|
116
|
+
crontab = String.new
|
|
117
|
+
newcron = String.new
|
|
118
|
+
cron_found = false
|
|
119
|
+
|
|
120
|
+
newcron << "# Chef Name: #{new_resource.name}\n"
|
|
121
|
+
[ :mailto, :path, :shell, :home ].each do |v|
|
|
122
|
+
newcron << "#{v.to_s.upcase}=#{@new_resource.send(v)}\n" if @new_resource.send(v)
|
|
123
|
+
end
|
|
124
|
+
newcron << "#{@new_resource.minute} #{@new_resource.hour} #{@new_resource.day} #{@new_resource.month} #{@new_resource.weekday} #{@new_resource.command}\n"
|
|
125
|
+
|
|
126
|
+
if @cron_exists
|
|
127
|
+
unless compare_cron
|
|
128
|
+
Chef::Log.debug("Skipping existing cron entry '#{@new_resource.name}'")
|
|
129
|
+
return
|
|
130
|
+
end
|
|
131
|
+
status = popen4("crontab -l #{@new_resource.user}") do |pid, stdin, stdout, stderr|
|
|
132
|
+
stdout.each_line do |line|
|
|
133
|
+
case line.chomp
|
|
134
|
+
when "# Chef Name: #{@new_resource.name}"
|
|
135
|
+
cron_found = true
|
|
136
|
+
next
|
|
137
|
+
when CRON_PATTERN
|
|
138
|
+
if cron_found
|
|
139
|
+
cron_found = false
|
|
140
|
+
crontab << newcron
|
|
141
|
+
next
|
|
142
|
+
end
|
|
143
|
+
else
|
|
144
|
+
next if cron_found
|
|
145
|
+
end
|
|
146
|
+
crontab << line
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
status = write_crontab(crontab)
|
|
151
|
+
Chef::Log.info("Updated cron '#{@new_resource.name}'")
|
|
152
|
+
else
|
|
153
|
+
unless @cron_empty
|
|
154
|
+
status = popen4("crontab -l #{@new_resource.user}") do |pid, stdin, stdout, stderr|
|
|
155
|
+
stdout.each { |line| crontab << line }
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
crontab << newcron
|
|
160
|
+
status = write_crontab(crontab)
|
|
161
|
+
Chef::Log.info("Added cron '#{@new_resource.name}'")
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def action_delete
|
|
166
|
+
if @cron_exists
|
|
167
|
+
crontab = String.new
|
|
168
|
+
cron_found = false
|
|
169
|
+
status = popen4("crontab -l #{@new_resource.user}") do |pid, stdin, stdout, stderr|
|
|
170
|
+
stdout.each_line do |line|
|
|
171
|
+
case line.chomp
|
|
172
|
+
when "# Chef Name: #{@new_resource.name}"
|
|
173
|
+
cron_found = true
|
|
174
|
+
next
|
|
175
|
+
when CRON_PATTERN
|
|
176
|
+
if cron_found
|
|
177
|
+
cron_found = false
|
|
178
|
+
next
|
|
179
|
+
end
|
|
180
|
+
else
|
|
181
|
+
next if cron_found
|
|
182
|
+
end
|
|
183
|
+
crontab << line
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
status = write_crontab(crontab)
|
|
188
|
+
Chef::Log.info("Deleted cron '#{@new_resource.name}'")
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Daniel DeLeo (<dan@kallistec.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/mixin/command"
|
|
20
|
+
require "chef/mixin/from_file"
|
|
21
|
+
require "chef/provider/git"
|
|
22
|
+
require "chef/provider/subversion"
|
|
23
|
+
|
|
24
|
+
class Chef
|
|
25
|
+
class Provider
|
|
26
|
+
class Deploy < Chef::Provider
|
|
27
|
+
|
|
28
|
+
include Chef::Mixin::FromFile
|
|
29
|
+
include Chef::Mixin::Command
|
|
30
|
+
|
|
31
|
+
attr_reader :scm_provider, :release_path
|
|
32
|
+
|
|
33
|
+
def initialize(new_resource, run_context)
|
|
34
|
+
super(new_resource, run_context)
|
|
35
|
+
|
|
36
|
+
@scm_provider = new_resource.scm_provider.new(new_resource, run_context)
|
|
37
|
+
|
|
38
|
+
# @configuration is not used by Deploy, it is only for backwards compat with
|
|
39
|
+
# chef-deploy or capistrano hooks that might use it to get environment information
|
|
40
|
+
@configuration = @new_resource.to_hash
|
|
41
|
+
@configuration[:environment] = @configuration[:environment] && @configuration[:environment]["RAILS_ENV"]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def load_current_resource
|
|
45
|
+
@release_path = @new_resource.deploy_to + "/releases/#{release_slug}"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def sudo(command,&block)
|
|
49
|
+
execute(command, &block)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def run(command, &block)
|
|
53
|
+
exec = execute(command, &block)
|
|
54
|
+
exec.user(@new_resource.user) if @new_resource.user
|
|
55
|
+
exec.group(@new_resource.group) if @new_resource.group
|
|
56
|
+
exec.cwd(release_path) unless exec.cwd
|
|
57
|
+
exec.environment(@new_resource.environment) unless exec.environment
|
|
58
|
+
exec
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def action_deploy
|
|
62
|
+
if all_releases.include?(release_path)
|
|
63
|
+
if all_releases[-1] == release_path
|
|
64
|
+
Chef::Log.debug("Already deployed app at #{release_path}, and it is the latest revision. Use action :force_deploy to re-deploy this revision.")
|
|
65
|
+
else
|
|
66
|
+
Chef::Log.info("Already deployed app at #{release_path}. Rolling back to it - use action :force_deploy to re-checkout this revision.")
|
|
67
|
+
action_rollback
|
|
68
|
+
end
|
|
69
|
+
else
|
|
70
|
+
deploy
|
|
71
|
+
@new_resource.updated_by_last_action(true)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def action_force_deploy
|
|
76
|
+
if all_releases.include?(release_path)
|
|
77
|
+
Chef::Log.info("Already deployed app at #{release_path}, forcing.")
|
|
78
|
+
FileUtils.rm_rf(release_path)
|
|
79
|
+
end
|
|
80
|
+
deploy
|
|
81
|
+
@new_resource.updated_by_last_action(true)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def action_rollback
|
|
85
|
+
if release_path
|
|
86
|
+
rp_index = all_releases.index(release_path)
|
|
87
|
+
raise RuntimeError, "There is no release to rollback to!" unless rp_index
|
|
88
|
+
rp_index += 1
|
|
89
|
+
releases_to_nuke = all_releases[rp_index..-1]
|
|
90
|
+
else
|
|
91
|
+
@release_path = all_releases[-2]
|
|
92
|
+
raise RuntimeError, "There is no release to rollback to!" unless @release_path
|
|
93
|
+
releases_to_nuke = [ all_releases.last ]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
Chef::Log.info "rolling back to previous release: #{release_path}"
|
|
97
|
+
symlink
|
|
98
|
+
Chef::Log.info "restarting with previous release"
|
|
99
|
+
restart
|
|
100
|
+
releases_to_nuke.each do |i|
|
|
101
|
+
Chef::Log.info "Removing release: #{i}"
|
|
102
|
+
FileUtils.rm_rf i
|
|
103
|
+
release_deleted(i)
|
|
104
|
+
end
|
|
105
|
+
@new_resource.updated_by_last_action(true)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def deploy
|
|
109
|
+
Chef::Log.info "deploying branch: #{@new_resource.branch}"
|
|
110
|
+
enforce_ownership
|
|
111
|
+
update_cached_repo
|
|
112
|
+
copy_cached_repo
|
|
113
|
+
install_gems
|
|
114
|
+
enforce_ownership
|
|
115
|
+
callback(:before_migrate, @new_resource.before_migrate)
|
|
116
|
+
migrate
|
|
117
|
+
callback(:before_symlink, @new_resource.before_symlink)
|
|
118
|
+
symlink
|
|
119
|
+
callback(:before_restart, @new_resource.before_restart)
|
|
120
|
+
restart
|
|
121
|
+
callback(:after_restart, @new_resource.after_restart)
|
|
122
|
+
cleanup!
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def callback(what, callback_code=nil)
|
|
126
|
+
@collection = Chef::ResourceCollection.new
|
|
127
|
+
case callback_code
|
|
128
|
+
when Proc
|
|
129
|
+
Chef::Log.info "Running callback #{what} code block"
|
|
130
|
+
recipe_eval(&callback_code)
|
|
131
|
+
when String
|
|
132
|
+
callback_file = "#{release_path}/#{callback_code}"
|
|
133
|
+
unless ::File.exist?(callback_file)
|
|
134
|
+
raise RuntimeError, "Can't find your callback file #{callback_file}"
|
|
135
|
+
end
|
|
136
|
+
run_callback_from_file(callback_file)
|
|
137
|
+
when nil
|
|
138
|
+
run_callback_from_file("#{release_path}/deploy/#{what}.rb")
|
|
139
|
+
else
|
|
140
|
+
raise RuntimeError, "You gave me a callback I don't know what to do with: #{callback_code.inspect}"
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def migrate
|
|
145
|
+
run_symlinks_before_migrate
|
|
146
|
+
|
|
147
|
+
if @new_resource.migrate
|
|
148
|
+
enforce_ownership
|
|
149
|
+
|
|
150
|
+
environment = @new_resource.environment
|
|
151
|
+
env_info = environment && environment.map do |key_and_val|
|
|
152
|
+
"#{key_and_val.first}='#{key_and_val.last}'"
|
|
153
|
+
end.join(" ")
|
|
154
|
+
|
|
155
|
+
Chef::Log.info "Migrating: running #{@new_resource.migration_command} as #{@new_resource.user} " +
|
|
156
|
+
"with environment #{env_info}"
|
|
157
|
+
run_command(run_options(:command => @new_resource.migration_command, :cwd=>release_path))
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def symlink
|
|
162
|
+
Chef::Log.info "Symlinking"
|
|
163
|
+
purge_tempfiles_from_current_release
|
|
164
|
+
link_tempfiles_to_current_release
|
|
165
|
+
link_current_release_to_production
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def restart
|
|
169
|
+
if restart_cmd = @new_resource.restart_command
|
|
170
|
+
if restart_cmd.kind_of?(Proc)
|
|
171
|
+
Chef::Log.info("Restarting app with embedded recipe")
|
|
172
|
+
recipe_eval(&restart_cmd)
|
|
173
|
+
else
|
|
174
|
+
Chef::Log.info("Restarting app with #{@new_resource.restart_command} in #{@new_resource.current_path}")
|
|
175
|
+
run_command(run_options(:command => @new_resource.restart_command, :cwd => @new_resource.current_path))
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def cleanup!
|
|
181
|
+
all_releases[0..-6].each do |old_release|
|
|
182
|
+
Chef::Log.info "Removing old release #{old_release}"
|
|
183
|
+
FileUtils.rm_rf(old_release)
|
|
184
|
+
release_deleted(old_release)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def all_releases
|
|
189
|
+
Dir.glob(@new_resource.deploy_to + "/releases/*").sort
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def update_cached_repo
|
|
193
|
+
@scm_provider.load_current_resource
|
|
194
|
+
if @new_resource.svn_force_export
|
|
195
|
+
svn_force_export
|
|
196
|
+
else
|
|
197
|
+
run_scm_sync
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def run_scm_sync
|
|
202
|
+
Chef::Log.info "updating the cached checkout"
|
|
203
|
+
@scm_provider.action_sync
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def svn_force_export
|
|
207
|
+
Chef::Log.info "exporting source repository to #{@new_resource.destination}"
|
|
208
|
+
@scm_provider.action_force_export
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def copy_cached_repo
|
|
212
|
+
Chef::Log.info "copying the cached checkout to #{release_path}"
|
|
213
|
+
FileUtils.mkdir_p(@new_resource.deploy_to + "/releases")
|
|
214
|
+
run_command(:command => "cp -RPp #{::File.join(@new_resource.destination, ".")} #{release_path}")
|
|
215
|
+
release_created(release_path)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def enforce_ownership
|
|
219
|
+
Chef::Log.info "ensuring proper ownership"
|
|
220
|
+
FileUtils.chown_R(@new_resource.user, @new_resource.group, @new_resource.deploy_to)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def link_current_release_to_production
|
|
224
|
+
Chef::Log.info "Linking release #{release_path} into production at #{@new_resource.current_path}"
|
|
225
|
+
FileUtils.rm_f(@new_resource.current_path)
|
|
226
|
+
FileUtils.ln_sf(release_path, @new_resource.current_path)
|
|
227
|
+
enforce_ownership
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def run_symlinks_before_migrate
|
|
231
|
+
links_info = @new_resource.symlink_before_migrate.map { |src, dst| "#{src} => #{dst}" }.join(", ")
|
|
232
|
+
Chef::Log.info "Making pre-migration symlinks: #{links_info}"
|
|
233
|
+
@new_resource.symlink_before_migrate.each do |src, dest|
|
|
234
|
+
FileUtils.ln_sf(@new_resource.shared_path + "/#{src}", release_path + "/#{dest}")
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def link_tempfiles_to_current_release
|
|
239
|
+
dirs_info = @new_resource.create_dirs_before_symlink.join(",")
|
|
240
|
+
Chef::Log.info("creating directories before symlink: #{dirs_info}")
|
|
241
|
+
@new_resource.create_dirs_before_symlink.each { |dir| FileUtils.mkdir_p(release_path + "/#{dir}") }
|
|
242
|
+
|
|
243
|
+
links_info = @new_resource.symlinks.map { |src, dst| "#{src} => #{dst}" }.join(", ")
|
|
244
|
+
Chef::Log.info("Linking shared paths into current release: #{links_info}")
|
|
245
|
+
@new_resource.symlinks.each do |src, dest|
|
|
246
|
+
FileUtils.ln_sf(@new_resource.shared_path + "/#{src}", release_path + "/#{dest}")
|
|
247
|
+
end
|
|
248
|
+
run_symlinks_before_migrate
|
|
249
|
+
enforce_ownership
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def create_dirs_before_symlink
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def purge_tempfiles_from_current_release
|
|
256
|
+
log_info = @new_resource.purge_before_symlink.join(", ")
|
|
257
|
+
Chef::Log.info("Purging directories in checkout #{log_info}")
|
|
258
|
+
@new_resource.purge_before_symlink.each { |dir| FileUtils.rm_rf(release_path + "/#{dir}") }
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
protected
|
|
262
|
+
|
|
263
|
+
# Internal callback, called after copy_cached_repo.
|
|
264
|
+
# Override if you need to keep state externally.
|
|
265
|
+
def release_created(release_path)
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
# Internal callback, called during cleanup! for each old release removed.
|
|
269
|
+
# Override if you need to keep state externally.
|
|
270
|
+
def release_deleted(release_path)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def release_slug
|
|
274
|
+
raise Chef::Exceptions::Override, "You must override release_slug in #{self.to_s}"
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def install_gems
|
|
278
|
+
gem_resource_collection_runner.converge
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def gem_resource_collection_runner
|
|
282
|
+
gems_collection = Chef::ResourceCollection.new
|
|
283
|
+
gem_packages.each { |rbgem| gems_collection << rbgem }
|
|
284
|
+
gems_run_context = run_context.dup
|
|
285
|
+
gems_run_context.resource_collection = gems_collection
|
|
286
|
+
Chef::Runner.new(gems_run_context)
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def gem_packages
|
|
290
|
+
return [] unless ::File.exist?("#{release_path}/gems.yml")
|
|
291
|
+
gems = YAML.load(IO.read("#{release_path}/gems.yml"))
|
|
292
|
+
|
|
293
|
+
gems.map do |g|
|
|
294
|
+
r = Chef::Resource::GemPackage.new(g[:name])
|
|
295
|
+
r.version g[:version]
|
|
296
|
+
r.action :install
|
|
297
|
+
r.source "http://gems.github.com"
|
|
298
|
+
r
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def run_options(run_opts={})
|
|
303
|
+
run_opts[:user] = @new_resource.user if @new_resource.user
|
|
304
|
+
run_opts[:group] = @new_resource.group if @new_resource.group
|
|
305
|
+
run_opts[:environment] = @new_resource.environment if @new_resource.environment
|
|
306
|
+
run_opts
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def run_callback_from_file(callback_file)
|
|
310
|
+
if ::File.exist?(callback_file)
|
|
311
|
+
Dir.chdir(release_path) do
|
|
312
|
+
Chef::Log.info "running deploy hook: #{callback_file}"
|
|
313
|
+
recipe_eval { from_file(callback_file) }
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
end
|