chef 10.34.6-x86-mingw32 → 11.6.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 +5 -13
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +18 -1
- data/bin/chef-apply +25 -0
- data/bin/chef-service-manager +37 -0
- data/bin/chef-shell +34 -0
- data/bin/shef +6 -5
- data/distro/common/html/chef-client.8.html +4 -4
- data/distro/common/html/chef-expander.8.html +4 -4
- data/distro/common/html/chef-expanderctl.8.html +4 -4
- data/distro/common/html/chef-server-webui.8.html +4 -4
- data/distro/common/html/chef-server.8.html +4 -4
- data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
- data/distro/common/html/chef-solo.8.html +4 -4
- data/distro/common/html/chef-solr.8.html +5 -5
- data/distro/common/html/knife-bootstrap.1.html +4 -4
- data/distro/common/html/knife-client.1.html +4 -4
- data/distro/common/html/knife-configure.1.html +4 -4
- data/distro/common/html/knife-cookbook-site.1.html +4 -4
- data/distro/common/html/knife-cookbook.1.html +4 -4
- data/distro/common/html/knife-data-bag.1.html +4 -4
- data/distro/common/html/knife-environment.1.html +4 -4
- data/distro/common/html/knife-exec.1.html +9 -9
- data/distro/common/html/knife-index.1.html +4 -4
- data/distro/common/html/knife-node.1.html +4 -4
- data/distro/common/html/knife-role.1.html +4 -4
- data/distro/common/html/knife-search.1.html +4 -4
- data/distro/common/html/knife-ssh.1.html +4 -4
- data/distro/common/html/knife-status.1.html +4 -4
- data/distro/common/html/knife-tag.1.html +4 -4
- data/distro/common/html/knife.1.html +8 -13
- data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
- data/distro/common/man/man1/knife-bootstrap.1 +1 -1
- data/distro/common/man/man1/knife-client.1 +0 -99
- data/distro/common/man/man1/knife-configure.1 +1 -1
- data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
- data/distro/common/man/man1/knife-cookbook.1 +1 -1
- data/distro/common/man/man1/knife-data-bag.1 +1 -1
- data/distro/common/man/man1/knife-environment.1 +0 -168
- data/distro/common/man/man1/knife-exec.1 +4 -7
- data/distro/common/man/man1/knife-index.1 +1 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +1 -1
- data/distro/common/man/man1/knife-search.1 +1 -1
- data/distro/common/man/man1/knife-ssh.1 +1 -1
- data/distro/common/man/man1/knife-status.1 +1 -1
- data/distro/common/man/man1/knife-tag.1 +1 -1
- data/distro/common/man/man1/knife.1 +3 -6
- data/distro/common/man/man8/chef-client.8 +1 -1
- data/distro/common/man/man8/chef-expander.8 +1 -1
- data/distro/common/man/man8/chef-expanderctl.8 +1 -1
- data/distro/common/man/man8/chef-server-webui.8 +1 -1
- data/distro/common/man/man8/chef-server.8 +1 -1
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
- data/distro/common/markdown/man1/knife-exec.mkd +11 -6
- data/distro/common/markdown/man1/knife.mkd +4 -9
- data/distro/debian/etc/default/chef-client +0 -1
- data/distro/debian/etc/init.d/chef-client +6 -4
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +3 -6
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +68 -18
- data/lib/chef/application/apply.rb +162 -0
- data/lib/chef/application/client.rb +37 -22
- data/lib/chef/application/knife.rb +2 -4
- data/lib/chef/application/solo.rb +27 -13
- data/lib/chef/application/windows_service.rb +114 -54
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +9 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +284 -0
- data/lib/chef/chef_fs/config.rb +205 -0
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
- data/lib/chef/chef_fs/file_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +426 -0
- data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
- data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
- data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
- data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
- data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
- data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
- data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
- data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
- data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
- data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
- data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
- data/lib/chef/chef_fs/knife.rb +116 -0
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +90 -0
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +111 -34
- data/lib/chef/config.rb +111 -102
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/metadata.rb +0 -2
- data/lib/chef/cookbook/syntax_check.rb +76 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +16 -9
- data/lib/chef/cookbook_version.rb +2 -410
- data/lib/chef/daemon.rb +24 -19
- data/lib/chef/data_bag.rb +20 -104
- data/lib/chef/data_bag_item.rb +2 -65
- data/lib/chef/deprecation/mixin/template.rb +49 -0
- data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
- data/lib/chef/deprecation/provider/file.rb +197 -0
- data/lib/chef/deprecation/provider/remote_file.rb +86 -0
- data/lib/chef/deprecation/provider/template.rb +63 -0
- data/lib/chef/deprecation/warnings.rb +38 -0
- data/lib/chef/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +71 -0
- data/lib/chef/dsl/include_attribute.rb +63 -0
- data/lib/chef/dsl/include_recipe.rb +45 -0
- data/lib/chef/dsl/platform_introspection.rb +218 -0
- data/lib/chef/dsl/recipe.rb +87 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +171 -24
- data/lib/chef/environment.rb +39 -179
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +107 -8
- data/lib/chef/file_access_control/unix.rb +64 -7
- data/lib/chef/file_access_control/windows.rb +22 -11
- data/lib/chef/file_content_management/content_base.rb +56 -0
- data/lib/chef/file_content_management/deploy.rb +38 -0
- data/lib/chef/file_content_management/deploy/cp.rb +48 -0
- data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
- data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
- data/lib/chef/file_content_management/tempfile.rb +61 -0
- data/lib/chef/formatters/base.rb +4 -1
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/error_descriptor.rb +5 -4
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
- data/lib/chef/json_compat.rb +15 -14
- data/lib/chef/knife.rb +99 -41
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +19 -17
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +4 -2
- data/lib/chef/knife/cookbook_upload.rb +4 -4
- data/lib/chef/knife/core/bootstrap_context.rb +11 -5
- data/lib/chef/knife/core/generic_presenter.rb +42 -13
- data/lib/chef/knife/core/node_editor.rb +36 -16
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +34 -13
- data/lib/chef/knife/delete.rb +106 -0
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +63 -0
- data/lib/chef/knife/download.rb +63 -0
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -0
- data/lib/chef/knife/exec.rb +5 -5
- data/lib/chef/knife/help_topics.rb +1 -1
- data/lib/chef/knife/index_rebuild.rb +91 -7
- data/lib/chef/knife/list.rb +153 -0
- data/lib/chef/knife/node_run_list_set.rb +66 -0
- data/lib/chef/knife/node_show.rb +1 -7
- data/lib/chef/knife/raw.rb +64 -0
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +45 -28
- data/lib/chef/knife/show.rb +55 -0
- data/lib/chef/knife/ssh.rb +14 -2
- data/lib/chef/knife/upload.rb +69 -0
- data/lib/chef/knife/user_create.rb +93 -0
- data/lib/chef/knife/user_delete.rb +46 -0
- data/lib/chef/knife/user_edit.rb +53 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
- data/lib/chef/knife/user_reregister.rb +59 -0
- data/lib/chef/knife/user_show.rb +49 -0
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +78 -194
- data/lib/chef/mixin/deprecation.rb +35 -0
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language.rb +22 -223
- data/lib/chef/mixin/language_include_attribute.rb +10 -36
- data/lib/chef/mixin/language_include_recipe.rb +7 -33
- data/lib/chef/mixin/params_validate.rb +0 -3
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +156 -26
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/mixins.rb +1 -5
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +139 -308
- data/lib/chef/node/attribute.rb +367 -473
- data/lib/chef/node/attribute_collections.rb +206 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +4 -496
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
- data/lib/chef/provider.rb +14 -58
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +11 -80
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +26 -21
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +12 -18
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +297 -248
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- data/lib/chef/provider/group.rb +31 -51
- data/lib/chef/provider/group/dscl.rb +13 -53
- data/lib/chef/provider/group/gpasswd.rb +19 -14
- data/lib/chef/provider/group/groupadd.rb +1 -41
- data/lib/chef/provider/group/groupmod.rb +36 -46
- data/lib/chef/provider/group/pw.rb +16 -59
- data/lib/chef/provider/group/suse.rb +13 -16
- data/lib/chef/provider/group/usermod.rb +18 -40
- data/lib/chef/provider/group/windows.rb +6 -13
- data/lib/chef/provider/http_request.rb +25 -42
- data/lib/chef/provider/ifconfig.rb +25 -35
- data/lib/chef/provider/ifconfig/debian.rb +71 -0
- data/lib/chef/provider/ifconfig/redhat.rb +47 -0
- data/lib/chef/provider/link.rb +12 -3
- data/lib/chef/provider/lwrp_base.rb +150 -0
- data/lib/chef/provider/mount.rb +1 -1
- data/lib/chef/provider/mount/mount.rb +8 -3
- data/lib/chef/provider/mount/windows.rb +4 -1
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +4 -1
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +6 -5
- data/lib/chef/provider/remote_file.rb +13 -100
- data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
- data/lib/chef/provider/remote_file/content.rb +75 -0
- data/lib/chef/provider/remote_file/fetcher.rb +43 -0
- data/lib/chef/provider/remote_file/ftp.rb +183 -0
- data/lib/chef/provider/remote_file/http.rb +124 -0
- data/lib/chef/provider/remote_file/local_file.rb +47 -0
- data/lib/chef/provider/route.rb +6 -2
- data/lib/chef/provider/ruby_block.rb +5 -2
- data/lib/chef/provider/script.rb +14 -2
- data/lib/chef/provider/service.rb +15 -0
- data/lib/chef/provider/service/init.rb +9 -7
- data/lib/chef/provider/service/macosx.rb +29 -81
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -81
- data/lib/chef/provider/template/content.rb +61 -0
- data/lib/chef/provider/template_finder.rb +61 -0
- data/lib/chef/provider/user.rb +0 -1
- data/lib/chef/provider/user/dscl.rb +175 -568
- data/lib/chef/provider/user/useradd.rb +50 -54
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +18 -1
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +52 -146
- data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
- data/lib/chef/resource/conditional.rb +4 -0
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
- data/lib/chef/resource/file.rb +31 -3
- data/lib/chef/resource/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +132 -0
- data/lib/chef/resource/mount.rb +39 -13
- data/lib/chef/resource/powershell_script.rb +31 -0
- data/lib/chef/resource/registry_key.rb +86 -0
- data/lib/chef/resource/remote_directory.rb +6 -5
- data/lib/chef/resource/remote_file.rb +62 -25
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +69 -31
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +4 -1
- data/lib/chef/rest.rb +55 -127
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +7 -8
- data/lib/chef/role.rb +1 -97
- data/lib/chef/run_context.rb +108 -130
- data/lib/chef/run_context/cookbook_compiler.rb +280 -0
- data/lib/chef/run_list.rb +0 -2
- data/lib/chef/run_list/run_list_expansion.rb +1 -16
- data/lib/chef/run_lock.rb +96 -0
- data/lib/chef/runner.rb +28 -6
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +8 -5
- data/lib/chef/search/query.rb +2 -2
- data/lib/chef/shef/ext.rb +3 -575
- data/lib/chef/{shef.rb → shell.rb} +35 -40
- data/lib/chef/shell/ext.rb +593 -0
- data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
- data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
- data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/user.rb +182 -0
- data/lib/chef/util/backup.rb +84 -0
- data/lib/chef/util/diff.rb +145 -0
- data/lib/chef/util/file_edit.rb +1 -1
- data/lib/chef/util/selinux.rb +100 -0
- data/lib/chef/util/windows/net_group.rb +1 -5
- data/lib/chef/util/windows/net_user.rb +14 -1
- data/lib/chef/util/windows/volume.rb +2 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version/platform.rb +42 -0
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/version_constraint.rb +6 -5
- data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
- data/lib/chef/win32/api/file.rb +8 -2
- data/lib/chef/win32/api/security.rb +45 -1
- data/lib/chef/win32/registry.rb +382 -0
- data/lib/chef/win32/security.rb +19 -0
- data/lib/chef/win32/version.rb +25 -8
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
- data/spec/data/apt/var/www/apt/conf/distributions +7 -0
- data/spec/data/apt/var/www/apt/conf/incoming +4 -0
- data/spec/data/apt/var/www/apt/conf/pulls +3 -0
- data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
- data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
- data/spec/data/apt/var/www/apt/db/packages.db +0 -0
- data/spec/data/apt/var/www/apt/db/references.db +0 -0
- data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
- data/spec/data/apt/var/www/apt/db/version +4 -0
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
- data/spec/data/bootstrap/secret.erb +9 -0
- data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
- data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
- data/spec/data/git_bundles/example-repo.gitbundle +0 -0
- data/spec/data/knife_subcommand/test_yourself.rb +8 -0
- data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
- data/spec/data/nodes/default.rb +3 -3
- data/spec/data/nodes/test.example.com.rb +3 -3
- data/spec/data/nodes/test.rb +3 -3
- data/spec/data/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/remote_file/nyan_cat.png.gz +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
- data/spec/data/shef-config.rb +10 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +3 -3
- data/spec/functional/knife/smoke_test.rb +34 -0
- data/spec/functional/knife/ssh_spec.rb +5 -1
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
- data/spec/functional/resource/batch_spec.rb +64 -0
- data/spec/functional/resource/cookbook_file_spec.rb +15 -9
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +5 -1
- data/spec/functional/resource/file_spec.rb +71 -21
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +424 -388
- data/spec/functional/resource/package_spec.rb +297 -0
- data/spec/functional/resource/powershell_spec.rb +188 -0
- data/spec/functional/resource/registry_spec.rb +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +143 -37
- data/spec/functional/resource/remote_file_spec.rb +99 -13
- data/spec/functional/resource/template_spec.rb +180 -3
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +243 -0
- data/spec/functional/shell_spec.rb +102 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/functional/win32/security_spec.rb +37 -0
- data/spec/functional/win32/service_manager_spec.rb +269 -0
- data/spec/functional/win32/versions_spec.rb +78 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
- data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
- data/spec/integration/knife/chefignore_spec.rb +271 -0
- data/spec/integration/knife/delete_spec.rb +944 -0
- data/spec/integration/knife/deps_spec.rb +648 -0
- data/spec/integration/knife/diff_spec.rb +536 -0
- data/spec/integration/knife/download_spec.rb +962 -0
- data/spec/integration/knife/list_spec.rb +633 -0
- data/spec/integration/knife/raw_spec.rb +166 -0
- data/spec/integration/knife/redirection_spec.rb +57 -0
- data/spec/integration/knife/show_spec.rb +158 -0
- data/spec/integration/knife/upload_spec.rb +1060 -0
- data/spec/integration/solo/solo_spec.rb +41 -0
- data/spec/spec_helper.rb +49 -13
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +33 -3
- data/spec/support/lib/chef/resource/cat.rb +3 -5
- data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
- data/spec/support/lib/chef/resource/zen_master.rb +8 -10
- data/spec/support/platform_helpers.rb +46 -13
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/diff_disabled.rb +10 -0
- data/spec/support/shared/functional/directory_resource.rb +129 -38
- data/spec/support/shared/functional/file_resource.rb +837 -71
- data/spec/support/shared/functional/securable_resource.rb +189 -58
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
- data/spec/support/shared/integration/integration_helper.rb +166 -0
- data/spec/support/shared/integration/knife_support.rb +171 -0
- data/spec/support/shared/unit/execute_resource.rb +125 -0
- data/spec/support/shared/unit/file_system_support.rb +70 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- data/spec/support/shared/unit/provider/file.rb +609 -0
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
- data/spec/support/shared/unit/script_resource.rb +52 -0
- data/spec/support/shared/unit/windows_script_resource.rb +48 -0
- data/spec/tiny_server.rb +13 -11
- data/spec/unit/api_client/registration_spec.rb +172 -0
- data/spec/unit/api_client_spec.rb +78 -156
- data/spec/unit/application/apply.rb +84 -0
- data/spec/unit/application/client_spec.rb +16 -14
- data/spec/unit/application/knife_spec.rb +17 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +113 -3
- data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
- data/spec/unit/chef_fs/diff_spec.rb +328 -0
- data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
- data/spec/unit/chef_fs/file_system_spec.rb +135 -0
- data/spec/unit/client_spec.rb +195 -23
- data/spec/unit/config_spec.rb +102 -51
- data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
- data/spec/unit/cookbook_loader_spec.rb +154 -91
- data/spec/unit/cookbook_manifest_spec.rb +81 -81
- data/spec/unit/cookbook_spec.rb +3 -20
- data/spec/unit/cookbook_version_spec.rb +23 -122
- data/spec/unit/daemon_spec.rb +24 -19
- data/spec/unit/data_bag_spec.rb +13 -4
- data/spec/unit/deprecation_spec.rb +86 -0
- data/spec/unit/digester_spec.rb +50 -0
- data/spec/unit/dsl/data_query_spec.rb +66 -0
- data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
- data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
- data/spec/unit/environment_spec.rb +94 -126
- data/spec/unit/exceptions_spec.rb +8 -4
- data/spec/unit/file_access_control_spec.rb +21 -1
- data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
- data/spec/unit/json_compat_spec.rb +8 -0
- data/spec/unit/knife/bootstrap_spec.rb +130 -29
- data/spec/unit/knife/configure_spec.rb +64 -45
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
- data/spec/unit/knife/cookbook_test_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +196 -124
- data/spec/unit/knife/data_bag_create_spec.rb +9 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
- data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
- data/spec/unit/knife/data_bag_show_spec.rb +11 -4
- data/spec/unit/knife/index_rebuild_spec.rb +96 -33
- data/spec/unit/knife/knife_help.rb +7 -7
- data/spec/unit/knife/node_edit_spec.rb +6 -33
- data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
- data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife/user_create_spec.rb +86 -0
- data/spec/unit/knife/user_delete_spec.rb +39 -0
- data/spec/unit/knife/user_edit_spec.rb +42 -0
- data/spec/unit/knife/user_list_spec.rb +32 -0
- data/spec/unit/knife/user_reregister_spec.rb +53 -0
- data/spec/unit/knife/user_show_spec.rb +41 -0
- data/spec/unit/knife_spec.rb +74 -0
- data/spec/unit/lwrp_spec.rb +102 -60
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +130 -791
- data/spec/unit/mixin/deprecation_spec.rb +23 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +145 -14
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node/attribute_spec.rb +273 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +418 -370
- data/spec/unit/platform_spec.rb +21 -8
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -187
- data/spec/unit/provider/cron/solaris_spec.rb +1 -1
- data/spec/unit/provider/deploy/revision_spec.rb +19 -11
- data/spec/unit/provider/deploy_spec.rb +2 -2
- data/spec/unit/provider/directory_spec.rb +99 -67
- data/spec/unit/provider/env_spec.rb +2 -2
- data/spec/unit/provider/execute_spec.rb +27 -1
- data/spec/unit/provider/file/content_spec.rb +101 -0
- data/spec/unit/provider/file_spec.rb +25 -475
- data/spec/unit/provider/git_spec.rb +224 -28
- data/spec/unit/provider/group/dscl_spec.rb +0 -36
- data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
- data/spec/unit/provider/group/groupadd_spec.rb +4 -3
- data/spec/unit/provider/group/groupmod_spec.rb +1 -0
- data/spec/unit/provider/group/pw_spec.rb +15 -12
- data/spec/unit/provider/group/usermod_spec.rb +9 -22
- data/spec/unit/provider/group/windows_spec.rb +8 -0
- data/spec/unit/provider/group_spec.rb +6 -28
- data/spec/unit/provider/http_request_spec.rb +28 -69
- data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
- data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
- data/spec/unit/provider/ifconfig_spec.rb +0 -33
- data/spec/unit/provider/mount/mount_spec.rb +33 -2
- data/spec/unit/provider/mount/windows_spec.rb +4 -1
- data/spec/unit/provider/mount_spec.rb +16 -6
- data/spec/unit/provider/ohai_spec.rb +4 -4
- data/spec/unit/provider/package/apt_spec.rb +0 -1
- data/spec/unit/provider/package/ips_spec.rb +0 -1
- data/spec/unit/provider/package/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +7 -9
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -7
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
- data/spec/unit/provider/remote_file/content_spec.rb +230 -0
- data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
- data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
- data/spec/unit/provider/remote_file/http_spec.rb +319 -0
- data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
- data/spec/unit/provider/remote_file_spec.rb +33 -259
- data/spec/unit/provider/route_spec.rb +29 -12
- data/spec/unit/provider/ruby_block_spec.rb +8 -0
- data/spec/unit/provider/service/arch_service_spec.rb +5 -5
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
- data/spec/unit/provider/service/init_service_spec.rb +27 -4
- data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
- data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +176 -207
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/simple_service_spec.rb +3 -3
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
- data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -160
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/solaris_spec.rb +39 -373
- data/spec/unit/provider/user/useradd_spec.rb +12 -379
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +376 -0
- data/spec/unit/resource/batch_spec.rb +48 -0
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
- data/spec/unit/resource/execute_spec.rb +3 -101
- data/spec/unit/resource/file_spec.rb +0 -5
- data/spec/unit/resource/group_spec.rb +9 -0
- data/spec/unit/resource/ifconfig_spec.rb +60 -1
- data/spec/unit/resource/link_spec.rb +1 -0
- data/spec/unit/resource/mount_spec.rb +37 -11
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +63 -25
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/script_spec.rb +13 -36
- data/spec/unit/resource/service_spec.rb +11 -0
- data/spec/unit/resource/template_spec.rb +111 -8
- data/spec/unit/resource/user_spec.rb +7 -0
- data/spec/unit/resource_collection_spec.rb +61 -32
- data/spec/unit/resource_reporter_spec.rb +115 -102
- data/spec/unit/resource_spec.rb +197 -5
- data/spec/unit/rest/auth_credentials_spec.rb +4 -21
- data/spec/unit/rest_spec.rb +134 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
- data/spec/unit/run_context_spec.rb +18 -4
- data/spec/unit/run_list_spec.rb +0 -209
- data/spec/unit/run_lock_spec.rb +37 -0
- data/spec/unit/runner_spec.rb +102 -3
- data/spec/unit/scan_access_control_spec.rb +8 -6
- data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
- data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
- data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- data/spec/unit/user_spec.rb +255 -0
- data/spec/unit/util/backup_spec.rb +149 -0
- data/spec/unit/util/diff_spec.rb +596 -0
- data/spec/unit/util/selinux_spec.rb +172 -0
- data/spec/unit/version/platform_spec.rb +61 -0
- data/spec/unit/version_constraint/platform_spec.rb +46 -0
- data/spec/unit/version_constraint_spec.rb +5 -0
- metadata +493 -264
- data/README.rdoc +0 -177
- data/distro/common/html/knife-recipe.1.html +0 -92
- data/lib/chef/certificate.rb +0 -161
- data/lib/chef/checksum.rb +0 -167
- data/lib/chef/checksum_cache.rb +0 -190
- data/lib/chef/cookbook_version_selector.rb +0 -168
- data/lib/chef/couchdb.rb +0 -246
- data/lib/chef/index_queue/amqp_client.rb +0 -116
- data/lib/chef/index_queue/consumer.rb +0 -76
- data/lib/chef/index_queue/indexable.rb +0 -109
- data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
- data/lib/chef/monkey_patches/dir.rb +0 -36
- data/lib/chef/monkey_patches/moneta.rb +0 -50
- data/lib/chef/monkey_patches/uri.rb +0 -70
- data/lib/chef/openid_registration.rb +0 -187
- data/lib/chef/solr_query.rb +0 -187
- data/lib/chef/solr_query/lucene.treetop +0 -150
- data/lib/chef/solr_query/lucene_nodes.rb +0 -285
- data/lib/chef/solr_query/query_transform.rb +0 -65
- data/lib/chef/solr_query/solr_http_request.rb +0 -132
- data/lib/chef/webui_user.rb +0 -231
- data/spec/data/mac_users/10.7-8.plist.xml +0 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
- data/spec/data/mac_users/10.7.plist.xml +0 -559
- data/spec/data/mac_users/10.7.shadow.xml +0 -11
- data/spec/data/mac_users/10.8.plist.xml +0 -559
- data/spec/data/mac_users/10.8.shadow.xml +0 -21
- data/spec/data/mac_users/10.9.plist.xml +0 -560
- data/spec/data/mac_users/10.9.shadow.xml +0 -21
- data/spec/functional/resource/base.rb +0 -40
- data/spec/functional/resource/group_spec.rb +0 -343
- data/spec/functional/resource/user/dscl_spec.rb +0 -199
- data/spec/unit/certificate_spec.rb +0 -76
- data/spec/unit/checksum_cache_spec.rb +0 -209
- data/spec/unit/checksum_spec.rb +0 -94
- data/spec/unit/couchdb_spec.rb +0 -274
- data/spec/unit/index_queue_spec.rb +0 -391
- data/spec/unit/mixin/language_spec.rb +0 -305
- data/spec/unit/openid_registration_spec.rb +0 -153
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
- data/spec/unit/solr_query/query_transform_spec.rb +0 -454
- data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
- data/spec/unit/solr_query_spec.rb +0 -203
- data/spec/unit/webui_user_spec.rb +0 -238
data/lib/chef/run_list.rb
CHANGED
@@ -155,8 +155,6 @@ class Chef
|
|
155
155
|
RunListExpansionFromDisk.new(environment, @run_list_items)
|
156
156
|
when 'server'
|
157
157
|
RunListExpansionFromAPI.new(environment, @run_list_items, opts[:rest])
|
158
|
-
when 'couchdb'
|
159
|
-
RunListExpansionFromCouchDB.new(environment, @run_list_items, opts[:couchdb])
|
160
158
|
end
|
161
159
|
end
|
162
160
|
|
@@ -21,7 +21,6 @@ require 'chef/mash'
|
|
21
21
|
require 'chef/mixin/deep_merge'
|
22
22
|
|
23
23
|
require 'chef/role'
|
24
|
-
require 'chef/couchdb'
|
25
24
|
require 'chef/rest'
|
26
25
|
|
27
26
|
class Chef
|
@@ -174,7 +173,7 @@ class Chef
|
|
174
173
|
class RunListExpansionFromAPI < RunListExpansion
|
175
174
|
|
176
175
|
def rest
|
177
|
-
@rest ||= (source || Chef::REST.new(Chef::Config[:
|
176
|
+
@rest ||= (source || Chef::REST.new(Chef::Config[:chef_server_url]))
|
178
177
|
end
|
179
178
|
|
180
179
|
def fetch_role(name, included_by)
|
@@ -188,19 +187,5 @@ class Chef
|
|
188
187
|
end
|
189
188
|
end
|
190
189
|
|
191
|
-
# Expand a run list from couchdb. Used in chef-server-api
|
192
|
-
class RunListExpansionFromCouchDB < RunListExpansion
|
193
|
-
|
194
|
-
def couchdb
|
195
|
-
source
|
196
|
-
end
|
197
|
-
|
198
|
-
def fetch_role(name, included_by)
|
199
|
-
Chef::Role.cdb_load(name, couchdb)
|
200
|
-
rescue Chef::Exceptions::CouchDBNotFound
|
201
|
-
role_not_found(name, included_by)
|
202
|
-
end
|
203
|
-
|
204
|
-
end
|
205
190
|
end
|
206
191
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
require 'chef/mixin/create_path'
|
19
|
+
require 'fcntl'
|
20
|
+
|
21
|
+
class Chef
|
22
|
+
|
23
|
+
# == Chef::RunLock
|
24
|
+
# Provides an interface for acquiring and releasing a system-wide exclusive
|
25
|
+
# lock.
|
26
|
+
#
|
27
|
+
# Used by Chef::Client to ensure only one instance of chef-client (or solo)
|
28
|
+
# is modifying the system at a time.
|
29
|
+
class RunLock
|
30
|
+
include Chef::Mixin::CreatePath
|
31
|
+
|
32
|
+
attr_reader :runlock
|
33
|
+
attr_reader :runlock_file
|
34
|
+
|
35
|
+
# Create a new instance of RunLock
|
36
|
+
# === Arguments
|
37
|
+
# * config::: This will generally be the `Chef::Config`, but any Hash-like
|
38
|
+
# object with Symbol keys will work. See 'Parameters' section.
|
39
|
+
# === Parameters/Config
|
40
|
+
# * :lockfile::: if set, this will be used as the full path to the lockfile.
|
41
|
+
# * :file_cache_path::: if `:lockfile` is not set, the lock file will be
|
42
|
+
# named "chef-client-running.pid" and be placed in the directory given by
|
43
|
+
# `:file_cache_path`
|
44
|
+
def initialize(config)
|
45
|
+
@runlock_file = config[:lockfile] || "#{config[:file_cache_path]}/chef-client-running.pid"
|
46
|
+
@runlock = nil
|
47
|
+
end
|
48
|
+
|
49
|
+
# Acquire the system-wide lock. Will block indefinitely if another process
|
50
|
+
# already has the lock.
|
51
|
+
#
|
52
|
+
# Each call to acquire should have a corresponding call to #release.
|
53
|
+
#
|
54
|
+
# The implementation is based on File#flock (see also: flock(2)).
|
55
|
+
def acquire
|
56
|
+
# ensure the runlock_file path exists
|
57
|
+
create_path(File.dirname(runlock_file))
|
58
|
+
@runlock = File.open(runlock_file,'w+')
|
59
|
+
# if we support FD_CLOEXEC (linux, !windows), then use it.
|
60
|
+
# NB: ruby-2.0.0-p195 sets FD_CLOEXEC by default, but not ruby-1.8.7/1.9.3
|
61
|
+
if Fcntl.const_defined?('F_SETFD') && Fcntl.const_defined?('FD_CLOEXEC')
|
62
|
+
runlock.fcntl(Fcntl::F_SETFD, runlock.fcntl(Fcntl::F_GETFD, 0) | Fcntl::FD_CLOEXEC)
|
63
|
+
end
|
64
|
+
unless runlock.flock(File::LOCK_EX|File::LOCK_NB)
|
65
|
+
# Another chef client running...
|
66
|
+
runpid = runlock.read.strip.chomp
|
67
|
+
Chef::Log.warn("Chef client #{runpid} is running, will wait for it to finish and then run.")
|
68
|
+
runlock.flock(File::LOCK_EX)
|
69
|
+
end
|
70
|
+
# We grabbed the run lock. Save the pid.
|
71
|
+
runlock.truncate(0)
|
72
|
+
runlock.rewind # truncate doesn't reset position to 0.
|
73
|
+
runlock.write(Process.pid.to_s)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Release the system-wide lock.
|
77
|
+
def release
|
78
|
+
if runlock
|
79
|
+
runlock.flock(File::LOCK_UN)
|
80
|
+
runlock.close
|
81
|
+
# Don't unlink the pid file, if another chef-client was waiting, it
|
82
|
+
# won't be recreated. Better to leave a "dead" pid file than not have
|
83
|
+
# it available if you need to break the lock.
|
84
|
+
reset
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def reset
|
91
|
+
@runlock = nil
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
data/lib/chef/runner.rb
CHANGED
@@ -18,10 +18,10 @@
|
|
18
18
|
# limitations under the License.
|
19
19
|
#
|
20
20
|
|
21
|
+
require 'chef/exceptions'
|
21
22
|
require 'chef/mixin/params_validate'
|
22
23
|
require 'chef/node'
|
23
24
|
require 'chef/resource_collection'
|
24
|
-
require 'chef/platform'
|
25
25
|
|
26
26
|
class Chef
|
27
27
|
# == Chef::Runner
|
@@ -81,15 +81,37 @@ class Chef
|
|
81
81
|
Array(resource.action).each {|action| run_action(resource, action)}
|
82
82
|
end
|
83
83
|
|
84
|
-
|
84
|
+
rescue Exception => e
|
85
|
+
Chef::Log.info "Running queued delayed notifications before re-raising exception"
|
86
|
+
run_delayed_notifications(e)
|
87
|
+
else
|
88
|
+
run_delayed_notifications(nil)
|
89
|
+
true
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
# Run all our :delayed actions
|
95
|
+
def run_delayed_notifications(error=nil)
|
96
|
+
collected_failures = Exceptions::MultipleFailures.new
|
97
|
+
collected_failures.client_run_failure(error) unless error.nil?
|
85
98
|
delayed_actions.each do |notification|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
99
|
+
result = run_delayed_notification(notification)
|
100
|
+
if result.kind_of?(Exception)
|
101
|
+
collected_failures.notification_failure(result)
|
102
|
+
end
|
90
103
|
end
|
104
|
+
collected_failures.raise!
|
105
|
+
end
|
91
106
|
|
107
|
+
def run_delayed_notification(notification)
|
108
|
+
Chef::Log.info( "#{notification.notifying_resource} sending #{notification.action}"\
|
109
|
+
" action to #{notification.resource} (delayed)")
|
110
|
+
# Struct of resource/action to call
|
111
|
+
run_action(notification.resource, notification.action, :delayed)
|
92
112
|
true
|
113
|
+
rescue Exception => e
|
114
|
+
e
|
93
115
|
end
|
94
116
|
end
|
95
117
|
end
|
data/lib/chef/sandbox.rb
CHANGED
@@ -1,153 +1,20 @@
|
|
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
|
-
require 'chef/log'
|
19
|
-
require 'uuidtools'
|
20
|
-
|
21
1
|
class Chef
|
22
2
|
class Sandbox
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
#
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
"language" => "javascript",
|
37
|
-
"views" => {
|
38
|
-
"all" => {
|
39
|
-
"map" => <<-EOJS
|
40
|
-
function(doc) {
|
41
|
-
if (doc.chef_type == "sandbox") {
|
42
|
-
emit(doc.guid, doc);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
EOJS
|
46
|
-
},
|
47
|
-
"all_id" => {
|
48
|
-
"map" => <<-EOJS
|
49
|
-
function(doc) {
|
50
|
-
if (doc.chef_type == "sandbox") {
|
51
|
-
emit(doc.guid, doc.guid);
|
52
|
-
}
|
53
|
-
}
|
54
|
-
EOJS
|
55
|
-
},
|
56
|
-
"all_incomplete" => {
|
57
|
-
"map" => <<-EOJS
|
58
|
-
function(doc) {
|
59
|
-
if (doc.chef_type == "sandbox" && !doc.is_completed) {
|
60
|
-
emit(doc.guid, doc.guid);
|
61
|
-
}
|
62
|
-
}
|
63
|
-
EOJS
|
64
|
-
},
|
65
|
-
"all_completed" => {
|
66
|
-
"map" => <<-EOJS
|
67
|
-
function(doc) {
|
68
|
-
if (doc.chef_type == "sandbox" && doc.is_completed) {
|
69
|
-
emit(doc.guid, doc.guid);
|
70
|
-
}
|
71
|
-
}
|
72
|
-
EOJS
|
73
|
-
},
|
74
|
-
}
|
75
|
-
}
|
76
|
-
|
77
|
-
# Creates a new Chef::Sandbox object.
|
3
|
+
# I DO NOTHING!!
|
4
|
+
|
5
|
+
# So, the reason we have a completely empty class here is so that
|
6
|
+
# Chef 11 clients do not choke when interacting with Chef 10
|
7
|
+
# servers. The original Chef::Sandbox class (that actually did
|
8
|
+
# things) has been removed since its functionality is no longer
|
9
|
+
# needed for Chef 11. However, since we still use the JSON gem
|
10
|
+
# and make use of its "auto-inflation" of classes (driven by the
|
11
|
+
# contents of the 'json_class' key in all of our JSON), any
|
12
|
+
# sandbox responses from a Chef 10 server to a Chef 11 client
|
13
|
+
# would cause knife to crash. The JSON gem would attempt to
|
14
|
+
# auto-inflate based on a "json_class": "Chef::Sandbox" hash
|
15
|
+
# entry, but would not be able to find a Chef::Sandbox class!
|
78
16
|
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
def initialize(guid=nil, couchdb=nil)
|
82
|
-
@guid = guid || UUIDTools::UUID.random_create.to_s.gsub(/\-/,'').downcase
|
83
|
-
@is_completed = false
|
84
|
-
@create_time = Time.now.iso8601
|
85
|
-
@checksums = Array.new
|
86
|
-
end
|
87
|
-
|
88
|
-
def include?(checksum)
|
89
|
-
@checksums.include?(checksum)
|
90
|
-
end
|
91
|
-
|
92
|
-
alias :member? :include?
|
93
|
-
|
94
|
-
def to_json(*a)
|
95
|
-
result = {
|
96
|
-
:guid => guid,
|
97
|
-
:name => name, # same as guid, used for id_map
|
98
|
-
:checksums => checksums,
|
99
|
-
:create_time => create_time,
|
100
|
-
:is_completed => is_completed,
|
101
|
-
:json_class => self.class.name,
|
102
|
-
:chef_type => 'sandbox'
|
103
|
-
}
|
104
|
-
result["_rev"] = @couchdb_rev if @couchdb_rev
|
105
|
-
result.to_json(*a)
|
106
|
-
end
|
107
|
-
|
108
|
-
def self.json_create(o)
|
109
|
-
sandbox = new(o['guid'])
|
110
|
-
sandbox.checksums = o['checksums']
|
111
|
-
sandbox.create_time = o['create_time']
|
112
|
-
sandbox.is_completed = o['is_completed']
|
113
|
-
if o.has_key?('_rev')
|
114
|
-
sandbox.couchdb_rev = o["_rev"]
|
115
|
-
o.delete("_rev")
|
116
|
-
end
|
117
|
-
if o.has_key?("_id")
|
118
|
-
sandbox.couchdb_id = o["_id"]
|
119
|
-
#sandbox.index_id = sandbox.couchdb_id
|
120
|
-
o.delete("_id")
|
121
|
-
end
|
122
|
-
sandbox
|
123
|
-
end
|
124
|
-
|
125
|
-
##
|
126
|
-
# Couchdb
|
127
|
-
##
|
128
|
-
|
129
|
-
def self.create_design_document(couchdb=nil)
|
130
|
-
(couchdb || Chef::CouchDB.new).create_design_document("sandboxes", DESIGN_DOCUMENT)
|
131
|
-
end
|
132
|
-
|
133
|
-
def self.cdb_list(inflate=false, couchdb=nil)
|
134
|
-
rs = (couchdb || Chef::CouchDB.new).list("sandboxes", inflate)
|
135
|
-
lookup = (inflate ? "value" : "key")
|
136
|
-
rs["rows"].collect { |r| r[lookup] }
|
137
|
-
end
|
138
|
-
|
139
|
-
def self.cdb_load(guid, couchdb=nil)
|
140
|
-
# Probably want to look for a view here at some point
|
141
|
-
(couchdb || Chef::CouchDB.new).load("sandbox", guid)
|
142
|
-
end
|
143
|
-
|
144
|
-
def cdb_destroy
|
145
|
-
(couchdb || Chef::CouchDB.new).delete("sandbox", guid, @couchdb_rev)
|
146
|
-
end
|
147
|
-
|
148
|
-
def cdb_save(couchdb=nil)
|
149
|
-
@couchdb_rev = (couchdb || Chef::CouchDB.new).store("sandbox", guid, self)["rev"]
|
150
|
-
end
|
151
|
-
|
17
|
+
# This is a workaround until such time as we can completely remove
|
18
|
+
# the reliance on the "json_class" field.
|
152
19
|
end
|
153
20
|
end
|
@@ -118,10 +118,8 @@ class Chef
|
|
118
118
|
|
119
119
|
def current_mode
|
120
120
|
case new_resource.mode
|
121
|
-
when String, nil
|
122
|
-
(stat.mode &
|
123
|
-
when Integer
|
124
|
-
stat.mode & 007777
|
121
|
+
when String, Integer, nil
|
122
|
+
"0#{(stat.mode & 07777).to_s(8)}"
|
125
123
|
else
|
126
124
|
Chef::Log.error("The `mode` parameter of the #@new_resource resource is set to an invalid value (#{new_resource.mode.inspect})")
|
127
125
|
raise ArgumentError, "Invalid value #{new_resource.mode.inspect} for `mode` on resource #@new_resource"
|
@@ -129,7 +127,12 @@ class Chef
|
|
129
127
|
end
|
130
128
|
|
131
129
|
def stat
|
132
|
-
@stat ||= @new_resource.instance_of?(Chef::Resource::Link)
|
130
|
+
@stat ||= if @new_resource.instance_of?(Chef::Resource::Link)
|
131
|
+
::File.lstat(@new_resource.path)
|
132
|
+
else
|
133
|
+
realpath = ::File.realpath(@new_resource.path)
|
134
|
+
::File.stat(realpath)
|
135
|
+
end
|
133
136
|
end
|
134
137
|
end
|
135
138
|
end
|
data/lib/chef/search/query.rb
CHANGED
@@ -31,7 +31,7 @@ class Chef
|
|
31
31
|
attr_accessor :rest
|
32
32
|
|
33
33
|
def initialize(url=nil)
|
34
|
-
@rest = Chef::REST.new(url ||Chef::Config[:
|
34
|
+
@rest = Chef::REST.new(url ||Chef::Config[:chef_server_url])
|
35
35
|
end
|
36
36
|
|
37
37
|
# Search Solr for objects of a given type, for a given query. If you give
|
@@ -53,7 +53,7 @@ class Chef
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def list_indexes
|
56
|
-
|
56
|
+
@rest.get_rest("search")
|
57
57
|
end
|
58
58
|
|
59
59
|
private
|
data/lib/chef/shef/ext.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Author::
|
3
|
-
# Copyright:: Copyright (c)
|
2
|
+
# Author:: Joshua Timberman (<joshua@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -16,576 +16,4 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require '
|
20
|
-
require 'chef/recipe'
|
21
|
-
require 'fileutils'
|
22
|
-
require 'chef/version'
|
23
|
-
require 'chef/shef/shef_session'
|
24
|
-
require 'chef/shef/model_wrapper'
|
25
|
-
require 'chef/shef/shef_rest'
|
26
|
-
require 'chef/json_compat'
|
27
|
-
|
28
|
-
module Shef
|
29
|
-
module Extensions
|
30
|
-
|
31
|
-
Help = Struct.new(:cmd, :desc, :explanation)
|
32
|
-
|
33
|
-
# Extensions to be included in every 'main' object in shef. These objects
|
34
|
-
# are extended with this module.
|
35
|
-
module ObjectCoreExtensions
|
36
|
-
|
37
|
-
def ensure_session_select_defined
|
38
|
-
# irb breaks if you prematurely define IRB::JobMangager
|
39
|
-
# so these methods need to be defined at the latest possible time.
|
40
|
-
unless jobs.respond_to?(:select_session_by_context)
|
41
|
-
def jobs.select_session_by_context(&block)
|
42
|
-
@jobs.select { |job| block.call(job[1].context.main)}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
unless jobs.respond_to?(:session_select)
|
47
|
-
def jobs.select_shef_session(target_context)
|
48
|
-
session = if target_context.kind_of?(Class)
|
49
|
-
select_session_by_context { |main| main.kind_of?(target_context) }
|
50
|
-
else
|
51
|
-
select_session_by_context { |main| main.equal?(target_context) }
|
52
|
-
end
|
53
|
-
Array(session.first)[1]
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def find_or_create_session_for(context_obj)
|
59
|
-
ensure_session_select_defined
|
60
|
-
if subsession = jobs.select_shef_session(context_obj)
|
61
|
-
jobs.switch(subsession)
|
62
|
-
else
|
63
|
-
irb(context_obj)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def help_banner
|
68
|
-
banner = []
|
69
|
-
banner << ""
|
70
|
-
banner << "Shef Help"
|
71
|
-
banner << "".ljust(80, "=")
|
72
|
-
banner << "| " + "Command".ljust(25) + "| " + "Description"
|
73
|
-
banner << "".ljust(80, "=")
|
74
|
-
|
75
|
-
self.all_help_descriptions.each do |help_text|
|
76
|
-
banner << "| " + help_text.cmd.ljust(25) + "| " + help_text.desc
|
77
|
-
end
|
78
|
-
banner << "".ljust(80, "=")
|
79
|
-
banner << "\n"
|
80
|
-
banner << "Use help(:command) to get detailed help with individual commands"
|
81
|
-
banner << "\n"
|
82
|
-
banner.join("\n")
|
83
|
-
end
|
84
|
-
|
85
|
-
def explain_command(method_name)
|
86
|
-
help = self.all_help_descriptions.find { |h| h.cmd.to_s == method_name.to_s }
|
87
|
-
if help
|
88
|
-
puts ""
|
89
|
-
puts "Command: #{method_name}"
|
90
|
-
puts "".ljust(80, "=")
|
91
|
-
puts help.explanation || help.desc
|
92
|
-
puts "".ljust(80, "=")
|
93
|
-
puts ""
|
94
|
-
else
|
95
|
-
puts ""
|
96
|
-
puts "command #{method_name} not found or no help available"
|
97
|
-
puts ""
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
# helpfully returns +:on+ so we can have sugary syntax like `tracing on'
|
102
|
-
def on
|
103
|
-
:on
|
104
|
-
end
|
105
|
-
|
106
|
-
# returns +:off+ so you can just do `tracing off'
|
107
|
-
def off
|
108
|
-
:off
|
109
|
-
end
|
110
|
-
|
111
|
-
def help_descriptions
|
112
|
-
@help_descriptions ||= []
|
113
|
-
end
|
114
|
-
|
115
|
-
def all_help_descriptions
|
116
|
-
help_descriptions
|
117
|
-
end
|
118
|
-
|
119
|
-
def desc(help_text)
|
120
|
-
@desc = help_text
|
121
|
-
end
|
122
|
-
|
123
|
-
def explain(explain_text)
|
124
|
-
@explain = explain_text
|
125
|
-
end
|
126
|
-
|
127
|
-
def subcommands(subcommand_help={})
|
128
|
-
@subcommand_help = subcommand_help
|
129
|
-
end
|
130
|
-
|
131
|
-
def singleton_method_added(mname)
|
132
|
-
if @desc
|
133
|
-
help_descriptions << Help.new(mname.to_s, @desc.to_s, @explain)
|
134
|
-
@desc, @explain = nil, nil
|
135
|
-
end
|
136
|
-
if @subcommand_help
|
137
|
-
@subcommand_help.each do |subcommand, text|
|
138
|
-
help_descriptions << Help.new("#{mname}.#{subcommand}", text.to_s, nil)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
@subcommand_help = {}
|
142
|
-
end
|
143
|
-
|
144
|
-
end
|
145
|
-
|
146
|
-
module String
|
147
|
-
def on_off_to_bool
|
148
|
-
case self
|
149
|
-
when "on"
|
150
|
-
true
|
151
|
-
when "off"
|
152
|
-
false
|
153
|
-
else
|
154
|
-
self
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
module Symbol
|
160
|
-
def on_off_to_bool
|
161
|
-
self.to_s.on_off_to_bool
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
module TrueClass
|
166
|
-
def to_on_off_str
|
167
|
-
"on"
|
168
|
-
end
|
169
|
-
|
170
|
-
def on_off_to_bool
|
171
|
-
self
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
module FalseClass
|
176
|
-
def to_on_off_str
|
177
|
-
"off"
|
178
|
-
end
|
179
|
-
|
180
|
-
def on_off_to_bool
|
181
|
-
self
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
# Methods that have associated help text need to be dynamically added
|
186
|
-
# to the main irb objects, so we define them in a proc and later
|
187
|
-
# instance_eval the proc in the object.
|
188
|
-
ObjectUIExtensions = Proc.new do
|
189
|
-
extend Shef::Extensions::ObjectCoreExtensions
|
190
|
-
|
191
|
-
desc "prints this help message"
|
192
|
-
explain(<<-E)
|
193
|
-
## SUMMARY ##
|
194
|
-
When called with no argument, +help+ prints a table of all shef commands. When
|
195
|
-
called with an argument COMMAND, +help+ prints a detailed explanation of the
|
196
|
-
command if available, or the description if no explanation is available.
|
197
|
-
E
|
198
|
-
def help(commmand=nil)
|
199
|
-
if commmand
|
200
|
-
explain_command(commmand)
|
201
|
-
else
|
202
|
-
puts help_banner
|
203
|
-
end
|
204
|
-
:ucanhaz_halp
|
205
|
-
end
|
206
|
-
alias :halp :help
|
207
|
-
|
208
|
-
desc "prints information about chef"
|
209
|
-
def version
|
210
|
-
puts "This is shef, the Chef shell.\n" +
|
211
|
-
" Chef Version: #{::Chef::VERSION}\n" +
|
212
|
-
" http://www.opscode.com/chef\n" +
|
213
|
-
" http://wiki.opscode.com/display/chef/Home"
|
214
|
-
:ucanhaz_automation
|
215
|
-
end
|
216
|
-
alias :shef :version
|
217
|
-
|
218
|
-
desc "switch to recipe mode"
|
219
|
-
def recipe
|
220
|
-
find_or_create_session_for Shef.session.recipe
|
221
|
-
:recipe
|
222
|
-
end
|
223
|
-
|
224
|
-
desc "switch to attributes mode"
|
225
|
-
def attributes
|
226
|
-
find_or_create_session_for Shef.session.node
|
227
|
-
:attributes
|
228
|
-
end
|
229
|
-
|
230
|
-
desc "run chef using the current recipe"
|
231
|
-
def run_chef
|
232
|
-
Chef::Log.level = :debug
|
233
|
-
session = Shef.session
|
234
|
-
runrun = Chef::Runner.new(session.run_context).converge
|
235
|
-
Chef::Log.level = :info
|
236
|
-
runrun
|
237
|
-
end
|
238
|
-
|
239
|
-
desc "returns an object to control a paused chef run"
|
240
|
-
subcommands :resume => "resume the chef run",
|
241
|
-
:step => "run only the next resource",
|
242
|
-
:skip_back => "move back in the run list",
|
243
|
-
:skip_forward => "move forward in the run list"
|
244
|
-
def chef_run
|
245
|
-
Shef.session.resource_collection.iterator
|
246
|
-
end
|
247
|
-
|
248
|
-
desc "resets the current recipe"
|
249
|
-
def reset
|
250
|
-
Shef.session.reset!
|
251
|
-
end
|
252
|
-
|
253
|
-
desc "assume the identity of another node."
|
254
|
-
def become_node(node_name)
|
255
|
-
Shef::DoppelGangerSession.instance.assume_identity(node_name)
|
256
|
-
:doppelganger
|
257
|
-
end
|
258
|
-
alias :doppelganger :become_node
|
259
|
-
|
260
|
-
desc "turns printout of return values on or off"
|
261
|
-
def echo(on_or_off)
|
262
|
-
conf.echo = on_or_off.on_off_to_bool
|
263
|
-
end
|
264
|
-
|
265
|
-
desc "says if echo is on or off"
|
266
|
-
def echo?
|
267
|
-
puts "echo is #{conf.echo.to_on_off_str}"
|
268
|
-
end
|
269
|
-
|
270
|
-
desc "turns on or off tracing of execution. *verbose*"
|
271
|
-
def tracing(on_or_off)
|
272
|
-
conf.use_tracer = on_or_off.on_off_to_bool
|
273
|
-
tracing?
|
274
|
-
end
|
275
|
-
alias :trace :tracing
|
276
|
-
|
277
|
-
desc "says if tracing is on or off"
|
278
|
-
def tracing?
|
279
|
-
puts "tracing is #{conf.use_tracer.to_on_off_str}"
|
280
|
-
end
|
281
|
-
alias :trace? :tracing?
|
282
|
-
|
283
|
-
desc "simple ls style command"
|
284
|
-
def ls(directory)
|
285
|
-
Dir.entries(directory)
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
MainContextExtensions = Proc.new do
|
290
|
-
desc "returns the current node (i.e., this host)"
|
291
|
-
def node
|
292
|
-
Shef.session.node
|
293
|
-
end
|
294
|
-
|
295
|
-
desc "pretty print the node's attributes"
|
296
|
-
def ohai(key=nil)
|
297
|
-
pp(key ? node.attribute[key] : node.attribute)
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
RESTApiExtensions = Proc.new do
|
302
|
-
desc "edit an object in your EDITOR"
|
303
|
-
explain(<<-E)
|
304
|
-
## SUMMARY ##
|
305
|
-
+edit(object)+ allows you to edit any object that can be converted to JSON.
|
306
|
-
When finished editing, this method will return the edited object:
|
307
|
-
|
308
|
-
new_node = edit(existing_node)
|
309
|
-
|
310
|
-
## EDITOR SELECTION ##
|
311
|
-
Shef looks for an editor using the following logic
|
312
|
-
1. Looks for an EDITOR set by Shef.editor = "EDITOR"
|
313
|
-
2. Looks for an EDITOR configured in your shef config file
|
314
|
-
3. Uses the value of the EDITOR environment variable
|
315
|
-
E
|
316
|
-
def edit(object)
|
317
|
-
unless Shef.editor
|
318
|
-
puts "Please set your editor with Shef.editor = \"vim|emacs|mate|ed\""
|
319
|
-
return :failburger
|
320
|
-
end
|
321
|
-
|
322
|
-
filename = "shef-edit-#{object.class.name}-"
|
323
|
-
if object.respond_to?(:name)
|
324
|
-
filename += object.name
|
325
|
-
elsif object.respond_to?(:id)
|
326
|
-
filename += object.id
|
327
|
-
end
|
328
|
-
|
329
|
-
edited_data = Tempfile.open([filename, ".js"]) do |tempfile|
|
330
|
-
tempfile.sync = true
|
331
|
-
tempfile.puts Chef::JSONCompat.to_json(object)
|
332
|
-
system("#{Shef.editor.to_s} #{tempfile.path}")
|
333
|
-
tempfile.rewind
|
334
|
-
tempfile.read
|
335
|
-
end
|
336
|
-
|
337
|
-
Chef::JSONCompat.from_json(edited_data)
|
338
|
-
end
|
339
|
-
|
340
|
-
desc "Find and edit API clients"
|
341
|
-
explain(<<-E)
|
342
|
-
## SUMMARY ##
|
343
|
-
+clients+ allows you to query you chef server for information about your api
|
344
|
-
clients.
|
345
|
-
|
346
|
-
## LIST ALL CLIENTS ##
|
347
|
-
To see all clients on the system, use
|
348
|
-
|
349
|
-
clients.all #=> [<Chef::ApiClient...>, ...]
|
350
|
-
|
351
|
-
If the output from all is too verbose, or you're only interested in a specific
|
352
|
-
value from each of the objects, you can give a code block to +all+:
|
353
|
-
|
354
|
-
clients.all { |client| client.name } #=> [CLIENT1_NAME, CLIENT2_NAME, ...]
|
355
|
-
|
356
|
-
## SHOW ONE CLIENT ##
|
357
|
-
To see a specific client, use
|
358
|
-
|
359
|
-
clients.show(CLIENT_NAME)
|
360
|
-
|
361
|
-
## SEARCH FOR CLIENTS ##
|
362
|
-
You can also search for clients using +find+ or +search+. You can use the
|
363
|
-
familiar string search syntax:
|
364
|
-
|
365
|
-
clients.search("KEY:VALUE")
|
366
|
-
|
367
|
-
Just as the +all+ subcommand, the +search+ subcommand can use a code block to
|
368
|
-
filter or transform the information returned from the search:
|
369
|
-
|
370
|
-
clients.search("KEY:VALUE") { |c| c.name }
|
371
|
-
|
372
|
-
You can also use a Hash based syntax, multiple search conditions will be
|
373
|
-
joined with AND.
|
374
|
-
|
375
|
-
clients.find :KEY => :VALUE, :KEY2 => :VALUE2, ...
|
376
|
-
|
377
|
-
## BULK-EDIT CLIENTS ##
|
378
|
-
**BE CAREFUL, THIS IS DESTRUCTIVE**
|
379
|
-
You can bulk edit API Clients using the +transform+ subcommand, which requires
|
380
|
-
a code block. Each client will be saved after the code block is run. If the
|
381
|
-
code block returns +nil+ or +false+, that client will be skipped:
|
382
|
-
|
383
|
-
clients.transform("*:*") do |client|
|
384
|
-
if client.name =~ /borat/i
|
385
|
-
client.admin(false)
|
386
|
-
true
|
387
|
-
else
|
388
|
-
nil
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
This will strip the admin privileges from any client named after borat.
|
393
|
-
E
|
394
|
-
subcommands :all => "list all api clients",
|
395
|
-
:show => "load an api client by name",
|
396
|
-
:search => "search for API clients",
|
397
|
-
:transform => "edit all api clients via a code block and save them"
|
398
|
-
def clients
|
399
|
-
@clients ||= Shef::ModelWrapper.new(Chef::ApiClient, :client)
|
400
|
-
end
|
401
|
-
|
402
|
-
desc "Find and edit cookbooks"
|
403
|
-
subcommands :all => "list all cookbooks",
|
404
|
-
:show => "load a cookbook by name",
|
405
|
-
:transform => "edit all cookbooks via a code block and save them"
|
406
|
-
def cookbooks
|
407
|
-
@cookbooks ||= Shef::ModelWrapper.new(Chef::CookbookVersion)
|
408
|
-
end
|
409
|
-
|
410
|
-
desc "Find and edit nodes via the API"
|
411
|
-
explain(<<-E)
|
412
|
-
## SUMMARY ##
|
413
|
-
+nodes+ Allows you to query your chef server for information about your nodes.
|
414
|
-
|
415
|
-
## LIST ALL NODES ##
|
416
|
-
You can list all nodes using +all+ or +list+
|
417
|
-
|
418
|
-
nodes.all #=> [<Chef::Node...>, <Chef::Node...>, ...]
|
419
|
-
|
420
|
-
To limit the information returned for each node, pass a code block to the +all+
|
421
|
-
subcommand:
|
422
|
-
|
423
|
-
nodes.all { |node| node.name } #=> [NODE1_NAME, NODE2_NAME, ...]
|
424
|
-
|
425
|
-
## SHOW ONE NODE ##
|
426
|
-
You can show the data for a single node using the +show+ subcommand:
|
427
|
-
|
428
|
-
nodes.show("NODE_NAME") => <Chef::Node @name="NODE_NAME" ...>
|
429
|
-
|
430
|
-
## SEARCH FOR NODES ##
|
431
|
-
You can search for nodes using the +search+ or +find+ subcommands:
|
432
|
-
|
433
|
-
nodes.find(:name => "app*") #=> [<Chef::Node @name="app1.example.com" ...>, ...]
|
434
|
-
|
435
|
-
Similarly to +all+, you can pass a code block to limit or transform the
|
436
|
-
information returned:
|
437
|
-
|
438
|
-
nodes.find(:name => "app#") { |node| node.ec2 }
|
439
|
-
|
440
|
-
## BULK EDIT NODES ##
|
441
|
-
**BE CAREFUL, THIS OPERATION IS DESTRUCTIVE**
|
442
|
-
|
443
|
-
Bulk edit nodes by passing a code block to the +transform+ or +bulk_edit+
|
444
|
-
subcommand. The block will be applied to each matching node, and then the node
|
445
|
-
will be saved. If the block returns +nil+ or +false+, that node will be
|
446
|
-
skipped.
|
447
|
-
|
448
|
-
nodes.transform do |node|
|
449
|
-
if node.fqdn =~ /.*\\.preprod\\.example\\.com/
|
450
|
-
node.set[:environment] = "preprod"
|
451
|
-
end
|
452
|
-
end
|
453
|
-
|
454
|
-
This will assign the attribute to every node with a FQDN matching the regex.
|
455
|
-
E
|
456
|
-
subcommands :all => "list all nodes",
|
457
|
-
:show => "load a node by name",
|
458
|
-
:search => "search for nodes",
|
459
|
-
:transform => "edit all nodes via a code block and save them"
|
460
|
-
def nodes
|
461
|
-
@nodes ||= Shef::ModelWrapper.new(Chef::Node)
|
462
|
-
end
|
463
|
-
|
464
|
-
desc "Find and edit roles via the API"
|
465
|
-
explain(<<-E)
|
466
|
-
## SUMMARY ##
|
467
|
-
+roles+ allows you to query and edit roles on your Chef server.
|
468
|
-
|
469
|
-
## SUBCOMMANDS ##
|
470
|
-
* all (list)
|
471
|
-
* show (load)
|
472
|
-
* search (find)
|
473
|
-
* transform (bulk_edit)
|
474
|
-
|
475
|
-
## SEE ALSO ##
|
476
|
-
See the help for +nodes+ for more information about the subcommands.
|
477
|
-
E
|
478
|
-
subcommands :all => "list all roles",
|
479
|
-
:show => "load a role by name",
|
480
|
-
:search => "search for roles",
|
481
|
-
:transform => "edit all roles via a code block and save them"
|
482
|
-
def roles
|
483
|
-
@roles ||= Shef::ModelWrapper.new(Chef::Role)
|
484
|
-
end
|
485
|
-
|
486
|
-
desc "Find and edit +databag_name+ via the api"
|
487
|
-
explain(<<-E)
|
488
|
-
## SUMMARY ##
|
489
|
-
+databags(DATABAG_NAME)+ allows you to query and edit data bag items on your
|
490
|
-
Chef server. Unlike other commands for working with data on the server,
|
491
|
-
+databags+ requires the databag name as an argument, for example:
|
492
|
-
databags(:users).all
|
493
|
-
|
494
|
-
## SUBCOMMANDS ##
|
495
|
-
* all (list)
|
496
|
-
* show (load)
|
497
|
-
* search (find)
|
498
|
-
* transform (bulk_edit)
|
499
|
-
|
500
|
-
## SEE ALSO ##
|
501
|
-
See the help for +nodes+ for more information about the subcommands.
|
502
|
-
|
503
|
-
E
|
504
|
-
subcommands :all => "list all items in the data bag",
|
505
|
-
:show => "load a data bag item by id",
|
506
|
-
:search => "search for items in the data bag",
|
507
|
-
:transform => "edit all items via a code block and save them"
|
508
|
-
def databags(databag_name)
|
509
|
-
@named_databags_wrappers ||= {}
|
510
|
-
@named_databags_wrappers[databag_name] ||= Shef::NamedDataBagWrapper.new(databag_name)
|
511
|
-
end
|
512
|
-
|
513
|
-
desc "Find and edit environments via the API"
|
514
|
-
explain(<<-E)
|
515
|
-
## SUMMARY ##
|
516
|
-
+environments+ allows you to query and edit environments on your Chef server.
|
517
|
-
|
518
|
-
## SUBCOMMANDS ##
|
519
|
-
* all (list)
|
520
|
-
* show (load)
|
521
|
-
* search (find)
|
522
|
-
* transform (bulk_edit)
|
523
|
-
|
524
|
-
## SEE ALSO ##
|
525
|
-
See the help for +nodes+ for more information about the subcommands.
|
526
|
-
E
|
527
|
-
subcommands :all => "list all environments",
|
528
|
-
:show => "load an environment by name",
|
529
|
-
:search => "search for environments",
|
530
|
-
:transform => "edit all environments via a code block and save them"
|
531
|
-
def environments
|
532
|
-
@environments ||= Shef::ModelWrapper.new(Chef::Environment)
|
533
|
-
end
|
534
|
-
|
535
|
-
desc "A REST Client configured to authenticate with the API"
|
536
|
-
def api
|
537
|
-
@rest = Shef::ShefREST.new(Chef::Config[:chef_server_url])
|
538
|
-
end
|
539
|
-
|
540
|
-
end
|
541
|
-
|
542
|
-
RecipeUIExtensions = Proc.new do
|
543
|
-
alias :original_resources :resources
|
544
|
-
|
545
|
-
desc "list all the resources on the current recipe"
|
546
|
-
def resources(*args)
|
547
|
-
if args.empty?
|
548
|
-
pp run_context.resource_collection.instance_variable_get(:@resources_by_name).keys
|
549
|
-
else
|
550
|
-
pp resources = original_resources(*args)
|
551
|
-
resources
|
552
|
-
end
|
553
|
-
end
|
554
|
-
end
|
555
|
-
|
556
|
-
def self.extend_context_object(obj)
|
557
|
-
obj.instance_eval(&ObjectUIExtensions)
|
558
|
-
obj.instance_eval(&MainContextExtensions)
|
559
|
-
obj.instance_eval(&RESTApiExtensions)
|
560
|
-
obj.extend(FileUtils)
|
561
|
-
obj.extend(Chef::Mixin::Language)
|
562
|
-
end
|
563
|
-
|
564
|
-
def self.extend_context_node(node_obj)
|
565
|
-
node_obj.instance_eval(&ObjectUIExtensions)
|
566
|
-
end
|
567
|
-
|
568
|
-
def self.extend_context_recipe(recipe_obj)
|
569
|
-
recipe_obj.instance_eval(&ObjectUIExtensions)
|
570
|
-
recipe_obj.instance_eval(&RecipeUIExtensions)
|
571
|
-
end
|
572
|
-
|
573
|
-
end
|
574
|
-
end
|
575
|
-
|
576
|
-
class String
|
577
|
-
include Shef::Extensions::String
|
578
|
-
end
|
579
|
-
|
580
|
-
class Symbol
|
581
|
-
include Shef::Extensions::Symbol
|
582
|
-
end
|
583
|
-
|
584
|
-
class TrueClass
|
585
|
-
include Shef::Extensions::TrueClass
|
586
|
-
end
|
587
|
-
|
588
|
-
class FalseClass
|
589
|
-
include Shef::Extensions::FalseClass
|
590
|
-
end
|
591
|
-
|
19
|
+
require 'chef/shell/ext'
|