tylerrick-chef 0.10.8
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-expander.conf +8 -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.conf +8 -0
- data/distro/arch/etc/rc.d/chef-client +76 -0
- data/distro/arch/etc/rc.d/chef-expander +78 -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/common/html/chef-client.8.html +146 -0
- data/distro/common/html/chef-expander.8.html +164 -0
- data/distro/common/html/chef-expanderctl.8.html +146 -0
- data/distro/common/html/chef-server-webui.8.html +185 -0
- data/distro/common/html/chef-server.8.html +182 -0
- data/distro/common/html/chef-solo.8.html +191 -0
- data/distro/common/html/chef-solr.8.html +165 -0
- data/distro/common/html/knife-bootstrap.1.html +243 -0
- data/distro/common/html/knife-client.1.html +219 -0
- data/distro/common/html/knife-configure.1.html +170 -0
- data/distro/common/html/knife-cookbook-site.1.html +241 -0
- data/distro/common/html/knife-cookbook.1.html +384 -0
- data/distro/common/html/knife-data-bag.1.html +234 -0
- data/distro/common/html/knife-environment.1.html +267 -0
- data/distro/common/html/knife-exec.1.html +134 -0
- data/distro/common/html/knife-index.1.html +125 -0
- data/distro/common/html/knife-node.1.html +250 -0
- data/distro/common/html/knife-recipe.1.html +92 -0
- data/distro/common/html/knife-role.1.html +200 -0
- data/distro/common/html/knife-search.1.html +288 -0
- data/distro/common/html/knife-ssh.1.html +157 -0
- data/distro/common/html/knife-status.1.html +128 -0
- data/distro/common/html/knife-tag.1.html +137 -0
- data/distro/common/html/knife.1.html +321 -0
- data/distro/common/html/shef.1.html +283 -0
- data/distro/common/man/man1/knife-bootstrap.1 +197 -0
- data/distro/common/man/man1/knife-client.1 +99 -0
- data/distro/common/man/man1/knife-configure.1 +88 -0
- data/distro/common/man/man1/knife-cookbook-site.1 +145 -0
- data/distro/common/man/man1/knife-cookbook.1 +345 -0
- data/distro/common/man/man1/knife-data-bag.1 +130 -0
- data/distro/common/man/man1/knife-environment.1 +178 -0
- data/distro/common/man/man1/knife-exec.1 +46 -0
- data/distro/common/man/man1/knife-index.1 +29 -0
- data/distro/common/man/man1/knife-node.1 +134 -0
- data/distro/common/man/man1/knife-role.1 +88 -0
- data/distro/common/man/man1/knife-search.1 +280 -0
- data/distro/common/man/man1/knife-ssh.1 +83 -0
- data/distro/common/man/man1/knife-status.1 +29 -0
- data/distro/common/man/man1/knife-tag.1 +43 -0
- data/distro/common/man/man1/knife.1 +292 -0
- data/distro/common/man/man1/shef.1 +256 -0
- data/distro/common/man/man8/chef-client.8 +104 -0
- data/distro/common/man/man8/chef-expander.8 +97 -0
- data/distro/common/man/man8/chef-expanderctl.8 +62 -0
- data/distro/common/man/man8/chef-server-webui.8 +155 -0
- data/distro/common/man/man8/chef-server.8 +147 -0
- data/distro/common/man/man8/chef-solo.8 +158 -0
- data/distro/common/man/man8/chef-solr.8 +122 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/man1/knife-bootstrap.mkd +142 -0
- data/distro/common/markdown/man1/knife-client.mkd +103 -0
- data/distro/common/markdown/man1/knife-configure.mkd +70 -0
- data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -0
- data/distro/common/markdown/man1/knife-cookbook.mkd +263 -0
- data/distro/common/markdown/man1/knife-data-bag.mkd +117 -0
- data/distro/common/markdown/man1/knife-environment.mkd +151 -0
- data/distro/common/markdown/man1/knife-exec.mkd +37 -0
- data/distro/common/markdown/man1/knife-index.mkd +30 -0
- data/distro/common/markdown/man1/knife-node.mkd +130 -0
- data/distro/common/markdown/man1/knife-role.mkd +85 -0
- data/distro/common/markdown/man1/knife-search.mkd +180 -0
- data/distro/common/markdown/man1/knife-ssh.mkd +72 -0
- data/distro/common/markdown/man1/knife-status.mkd +36 -0
- data/distro/common/markdown/man1/knife-tag.mkd +39 -0
- data/distro/common/markdown/man1/knife.mkd +220 -0
- data/distro/common/markdown/man1/shef.mkd +189 -0
- data/distro/common/markdown/man8/chef-client.mkd +75 -0
- data/distro/common/markdown/man8/chef-expander.mkd +82 -0
- data/distro/common/markdown/man8/chef-expanderctl.mkd +58 -0
- data/distro/common/markdown/man8/chef-server-webui.mkd +121 -0
- data/distro/common/markdown/man8/chef-server.mkd +121 -0
- data/distro/common/markdown/man8/chef-solo.mkd +107 -0
- data/distro/common/markdown/man8/chef-solr.mkd +89 -0
- data/distro/debian/etc/default/chef-client +4 -0
- data/distro/debian/etc/default/chef-expander +8 -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/init.d/chef-client +185 -0
- data/distro/debian/etc/init.d/chef-expander +176 -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/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-expander.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.conf +17 -0
- data/distro/redhat/etc/init.d/chef-client +110 -0
- data/distro/redhat/etc/init.d/chef-expander +104 -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/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-expander +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/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-expander +7 -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/lib/chef.rb +41 -0
- data/lib/chef/api_client.rb +271 -0
- data/lib/chef/application.rb +152 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +285 -0
- data/lib/chef/application/knife.rb +188 -0
- data/lib/chef/application/solo.rb +218 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +194 -0
- data/lib/chef/checksum.rb +167 -0
- data/lib/chef/checksum/storage.rb +18 -0
- data/lib/chef/checksum/storage/filesystem.rb +56 -0
- data/lib/chef/checksum_cache.rb +189 -0
- data/lib/chef/client.rb +366 -0
- data/lib/chef/config.rb +248 -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 +173 -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 +629 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +88 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +121 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +154 -0
- data/lib/chef/cookbook_version.rb +1096 -0
- data/lib/chef/cookbook_version_selector.rb +168 -0
- data/lib/chef/couchdb.rb +246 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +235 -0
- data/lib/chef/data_bag_item.rb +273 -0
- data/lib/chef/encrypted_data_bag_item.rb +139 -0
- data/lib/chef/environment.rb +455 -0
- data/lib/chef/exceptions.rb +154 -0
- data/lib/chef/file_access_control.rb +144 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler.rb +227 -0
- data/lib/chef/handler/error_report.rb +33 -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 +520 -0
- data/lib/chef/knife/bootstrap.rb +207 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +60 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +56 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +43 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +49 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +50 -0
- data/lib/chef/knife/client_bulk_delete.rb +65 -0
- data/lib/chef/knife/client_create.rb +79 -0
- data/lib/chef/knife/client_delete.rb +46 -0
- data/lib/chef/knife/client_edit.rb +45 -0
- data/lib/chef/knife/client_list.rb +42 -0
- data/lib/chef/knife/client_reregister.rb +58 -0
- data/lib/chef/knife/client_show.rb +52 -0
- data/lib/chef/knife/configure.rb +149 -0
- data/lib/chef/knife/configure_client.rb +50 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +72 -0
- data/lib/chef/knife/cookbook_create.rb +274 -0
- data/lib/chef/knife/cookbook_delete.rb +151 -0
- data/lib/chef/knife/cookbook_download.rb +137 -0
- data/lib/chef/knife/cookbook_list.rb +47 -0
- data/lib/chef/knife/cookbook_metadata.rb +107 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
- data/lib/chef/knife/cookbook_show.rb +102 -0
- data/lib/chef/knife/cookbook_site_download.rb +70 -0
- data/lib/chef/knife/cookbook_site_install.rb +148 -0
- data/lib/chef/knife/cookbook_site_list.rb +62 -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 +46 -0
- data/lib/chef/knife/cookbook_test.rb +93 -0
- data/lib/chef/knife/cookbook_upload.rb +240 -0
- data/lib/chef/knife/core/bootstrap_context.rb +100 -0
- data/lib/chef/knife/core/cookbook_scm_repo.rb +148 -0
- data/lib/chef/knife/core/generic_presenter.rb +191 -0
- data/lib/chef/knife/core/node_editor.rb +127 -0
- data/lib/chef/knife/core/node_presenter.rb +136 -0
- data/lib/chef/knife/core/object_loader.rb +75 -0
- data/lib/chef/knife/core/subcommand_loader.rb +112 -0
- data/lib/chef/knife/core/text_formatter.rb +100 -0
- data/lib/chef/knife/core/ui.rb +216 -0
- data/lib/chef/knife/data_bag_create.rb +93 -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 +87 -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 +50 -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/help.rb +103 -0
- data/lib/chef/knife/help_topics.rb +4 -0
- data/lib/chef/knife/index_rebuild.rb +50 -0
- data/lib/chef/knife/node_bulk_delete.rb +80 -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 +72 -0
- data/lib/chef/knife/node_from_file.rb +50 -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 +73 -0
- data/lib/chef/knife/recipe_list.rb +32 -0
- data/lib/chef/knife/role_bulk_delete.rb +70 -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 +56 -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 +141 -0
- data/lib/chef/knife/ssh.rb +367 -0
- data/lib/chef/knife/status.rb +104 -0
- data/lib/chef/knife/tag_create.rb +52 -0
- data/lib/chef/knife/tag_delete.rb +60 -0
- data/lib/chef/knife/tag_list.rb +47 -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 +163 -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 +57 -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/get_source_from_package.rb +42 -0
- data/lib/chef/mixin/language.rb +163 -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 +78 -0
- data/lib/chef/mixin/shell_out.rb +41 -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 +15 -0
- data/lib/chef/monkey_patches/object.rb +9 -0
- data/lib/chef/monkey_patches/regexp.rb +34 -0
- data/lib/chef/monkey_patches/string.rb +49 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/nil_argument.rb +3 -0
- data/lib/chef/node.rb +677 -0
- data/lib/chef/node/attribute.rb +487 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +434 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +100 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/deploy.rb +418 -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 +101 -0
- data/lib/chef/provider/execute.rb +65 -0
- data/lib/chef/provider/file.rb +226 -0
- data/lib/chef/provider/git.rb +243 -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 +91 -0
- data/lib/chef/provider/group/pw.rb +84 -0
- data/lib/chef/provider/group/suse.rb +53 -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 +195 -0
- data/lib/chef/provider/link.rb +164 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +91 -0
- data/lib/chef/provider/mount.rb +114 -0
- data/lib/chef/provider/mount/mount.rb +240 -0
- data/lib/chef/provider/mount/windows.rb +81 -0
- data/lib/chef/provider/ohai.rb +42 -0
- data/lib/chef/provider/package.rb +200 -0
- data/lib/chef/provider/package/apt.rb +145 -0
- data/lib/chef/provider/package/dpkg.rb +115 -0
- data/lib/chef/provider/package/easy_install.rb +136 -0
- data/lib/chef/provider/package/freebsd.rb +125 -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 +104 -0
- data/lib/chef/provider/package/rubygems.rb +465 -0
- data/lib/chef/provider/package/solaris.rb +130 -0
- data/lib/chef/provider/package/yum-dump.py +286 -0
- data/lib/chef/provider/package/yum.rb +1173 -0
- data/lib/chef/provider/package/zypper.rb +144 -0
- data/lib/chef/provider/remote_directory.rb +137 -0
- data/lib/chef/provider/remote_file.rb +118 -0
- data/lib/chef/provider/route.rb +193 -0
- data/lib/chef/provider/ruby_block.rb +34 -0
- data/lib/chef/provider/script.rb +55 -0
- data/lib/chef/provider/service.rb +122 -0
- data/lib/chef/provider/service/arch.rb +116 -0
- data/lib/chef/provider/service/debian.rb +130 -0
- data/lib/chef/provider/service/freebsd.rb +154 -0
- data/lib/chef/provider/service/gentoo.rb +53 -0
- data/lib/chef/provider/service/init.rb +71 -0
- data/lib/chef/provider/service/insserv.rb +52 -0
- data/lib/chef/provider/service/invokercd.rb +35 -0
- data/lib/chef/provider/service/redhat.rb +60 -0
- data/lib/chef/provider/service/simple.rb +120 -0
- data/lib/chef/provider/service/solaris.rb +85 -0
- data/lib/chef/provider/service/systemd.rb +102 -0
- data/lib/chef/provider/service/upstart.rb +198 -0
- data/lib/chef/provider/service/windows.rb +155 -0
- data/lib/chef/provider/subversion.rb +197 -0
- data/lib/chef/provider/template.rb +104 -0
- data/lib/chef/provider/user.rb +186 -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 +95 -0
- data/lib/chef/recipe.rb +129 -0
- data/lib/chef/resource.rb +609 -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/conditional.rb +90 -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 +389 -0
- data/lib/chef/resource/deploy_revision.rb +40 -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 +46 -0
- data/lib/chef/resource/group.rb +78 -0
- data/lib/chef/resource/http_request.rb +61 -0
- data/lib/chef/resource/ifconfig.rb +144 -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 +134 -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 +151 -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 +63 -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 +400 -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 +213 -0
- data/lib/chef/role.rb +343 -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 +105 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +65 -0
- data/lib/chef/shef.rb +327 -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 +285 -0
- data/lib/chef/shell_out.rb +249 -0
- data/lib/chef/shell_out/unix.rb +223 -0
- data/lib/chef/shell_out/windows.rb +588 -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 +132 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +334 -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 +764 -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("#{@new_resource} 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("#{@new_resource} cron '#{@new_resource.name}' not found") unless @cron_exists
|
|
86
|
+
elsif status.exitstatus == 1
|
|
87
|
+
Chef::Log.debug("#{@new_resource} 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("#{@new_resource} 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("#{@new_resource} updated crontab entry")
|
|
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("#{@new_resource} added crontab entry")
|
|
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("#{@new_resource} deleted crontab entry")
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -0,0 +1,418 @@
|
|
|
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, :previous_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
|
+
save_release_state
|
|
63
|
+
|
|
64
|
+
if deployed?(release_path)
|
|
65
|
+
if current_release?(release_path)
|
|
66
|
+
Chef::Log.debug("#{@new_resource} is the latest version")
|
|
67
|
+
else
|
|
68
|
+
action_rollback
|
|
69
|
+
end
|
|
70
|
+
else
|
|
71
|
+
|
|
72
|
+
with_rollback_on_error do
|
|
73
|
+
deploy
|
|
74
|
+
@new_resource.updated_by_last_action(true)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def action_force_deploy
|
|
80
|
+
if deployed?(release_path)
|
|
81
|
+
Chef::Log.info("Already deployed app at #{release_path}, forcing.")
|
|
82
|
+
FileUtils.rm_rf(release_path)
|
|
83
|
+
Chef::Log.info("#{@new_resource} forcing deploy of already deployed app at #{release_path}")
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Alternatives:
|
|
87
|
+
# * Move release_path directory before deploy and move it back when error occurs
|
|
88
|
+
# * Rollback to previous commit
|
|
89
|
+
# * Do nothing - because deploy is force, it will be retried in short time
|
|
90
|
+
# Because last is simpliest, keep it
|
|
91
|
+
deploy
|
|
92
|
+
@new_resource.updated_by_last_action(true)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def action_rollback
|
|
96
|
+
if release_path
|
|
97
|
+
rp_index = all_releases.index(release_path)
|
|
98
|
+
raise RuntimeError, "There is no release to rollback to!" unless rp_index
|
|
99
|
+
rp_index += 1
|
|
100
|
+
releases_to_nuke = all_releases[rp_index..-1]
|
|
101
|
+
else
|
|
102
|
+
@release_path = all_releases[-2]
|
|
103
|
+
raise RuntimeError, "There is no release to rollback to!" unless @release_path
|
|
104
|
+
releases_to_nuke = [ all_releases.last ]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
rollback
|
|
108
|
+
|
|
109
|
+
releases_to_nuke.each do |i|
|
|
110
|
+
Chef::Log.info "#{@new_resource} removing release: #{i}"
|
|
111
|
+
FileUtils.rm_rf i
|
|
112
|
+
release_deleted(i)
|
|
113
|
+
end
|
|
114
|
+
@new_resource.updated_by_last_action(true)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def deploy
|
|
118
|
+
enforce_ownership
|
|
119
|
+
verify_directories_exist
|
|
120
|
+
update_cached_repo
|
|
121
|
+
copy_cached_repo
|
|
122
|
+
install_gems
|
|
123
|
+
enforce_ownership
|
|
124
|
+
callback(:before_migrate, @new_resource.before_migrate)
|
|
125
|
+
migrate
|
|
126
|
+
callback(:before_symlink, @new_resource.before_symlink)
|
|
127
|
+
symlink
|
|
128
|
+
callback(:before_restart, @new_resource.before_restart)
|
|
129
|
+
restart
|
|
130
|
+
callback(:after_restart, @new_resource.after_restart)
|
|
131
|
+
cleanup!
|
|
132
|
+
Chef::Log.info "#{@new_resource} deployed to #{@new_resource.deploy_to}"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def rollback
|
|
136
|
+
Chef::Log.info "#{@new_resource} rolling back to previous release #{release_path}"
|
|
137
|
+
symlink
|
|
138
|
+
Chef::Log.info "#{@new_resource} restarting with previous release"
|
|
139
|
+
restart
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def callback(what, callback_code=nil)
|
|
143
|
+
@collection = Chef::ResourceCollection.new
|
|
144
|
+
case callback_code
|
|
145
|
+
when Proc
|
|
146
|
+
Chef::Log.info "#{@new_resource} running callback #{what}"
|
|
147
|
+
recipe_eval(&callback_code)
|
|
148
|
+
when String
|
|
149
|
+
callback_file = "#{release_path}/#{callback_code}"
|
|
150
|
+
unless ::File.exist?(callback_file)
|
|
151
|
+
raise RuntimeError, "Can't find your callback file #{callback_file}"
|
|
152
|
+
end
|
|
153
|
+
run_callback_from_file(callback_file)
|
|
154
|
+
when nil
|
|
155
|
+
run_callback_from_file("#{release_path}/deploy/#{what}.rb")
|
|
156
|
+
else
|
|
157
|
+
raise RuntimeError, "You gave me a callback I don't know what to do with: #{callback_code.inspect}"
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def migrate
|
|
162
|
+
run_symlinks_before_migrate
|
|
163
|
+
|
|
164
|
+
if @new_resource.migrate
|
|
165
|
+
enforce_ownership
|
|
166
|
+
|
|
167
|
+
environment = @new_resource.environment
|
|
168
|
+
env_info = environment && environment.map do |key_and_val|
|
|
169
|
+
"#{key_and_val.first}='#{key_and_val.last}'"
|
|
170
|
+
end.join(" ")
|
|
171
|
+
|
|
172
|
+
Chef::Log.info "#{@new_resource} migrating #{@new_resource.user} with environment #{env_info}"
|
|
173
|
+
run_command(run_options(:command => @new_resource.migration_command, :cwd=>release_path, :command_log_level => :info))
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def symlink
|
|
178
|
+
purge_tempfiles_from_current_release
|
|
179
|
+
link_tempfiles_to_current_release
|
|
180
|
+
link_current_release_to_production
|
|
181
|
+
Chef::Log.info "#{@new_resource} updated symlinks"
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def restart
|
|
185
|
+
if restart_cmd = @new_resource.restart_command
|
|
186
|
+
if restart_cmd.kind_of?(Proc)
|
|
187
|
+
Chef::Log.info("#{@new_resource} restarting app with embedded recipe")
|
|
188
|
+
recipe_eval(&restart_cmd)
|
|
189
|
+
else
|
|
190
|
+
Chef::Log.info("#{@new_resource} restarting app")
|
|
191
|
+
run_command(run_options(:command => @new_resource.restart_command, :cwd => @new_resource.current_path))
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def cleanup!
|
|
197
|
+
all_releases[0..-6].each do |old_release|
|
|
198
|
+
Chef::Log.info "#{@new_resource} removing old release #{old_release}"
|
|
199
|
+
FileUtils.rm_rf(old_release)
|
|
200
|
+
release_deleted(old_release)
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def all_releases
|
|
205
|
+
Dir.glob(@new_resource.deploy_to + "/releases/*").sort
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def update_cached_repo
|
|
209
|
+
@scm_provider.load_current_resource
|
|
210
|
+
if @new_resource.svn_force_export
|
|
211
|
+
svn_force_export
|
|
212
|
+
else
|
|
213
|
+
run_scm_sync
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def run_scm_sync
|
|
218
|
+
@scm_provider.action_sync
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def svn_force_export
|
|
222
|
+
Chef::Log.info "#{@new_resource} exporting source repository"
|
|
223
|
+
@scm_provider.action_force_export
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def copy_cached_repo
|
|
227
|
+
FileUtils.mkdir_p(@new_resource.deploy_to + "/releases")
|
|
228
|
+
run_command(:command => "cp -RPp #{::File.join(@new_resource.destination, ".")} #{release_path}")
|
|
229
|
+
Chef::Log.info "#{@new_resource} copied the cached checkout to #{release_path}"
|
|
230
|
+
release_created(release_path)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def enforce_ownership
|
|
234
|
+
FileUtils.chown_R(@new_resource.user, @new_resource.group, @new_resource.deploy_to)
|
|
235
|
+
Chef::Log.info("#{@new_resource} set user to #{@new_resource.user}") if @new_resource.user
|
|
236
|
+
Chef::Log.info("#{@new_resource} set group to #{@new_resource.group}") if @new_resource.group
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def verify_directories_exist
|
|
240
|
+
create_dir_unless_exists(@new_resource.deploy_to)
|
|
241
|
+
create_dir_unless_exists(@new_resource.shared_path)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def link_current_release_to_production
|
|
245
|
+
FileUtils.rm_f(@new_resource.current_path)
|
|
246
|
+
begin
|
|
247
|
+
FileUtils.ln_sf(release_path, @new_resource.current_path)
|
|
248
|
+
rescue => e
|
|
249
|
+
raise Chef::Exceptions::FileNotFound.new("Cannot symlink current release to production: #{e.message}")
|
|
250
|
+
end
|
|
251
|
+
Chef::Log.info "#{@new_resource} linked release #{release_path} into production at #{@new_resource.current_path}"
|
|
252
|
+
enforce_ownership
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def run_symlinks_before_migrate
|
|
256
|
+
links_info = @new_resource.symlink_before_migrate.map { |src, dst| "#{src} => #{dst}" }.join(", ")
|
|
257
|
+
@new_resource.symlink_before_migrate.each do |src, dest|
|
|
258
|
+
begin
|
|
259
|
+
FileUtils.ln_sf(@new_resource.shared_path + "/#{src}", release_path + "/#{dest}")
|
|
260
|
+
rescue => e
|
|
261
|
+
raise Chef::Exceptions::FileNotFound.new("Cannot symlink #{@new_resource.shared_path}/#{src} to #{release_path}/#{dest} before migrate: #{e.message}")
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
Chef::Log.info "#{@new_resource} made pre-migration symlinks"
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def link_tempfiles_to_current_release
|
|
268
|
+
dirs_info = @new_resource.create_dirs_before_symlink.join(",")
|
|
269
|
+
@new_resource.create_dirs_before_symlink.each do |dir|
|
|
270
|
+
create_dir_unless_exists(release_path + "/#{dir}")
|
|
271
|
+
end
|
|
272
|
+
Chef::Log.info("#{@new_resource} created directories before symlinking #{dirs_info}")
|
|
273
|
+
|
|
274
|
+
links_info = @new_resource.symlinks.map { |src, dst| "#{src} => #{dst}" }.join(", ")
|
|
275
|
+
@new_resource.symlinks.each do |src, dest|
|
|
276
|
+
begin
|
|
277
|
+
FileUtils.ln_sf(::File.join(@new_resource.shared_path, src), ::File.join(release_path, dest))
|
|
278
|
+
rescue => e
|
|
279
|
+
raise Chef::Exceptions::FileNotFound.new("Cannot symlink shared data #{::File.join(@new_resource.shared_path, src)} to #{::File.join(release_path, dest)}: #{e.message}")
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
Chef::Log.info("#{@new_resource} linked shared paths into current release: #{links_info}")
|
|
283
|
+
run_symlinks_before_migrate
|
|
284
|
+
enforce_ownership
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def create_dirs_before_symlink
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def purge_tempfiles_from_current_release
|
|
291
|
+
log_info = @new_resource.purge_before_symlink.join(", ")
|
|
292
|
+
@new_resource.purge_before_symlink.each { |dir| FileUtils.rm_rf(release_path + "/#{dir}") }
|
|
293
|
+
Chef::Log.info("#{@new_resource} purged directories in checkout #{log_info}")
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
protected
|
|
297
|
+
|
|
298
|
+
# Internal callback, called after copy_cached_repo.
|
|
299
|
+
# Override if you need to keep state externally.
|
|
300
|
+
def release_created(release_path)
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# Internal callback, called during cleanup! for each old release removed.
|
|
304
|
+
# Override if you need to keep state externally.
|
|
305
|
+
def release_deleted(release_path)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def release_slug
|
|
309
|
+
raise Chef::Exceptions::Override, "You must override release_slug in #{self.to_s}"
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def install_gems
|
|
313
|
+
gem_resource_collection_runner.converge
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
def gem_resource_collection_runner
|
|
317
|
+
gems_collection = Chef::ResourceCollection.new
|
|
318
|
+
gem_packages.each { |rbgem| gems_collection << rbgem }
|
|
319
|
+
gems_run_context = run_context.dup
|
|
320
|
+
gems_run_context.resource_collection = gems_collection
|
|
321
|
+
Chef::Runner.new(gems_run_context)
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def gem_packages
|
|
325
|
+
return [] unless ::File.exist?("#{release_path}/gems.yml")
|
|
326
|
+
gems = YAML.load(IO.read("#{release_path}/gems.yml"))
|
|
327
|
+
|
|
328
|
+
gems.map do |g|
|
|
329
|
+
r = Chef::Resource::GemPackage.new(g[:name], run_context)
|
|
330
|
+
r.version g[:version]
|
|
331
|
+
r.action :install
|
|
332
|
+
r.source "http://gems.github.com"
|
|
333
|
+
r
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def run_options(run_opts={})
|
|
338
|
+
run_opts[:user] = @new_resource.user if @new_resource.user
|
|
339
|
+
run_opts[:group] = @new_resource.group if @new_resource.group
|
|
340
|
+
run_opts[:environment] = @new_resource.environment if @new_resource.environment
|
|
341
|
+
run_opts[:command_log_prepend] = @new_resource.to_s
|
|
342
|
+
run_opts[:command_log_level] ||= :debug
|
|
343
|
+
if run_opts[:command_log_level] == :info
|
|
344
|
+
if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.info?
|
|
345
|
+
run_opts[:live_stream] = STDOUT
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
run_opts
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def run_callback_from_file(callback_file)
|
|
352
|
+
if ::File.exist?(callback_file)
|
|
353
|
+
Dir.chdir(release_path) do
|
|
354
|
+
Chef::Log.info "#{@new_resource} running deploy hook #{callback_file}"
|
|
355
|
+
recipe_eval { from_file(callback_file) }
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def create_dir_unless_exists(dir)
|
|
361
|
+
if ::File.directory?(dir)
|
|
362
|
+
Chef::Log.debug "#{@new_resource} not creating #{dir} because it already exists"
|
|
363
|
+
return false
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
begin
|
|
367
|
+
FileUtils.mkdir_p(dir)
|
|
368
|
+
Chef::Log.debug "#{@new_resource} created directory #{dir}"
|
|
369
|
+
if @new_resource.user
|
|
370
|
+
FileUtils.chown(@new_resource.user, nil, dir)
|
|
371
|
+
Chef::Log.debug("#{@new_resource} set user to #{@new_resource.user} for #{dir}")
|
|
372
|
+
end
|
|
373
|
+
if @new_resource.group
|
|
374
|
+
FileUtils.chown(nil, @new_resource.group, dir)
|
|
375
|
+
Chef::Log.debug("#{@new_resource} set group to #{@new_resource.group} for #{dir}")
|
|
376
|
+
end
|
|
377
|
+
rescue => e
|
|
378
|
+
raise Chef::Exceptions::FileNotFound.new("Cannot create directory #{dir}: #{e.message}")
|
|
379
|
+
end
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def with_rollback_on_error
|
|
383
|
+
yield
|
|
384
|
+
rescue ::Exception => e
|
|
385
|
+
if @new_resource.rollback_on_error
|
|
386
|
+
Chef::Log.warn "Error on deploying #{release_path}: #{e.message}"
|
|
387
|
+
failed_release = release_path
|
|
388
|
+
|
|
389
|
+
if previous_release_path
|
|
390
|
+
@release_path = previous_release_path
|
|
391
|
+
rollback
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
Chef::Log.info "Removing failed deploy #{failed_release}"
|
|
395
|
+
FileUtils.rm_rf failed_release
|
|
396
|
+
release_deleted(failed_release)
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
raise
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def save_release_state
|
|
403
|
+
if ::File.exists?(@new_resource.current_path)
|
|
404
|
+
release = ::File.readlink(@new_resource.current_path)
|
|
405
|
+
@previous_release_path = release if ::File.exists?(release)
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
def deployed?(release)
|
|
410
|
+
all_releases.include?(release)
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
def current_release?(release)
|
|
414
|
+
@previous_release_path == release
|
|
415
|
+
end
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
end
|