chef 10.28.2-x86-mingw32
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.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/README.rdoc +177 -0
- data/Rakefile +128 -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 +90 -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 +145 -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 +185 -0
- data/distro/common/html/chef-solr.8.html +165 -0
- data/distro/common/html/knife-bootstrap.1.html +241 -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 +381 -0
- data/distro/common/html/knife-data-bag.1.html +235 -0
- data/distro/common/html/knife-environment.1.html +265 -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 +156 -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 +320 -0
- data/distro/common/html/shef.1.html +283 -0
- data/distro/common/man/man1/knife-bootstrap.1 +201 -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 +332 -0
- data/distro/common/man/man1/knife-data-bag.1 +123 -0
- data/distro/common/man/man1/knife-environment.1 +168 -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 +79 -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 +288 -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 +126 -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 +141 -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 +121 -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 +69 -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 +218 -0
- data/distro/common/markdown/man1/shef.mkd +189 -0
- data/distro/common/markdown/man8/chef-client.mkd +74 -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 +5 -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 +210 -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 +121 -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/distro/windows/service_manager.rb +164 -0
- data/lib/chef.rb +41 -0
- data/lib/chef/api_client.rb +293 -0
- data/lib/chef/application.rb +168 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +322 -0
- data/lib/chef/application/knife.rb +183 -0
- data/lib/chef/application/solo.rb +248 -0
- data/lib/chef/application/windows_service.rb +227 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +161 -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 +190 -0
- data/lib/chef/client.rb +499 -0
- data/lib/chef/config.rb +330 -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 +171 -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 +84 -0
- data/lib/chef/cookbook/synchronizer.rb +218 -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 +173 -0
- data/lib/chef/cookbook_version.rb +1081 -0
- data/lib/chef/cookbook_version_selector.rb +168 -0
- data/lib/chef/couchdb.rb +246 -0
- data/lib/chef/daemon.rb +187 -0
- data/lib/chef/data_bag.rb +239 -0
- data/lib/chef/data_bag_item.rb +277 -0
- data/lib/chef/encrypted_data_bag_item.rb +268 -0
- data/lib/chef/environment.rb +458 -0
- data/lib/chef/event_dispatch/base.rb +311 -0
- data/lib/chef/event_dispatch/dispatcher.rb +42 -0
- data/lib/chef/exceptions.rb +192 -0
- data/lib/chef/file_access_control.rb +75 -0
- data/lib/chef/file_access_control/unix.rb +216 -0
- data/lib/chef/file_access_control/windows.rb +310 -0
- data/lib/chef/file_cache.rb +220 -0
- data/lib/chef/formatters/base.rb +247 -0
- data/lib/chef/formatters/doc.rb +236 -0
- data/lib/chef/formatters/error_descriptor.rb +66 -0
- data/lib/chef/formatters/error_inspectors.rb +19 -0
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +111 -0
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +106 -0
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +146 -0
- data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +80 -0
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +125 -0
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +137 -0
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +109 -0
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +118 -0
- data/lib/chef/formatters/error_mapper.rb +85 -0
- data/lib/chef/formatters/minimal.rb +235 -0
- data/lib/chef/handler.rb +235 -0
- data/lib/chef/handler/error_report.rb +33 -0
- data/lib/chef/handler/json_file.rb +64 -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 +149 -0
- data/lib/chef/knife.rb +537 -0
- data/lib/chef/knife/bootstrap.rb +233 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +62 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +62 -0
- data/lib/chef/knife/bootstrap/chef-full.erb +60 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +44 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +53 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +48 -0
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +46 -0
- data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +60 -0
- data/lib/chef/knife/client_bulk_delete.rb +65 -0
- data/lib/chef/knife/client_create.rb +80 -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 +59 -0
- data/lib/chef/knife/client_show.rb +52 -0
- data/lib/chef/knife/configure.rb +168 -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 +447 -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 +109 -0
- data/lib/chef/knife/cookbook_site_install.rb +164 -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 +60 -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 +290 -0
- data/lib/chef/knife/core/bootstrap_context.rb +106 -0
- data/lib/chef/knife/core/cookbook_scm_repo.rb +160 -0
- data/lib/chef/knife/core/generic_presenter.rb +191 -0
- data/lib/chef/knife/core/node_editor.rb +130 -0
- data/lib/chef/knife/core/node_presenter.rb +137 -0
- data/lib/chef/knife/core/object_loader.rb +112 -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 +217 -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 +136 -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 +83 -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 +86 -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 +75 -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 +459 -0
- data/lib/chef/knife/status.rb +119 -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 +225 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command.rb +164 -0
- data/lib/chef/mixin/command/unix.rb +220 -0
- data/lib/chef/mixin/command/windows.rb +76 -0
- data/lib/chef/mixin/convert_to_class_name.rb +65 -0
- data/lib/chef/mixin/create_path.rb +57 -0
- data/lib/chef/mixin/deep_merge.rb +247 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -0
- data/lib/chef/mixin/file_class.rb +46 -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 +249 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +58 -0
- data/lib/chef/mixin/params_validate.rb +238 -0
- data/lib/chef/mixin/path_sanity.rb +67 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +86 -0
- data/lib/chef/mixin/securable.rb +180 -0
- data/lib/chef/mixin/shell_out.rb +69 -0
- data/lib/chef/mixin/template.rb +100 -0
- data/lib/chef/mixin/why_run.rb +332 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +18 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/fileutils.rb +65 -0
- data/lib/chef/monkey_patches/moneta.rb +50 -0
- data/lib/chef/monkey_patches/net_http.rb +22 -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 +682 -0
- data/lib/chef/node/attribute.rb +504 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +520 -0
- data/lib/chef/provider.rb +223 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +105 -0
- data/lib/chef/provider/cron.rb +214 -0
- data/lib/chef/provider/cron/solaris.rb +56 -0
- data/lib/chef/provider/deploy.rb +474 -0
- data/lib/chef/provider/deploy/revision.rb +80 -0
- data/lib/chef/provider/deploy/timestamped.rb +32 -0
- data/lib/chef/provider/directory.rb +128 -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 +106 -0
- data/lib/chef/provider/execute.rb +68 -0
- data/lib/chef/provider/file.rb +355 -0
- data/lib/chef/provider/git.rb +260 -0
- data/lib/chef/provider/group.rb +159 -0
- data/lib/chef/provider/group/aix.rb +70 -0
- data/lib/chef/provider/group/dscl.rb +129 -0
- data/lib/chef/provider/group/gpasswd.rb +65 -0
- data/lib/chef/provider/group/groupadd.rb +96 -0
- data/lib/chef/provider/group/groupmod.rb +120 -0
- data/lib/chef/provider/group/pw.rb +93 -0
- data/lib/chef/provider/group/suse.rb +60 -0
- data/lib/chef/provider/group/usermod.rb +68 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/http_request.rb +136 -0
- data/lib/chef/provider/ifconfig.rb +214 -0
- data/lib/chef/provider/link.rb +130 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +92 -0
- data/lib/chef/provider/mount.rb +128 -0
- data/lib/chef/provider/mount/mount.rb +252 -0
- data/lib/chef/provider/mount/windows.rb +81 -0
- data/lib/chef/provider/ohai.rb +47 -0
- data/lib/chef/provider/package.rb +229 -0
- data/lib/chef/provider/package/apt.rb +147 -0
- data/lib/chef/provider/package/dpkg.rb +128 -0
- data/lib/chef/provider/package/easy_install.rb +136 -0
- data/lib/chef/provider/package/freebsd.rb +149 -0
- data/lib/chef/provider/package/ips.rb +101 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +111 -0
- data/lib/chef/provider/package/portage.rb +143 -0
- data/lib/chef/provider/package/rpm.rb +121 -0
- data/lib/chef/provider/package/rubygems.rb +580 -0
- data/lib/chef/provider/package/smartos.rb +84 -0
- data/lib/chef/provider/package/solaris.rb +139 -0
- data/lib/chef/provider/package/yum-dump.py +307 -0
- data/lib/chef/provider/package/yum.rb +1261 -0
- data/lib/chef/provider/package/zypper.rb +144 -0
- data/lib/chef/provider/remote_directory.rb +178 -0
- data/lib/chef/provider/remote_file.rb +126 -0
- data/lib/chef/provider/resource_update.rb +55 -0
- data/lib/chef/provider/route.rb +223 -0
- data/lib/chef/provider/ruby_block.rb +39 -0
- data/lib/chef/provider/script.rb +57 -0
- data/lib/chef/provider/service.rb +158 -0
- data/lib/chef/provider/service/arch.rb +113 -0
- data/lib/chef/provider/service/debian.rb +152 -0
- data/lib/chef/provider/service/freebsd.rb +175 -0
- data/lib/chef/provider/service/gentoo.rb +67 -0
- data/lib/chef/provider/service/init.rb +87 -0
- data/lib/chef/provider/service/insserv.rb +52 -0
- data/lib/chef/provider/service/invokercd.rb +35 -0
- data/lib/chef/provider/service/macosx.rb +144 -0
- data/lib/chef/provider/service/redhat.rb +77 -0
- data/lib/chef/provider/service/simple.rb +172 -0
- data/lib/chef/provider/service/solaris.rb +86 -0
- data/lib/chef/provider/service/systemd.rb +115 -0
- data/lib/chef/provider/service/upstart.rb +232 -0
- data/lib/chef/provider/service/windows.rb +163 -0
- data/lib/chef/provider/subversion.rb +214 -0
- data/lib/chef/provider/template.rb +117 -0
- data/lib/chef/provider/user.rb +207 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/solaris.rb +90 -0
- data/lib/chef/provider/user/useradd.rb +153 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/providers.rb +101 -0
- data/lib/chef/recipe.rb +129 -0
- data/lib/chef/reserved_names.rb +9 -0
- data/lib/chef/resource.rb +912 -0
- data/lib/chef/resource/apt_package.rb +43 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/chef_gem.rb +53 -0
- data/lib/chef/resource/conditional.rb +101 -0
- data/lib/chef/resource/cookbook_file.rb +52 -0
- data/lib/chef/resource/cron.rb +202 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +403 -0
- data/lib/chef/resource/deploy_revision.rb +40 -0
- data/lib/chef/resource/directory.rb +65 -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 +63 -0
- data/lib/chef/resource/erl_call.rb +86 -0
- data/lib/chef/resource/execute.rb +132 -0
- data/lib/chef/resource/file.rb +96 -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 +83 -0
- data/lib/chef/resource/http_request.rb +64 -0
- data/lib/chef/resource/ifconfig.rb +149 -0
- data/lib/chef/resource/ips_package.rb +42 -0
- data/lib/chef/resource/link.rb +92 -0
- data/lib/chef/resource/log.rb +74 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +105 -0
- data/lib/chef/resource/mount.rb +139 -0
- data/lib/chef/resource/ohai.rb +54 -0
- data/lib/chef/resource/package.rb +84 -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 +125 -0
- data/lib/chef/resource/remote_file.rb +90 -0
- data/lib/chef/resource/route.rb +140 -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 +51 -0
- data/lib/chef/resource/scm.rb +151 -0
- data/lib/chef/resource/script.rb +63 -0
- data/lib/chef/resource/service.rb +164 -0
- data/lib/chef/resource/smartos_package.rb +36 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +37 -0
- data/lib/chef/resource/template.rb +76 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +134 -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/resource_platform_map.rb +151 -0
- data/lib/chef/resource_reporter.rb +281 -0
- data/lib/chef/resources.rb +67 -0
- data/lib/chef/rest.rb +510 -0
- data/lib/chef/rest/auth_credentials.rb +73 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +229 -0
- data/lib/chef/role.rb +349 -0
- data/lib/chef/run_context.rb +236 -0
- data/lib/chef/run_list.rb +165 -0
- data/lib/chef/run_list/run_list_expansion.rb +206 -0
- data/lib/chef/run_list/run_list_item.rb +99 -0
- data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
- data/lib/chef/run_status.rb +124 -0
- data/lib/chef/runner.rb +95 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/scan_access_control.rb +135 -0
- data/lib/chef/search/query.rb +65 -0
- data/lib/chef/shef.rb +327 -0
- data/lib/chef/shef/ext.rb +591 -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 +296 -0
- data/lib/chef/shell_out.rb +6 -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 +132 -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
- data/lib/chef/win32/api.rb +364 -0
- data/lib/chef/win32/api/error.rb +921 -0
- data/lib/chef/win32/api/file.rb +535 -0
- data/lib/chef/win32/api/memory.rb +105 -0
- data/lib/chef/win32/api/process.rb +41 -0
- data/lib/chef/win32/api/psapi.rb +51 -0
- data/lib/chef/win32/api/security.rb +341 -0
- data/lib/chef/win32/api/system.rb +192 -0
- data/lib/chef/win32/api/unicode.rb +178 -0
- data/lib/chef/win32/error.rb +73 -0
- data/lib/chef/win32/file.rb +167 -0
- data/lib/chef/win32/file/info.rb +100 -0
- data/lib/chef/win32/handle.rb +55 -0
- data/lib/chef/win32/memory.rb +101 -0
- data/lib/chef/win32/process.rb +84 -0
- data/lib/chef/win32/security.rb +489 -0
- data/lib/chef/win32/security/ace.rb +125 -0
- data/lib/chef/win32/security/acl.rb +101 -0
- data/lib/chef/win32/security/securable_object.rb +109 -0
- data/lib/chef/win32/security/security_descriptor.rb +93 -0
- data/lib/chef/win32/security/sid.rb +199 -0
- data/lib/chef/win32/security/token.rb +64 -0
- data/lib/chef/win32/unicode.rb +43 -0
- data/lib/chef/win32/version.rb +119 -0
- data/spec/data/bad-config.rb +1 -0
- data/spec/data/big_json.json +2 -0
- data/spec/data/big_json_plus_one.json +2 -0
- data/spec/data/bootstrap/test-hints.erb +12 -0
- data/spec/data/bootstrap/test.erb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/README.rdoc +3 -0
- data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +1 -0
- data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
- data/spec/data/checksum/random.txt +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -0
- data/spec/data/config.rb +6 -0
- data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -0
- data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -0
- data/spec/data/cookbooks/apache2/recipes/default.rb +3 -0
- data/spec/data/cookbooks/borken/recipes/default.rb +2 -0
- data/spec/data/cookbooks/borken/templates/default/borken.erb +2 -0
- data/spec/data/cookbooks/chefignore +8 -0
- data/spec/data/cookbooks/java/files/default/java.response +2 -0
- data/spec/data/cookbooks/openldap/attributes/default.rb +15 -0
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -0
- data/spec/data/cookbooks/openldap/definitions/client.rb +5 -0
- data/spec/data/cookbooks/openldap/definitions/server.rb +5 -0
- data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
- data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -0
- data/spec/data/cookbooks/openldap/recipes/default.rb +3 -0
- data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -0
- data/spec/data/cookbooks/openldap/recipes/one.rb +15 -0
- data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -0
- data/spec/data/definitions/test.rb +5 -0
- data/spec/data/environment-config.rb +5 -0
- data/spec/data/fileedit/blank +0 -0
- data/spec/data/fileedit/hosts +4 -0
- data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
- data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
- data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
- data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
- data/spec/data/kitchen/chefignore +6 -0
- data/spec/data/kitchen/openldap/attributes/default.rb +3 -0
- data/spec/data/kitchen/openldap/attributes/robinson.rb +3 -0
- data/spec/data/kitchen/openldap/definitions/client.rb +3 -0
- data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +3 -0
- data/spec/data/kitchen/openldap/recipes/gigantor.rb +3 -0
- data/spec/data/kitchen/openldap/recipes/ignoreme.rb +3 -0
- data/spec/data/kitchen/openldap/recipes/woot.rb +3 -0
- data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
- data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
- data/spec/data/knife_subcommand/test_explicit_category.rb +7 -0
- data/spec/data/knife_subcommand/test_name_mapping.rb +4 -0
- data/spec/data/knife_subcommand/test_yourself.rb +13 -0
- data/spec/data/lwrp/providers/buck_passer.rb +3 -0
- data/spec/data/lwrp/providers/buck_passer_2.rb +10 -0
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +16 -0
- data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -0
- data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -0
- data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -0
- data/spec/data/lwrp/resources/bar.rb +1 -0
- data/spec/data/lwrp/resources/foo.rb +3 -0
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -0
- data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -0
- data/spec/data/lwrp_override/providers/buck_passer.rb +10 -0
- data/spec/data/lwrp_override/resources/foo.rb +4 -0
- data/spec/data/metadata/quick_start/metadata.rb +19 -0
- data/spec/data/nodes/default.rb +15 -0
- data/spec/data/nodes/test.example.com.rb +17 -0
- data/spec/data/nodes/test.rb +15 -0
- data/spec/data/object_loader/environments/test.json +5 -0
- data/spec/data/object_loader/environments/test.rb +2 -0
- data/spec/data/object_loader/environments/test_json_class.json +6 -0
- data/spec/data/object_loader/nodes/test.json +5 -0
- data/spec/data/object_loader/nodes/test.rb +2 -0
- data/spec/data/object_loader/nodes/test_json_class.json +6 -0
- data/spec/data/object_loader/roles/test.json +5 -0
- data/spec/data/object_loader/roles/test.rb +2 -0
- data/spec/data/object_loader/roles/test_json_class.json +6 -0
- data/spec/data/old_home_dir/my-dot-emacs +0 -0
- data/spec/data/old_home_dir/my-dot-vim +0 -0
- data/spec/data/recipes/test.rb +7 -0
- data/spec/data/remote_directory_data/remote_dir_file.txt +1 -0
- data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +1 -0
- data/spec/data/remote_file/nyan_cat.png +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -0
- data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -0
- data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -0
- data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -0
- data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -0
- data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -0
- data/spec/data/run_context/nodes/run_context.rb +5 -0
- data/spec/data/search_queries_to_transform.txt +98 -0
- data/spec/data/ssl/5e707473.0 +18 -0
- data/spec/data/ssl/chef-rspec.cert +27 -0
- data/spec/data/ssl/chef-rspec.key +27 -0
- data/spec/data/ssl/key.pem +15 -0
- data/spec/data/ssl/private_key.pem +27 -0
- data/spec/data/ssl/private_key_with_whitespace.pem +32 -0
- data/spec/data/templates/seattle.txt +1 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +160 -0
- data/spec/functional/knife/exec_spec.rb +60 -0
- data/spec/functional/knife/ssh_spec.rb +268 -0
- data/spec/functional/resource/cookbook_file_spec.rb +75 -0
- data/spec/functional/resource/deploy_revision_spec.rb +515 -0
- data/spec/functional/resource/directory_spec.rb +39 -0
- data/spec/functional/resource/file_spec.rb +69 -0
- data/spec/functional/resource/link_spec.rb +572 -0
- data/spec/functional/resource/remote_directory_spec.rb +114 -0
- data/spec/functional/resource/remote_file_spec.rb +65 -0
- data/spec/functional/resource/template_spec.rb +68 -0
- data/spec/functional/tiny_server_spec.rb +78 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec_helper.rb +82 -0
- data/spec/stress/win32/file_spec.rb +37 -0
- data/spec/stress/win32/memory_spec.rb +22 -0
- data/spec/stress/win32/security_spec.rb +69 -0
- data/spec/support/chef_helpers.rb +65 -0
- data/spec/support/lib/chef/provider/easy.rb +35 -0
- data/spec/support/lib/chef/provider/snakeoil.rb +40 -0
- data/spec/support/lib/chef/resource/cat.rb +41 -0
- data/spec/support/lib/chef/resource/one_two_three_four.rb +43 -0
- data/spec/support/lib/chef/resource/zen_master.rb +46 -0
- data/spec/support/matchers/leak.rb +96 -0
- data/spec/support/mock/constant.rb +52 -0
- data/spec/support/mock/platform.rb +18 -0
- data/spec/support/platform_helpers.rb +39 -0
- data/spec/support/platforms/prof/gc.rb +54 -0
- data/spec/support/platforms/prof/win32.rb +46 -0
- data/spec/support/shared/functional/directory_resource.rb +85 -0
- data/spec/support/shared/functional/file_resource.rb +202 -0
- data/spec/support/shared/functional/knife.rb +37 -0
- data/spec/support/shared/functional/securable_resource.rb +402 -0
- data/spec/support/shared/unit/api_error_inspector.rb +192 -0
- data/spec/tiny_server.rb +202 -0
- data/spec/unit/api_client_spec.rb +257 -0
- data/spec/unit/application/agent_spec.rb +0 -0
- data/spec/unit/application/client_spec.rb +171 -0
- data/spec/unit/application/knife_spec.rb +152 -0
- data/spec/unit/application/server_spec.rb +0 -0
- data/spec/unit/application/solo_spec.rb +167 -0
- data/spec/unit/application_spec.rb +239 -0
- data/spec/unit/certificate_spec.rb +76 -0
- data/spec/unit/checksum/storage/filesystem_spec.rb +69 -0
- data/spec/unit/checksum_cache_spec.rb +209 -0
- data/spec/unit/checksum_spec.rb +94 -0
- data/spec/unit/chef_spec.rb +25 -0
- data/spec/unit/client_spec.rb +290 -0
- data/spec/unit/config_spec.rb +223 -0
- data/spec/unit/cookbook/chefignore_spec.rb +39 -0
- data/spec/unit/cookbook/metadata_spec.rb +627 -0
- data/spec/unit/cookbook/synchronizer_spec.rb +306 -0
- data/spec/unit/cookbook/syntax_check_spec.rb +211 -0
- data/spec/unit/cookbook_loader_spec.rb +145 -0
- data/spec/unit/cookbook_manifest_spec.rb +554 -0
- data/spec/unit/cookbook_spec.rb +101 -0
- data/spec/unit/cookbook_version_spec.rb +406 -0
- data/spec/unit/couchdb_spec.rb +274 -0
- data/spec/unit/daemon_spec.rb +302 -0
- data/spec/unit/data_bag_item_spec.rb +280 -0
- data/spec/unit/data_bag_spec.rb +169 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +293 -0
- data/spec/unit/environment_spec.rb +492 -0
- data/spec/unit/exceptions_spec.rb +74 -0
- data/spec/unit/file_access_control_spec.rb +282 -0
- data/spec/unit/file_cache_spec.rb +114 -0
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +202 -0
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +93 -0
- data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -0
- data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +27 -0
- data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +27 -0
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +182 -0
- data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +93 -0
- data/spec/unit/handler/json_file_spec.rb +64 -0
- data/spec/unit/handler_spec.rb +216 -0
- data/spec/unit/index_queue_spec.rb +391 -0
- data/spec/unit/json_compat_spec.rb +61 -0
- data/spec/unit/knife/bootstrap_spec.rb +265 -0
- data/spec/unit/knife/client_bulk_delete_spec.rb +78 -0
- data/spec/unit/knife/client_create_spec.rb +74 -0
- data/spec/unit/knife/client_delete_spec.rb +40 -0
- data/spec/unit/knife/client_edit_spec.rb +40 -0
- data/spec/unit/knife/client_list_spec.rb +34 -0
- data/spec/unit/knife/client_reregister_spec.rb +62 -0
- data/spec/unit/knife/client_show_spec.rb +42 -0
- data/spec/unit/knife/config_file_selection_spec.rb +118 -0
- data/spec/unit/knife/configure_client_spec.rb +83 -0
- data/spec/unit/knife/configure_spec.rb +229 -0
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -0
- data/spec/unit/knife/cookbook_create_spec.rb +271 -0
- data/spec/unit/knife/cookbook_delete_spec.rb +239 -0
- data/spec/unit/knife/cookbook_download_spec.rb +217 -0
- data/spec/unit/knife/cookbook_list_spec.rb +88 -0
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -0
- data/spec/unit/knife/cookbook_metadata_spec.rb +172 -0
- data/spec/unit/knife/cookbook_show_spec.rb +223 -0
- data/spec/unit/knife/cookbook_site_download_spec.rb +151 -0
- data/spec/unit/knife/cookbook_site_install_spec.rb +148 -0
- data/spec/unit/knife/cookbook_site_share_spec.rb +146 -0
- data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -0
- data/spec/unit/knife/cookbook_test_spec.rb +83 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +148 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +135 -0
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -0
- data/spec/unit/knife/core/object_loader_spec.rb +81 -0
- data/spec/unit/knife/core/subcommand_loader_spec.rb +54 -0
- data/spec/unit/knife/core/ui_spec.rb +160 -0
- data/spec/unit/knife/data_bag_create_spec.rb +101 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +96 -0
- data/spec/unit/knife/data_bag_from_file_spec.rb +198 -0
- data/spec/unit/knife/data_bag_show_spec.rb +105 -0
- data/spec/unit/knife/environment_create_spec.rb +91 -0
- data/spec/unit/knife/environment_delete_spec.rb +71 -0
- data/spec/unit/knife/environment_edit_spec.rb +79 -0
- data/spec/unit/knife/environment_from_file_spec.rb +89 -0
- data/spec/unit/knife/environment_list_spec.rb +54 -0
- data/spec/unit/knife/environment_show_spec.rb +52 -0
- data/spec/unit/knife/index_rebuild_spec.rb +65 -0
- data/spec/unit/knife/knife_help.rb +92 -0
- data/spec/unit/knife/node_bulk_delete_spec.rb +97 -0
- data/spec/unit/knife/node_delete_spec.rb +68 -0
- data/spec/unit/knife/node_edit_spec.rb +88 -0
- data/spec/unit/knife/node_from_file_spec.rb +59 -0
- data/spec/unit/knife/node_list_spec.rb +63 -0
- data/spec/unit/knife/node_run_list_add_spec.rb +125 -0
- data/spec/unit/knife/node_run_list_remove_spec.rb +73 -0
- data/spec/unit/knife/node_show_spec.rb +48 -0
- data/spec/unit/knife/role_bulk_delete_spec.rb +80 -0
- data/spec/unit/knife/role_create_spec.rb +80 -0
- data/spec/unit/knife/role_delete_spec.rb +67 -0
- data/spec/unit/knife/role_edit_spec.rb +79 -0
- data/spec/unit/knife/role_from_file_spec.rb +69 -0
- data/spec/unit/knife/role_list_spec.rb +56 -0
- data/spec/unit/knife/ssh_spec.rb +293 -0
- data/spec/unit/knife/status_spec.rb +43 -0
- data/spec/unit/knife/tag_create_spec.rb +23 -0
- data/spec/unit/knife/tag_delete_spec.rb +25 -0
- data/spec/unit/knife/tag_list_spec.rb +23 -0
- data/spec/unit/knife_spec.rb +295 -0
- data/spec/unit/log_spec.rb +24 -0
- data/spec/unit/lwrp_spec.rb +256 -0
- data/spec/unit/mash_spec.rb +51 -0
- data/spec/unit/mixin/checksum_spec.rb +41 -0
- data/spec/unit/mixin/command_spec.rb +105 -0
- data/spec/unit/mixin/convert_to_class_name_spec.rb +50 -0
- data/spec/unit/mixin/deep_merge_spec.rb +786 -0
- data/spec/unit/mixin/deprecation_spec.rb +34 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +90 -0
- data/spec/unit/mixin/language_spec.rb +305 -0
- data/spec/unit/mixin/params_validate_spec.rb +405 -0
- data/spec/unit/mixin/path_sanity_spec.rb +80 -0
- data/spec/unit/mixin/securable_spec.rb +254 -0
- data/spec/unit/mixin/shell_out_spec.rb +109 -0
- data/spec/unit/mixin/template_spec.rb +104 -0
- data/spec/unit/mixin/xml_escape_spec.rb +54 -0
- data/spec/unit/monkey_patches/string_spec.rb +37 -0
- data/spec/unit/node/attribute_spec.rb +1033 -0
- data/spec/unit/node_spec.rb +744 -0
- data/spec/unit/openid_registration_spec.rb +153 -0
- data/spec/unit/platform_spec.rb +241 -0
- data/spec/unit/provider/breakpoint_spec.rb +54 -0
- data/spec/unit/provider/cookbook_file_spec.rb +218 -0
- data/spec/unit/provider/cron/solaris_spec.rb +121 -0
- data/spec/unit/provider/cron_spec.rb +812 -0
- data/spec/unit/provider/deploy/revision_spec.rb +103 -0
- data/spec/unit/provider/deploy/timestamped_spec.rb +40 -0
- data/spec/unit/provider/deploy_spec.rb +620 -0
- data/spec/unit/provider/directory_spec.rb +156 -0
- data/spec/unit/provider/env_spec.rb +232 -0
- data/spec/unit/provider/erl_call_spec.rb +86 -0
- data/spec/unit/provider/execute_spec.rb +63 -0
- data/spec/unit/provider/file_spec.rb +505 -0
- data/spec/unit/provider/git_spec.rb +342 -0
- data/spec/unit/provider/group/dscl_spec.rb +294 -0
- data/spec/unit/provider/group/gpasswd_spec.rb +108 -0
- data/spec/unit/provider/group/groupadd_spec.rb +161 -0
- data/spec/unit/provider/group/groupmod_spec.rb +134 -0
- data/spec/unit/provider/group/pw_spec.rb +140 -0
- data/spec/unit/provider/group/usermod_spec.rb +95 -0
- data/spec/unit/provider/group/windows_spec.rb +94 -0
- data/spec/unit/provider/group_spec.rb +259 -0
- data/spec/unit/provider/http_request_spec.rb +178 -0
- data/spec/unit/provider/ifconfig_spec.rb +213 -0
- data/spec/unit/provider/link_spec.rb +252 -0
- data/spec/unit/provider/log_spec.rb +81 -0
- data/spec/unit/provider/mdadm_spec.rb +128 -0
- data/spec/unit/provider/mount/mount_spec.rb +398 -0
- data/spec/unit/provider/mount/windows_spec.rb +134 -0
- data/spec/unit/provider/mount_spec.rb +160 -0
- data/spec/unit/provider/ohai_spec.rb +85 -0
- data/spec/unit/provider/package/apt_spec.rb +352 -0
- data/spec/unit/provider/package/dpkg_spec.rb +216 -0
- data/spec/unit/provider/package/easy_install_spec.rb +112 -0
- data/spec/unit/provider/package/freebsd_spec.rb +259 -0
- data/spec/unit/provider/package/ips_spec.rb +210 -0
- data/spec/unit/provider/package/macports_spec.rb +203 -0
- data/spec/unit/provider/package/pacman_spec.rb +206 -0
- data/spec/unit/provider/package/portage_spec.rb +320 -0
- data/spec/unit/provider/package/rpm_spec.rb +152 -0
- data/spec/unit/provider/package/rubygems_spec.rb +639 -0
- data/spec/unit/provider/package/smartos_spec.rb +83 -0
- data/spec/unit/provider/package/solaris_spec.rb +181 -0
- data/spec/unit/provider/package/yum_spec.rb +1856 -0
- data/spec/unit/provider/package/zypper_spec.rb +159 -0
- data/spec/unit/provider/package_spec.rb +427 -0
- data/spec/unit/provider/remote_directory_spec.rb +222 -0
- data/spec/unit/provider/remote_file_spec.rb +288 -0
- data/spec/unit/provider/route_spec.rb +226 -0
- data/spec/unit/provider/ruby_block_spec.rb +38 -0
- data/spec/unit/provider/script_spec.rb +96 -0
- data/spec/unit/provider/service/arch_service_spec.rb +330 -0
- data/spec/unit/provider/service/debian_service_spec.rb +254 -0
- data/spec/unit/provider/service/freebsd_service_spec.rb +379 -0
- data/spec/unit/provider/service/gentoo_service_spec.rb +144 -0
- data/spec/unit/provider/service/init_service_spec.rb +212 -0
- data/spec/unit/provider/service/insserv_service_spec.rb +76 -0
- data/spec/unit/provider/service/invokercd_service_spec.rb +212 -0
- data/spec/unit/provider/service/macosx_spec.rb +229 -0
- data/spec/unit/provider/service/redhat_spec.rb +156 -0
- data/spec/unit/provider/service/simple_service_spec.rb +171 -0
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +140 -0
- data/spec/unit/provider/service/systemd_service_spec.rb +239 -0
- data/spec/unit/provider/service/upstart_service_spec.rb +314 -0
- data/spec/unit/provider/service/windows_spec.rb +235 -0
- data/spec/unit/provider/service_spec.rb +169 -0
- data/spec/unit/provider/subversion_spec.rb +281 -0
- data/spec/unit/provider/template_spec.rb +196 -0
- data/spec/unit/provider/user/dscl_spec.rb +454 -0
- data/spec/unit/provider/user/pw_spec.rb +235 -0
- data/spec/unit/provider/user/solaris_spec.rb +414 -0
- data/spec/unit/provider/user/useradd_spec.rb +386 -0
- data/spec/unit/provider/user/windows_spec.rb +178 -0
- data/spec/unit/provider/user_spec.rb +468 -0
- data/spec/unit/provider_spec.rb +169 -0
- data/spec/unit/recipe_spec.rb +268 -0
- data/spec/unit/resource/apt_package_spec.rb +43 -0
- data/spec/unit/resource/bash_spec.rb +40 -0
- data/spec/unit/resource/breakpoint_spec.rb +43 -0
- data/spec/unit/resource/chef_gem_spec.rb +49 -0
- data/spec/unit/resource/conditional_spec.rb +147 -0
- data/spec/unit/resource/cookbook_file_spec.rb +89 -0
- data/spec/unit/resource/cron_spec.rb +181 -0
- data/spec/unit/resource/csh_spec.rb +40 -0
- data/spec/unit/resource/deploy_revision_spec.rb +47 -0
- data/spec/unit/resource/deploy_spec.rb +259 -0
- data/spec/unit/resource/directory_spec.rb +82 -0
- data/spec/unit/resource/dpkg_package_spec.rb +38 -0
- data/spec/unit/resource/easy_install_package_spec.rb +48 -0
- data/spec/unit/resource/env_spec.rb +85 -0
- data/spec/unit/resource/erl_call_spec.rb +81 -0
- data/spec/unit/resource/execute_spec.rb +124 -0
- data/spec/unit/resource/file_spec.rb +121 -0
- data/spec/unit/resource/freebsd_package_spec.rb +39 -0
- data/spec/unit/resource/gem_package_spec.rb +49 -0
- data/spec/unit/resource/git_spec.rb +46 -0
- data/spec/unit/resource/group_spec.rb +148 -0
- data/spec/unit/resource/http_request_spec.rb +59 -0
- data/spec/unit/resource/ifconfig_spec.rb +46 -0
- data/spec/unit/resource/ips_package_spec.rb +43 -0
- data/spec/unit/resource/link_spec.rb +118 -0
- data/spec/unit/resource/log_spec.rb +70 -0
- data/spec/unit/resource/macports_package_spec.rb +37 -0
- data/spec/unit/resource/mdadm_spec.rb +102 -0
- data/spec/unit/resource/mount_spec.rb +158 -0
- data/spec/unit/resource/ohai_spec.rb +62 -0
- data/spec/unit/resource/package_spec.rb +80 -0
- data/spec/unit/resource/pacman_package_spec.rb +38 -0
- data/spec/unit/resource/perl_spec.rb +40 -0
- data/spec/unit/resource/portage_package_spec.rb +38 -0
- data/spec/unit/resource/python_spec.rb +40 -0
- data/spec/unit/resource/remote_directory_spec.rb +97 -0
- data/spec/unit/resource/remote_file_spec.rb +125 -0
- data/spec/unit/resource/route_spec.rb +107 -0
- data/spec/unit/resource/rpm_package_spec.rb +38 -0
- data/spec/unit/resource/ruby_block_spec.rb +57 -0
- data/spec/unit/resource/ruby_spec.rb +40 -0
- data/spec/unit/resource/scm_spec.rb +159 -0
- data/spec/unit/resource/script_spec.rb +69 -0
- data/spec/unit/resource/service_spec.rb +165 -0
- data/spec/unit/resource/smartos_package_spec.rb +38 -0
- data/spec/unit/resource/subversion_spec.rb +58 -0
- data/spec/unit/resource/template_spec.rb +108 -0
- data/spec/unit/resource/timestamped_deploy_spec.rb +28 -0
- data/spec/unit/resource/user_spec.rb +122 -0
- data/spec/unit/resource/yum_package_spec.rb +85 -0
- data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -0
- data/spec/unit/resource_collection_spec.rb +257 -0
- data/spec/unit/resource_definition_spec.rb +119 -0
- data/spec/unit/resource_platform_map_spec.rb +164 -0
- data/spec/unit/resource_reporter_spec.rb +591 -0
- data/spec/unit/resource_spec.rb +721 -0
- data/spec/unit/rest/auth_credentials_spec.rb +431 -0
- data/spec/unit/rest_spec.rb +644 -0
- data/spec/unit/role_spec.rb +275 -0
- data/spec/unit/run_context_spec.rb +64 -0
- data/spec/unit/run_list/run_list_expansion_spec.rb +129 -0
- data/spec/unit/run_list/run_list_item_spec.rb +117 -0
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +123 -0
- data/spec/unit/run_list_spec.rb +521 -0
- data/spec/unit/run_status_spec.rb +145 -0
- data/spec/unit/runner_spec.rb +303 -0
- data/spec/unit/scan_access_control_spec.rb +182 -0
- data/spec/unit/search/query_spec.rb +99 -0
- data/spec/unit/shef/model_wrapper_spec.rb +97 -0
- data/spec/unit/shef/shef_ext_spec.rb +153 -0
- data/spec/unit/shef/shef_session_spec.rb +154 -0
- data/spec/unit/shef_spec.rb +161 -0
- data/spec/unit/solr_query/query_transform_spec.rb +454 -0
- data/spec/unit/solr_query/solr_http_request_spec.rb +244 -0
- data/spec/unit/solr_query_spec.rb +203 -0
- data/spec/unit/util/file_edit_spec.rb +135 -0
- data/spec/unit/version_class_spec.rb +172 -0
- data/spec/unit/version_constraint_spec.rb +134 -0
- data/spec/unit/webui_user_spec.rb +238 -0
- data/tasks/rspec.rb +75 -0
- metadata +1548 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@kallistec.com>)
|
3
|
+
# Copyright:: Copyright (c) 2009 Daniel DeLeo
|
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
|
+
class Chef
|
20
|
+
module IndexQueue
|
21
|
+
module Consumer
|
22
|
+
module ClassMethods
|
23
|
+
def expose(*methods)
|
24
|
+
@exposed_methods = Array(@exposed_methods)
|
25
|
+
@exposed_methods += methods
|
26
|
+
end
|
27
|
+
|
28
|
+
def exposed_methods
|
29
|
+
@exposed_methods || []
|
30
|
+
end
|
31
|
+
|
32
|
+
def whitelisted?(method_name)
|
33
|
+
exposed_methods.include?(method_name)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.included(including_class)
|
38
|
+
including_class.send(:extend, ClassMethods)
|
39
|
+
end
|
40
|
+
|
41
|
+
def run
|
42
|
+
Chef::Log.debug("Starting Index Queue Consumer")
|
43
|
+
AmqpClient.instance.queue # triggers connection setup
|
44
|
+
|
45
|
+
begin
|
46
|
+
AmqpClient.instance.queue.subscribe(:ack => true, :timeout => false) do |message|
|
47
|
+
call_action_for_message(message)
|
48
|
+
end
|
49
|
+
rescue Bunny::ConnectionError, Errno::ECONNRESET, Bunny::ServerDownError
|
50
|
+
AmqpClient.instance.disconnected!
|
51
|
+
Chef::Log.warn "Connection to rabbitmq lost. attempting to reconnect"
|
52
|
+
sleep 1
|
53
|
+
retry
|
54
|
+
end
|
55
|
+
end
|
56
|
+
alias :start :run
|
57
|
+
|
58
|
+
def call_action_for_message(message)
|
59
|
+
amqp_payload = Chef::JSONCompat.from_json(message[:payload], :create_additions => false, :max_nesting => false)
|
60
|
+
action = amqp_payload["action"].to_sym
|
61
|
+
app_payload = amqp_payload["payload"]
|
62
|
+
assert_method_whitelisted(action)
|
63
|
+
send(action, app_payload)
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def assert_method_whitelisted(method_name)
|
69
|
+
unless self.class.whitelisted?(method_name)
|
70
|
+
raise ArgumentError, "non-exposed method #{method_name} called via index queue"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@kallistec.com>)
|
3
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2009 Daniel DeLeo
|
5
|
+
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
6
|
+
# License:: Apache License, Version 2.0
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
require 'chef/json_compat'
|
21
|
+
|
22
|
+
class Chef
|
23
|
+
module IndexQueue
|
24
|
+
module Indexable
|
25
|
+
|
26
|
+
module ClassMethods
|
27
|
+
|
28
|
+
def index_object_type(explicit_type_name=nil)
|
29
|
+
@index_object_type = explicit_type_name.to_s if explicit_type_name
|
30
|
+
@index_object_type
|
31
|
+
end
|
32
|
+
|
33
|
+
# Resets all metadata used for indexing to nil. Used for testing
|
34
|
+
def reset_index_metadata!
|
35
|
+
@index_object_type = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.included(including_class)
|
41
|
+
including_class.send(:extend, ClassMethods)
|
42
|
+
end
|
43
|
+
|
44
|
+
attr_accessor :index_id
|
45
|
+
|
46
|
+
def index_object_type
|
47
|
+
self.class.index_object_type || Mixin::ConvertToClassName.snake_case_basename(self.class.name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def with_indexer_metadata(indexer_metadata={})
|
51
|
+
# changing input param symbol keys to strings, as the keys in hash that goes to solr are expected to be strings [cb]
|
52
|
+
# Ruby 1.9 hates you, cb [dan]
|
53
|
+
with_metadata = {}
|
54
|
+
indexer_metadata.each_key do |key|
|
55
|
+
with_metadata[key.to_s] = indexer_metadata[key]
|
56
|
+
end
|
57
|
+
|
58
|
+
with_metadata["type"] ||= self.index_object_type
|
59
|
+
with_metadata["id"] ||= self.index_id
|
60
|
+
with_metadata["database"] ||= Chef::Config[:couchdb_database]
|
61
|
+
with_metadata["item"] ||= self.to_hash
|
62
|
+
with_metadata["enqueued_at"] ||= Time.now.utc.to_i
|
63
|
+
|
64
|
+
raise ArgumentError, "Type, Id, or Database missing in index operation: #{with_metadata.inspect}" if (with_metadata["id"].nil? or with_metadata["type"].nil?)
|
65
|
+
with_metadata
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_to_index(metadata={})
|
69
|
+
Chef::Log.debug("Pushing item to index queue for addition: #{self.with_indexer_metadata(metadata)}")
|
70
|
+
object_with_metadata = with_indexer_metadata(metadata)
|
71
|
+
obj_id = object_with_metadata["id"]
|
72
|
+
obj = {:action => :add, :payload => self.with_indexer_metadata(metadata)}
|
73
|
+
|
74
|
+
publish_object(obj_id, obj)
|
75
|
+
end
|
76
|
+
|
77
|
+
def delete_from_index(metadata={})
|
78
|
+
Chef::Log.debug("Pushing item to index queue for deletion: #{self.with_indexer_metadata(metadata)}")
|
79
|
+
object_with_metadata = with_indexer_metadata(metadata)
|
80
|
+
obj_id = object_with_metadata["id"]
|
81
|
+
obj = {:action => :delete, :payload => self.with_indexer_metadata(metadata)}
|
82
|
+
|
83
|
+
publish_object(obj_id, obj)
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
# Uses the publisher to update the object's queue. If
|
89
|
+
# Chef::Config[:persistent_queue] is true, the update is wrapped
|
90
|
+
# in a transaction.
|
91
|
+
def publish_object(object_id, object)
|
92
|
+
publisher = AmqpClient.instance
|
93
|
+
begin
|
94
|
+
publisher.amqp_client.tx_select if Chef::Config[:persistent_queue]
|
95
|
+
publisher.queue_for_object(object_id) do |queue|
|
96
|
+
queue.publish(Chef::JSONCompat.to_json(object), :persistent => Chef::Config[:persistent_queue])
|
97
|
+
end
|
98
|
+
publisher.amqp_client.tx_commit if Chef::Config[:persistent_queue]
|
99
|
+
rescue
|
100
|
+
publisher.amqp_client.tx_rollback if Chef::Config[:persistent_queue]
|
101
|
+
raise
|
102
|
+
end
|
103
|
+
|
104
|
+
true
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Tim Hinderliter (<tim@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2010 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
|
+
# Wrapper class for interacting with JSON.
|
19
|
+
|
20
|
+
require 'json'
|
21
|
+
require 'yajl'
|
22
|
+
|
23
|
+
class Chef
|
24
|
+
class JSONCompat
|
25
|
+
JSON_MAX_NESTING = 1000
|
26
|
+
|
27
|
+
JSON_CLASS = "json_class".freeze
|
28
|
+
|
29
|
+
CHEF_APICLIENT = "Chef::ApiClient".freeze
|
30
|
+
CHEF_CHECKSUM = "Chef::Checksum".freeze
|
31
|
+
CHEF_COOKBOOKVERSION = "Chef::CookbookVersion".freeze
|
32
|
+
CHEF_DATABAG = "Chef::DataBag".freeze
|
33
|
+
CHEF_DATABAGITEM = "Chef::DataBagItem".freeze
|
34
|
+
CHEF_ENVIRONMENT = "Chef::Environment".freeze
|
35
|
+
CHEF_NODE = "Chef::Node".freeze
|
36
|
+
CHEF_ROLE = "Chef::Role".freeze
|
37
|
+
CHEF_SANDBOX = "Chef::Sandbox".freeze
|
38
|
+
CHEF_RESOURCE = "Chef::Resource".freeze
|
39
|
+
CHEF_RESOURCECOLLECTION = "Chef::ResourceCollection".freeze
|
40
|
+
CHEF_WEBUIUSER = "Chef::WebUIUser".freeze
|
41
|
+
CHEF_OPENIDREGISTRAION = "Chef::OpenIDRegistration".freeze
|
42
|
+
|
43
|
+
class <<self
|
44
|
+
# See CHEF-1292/PL-538. Increase the max nesting for JSON, which defaults
|
45
|
+
# to 19, and isn't enough for some (for example, a Node within a Node)
|
46
|
+
# structures.
|
47
|
+
def opts_add_max_nesting(opts)
|
48
|
+
if opts.nil? || !opts.has_key?(:max_nesting)
|
49
|
+
opts = opts.nil? ? Hash.new : opts.clone
|
50
|
+
opts[:max_nesting] = JSON_MAX_NESTING
|
51
|
+
end
|
52
|
+
opts
|
53
|
+
end
|
54
|
+
|
55
|
+
# Just call the JSON gem's parse method with a modified :max_nesting field
|
56
|
+
def from_json(source, opts = {})
|
57
|
+
obj = ::Yajl::Parser.parse(source)
|
58
|
+
|
59
|
+
unless obj.kind_of?(Hash) || obj.kind_of?(Array)
|
60
|
+
raise JSON::ParserError, "Top level JSON object must be a Hash or Array (actual: #{obj.class})"
|
61
|
+
end
|
62
|
+
|
63
|
+
# The old default in the json gem (which we are mimicing because we
|
64
|
+
# sadly rely on this misfeature) is to "create additions" i.e., convert
|
65
|
+
# JSON objects into ruby objects. Explicit :create_additions => false
|
66
|
+
# is required to turn it off.
|
67
|
+
if opts[:create_additions].nil? || opts[:create_additions]
|
68
|
+
map_to_rb_obj(obj)
|
69
|
+
else
|
70
|
+
obj
|
71
|
+
end
|
72
|
+
rescue Yajl::ParseError => e
|
73
|
+
raise JSON::ParserError, e.message
|
74
|
+
end
|
75
|
+
|
76
|
+
# Look at an object that's a basic type (from json parse) and convert it
|
77
|
+
# to an instance of Chef classes if desired.
|
78
|
+
def map_to_rb_obj(json_obj)
|
79
|
+
res = case json_obj
|
80
|
+
when Hash
|
81
|
+
mapped_hash = map_hash_to_rb_obj(json_obj)
|
82
|
+
if json_obj.has_key?(JSON_CLASS) && (class_to_inflate = class_for_json_class(json_obj[JSON_CLASS]))
|
83
|
+
class_to_inflate.json_create(mapped_hash)
|
84
|
+
else
|
85
|
+
mapped_hash
|
86
|
+
end
|
87
|
+
when Array
|
88
|
+
json_obj.map {|e| map_to_rb_obj(e) }
|
89
|
+
else
|
90
|
+
json_obj
|
91
|
+
end
|
92
|
+
res
|
93
|
+
end
|
94
|
+
|
95
|
+
def map_hash_to_rb_obj(json_hash)
|
96
|
+
json_hash.each do |key, value|
|
97
|
+
json_hash[key] = map_to_rb_obj(value)
|
98
|
+
end
|
99
|
+
json_hash
|
100
|
+
end
|
101
|
+
|
102
|
+
def to_json(obj, opts = nil)
|
103
|
+
obj.to_json(opts_add_max_nesting(opts))
|
104
|
+
end
|
105
|
+
|
106
|
+
def to_json_pretty(obj, opts = nil)
|
107
|
+
::JSON.pretty_generate(obj, opts_add_max_nesting(opts))
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
def class_for_json_class(json_class)
|
112
|
+
case json_class
|
113
|
+
when CHEF_APICLIENT
|
114
|
+
Chef::ApiClient
|
115
|
+
when CHEF_CHECKSUM
|
116
|
+
Chef::Checksum
|
117
|
+
when CHEF_COOKBOOKVERSION
|
118
|
+
Chef::CookbookVersion
|
119
|
+
when CHEF_DATABAG
|
120
|
+
Chef::DataBag
|
121
|
+
when CHEF_DATABAGITEM
|
122
|
+
Chef::DataBagItem
|
123
|
+
when CHEF_ENVIRONMENT
|
124
|
+
Chef::Environment
|
125
|
+
when CHEF_NODE
|
126
|
+
Chef::Node
|
127
|
+
when CHEF_ROLE
|
128
|
+
Chef::Role
|
129
|
+
when CHEF_SANDBOX
|
130
|
+
Chef::Sandbox
|
131
|
+
when CHEF_RESOURCE
|
132
|
+
Chef::Resource
|
133
|
+
when CHEF_RESOURCECOLLECTION
|
134
|
+
Chef::ResourceCollection
|
135
|
+
when CHEF_WEBUIUSER
|
136
|
+
Chef::WebUIUser
|
137
|
+
when CHEF_OPENIDREGISTRAION
|
138
|
+
Chef::OpenIDRegistration
|
139
|
+
when /^Chef::Resource/
|
140
|
+
Chef::Resource.find_subclass_by_name(json_class)
|
141
|
+
else
|
142
|
+
raise JSON::ParserError, "Unsupported `json_class` type '#{json_class}'"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
data/lib/chef/knife.rb
ADDED
@@ -0,0 +1,537 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
require 'forwardable'
|
21
|
+
require 'chef/version'
|
22
|
+
require 'mixlib/cli'
|
23
|
+
require 'chef/mixin/convert_to_class_name'
|
24
|
+
require 'chef/mixin/path_sanity'
|
25
|
+
require 'chef/knife/core/subcommand_loader'
|
26
|
+
require 'chef/knife/core/ui'
|
27
|
+
require 'chef/rest'
|
28
|
+
require 'pp'
|
29
|
+
|
30
|
+
class Chef
|
31
|
+
class Knife
|
32
|
+
|
33
|
+
Chef::REST::RESTRequest.user_agent = "Chef Knife#{Chef::REST::RESTRequest::UA_COMMON}"
|
34
|
+
|
35
|
+
include Mixlib::CLI
|
36
|
+
include Chef::Mixin::PathSanity
|
37
|
+
extend Chef::Mixin::ConvertToClassName
|
38
|
+
extend Forwardable
|
39
|
+
|
40
|
+
# Backwards Compat:
|
41
|
+
# Ideally, we should not vomit all of these methods into this base class;
|
42
|
+
# instead, they should be accessed by hitting the ui object directly.
|
43
|
+
def_delegator :@ui, :stdout
|
44
|
+
def_delegator :@ui, :stderr
|
45
|
+
def_delegator :@ui, :stdin
|
46
|
+
def_delegator :@ui, :msg
|
47
|
+
def_delegator :@ui, :ask_question
|
48
|
+
def_delegator :@ui, :pretty_print
|
49
|
+
def_delegator :@ui, :output
|
50
|
+
def_delegator :@ui, :format_list_for_display
|
51
|
+
def_delegator :@ui, :format_for_display
|
52
|
+
def_delegator :@ui, :format_cookbook_list_for_display
|
53
|
+
def_delegator :@ui, :edit_data
|
54
|
+
def_delegator :@ui, :edit_object
|
55
|
+
def_delegator :@ui, :confirm
|
56
|
+
|
57
|
+
attr_accessor :name_args
|
58
|
+
attr_accessor :ui
|
59
|
+
|
60
|
+
def self.ui
|
61
|
+
@ui ||= Chef::Knife::UI.new(STDOUT, STDERR, STDIN, {})
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.msg(msg="")
|
65
|
+
ui.msg(msg)
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.reset_subcommands!
|
69
|
+
@@subcommands = {}
|
70
|
+
@subcommands_by_category = nil
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.inherited(subclass)
|
74
|
+
unless subclass.unnamed?
|
75
|
+
subcommands[subclass.snake_case_name] = subclass
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Explicitly set the category for the current command to +new_category+
|
80
|
+
# The category is normally determined from the first word of the command
|
81
|
+
# name, but some commands make more sense using two or more words
|
82
|
+
# ===Arguments
|
83
|
+
# new_category::: A String to set the category to (see examples)
|
84
|
+
# ===Examples:
|
85
|
+
# Data bag commands would be in the 'data' category by default. To put them
|
86
|
+
# in the 'data bag' category:
|
87
|
+
# category('data bag')
|
88
|
+
def self.category(new_category)
|
89
|
+
@category = new_category
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.subcommand_category
|
93
|
+
@category || snake_case_name.split('_').first unless unnamed?
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.snake_case_name
|
97
|
+
convert_to_snake_case(name.split('::').last) unless unnamed?
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.common_name
|
101
|
+
snake_case_name.split('_').join(' ')
|
102
|
+
end
|
103
|
+
|
104
|
+
# Does this class have a name? (Classes created via Class.new don't)
|
105
|
+
def self.unnamed?
|
106
|
+
name.nil? || name.empty?
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.subcommand_loader
|
110
|
+
@subcommand_loader ||= Knife::SubcommandLoader.new(chef_config_dir)
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.load_commands
|
114
|
+
@commands_loaded ||= subcommand_loader.load_commands
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.subcommands
|
118
|
+
@@subcommands ||= {}
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.subcommands_by_category
|
122
|
+
unless @subcommands_by_category
|
123
|
+
@subcommands_by_category = Hash.new { |hash, key| hash[key] = [] }
|
124
|
+
subcommands.each do |snake_cased, klass|
|
125
|
+
@subcommands_by_category[klass.subcommand_category] << snake_cased
|
126
|
+
end
|
127
|
+
end
|
128
|
+
@subcommands_by_category
|
129
|
+
end
|
130
|
+
|
131
|
+
# Print the list of subcommands knife knows about. If +preferred_category+
|
132
|
+
# is given, only subcommands in that category are shown
|
133
|
+
def self.list_commands(preferred_category=nil)
|
134
|
+
load_commands
|
135
|
+
|
136
|
+
category_desc = preferred_category ? preferred_category + " " : ''
|
137
|
+
msg "Available #{category_desc}subcommands: (for details, knife SUB-COMMAND --help)\n\n"
|
138
|
+
|
139
|
+
if preferred_category && subcommands_by_category.key?(preferred_category)
|
140
|
+
commands_to_show = {preferred_category => subcommands_by_category[preferred_category]}
|
141
|
+
else
|
142
|
+
commands_to_show = subcommands_by_category
|
143
|
+
end
|
144
|
+
|
145
|
+
commands_to_show.sort.each do |category, commands|
|
146
|
+
next if category =~ /deprecated/i
|
147
|
+
msg "** #{category.upcase} COMMANDS **"
|
148
|
+
commands.each do |command|
|
149
|
+
msg subcommands[command].banner if subcommands[command]
|
150
|
+
end
|
151
|
+
msg
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# Run knife for the given +args+ (ARGV), adding +options+ to the list of
|
156
|
+
# CLI options that the subcommand knows how to handle.
|
157
|
+
# ===Arguments
|
158
|
+
# args::: usually ARGV
|
159
|
+
# options::: A Mixlib::CLI option parser hash. These +options+ are how
|
160
|
+
# subcommands know about global knife CLI options
|
161
|
+
def self.run(args, options={})
|
162
|
+
load_commands
|
163
|
+
subcommand_class = subcommand_class_from(args)
|
164
|
+
subcommand_class.options = options.merge!(subcommand_class.options)
|
165
|
+
subcommand_class.load_deps
|
166
|
+
instance = subcommand_class.new(args)
|
167
|
+
instance.configure_chef
|
168
|
+
instance.run_with_pretty_exceptions
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.guess_category(args)
|
172
|
+
category_words = args.select {|arg| arg =~ /^(([[:alnum:]])[[:alnum:]\_\-]+)$/ }
|
173
|
+
category_words.map! {|w| w.split('-')}.flatten!
|
174
|
+
matching_category = nil
|
175
|
+
while (!matching_category) && (!category_words.empty?)
|
176
|
+
candidate_category = category_words.join(' ')
|
177
|
+
matching_category = candidate_category if subcommands_by_category.key?(candidate_category)
|
178
|
+
matching_category || category_words.pop
|
179
|
+
end
|
180
|
+
matching_category
|
181
|
+
end
|
182
|
+
|
183
|
+
def self.subcommand_class_from(args)
|
184
|
+
command_words = args.select {|arg| arg =~ /^(([[:alnum:]])[[:alnum:]\_\-]+)$/ }
|
185
|
+
|
186
|
+
subcommand_class = nil
|
187
|
+
|
188
|
+
while ( !subcommand_class ) && ( !command_words.empty? )
|
189
|
+
snake_case_class_name = command_words.join("_")
|
190
|
+
unless subcommand_class = subcommands[snake_case_class_name]
|
191
|
+
command_words.pop
|
192
|
+
end
|
193
|
+
end
|
194
|
+
# see if we got the command as e.g., knife node-list
|
195
|
+
subcommand_class ||= subcommands[args.first.gsub('-', '_')]
|
196
|
+
subcommand_class || subcommand_not_found!(args)
|
197
|
+
end
|
198
|
+
|
199
|
+
def self.deps(&block)
|
200
|
+
@dependency_loader = block
|
201
|
+
end
|
202
|
+
|
203
|
+
def self.load_deps
|
204
|
+
@dependency_loader && @dependency_loader.call
|
205
|
+
end
|
206
|
+
|
207
|
+
private
|
208
|
+
|
209
|
+
OFFICIAL_PLUGINS = %w[ec2 rackspace windows openstack terremark bluebox]
|
210
|
+
|
211
|
+
# :nodoc:
|
212
|
+
# Error out and print usage. probably becuase the arguments given by the
|
213
|
+
# user could not be resolved to a subcommand.
|
214
|
+
def self.subcommand_not_found!(args)
|
215
|
+
ui.fatal("Cannot find sub command for: '#{args.join(' ')}'")
|
216
|
+
|
217
|
+
if category_commands = guess_category(args)
|
218
|
+
list_commands(category_commands)
|
219
|
+
elsif missing_plugin = ( OFFICIAL_PLUGINS.find {|plugin| plugin == args[0]} )
|
220
|
+
ui.info("The #{missing_plugin} commands were moved to plugins in Chef 0.10")
|
221
|
+
ui.info("You can install the plugin with `(sudo) gem install knife-#{missing_plugin}")
|
222
|
+
else
|
223
|
+
list_commands
|
224
|
+
end
|
225
|
+
|
226
|
+
exit 10
|
227
|
+
end
|
228
|
+
|
229
|
+
@@chef_config_dir = nil
|
230
|
+
|
231
|
+
# search upward from current_dir until .chef directory is found
|
232
|
+
def self.chef_config_dir
|
233
|
+
if @@chef_config_dir.nil? # share this with subclasses
|
234
|
+
@@chef_config_dir = false
|
235
|
+
full_path = Dir.pwd.split(File::SEPARATOR)
|
236
|
+
(full_path.length - 1).downto(0) do |i|
|
237
|
+
candidate_directory = File.join(full_path[0..i] + [".chef" ])
|
238
|
+
if File.exist?(candidate_directory) && File.directory?(candidate_directory)
|
239
|
+
@@chef_config_dir = candidate_directory
|
240
|
+
break
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
@@chef_config_dir
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
public
|
249
|
+
|
250
|
+
# Create a new instance of the current class configured for the given
|
251
|
+
# arguments and options
|
252
|
+
def initialize(argv=[])
|
253
|
+
super() # having to call super in initialize is the most annoying anti-pattern :(
|
254
|
+
@ui = Chef::Knife::UI.new(STDOUT, STDERR, STDIN, config)
|
255
|
+
|
256
|
+
command_name_words = self.class.snake_case_name.split('_')
|
257
|
+
|
258
|
+
# Mixlib::CLI ignores the embedded name_args
|
259
|
+
@name_args = parse_options(argv)
|
260
|
+
@name_args.delete(command_name_words.join('-'))
|
261
|
+
@name_args.reject! { |name_arg| command_name_words.delete(name_arg) }
|
262
|
+
|
263
|
+
# knife node run_list add requires that we have extra logic to handle
|
264
|
+
# the case that command name words could be joined by an underscore :/
|
265
|
+
command_name_words = command_name_words.join('_')
|
266
|
+
@name_args.reject! { |name_arg| command_name_words == name_arg }
|
267
|
+
|
268
|
+
if config[:help]
|
269
|
+
msg opt_parser
|
270
|
+
exit 1
|
271
|
+
end
|
272
|
+
|
273
|
+
# copy Mixlib::CLI over so that it cab be configured in knife.rb
|
274
|
+
# config file
|
275
|
+
Chef::Config[:verbosity] = config[:verbosity]
|
276
|
+
end
|
277
|
+
|
278
|
+
def parse_options(args)
|
279
|
+
super
|
280
|
+
rescue OptionParser::InvalidOption => e
|
281
|
+
puts "Error: " + e.to_s
|
282
|
+
show_usage
|
283
|
+
exit(1)
|
284
|
+
end
|
285
|
+
|
286
|
+
def configure_chef
|
287
|
+
unless config[:config_file]
|
288
|
+
candidate_configs = []
|
289
|
+
|
290
|
+
# Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
|
291
|
+
if ENV['KNIFE_HOME']
|
292
|
+
candidate_configs << File.join(ENV['KNIFE_HOME'], 'knife.rb')
|
293
|
+
end
|
294
|
+
# Look for $PWD/knife.rb
|
295
|
+
if Dir.pwd
|
296
|
+
candidate_configs << File.join(Dir.pwd, 'knife.rb')
|
297
|
+
end
|
298
|
+
# Look for $UPWARD/.chef/knife.rb
|
299
|
+
if self.class.chef_config_dir
|
300
|
+
candidate_configs << File.join(self.class.chef_config_dir, 'knife.rb')
|
301
|
+
end
|
302
|
+
# Look for $HOME/.chef/knife.rb
|
303
|
+
if ENV['HOME']
|
304
|
+
candidate_configs << File.join(ENV['HOME'], '.chef', 'knife.rb')
|
305
|
+
end
|
306
|
+
|
307
|
+
candidate_configs.each do | candidate_config |
|
308
|
+
candidate_config = File.expand_path(candidate_config)
|
309
|
+
if File.exist?(candidate_config)
|
310
|
+
config[:config_file] = candidate_config
|
311
|
+
break
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
# Don't try to load a knife.rb if it doesn't exist.
|
317
|
+
if config[:config_file]
|
318
|
+
read_config_file(config[:config_file])
|
319
|
+
else
|
320
|
+
# ...but do log a message if no config was found.
|
321
|
+
Chef::Config[:color] = config[:color]
|
322
|
+
ui.warn("No knife configuration file found")
|
323
|
+
end
|
324
|
+
|
325
|
+
Chef::Config[:color] = config[:color]
|
326
|
+
|
327
|
+
case Chef::Config[:verbosity]
|
328
|
+
when 0
|
329
|
+
Chef::Config[:log_level] = :error
|
330
|
+
when 1
|
331
|
+
Chef::Config[:log_level] = :info
|
332
|
+
else
|
333
|
+
Chef::Config[:log_level] = :debug
|
334
|
+
end
|
335
|
+
|
336
|
+
Chef::Config[:node_name] = config[:node_name] if config[:node_name]
|
337
|
+
Chef::Config[:client_key] = config[:client_key] if config[:client_key]
|
338
|
+
Chef::Config[:chef_server_url] = config[:chef_server_url] if config[:chef_server_url]
|
339
|
+
Chef::Config[:environment] = config[:environment] if config[:environment]
|
340
|
+
|
341
|
+
# Expand a relative path from the config directory. Config from command
|
342
|
+
# line should already be expanded, and absolute paths will be unchanged.
|
343
|
+
if Chef::Config[:client_key] && config[:config_file]
|
344
|
+
Chef::Config[:client_key] = File.expand_path(Chef::Config[:client_key], File.dirname(config[:config_file]))
|
345
|
+
end
|
346
|
+
|
347
|
+
Mixlib::Log::Formatter.show_time = false
|
348
|
+
Chef::Log.init(Chef::Config[:log_location])
|
349
|
+
Chef::Log.level(Chef::Config[:log_level] || :error)
|
350
|
+
|
351
|
+
Chef::Log.debug("Using configuration from #{config[:config_file]}")
|
352
|
+
|
353
|
+
if Chef::Config[:node_name] && Chef::Config[:node_name].bytesize > 90
|
354
|
+
# node names > 90 bytes only work with authentication protocol >= 1.1
|
355
|
+
# see discussion in config.rb.
|
356
|
+
Chef::Config[:authentication_protocol_version] = "1.1"
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
def read_config_file(file)
|
361
|
+
Chef::Config.from_file(file)
|
362
|
+
rescue SyntaxError => e
|
363
|
+
ui.error "You have invalid ruby syntax in your config file #{file}"
|
364
|
+
ui.info(ui.color(e.message, :red))
|
365
|
+
if file_line = e.message[/#{Regexp.escape(file)}:[\d]+/]
|
366
|
+
line = file_line[/:([\d]+)$/, 1].to_i
|
367
|
+
highlight_config_error(file, line)
|
368
|
+
end
|
369
|
+
exit 1
|
370
|
+
rescue Exception => e
|
371
|
+
ui.error "You have an error in your config file #{file}"
|
372
|
+
ui.info "#{e.class.name}: #{e.message}"
|
373
|
+
filtered_trace = e.backtrace.grep(/#{Regexp.escape(file)}/)
|
374
|
+
filtered_trace.each {|line| ui.msg(" " + ui.color(line, :red))}
|
375
|
+
if !filtered_trace.empty?
|
376
|
+
line_nr = filtered_trace.first[/#{Regexp.escape(file)}:([\d]+)/, 1]
|
377
|
+
highlight_config_error(file, line_nr.to_i)
|
378
|
+
end
|
379
|
+
|
380
|
+
exit 1
|
381
|
+
end
|
382
|
+
|
383
|
+
def highlight_config_error(file, line)
|
384
|
+
config_file_lines = []
|
385
|
+
IO.readlines(file).each_with_index {|l, i| config_file_lines << "#{(i + 1).to_s.rjust(3)}: #{l.chomp}"}
|
386
|
+
if line == 1
|
387
|
+
lines = config_file_lines[0..3]
|
388
|
+
lines[0] = ui.color(lines[0], :red)
|
389
|
+
else
|
390
|
+
lines = config_file_lines[Range.new(line - 2, line)]
|
391
|
+
lines[1] = ui.color(lines[1], :red)
|
392
|
+
end
|
393
|
+
ui.msg ""
|
394
|
+
ui.msg ui.color(" # #{file}", :white)
|
395
|
+
lines.each {|l| ui.msg(l)}
|
396
|
+
ui.msg ""
|
397
|
+
end
|
398
|
+
|
399
|
+
def show_usage
|
400
|
+
stdout.puts("USAGE: " + self.opt_parser.to_s)
|
401
|
+
end
|
402
|
+
|
403
|
+
def run_with_pretty_exceptions
|
404
|
+
unless self.respond_to?(:run)
|
405
|
+
ui.error "You need to add a #run method to your knife command before you can use it"
|
406
|
+
end
|
407
|
+
enforce_path_sanity
|
408
|
+
run
|
409
|
+
rescue Exception => e
|
410
|
+
raise if Chef::Config[:verbosity] == 2
|
411
|
+
humanize_exception(e)
|
412
|
+
exit 100
|
413
|
+
end
|
414
|
+
|
415
|
+
def humanize_exception(e)
|
416
|
+
case e
|
417
|
+
when SystemExit
|
418
|
+
raise # make sure exit passes through.
|
419
|
+
when Net::HTTPServerException, Net::HTTPFatalError
|
420
|
+
humanize_http_exception(e)
|
421
|
+
when Errno::ECONNREFUSED, Timeout::Error, Errno::ETIMEDOUT, SocketError
|
422
|
+
ui.error "Network Error: #{e.message}"
|
423
|
+
ui.info "Check your knife configuration and network settings"
|
424
|
+
when NameError, NoMethodError
|
425
|
+
ui.error "knife encountered an unexpected error"
|
426
|
+
ui.info "This may be a bug in the '#{self.class.common_name}' knife command or plugin"
|
427
|
+
ui.info "Please collect the output of this command with the `-VV` option before filing a bug report."
|
428
|
+
ui.info "Exception: #{e.class.name}: #{e.message}"
|
429
|
+
when Chef::Exceptions::PrivateKeyMissing
|
430
|
+
ui.error "Your private key could not be loaded from #{api_key}"
|
431
|
+
ui.info "Check your configuration file and ensure that your private key is readable"
|
432
|
+
else
|
433
|
+
ui.error "#{e.class.name}: #{e.message}"
|
434
|
+
end
|
435
|
+
end
|
436
|
+
|
437
|
+
def humanize_http_exception(e)
|
438
|
+
response = e.response
|
439
|
+
case response
|
440
|
+
when Net::HTTPUnauthorized
|
441
|
+
ui.error "Failed to authenticate to #{server_url} as #{username} with key #{api_key}"
|
442
|
+
ui.info "Response: #{format_rest_error(response)}"
|
443
|
+
when Net::HTTPForbidden
|
444
|
+
ui.error "You authenticated successfully to #{server_url} as #{username} but you are not authorized for this action"
|
445
|
+
ui.info "Response: #{format_rest_error(response)}"
|
446
|
+
when Net::HTTPBadRequest
|
447
|
+
ui.error "The data in your request was invalid"
|
448
|
+
ui.info "Response: #{format_rest_error(response)}"
|
449
|
+
when Net::HTTPNotFound
|
450
|
+
ui.error "The object you are looking for could not be found"
|
451
|
+
ui.info "Response: #{format_rest_error(response)}"
|
452
|
+
when Net::HTTPInternalServerError
|
453
|
+
ui.error "internal server error"
|
454
|
+
ui.info "Response: #{format_rest_error(response)}"
|
455
|
+
when Net::HTTPBadGateway
|
456
|
+
ui.error "bad gateway"
|
457
|
+
ui.info "Response: #{format_rest_error(response)}"
|
458
|
+
when Net::HTTPServiceUnavailable
|
459
|
+
ui.error "Service temporarily unavailable"
|
460
|
+
ui.info "Response: #{format_rest_error(response)}"
|
461
|
+
else
|
462
|
+
ui.error response.message
|
463
|
+
ui.info "Response: #{format_rest_error(response)}"
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
def username
|
468
|
+
Chef::Config[:node_name]
|
469
|
+
end
|
470
|
+
|
471
|
+
def api_key
|
472
|
+
Chef::Config[:client_key]
|
473
|
+
end
|
474
|
+
|
475
|
+
# Parses JSON from the error response sent by Chef Server and returns the
|
476
|
+
# error message
|
477
|
+
#--
|
478
|
+
# TODO: this code belongs in Chef::REST
|
479
|
+
def format_rest_error(response)
|
480
|
+
Array(Chef::JSONCompat.from_json(response.body)["error"]).join('; ')
|
481
|
+
rescue Exception
|
482
|
+
response.body
|
483
|
+
end
|
484
|
+
|
485
|
+
def create_object(object, pretty_name=nil, &block)
|
486
|
+
output = edit_data(object)
|
487
|
+
|
488
|
+
if Kernel.block_given?
|
489
|
+
output = block.call(output)
|
490
|
+
else
|
491
|
+
output.save
|
492
|
+
end
|
493
|
+
|
494
|
+
pretty_name ||= output
|
495
|
+
|
496
|
+
self.msg("Created #{pretty_name}")
|
497
|
+
|
498
|
+
output(output) if config[:print_after]
|
499
|
+
end
|
500
|
+
|
501
|
+
def delete_object(klass, name, delete_name=nil, &block)
|
502
|
+
confirm("Do you really want to delete #{name}")
|
503
|
+
|
504
|
+
if Kernel.block_given?
|
505
|
+
object = block.call
|
506
|
+
else
|
507
|
+
object = klass.load(name)
|
508
|
+
object.destroy
|
509
|
+
end
|
510
|
+
|
511
|
+
output(format_for_display(object)) if config[:print_after]
|
512
|
+
|
513
|
+
obj_name = delete_name ? "#{delete_name}[#{name}]" : object
|
514
|
+
self.msg("Deleted #{obj_name}")
|
515
|
+
end
|
516
|
+
|
517
|
+
def rest
|
518
|
+
@rest ||= begin
|
519
|
+
require 'chef/rest'
|
520
|
+
Chef::REST.new(Chef::Config[:chef_server_url])
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
def noauth_rest
|
525
|
+
@rest ||= begin
|
526
|
+
require 'chef/rest'
|
527
|
+
Chef::REST.new(Chef::Config[:chef_server_url], false, false)
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
531
|
+
def server_url
|
532
|
+
Chef::Config[:chef_server_url]
|
533
|
+
end
|
534
|
+
|
535
|
+
end
|
536
|
+
end
|
537
|
+
|