chef 11.4.4 → 11.6.0.hotfix.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +1 -1
- data/Rakefile +18 -1
- data/bin/chef-service-manager +37 -0
- 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/chef-shell.1.html +4 -4
- data/distro/common/html/chef-solo.8.html +12 -18
- data/distro/common/html/chef-solr.8.html +4 -4
- 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 +7 -10
- data/distro/common/html/knife-data-bag.1.html +7 -10
- data/distro/common/html/knife-environment.1.html +6 -8
- data/distro/common/html/knife-exec.1.html +4 -4
- 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 +4 -4
- data/distro/common/man/man1/chef-shell.1 +1 -1
- data/distro/common/man/man1/knife-bootstrap.1 +1 -1
- data/distro/common/man/man1/knife-client.1 +1 -1
- 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 +2 -15
- data/distro/common/man/man1/knife-data-bag.1 +2 -15
- data/distro/common/man/man1/knife-environment.1 +2 -12
- data/distro/common/man/man1/knife-exec.1 +1 -1
- 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 +1 -1
- 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 +4 -36
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/debian/etc/init.d/chef-client +4 -2
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +1 -1
- data/lib/chef/application.rb +5 -12
- data/lib/chef/application/apply.rb +2 -0
- data/lib/chef/application/client.rb +12 -12
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +4 -5
- data/lib/chef/application/windows_service.rb +113 -56
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/chef_fs.rb +2 -4
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +145 -93
- 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_system.rb +195 -127
- 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_object.rb +98 -39
- 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 +14 -63
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +93 -3
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +35 -9
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +67 -32
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +13 -6
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +102 -21
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +12 -21
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +14 -8
- 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 +8 -8
- data/lib/chef/chef_fs/file_system/file_system_error.rb +3 -1
- 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 +2 -2
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +17 -9
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
- data/lib/chef/chef_fs/file_system/not_found_error.rb +2 -2
- 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 +42 -13
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +81 -27
- data/lib/chef/chef_fs/knife.rb +68 -29
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +29 -3
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +46 -20
- data/lib/chef/config.rb +59 -61
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/synchronizer.rb +8 -6
- data/lib/chef/cookbook/syntax_check.rb +17 -2
- data/lib/chef/cookbook_uploader.rb +10 -1
- data/lib/chef/cookbook_version.rb +0 -109
- data/lib/chef/data_bag.rb +15 -6
- 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/encrypted_data_bag_item.rb +153 -61
- data/lib/chef/environment.rb +34 -3
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +27 -2
- 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/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/registration_error_inspector.rb +4 -0
- data/lib/chef/json_compat.rb +3 -0
- data/lib/chef/knife.rb +12 -3
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/centos5-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/chef-full.erb +4 -4
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +3 -3
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +3 -3
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +1 -0
- data/lib/chef/knife/cookbook_upload.rb +4 -9
- data/lib/chef/knife/core/bootstrap_context.rb +10 -4
- data/lib/chef/knife/core/generic_presenter.rb +16 -0
- data/lib/chef/knife/core/node_editor.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/ui.rb +19 -4
- data/lib/chef/knife/delete.rb +76 -9
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +22 -5
- data/lib/chef/knife/download.rb +16 -3
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -7
- data/lib/chef/knife/list.rb +91 -47
- 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 +20 -64
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +5 -6
- data/lib/chef/knife/show.rb +34 -11
- data/lib/chef/knife/ssh.rb +8 -0
- data/lib/chef/knife/upload.rb +23 -4
- data/lib/chef/knife/user_show.rb +2 -5
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language_include_recipe.rb +1 -1
- data/lib/chef/mixin/params_validate.rb +19 -9
- data/lib/chef/mixin/template.rb +126 -36
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/monkey_patches/file.rb +26 -0
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +4 -0
- data/lib/chef/platform.rb +4 -490
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{monkey_patches/dir.rb → platform/query_helpers.rb} +25 -19
- data/lib/chef/provider.rb +12 -9
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/cookbook_file.rb +9 -78
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +24 -20
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +19 -22
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +299 -217
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- data/lib/chef/provider/group/usermod.rb +2 -2
- 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 +10 -3
- 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/portage.rb +9 -4
- data/lib/chef/provider/package/rubygems.rb +45 -10
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/yum.rb +19 -12
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/remote_directory.rb +5 -6
- data/lib/chef/provider/remote_file.rb +12 -108
- 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/script.rb +14 -2
- data/lib/chef/provider/service/macosx.rb +16 -10
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -78
- data/lib/chef/provider/template/content.rb +61 -0
- data/lib/chef/provider/user/solaris.rb +90 -0
- data/lib/chef/provider/user/useradd.rb +76 -63
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +16 -0
- data/lib/chef/resource.rb +23 -2
- data/lib/chef/resource/batch.rb +31 -0
- 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/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +1 -1
- data/lib/chef/resource/mount.rb +29 -2
- data/lib/chef/resource/powershell_script.rb +31 -0
- data/lib/chef/resource/remote_file.rb +47 -1
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +45 -11
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/rest.rb +13 -4
- data/lib/chef/rest/rest_request.rb +5 -1
- data/lib/chef/run_context/cookbook_compiler.rb +3 -3
- data/lib/chef/run_list/run_list_expansion.rb +1 -1
- data/lib/chef/run_lock.rb +7 -1
- data/lib/chef/runner.rb +0 -1
- data/lib/chef/scan_access_control.rb +6 -1
- data/lib/chef/search/query.rb +2 -2
- data/lib/chef/shell/shell_session.rb +2 -2
- 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_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/version_constraint/platform.rb +26 -0
- data/lib/chef/win32/api/file.rb +8 -2
- 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/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/remotesubdir/.a_dotfile +1 -0
- 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-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
- data/spec/data/knife_subcommand/test_yourself.rb +8 -0
- data/spec/data/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -1
- data/spec/data/remote_file/nyan_cat.png.gz +0 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/exec_spec.rb +2 -2
- 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 +2 -3
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +2 -2
- data/spec/functional/resource/file_spec.rb +17 -1
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +422 -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 +8 -4
- data/spec/functional/resource/remote_directory_spec.rb +2 -2
- data/spec/functional/resource/remote_file_spec.rb +97 -29
- data/spec/functional/resource/template_spec.rb +173 -17
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +5 -0
- data/spec/functional/shell_spec.rb +2 -1
- 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 +55 -1
- data/spec/support/chef_helpers.rb +32 -0
- data/spec/support/platform_helpers.rb +40 -0
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/directory_resource.rb +43 -16
- data/spec/support/shared/functional/file_resource.rb +661 -20
- data/spec/support/shared/functional/securable_resource.rb +109 -8
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +39 -31
- 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 +8 -48
- 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/application/client_spec.rb +39 -1
- data/spec/unit/application/knife_spec.rb +12 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +57 -2
- data/spec/unit/chef_fs/diff_spec.rb +30 -31
- data/spec/unit/chef_fs/file_pattern_spec.rb +2 -2
- data/spec/unit/chef_fs/file_system_spec.rb +2 -3
- data/spec/unit/client_spec.rb +20 -1
- data/spec/unit/config_spec.rb +70 -52
- data/spec/unit/cookbook/synchronizer_spec.rb +49 -1
- data/spec/unit/cookbook/syntax_check_spec.rb +28 -3
- data/spec/unit/cookbook_loader_spec.rb +3 -2
- data/spec/unit/daemon_spec.rb +7 -7
- data/spec/unit/data_bag_spec.rb +7 -0
- data/spec/unit/deprecation_spec.rb +86 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +183 -88
- data/spec/unit/environment_spec.rb +98 -0
- data/spec/unit/exceptions_spec.rb +6 -1
- 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 +3 -2
- data/spec/unit/knife/bootstrap_spec.rb +128 -29
- data/spec/unit/knife/configure_spec.rb +42 -26
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- data/spec/unit/knife/cookbook_upload_spec.rb +8 -4
- data/spec/unit/knife/core/bootstrap_context_spec.rb +78 -61
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +41 -0
- data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife_spec.rb +21 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +1 -0
- data/spec/unit/mixin/params_validate_spec.rb +35 -0
- data/spec/unit/mixin/template_spec.rb +69 -57
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node_spec.rb +7 -0
- data/spec/unit/platform_spec.rb +15 -1
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -183
- 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 +23 -23
- 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 -484
- data/spec/unit/provider/git_spec.rb +224 -28
- data/spec/unit/provider/group/usermod_spec.rb +3 -1
- 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/package/portage_spec.rb +44 -0
- data/spec/unit/provider/package/rubygems_spec.rb +44 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/yum_spec.rb +36 -39
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +0 -4
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/remote_directory_spec.rb +0 -4
- 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 -295
- data/spec/unit/provider/route_spec.rb +25 -9
- data/spec/unit/provider/service/macosx_spec.rb +176 -152
- 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 +2 -2
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -184
- data/spec/unit/provider/user/solaris_spec.rb +80 -0
- data/spec/unit/provider/user/useradd_spec.rb +12 -358
- 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 -0
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/remote_file_spec.rb +44 -4
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/script_spec.rb +13 -36
- 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 +170 -1
- data/spec/unit/rest/auth_credentials_spec.rb +2 -2
- data/spec/unit/rest_spec.rb +6 -2
- data/spec/unit/run_context/cookbook_compiler_spec.rb +9 -0
- data/spec/unit/runner_spec.rb +1 -1
- data/spec/unit/scan_access_control_spec.rb +4 -2
- data/spec/unit/shell/shell_session_spec.rb +15 -2
- 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 +233 -10
- data/lib/chef/chef_fs/file_system/data_bag_item.rb +0 -59
- data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +0 -237
- data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +0 -568
- data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +0 -220
data/lib/chef/log.rb
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
# limitations under the License.
|
|
19
19
|
|
|
20
20
|
require 'logger'
|
|
21
|
+
require 'chef/monologger'
|
|
21
22
|
require 'mixlib/log'
|
|
22
23
|
|
|
23
24
|
class Chef
|
|
@@ -25,8 +26,7 @@ class Chef
|
|
|
25
26
|
extend Mixlib::Log
|
|
26
27
|
|
|
27
28
|
# Force initialization of the primary log device (@logger)
|
|
28
|
-
init
|
|
29
|
-
|
|
29
|
+
init(MonoLogger.new(STDOUT))
|
|
30
30
|
|
|
31
31
|
class Formatter
|
|
32
32
|
def self.show_time=(*args)
|
|
@@ -25,15 +25,6 @@ class Chef
|
|
|
25
25
|
def file_class
|
|
26
26
|
@host_os_file ||= if Chef::Platform.windows?
|
|
27
27
|
require 'chef/win32/file'
|
|
28
|
-
begin
|
|
29
|
-
Chef::ReservedNames::Win32::File.verify_links_supported!
|
|
30
|
-
rescue Chef::Exceptions::Win32APIFunctionNotImplemented => e
|
|
31
|
-
message = "Link resource is not supported on this version of Windows"
|
|
32
|
-
message << ": #{node[:kernel][:name]}" if node
|
|
33
|
-
message << " (#{node[:platform_version]})" if node
|
|
34
|
-
Chef::Log.fatal(message)
|
|
35
|
-
raise e
|
|
36
|
-
end
|
|
37
28
|
Chef::ReservedNames::Win32::File
|
|
38
29
|
else
|
|
39
30
|
::File
|
|
@@ -23,7 +23,7 @@ class Chef
|
|
|
23
23
|
module Mixin
|
|
24
24
|
|
|
25
25
|
deprecate_constant(:LanguageIncludeRecipe, Chef::DSL::IncludeRecipe, <<-EOM)
|
|
26
|
-
Chef::Mixin::LanguageIncludeRecipe is deprecated, use Chef::DSL::
|
|
26
|
+
Chef::Mixin::LanguageIncludeRecipe is deprecated, use Chef::DSL::IncludeRecipe
|
|
27
27
|
instead.
|
|
28
28
|
EOM
|
|
29
29
|
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
|
|
18
18
|
class Chef
|
|
19
|
-
|
|
19
|
+
class DelayedEvaluator < Proc
|
|
20
|
+
end
|
|
20
21
|
module Mixin
|
|
21
22
|
module ParamsValidate
|
|
22
23
|
|
|
@@ -75,18 +76,27 @@ class Chef
|
|
|
75
76
|
end
|
|
76
77
|
opts
|
|
77
78
|
end
|
|
78
|
-
|
|
79
|
+
|
|
80
|
+
def lazy(&block)
|
|
81
|
+
DelayedEvaluator.new(&block)
|
|
82
|
+
end
|
|
83
|
+
|
|
79
84
|
def set_or_return(symbol, arg, validation)
|
|
80
85
|
iv_symbol = "@#{symbol.to_s}".to_sym
|
|
81
|
-
map = {
|
|
82
|
-
symbol => validation
|
|
83
|
-
}
|
|
84
|
-
|
|
85
86
|
if arg == nil && self.instance_variable_defined?(iv_symbol) == true
|
|
86
|
-
self.instance_variable_get(iv_symbol)
|
|
87
|
+
ivar = self.instance_variable_get(iv_symbol)
|
|
88
|
+
if(ivar.is_a?(DelayedEvaluator))
|
|
89
|
+
validate({ symbol => ivar.call }, { symbol => validation })[symbol]
|
|
90
|
+
else
|
|
91
|
+
ivar
|
|
92
|
+
end
|
|
87
93
|
else
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
if(arg.is_a?(DelayedEvaluator))
|
|
95
|
+
val = arg
|
|
96
|
+
else
|
|
97
|
+
val = validate({ symbol => arg }, { symbol => validation })[symbol]
|
|
98
|
+
end
|
|
99
|
+
self.instance_variable_set(iv_symbol, val)
|
|
90
100
|
end
|
|
91
101
|
end
|
|
92
102
|
|
data/lib/chef/mixin/template.rb
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -22,8 +22,52 @@ require 'erubis'
|
|
|
22
22
|
class Chef
|
|
23
23
|
module Mixin
|
|
24
24
|
module Template
|
|
25
|
-
|
|
25
|
+
|
|
26
|
+
# A compatibility wrapper around IO.binread so it works on Ruby 1.8.7.
|
|
27
|
+
# --
|
|
28
|
+
# Used in the TemplateContext class, but that method namespace is shared
|
|
29
|
+
# with user code, so we want to avoid adding methods there when possible.
|
|
30
|
+
def self.binread(file)
|
|
31
|
+
if IO.respond_to?(:binread)
|
|
32
|
+
IO.binread(file)
|
|
33
|
+
else
|
|
34
|
+
File.open(file, "rb") {|f| f.read }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# == ChefContext
|
|
39
|
+
# ChefContext was previously used to mix behavior into Erubis::Context so
|
|
40
|
+
# that it would be available to templates. This behavior has now moved to
|
|
41
|
+
# TemplateContext, but this module is still mixed in to the
|
|
42
|
+
# TemplateContext class so that any user code that modified ChefContext
|
|
43
|
+
# will continue to work correctly.
|
|
26
44
|
module ChefContext
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# == TemplateContext
|
|
48
|
+
# TemplateContext is the base context class for all templates in Chef. It
|
|
49
|
+
# defines user-facing extensions to the base Erubis::Context to provide
|
|
50
|
+
# enhanced features. Individual instances of TemplateContext can be
|
|
51
|
+
# extended to add logic to a specific template.
|
|
52
|
+
#
|
|
53
|
+
class TemplateContext < Erubis::Context
|
|
54
|
+
|
|
55
|
+
include ChefContext
|
|
56
|
+
|
|
57
|
+
attr_reader :_extension_modules
|
|
58
|
+
|
|
59
|
+
def initialize(variables)
|
|
60
|
+
super
|
|
61
|
+
@_extension_modules = []
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
###
|
|
65
|
+
# USER FACING API
|
|
66
|
+
###
|
|
67
|
+
|
|
68
|
+
# Returns the current node object, or raises an error if it's not set.
|
|
69
|
+
# Provides API consistency, allowing users to reference the node object
|
|
70
|
+
# by the bare `node` everywhere.
|
|
27
71
|
def node
|
|
28
72
|
return @node if @node
|
|
29
73
|
raise "Could not find a value for node. If you are explicitly setting variables in a template, " +
|
|
@@ -56,59 +100,105 @@ class Chef
|
|
|
56
100
|
def render(partial_name, options = {})
|
|
57
101
|
raise "You cannot render partials in this context" unless @template_finder
|
|
58
102
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
context[:node] = @node
|
|
63
|
-
context[:template_finder] = @template_finder
|
|
64
|
-
else
|
|
65
|
-
context = self.dup
|
|
66
|
-
end
|
|
103
|
+
partial_variables = options.delete(:variables) || _public_instance_variables
|
|
104
|
+
partial_context = self.class.new(partial_variables)
|
|
105
|
+
partial_context._extend_modules(@_extension_modules)
|
|
67
106
|
|
|
68
107
|
template_location = @template_finder.find(partial_name, options)
|
|
69
|
-
|
|
70
|
-
output = eruby.evaluate(context)
|
|
108
|
+
_render_template(Mixin::Template.binread(template_location), partial_context)
|
|
71
109
|
end
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
110
|
+
|
|
111
|
+
def render_template(template_location)
|
|
112
|
+
_render_template(Mixin::Template.binread(template_location), self)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def render_template_from_string(template)
|
|
116
|
+
_render_template(template, self)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
###
|
|
120
|
+
# INTERNAL PUBLIC API
|
|
121
|
+
###
|
|
122
|
+
|
|
123
|
+
def _render_template(template, context)
|
|
124
|
+
# CHEF-2991
|
|
125
|
+
# Erubis always emits unix line endings during template
|
|
126
|
+
# rendering. This results in automatic conversion of windows
|
|
127
|
+
# line endings to linux line endings if the original template
|
|
128
|
+
# contains windows line endings. In order to fix this we
|
|
129
|
+
# determine the line ending style of the template before
|
|
130
|
+
# rendering and convert the line endings of the output if needed
|
|
131
|
+
# If template contains any windows line endings we emit
|
|
132
|
+
# the template result with windows line endings.
|
|
133
|
+
windows_line_endings = template.include? "\r\n"
|
|
134
|
+
|
|
135
|
+
begin
|
|
136
|
+
eruby = Erubis::Eruby.new(template)
|
|
137
|
+
output = eruby.evaluate(context)
|
|
138
|
+
rescue Object => e
|
|
139
|
+
raise TemplateError.new(e, template, context)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
if windows_line_endings
|
|
143
|
+
# Convert line endings from "\n" -> "\r\n". Also converts
|
|
144
|
+
# "\r\n" -> "\r\n".
|
|
145
|
+
# This makes the regex match on all of "\r\n", so we don't
|
|
146
|
+
# accidentally convert "\r\n" -> "\r\r\n".
|
|
147
|
+
output = output.gsub(/\r?\n/,"\r\n")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
output
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def _extend_modules(module_names)
|
|
154
|
+
module_names.each do |mod|
|
|
155
|
+
context_methods = [:node, :render, :render_template, :render_template_from_string]
|
|
156
|
+
context_methods.each do |core_method|
|
|
157
|
+
if mod.method_defined?(core_method) or mod.private_method_defined?(core_method)
|
|
158
|
+
Chef::Log.warn("Core template method `#{core_method}' overridden by extension module #{mod}")
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
extend(mod)
|
|
162
|
+
@_extension_modules << mod
|
|
163
|
+
end
|
|
84
164
|
end
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
165
|
+
|
|
166
|
+
# Collects instance variables set on the current object as a Hash
|
|
167
|
+
# suitable for creating a new TemplateContext. Instance variables that
|
|
168
|
+
# are only valid for this specific instance are omitted from the
|
|
169
|
+
# collection.
|
|
170
|
+
def _public_instance_variables
|
|
171
|
+
all_ivars = instance_variables
|
|
172
|
+
all_ivars.delete(:@_extension_modules)
|
|
173
|
+
all_ivars.inject({}) do |ivar_map, ivar_symbol_name|
|
|
174
|
+
value = instance_variable_get(ivar_symbol_name)
|
|
175
|
+
name_without_at = ivar_symbol_name.to_s[1..-1].to_sym
|
|
176
|
+
ivar_map[name_without_at] = value
|
|
177
|
+
ivar_map
|
|
178
|
+
end
|
|
89
179
|
end
|
|
90
180
|
end
|
|
91
|
-
|
|
181
|
+
|
|
92
182
|
class TemplateError < RuntimeError
|
|
93
183
|
attr_reader :original_exception, :context
|
|
94
184
|
SOURCE_CONTEXT_WINDOW = 2
|
|
95
|
-
|
|
185
|
+
|
|
96
186
|
def initialize(original_exception, template, context)
|
|
97
187
|
@original_exception, @template, @context = original_exception, template, context
|
|
98
188
|
end
|
|
99
|
-
|
|
189
|
+
|
|
100
190
|
def message
|
|
101
191
|
@original_exception.message
|
|
102
192
|
end
|
|
103
|
-
|
|
193
|
+
|
|
104
194
|
def line_number
|
|
105
195
|
@line_number ||= $1.to_i if original_exception.backtrace.find {|line| line =~ /\(erubis\):(\d+)/ }
|
|
106
196
|
end
|
|
107
|
-
|
|
197
|
+
|
|
108
198
|
def source_location
|
|
109
199
|
"on line ##{line_number}"
|
|
110
200
|
end
|
|
111
|
-
|
|
201
|
+
|
|
112
202
|
def source_listing
|
|
113
203
|
@source_listing ||= begin
|
|
114
204
|
lines = @template.split(/\n/)
|
|
@@ -129,7 +219,7 @@ class Chef
|
|
|
129
219
|
output.join("\n")
|
|
130
220
|
end
|
|
131
221
|
end
|
|
132
|
-
|
|
222
|
+
|
|
133
223
|
def to_s
|
|
134
224
|
"\n\n#{self.class} (#{message}) #{source_location}:\n\n" +
|
|
135
225
|
"#{source_listing}\n\n #{original_exception.backtrace.join("\n ")}\n\n"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Edwards (<adamed@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2013 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
require 'chef/exceptions'
|
|
21
|
+
require 'win32/api' if Chef::Platform.windows?
|
|
22
|
+
|
|
23
|
+
class Chef
|
|
24
|
+
module Mixin
|
|
25
|
+
module WindowsArchitectureHelper
|
|
26
|
+
|
|
27
|
+
def node_windows_architecture(node)
|
|
28
|
+
node[:kernel][:machine].to_sym
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def wow64_architecture_override_required?(node, desired_architecture)
|
|
32
|
+
is_i386_windows_process? &&
|
|
33
|
+
node_windows_architecture(node) == :x86_64 &&
|
|
34
|
+
desired_architecture == :x86_64
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def node_supports_windows_architecture?(node, desired_architecture)
|
|
38
|
+
assert_valid_windows_architecture!(desired_architecture)
|
|
39
|
+
return (node_windows_architecture(node) == :x86_64 ||
|
|
40
|
+
desired_architecture == :i386) ? true : false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def valid_windows_architecture?(architecture)
|
|
44
|
+
return (architecture == :x86_64) || (architecture == :i386)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def assert_valid_windows_architecture!(architecture)
|
|
48
|
+
if ! valid_windows_architecture?(architecture)
|
|
49
|
+
raise Chef::Exceptions::Win32ArchitectureIncorrect,
|
|
50
|
+
"The specified architecture was not valid. It must be one of :i386 or :x86_64"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def is_i386_windows_process?
|
|
55
|
+
Chef::Platform.windows? && 'X86'.casecmp(ENV['PROCESSOR_ARCHITECTURE']) == 0
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def disable_wow64_file_redirection( node )
|
|
59
|
+
original_redirection_state = ['0'].pack('P')
|
|
60
|
+
|
|
61
|
+
if ( ( node_windows_architecture(node) == :x86_64) && ::Chef::Platform.windows?)
|
|
62
|
+
win32_wow_64_disable_wow_64_fs_redirection =
|
|
63
|
+
::Win32::API.new('Wow64DisableWow64FsRedirection', 'P', 'L', 'kernel32')
|
|
64
|
+
|
|
65
|
+
succeeded = win32_wow_64_disable_wow_64_fs_redirection.call(original_redirection_state)
|
|
66
|
+
|
|
67
|
+
if succeeded == 0
|
|
68
|
+
raise Win32APIError "Failed to disable Wow64 file redirection"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
original_redirection_state
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def restore_wow64_file_redirection( node, original_redirection_state )
|
|
77
|
+
if ( (node_windows_architecture(node) == :x86_64) && ::Chef::Platform.windows?)
|
|
78
|
+
win32_wow_64_revert_wow_64_fs_redirection =
|
|
79
|
+
::Win32::API.new('Wow64RevertWow64FsRedirection', 'P', 'L', 'kernel32')
|
|
80
|
+
|
|
81
|
+
succeeded = win32_wow_64_revert_wow_64_fs_redirection.call(original_redirection_state)
|
|
82
|
+
|
|
83
|
+
if succeeded == 0
|
|
84
|
+
raise Win32APIError "Failed to revert Wow64 file redirection"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2013 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
if !File.respond_to?(:realpath)
|
|
20
|
+
require 'pathname'
|
|
21
|
+
class File
|
|
22
|
+
def self.realpath(path)
|
|
23
|
+
Pathname.new(path).realpath.to_s
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Serdar Sutay (<serdar@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
|
+
|
|
19
|
+
# == net-ssh-multi gem patch for concurrency
|
|
20
|
+
# net-ssh-multi gem has 2 bugs associated with the use of
|
|
21
|
+
# :concurrent_connections option.
|
|
22
|
+
# 1-) There is a race condition while fetching the next_session when
|
|
23
|
+
# :concurrent_connections are set. @open_connections is being
|
|
24
|
+
# incremented by the connection thread and sometimes
|
|
25
|
+
# realize_pending_connections!() method can create more than required
|
|
26
|
+
# connection threads before the @open_connections is set by the
|
|
27
|
+
# previously created threads.
|
|
28
|
+
# 2-) When :concurrent_connections is set, server classes are setup
|
|
29
|
+
# with PendingConnection objects that always return true to busy?
|
|
30
|
+
# calls. If a connection fails when :concurrent_connections is set,
|
|
31
|
+
# server ends up returning true to all busy? calls since the session
|
|
32
|
+
# object is not replaced. Due to this, main event loop (process()
|
|
33
|
+
# function) never gets terminated.
|
|
34
|
+
#
|
|
35
|
+
# See: https://github.com/net-ssh/net-ssh-multi/pull/4
|
|
36
|
+
|
|
37
|
+
require 'net/ssh/multi/version'
|
|
38
|
+
|
|
39
|
+
if Net::SSH::Multi::Version::STRING == "1.1.0" || Net::SSH::Multi::Version::STRING == "1.2.0"
|
|
40
|
+
|
|
41
|
+
require 'net/ssh/multi'
|
|
42
|
+
|
|
43
|
+
module Net
|
|
44
|
+
module SSH
|
|
45
|
+
module Multi
|
|
46
|
+
class Server
|
|
47
|
+
|
|
48
|
+
# Make sure that server returns false if the ssh connection
|
|
49
|
+
# has failed.
|
|
50
|
+
def busy?(include_invisible=false)
|
|
51
|
+
!failed? && session && session.busy?(include_invisible)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class Session
|
|
57
|
+
def next_session(server, force=false) #:nodoc:
|
|
58
|
+
# don't retry a failed attempt
|
|
59
|
+
return nil if server.failed?
|
|
60
|
+
|
|
61
|
+
@session_mutex.synchronize do
|
|
62
|
+
if !force && concurrent_connections && concurrent_connections <= open_connections
|
|
63
|
+
connection = PendingConnection.new(server)
|
|
64
|
+
@pending_sessions << connection
|
|
65
|
+
return connection
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# ===== PATCH START
|
|
69
|
+
# Only increment the open_connections count if the connection
|
|
70
|
+
# is not being forced. Incase of a force, it will already be
|
|
71
|
+
# incremented.
|
|
72
|
+
if !force
|
|
73
|
+
@open_connections += 1
|
|
74
|
+
end
|
|
75
|
+
# ===== PATCH END
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
begin
|
|
79
|
+
server.new_session
|
|
80
|
+
|
|
81
|
+
# I don't understand why this should be necessary--StandardError is a
|
|
82
|
+
# subclass of Exception, after all--but without explicitly rescuing
|
|
83
|
+
# StandardError, things like Errno::* and SocketError don't get caught
|
|
84
|
+
# here!
|
|
85
|
+
rescue Exception, StandardError => e
|
|
86
|
+
server.fail!
|
|
87
|
+
@session_mutex.synchronize { @open_connections -= 1 }
|
|
88
|
+
|
|
89
|
+
case on_error
|
|
90
|
+
when :ignore then
|
|
91
|
+
# do nothing
|
|
92
|
+
when :warn then
|
|
93
|
+
warn("error connecting to #{server}: #{e.class} (#{e.message})")
|
|
94
|
+
when Proc then
|
|
95
|
+
go = catch(:go) { on_error.call(server); nil }
|
|
96
|
+
case go
|
|
97
|
+
when nil, :ignore then # nothing
|
|
98
|
+
when :retry then retry
|
|
99
|
+
when :raise then raise
|
|
100
|
+
else warn "unknown 'go' command: #{go.inspect}"
|
|
101
|
+
end
|
|
102
|
+
else
|
|
103
|
+
raise
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
return nil
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def realize_pending_connections! #:nodoc:
|
|
111
|
+
return unless concurrent_connections
|
|
112
|
+
|
|
113
|
+
server_list.each do |server|
|
|
114
|
+
server.close if !server.busy?(true)
|
|
115
|
+
server.update_session!
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
@connect_threads.delete_if { |t| !t.alive? }
|
|
119
|
+
|
|
120
|
+
count = concurrent_connections ? (concurrent_connections - open_connections) : @pending_sessions.length
|
|
121
|
+
count.times do
|
|
122
|
+
session = @pending_sessions.pop or break
|
|
123
|
+
# ===== PATCH START
|
|
124
|
+
# Increment the open_connections count here to prevent
|
|
125
|
+
# creation of connection thread again before that is
|
|
126
|
+
# incremented by the thread.
|
|
127
|
+
@session_mutex.synchronize { @open_connections += 1 }
|
|
128
|
+
# ===== PATCH END
|
|
129
|
+
@connect_threads << Thread.new do
|
|
130
|
+
session.replace_with(next_session(session.server, true))
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|