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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Lamont Granquist (<lamont@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
|
+
class Chef
|
|
20
|
+
class FileContentManagement
|
|
21
|
+
class Deploy
|
|
22
|
+
#
|
|
23
|
+
# PURPOSE: this strategy is atomic, and attempts to preserve file modes
|
|
24
|
+
#
|
|
25
|
+
# NOTE: there is no preserve flag to FileUtils.mv, and we want to preserve the dst file
|
|
26
|
+
# modes rather than the src file modes (preserve = true is what mv does already, we
|
|
27
|
+
# would like preserve = false which is tricky).
|
|
28
|
+
#
|
|
29
|
+
class MvUnix
|
|
30
|
+
def create(file)
|
|
31
|
+
# this is very simple, but it ensures that ownership and file modes take
|
|
32
|
+
# good defaults, in particular mode needs to obey umask on create
|
|
33
|
+
Chef::Log.debug("touching #{file} to create it")
|
|
34
|
+
FileUtils.touch(file)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def deploy(src, dst)
|
|
38
|
+
# we are only responsible for content so restore the dst files perms
|
|
39
|
+
Chef::Log.debug("reading modes from #{dst} file")
|
|
40
|
+
stat = ::File.stat(dst)
|
|
41
|
+
mode = stat.mode & 07777
|
|
42
|
+
uid = stat.uid
|
|
43
|
+
gid = stat.gid
|
|
44
|
+
|
|
45
|
+
Chef::Log.debug("applying mode = #{mode.to_s(8)}, uid = #{uid}, gid = #{gid} to #{src}")
|
|
46
|
+
|
|
47
|
+
# i own the inode, so should be able to at least chmod it
|
|
48
|
+
::File.chmod(mode, src)
|
|
49
|
+
|
|
50
|
+
# we may be running as non-root in which case because we are doing an mv we cannot preserve
|
|
51
|
+
# the file modes. after the mv we have a different inode and if we don't have rights to
|
|
52
|
+
# chown/chgrp on the inode then we can't fix the ownership.
|
|
53
|
+
#
|
|
54
|
+
# in the case where i'm running chef-solo on my homedir as myself and some root-shell
|
|
55
|
+
# work has caused dotfiles of mine to change to root-owned, i'm fine with this not being
|
|
56
|
+
# exceptional, and i think most use cases will consider this to not be exceptional, and
|
|
57
|
+
# the right thing is to fix the ownership of the file to the user running the commmand
|
|
58
|
+
# (which requires write perms to the directory, or mv will throw an exception)
|
|
59
|
+
begin
|
|
60
|
+
::File.chown(uid, nil, src)
|
|
61
|
+
rescue Errno::EPERM
|
|
62
|
+
Chef::Log.warn("Could not set uid = #{uid} on #{src}, file modes not preserved")
|
|
63
|
+
end
|
|
64
|
+
begin
|
|
65
|
+
::File.chown(nil, gid, src)
|
|
66
|
+
rescue Errno::EPERM
|
|
67
|
+
Chef::Log.warn("Could not set gid = #{gid} on #{src}, file modes not preserved")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
Chef::Log.debug("moving temporary file #{src} into place at #{dst}")
|
|
71
|
+
FileUtils.mv(src, dst)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Lamont Granquist (<lamont@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
|
+
# We update the contents of the file, using mv for atomicity, while maintaining all the
|
|
21
|
+
# ACL information on the dst file.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
require 'chef/platform/query_helpers'
|
|
25
|
+
if Chef::Platform.windows?
|
|
26
|
+
require 'chef/win32/security'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class Chef
|
|
30
|
+
class FileContentManagement
|
|
31
|
+
class Deploy
|
|
32
|
+
class MvWindows
|
|
33
|
+
|
|
34
|
+
Security = Chef::ReservedNames::Win32::Security
|
|
35
|
+
ACL = Security::ACL
|
|
36
|
+
|
|
37
|
+
def create(file)
|
|
38
|
+
Chef::Log.debug("touching #{file} to create it")
|
|
39
|
+
FileUtils.touch(file)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def deploy(src, dst)
|
|
43
|
+
#
|
|
44
|
+
# At the time of deploy ACLs are correctly configured on the
|
|
45
|
+
# dst. This would be a simple atomic move operations in
|
|
46
|
+
# windows was not converting inherited ACLs of src to
|
|
47
|
+
# non-inherited ACLs in certain cases.See:
|
|
48
|
+
# http://blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
|
|
49
|
+
#
|
|
50
|
+
|
|
51
|
+
#
|
|
52
|
+
# First cache the ACLs of dst file
|
|
53
|
+
#
|
|
54
|
+
|
|
55
|
+
dst_so = Security::SecurableObject.new(dst)
|
|
56
|
+
begin
|
|
57
|
+
# get the sd with the SACL
|
|
58
|
+
dst_sd = dst_so.security_descriptor(true)
|
|
59
|
+
rescue Chef::Exceptions::Win32APIError
|
|
60
|
+
# Catch and raise if the user is not elevated enough.
|
|
61
|
+
# At this point we can't configure the file as expected so
|
|
62
|
+
# we're failing action on the resource.
|
|
63
|
+
raise Chef::Exceptions::WindowsNotAdmin, "can not get the security information for '#{dst}' due to missing Administrator privilages."
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if dst_sd.dacl_present?
|
|
67
|
+
apply_dacl = ACL.create(dst_sd.dacl.select { |ace| !ace.inherited? })
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
if dst_sd.sacl_present?
|
|
71
|
+
apply_sacl = ACL.create(dst_sd.sacl.select { |ace| !ace.inherited? })
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
# Then deploy the file
|
|
76
|
+
#
|
|
77
|
+
|
|
78
|
+
FileUtils.mv(src, dst)
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Then apply the cached acls to the new dst file
|
|
82
|
+
#
|
|
83
|
+
|
|
84
|
+
dst_so = Security::SecurableObject.new(dst)
|
|
85
|
+
dst_so.group = dst_sd.group
|
|
86
|
+
dst_so.owner = dst_sd.owner
|
|
87
|
+
dst_so.set_dacl(apply_dacl, dst_sd.dacl_inherits?) if dst_sd.dacl_present?
|
|
88
|
+
dst_so.set_sacl(apply_sacl, dst_sd.sacl_inherits?) if dst_sd.sacl_present?
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Lamont Granquist (<lamont@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
|
+
require "tempfile"
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class FileContentManagement
|
|
23
|
+
class Tempfile
|
|
24
|
+
|
|
25
|
+
attr_reader :new_resource
|
|
26
|
+
|
|
27
|
+
def initialize(new_resource)
|
|
28
|
+
@new_resource = new_resource
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def tempfile
|
|
32
|
+
@tempfile ||= tempfile_open
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def tempfile_open
|
|
38
|
+
tf = ::Tempfile.open(tempfile_basename, tempfile_dirname)
|
|
39
|
+
# We always process the tempfile in binmode so that we
|
|
40
|
+
# preserve the line endings of the content.
|
|
41
|
+
tf.binmode
|
|
42
|
+
tf
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# These are important for windows to get permissions right, and may
|
|
47
|
+
# be useful for SELinux and other ACL approaches. Please use them
|
|
48
|
+
# as the arguments to Tempfile.new() consistently.
|
|
49
|
+
#
|
|
50
|
+
def tempfile_basename
|
|
51
|
+
basename = ::File.basename(@new_resource.name)
|
|
52
|
+
basename.insert 0, "." unless Chef::Platform.windows? # dotfile if we're not on windows
|
|
53
|
+
basename
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def tempfile_dirname
|
|
57
|
+
Chef::Config[:file_staging_uses_destdir] ? ::File.dirname(@new_resource.path) : Dir::tmpdir
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
data/lib/chef/formatters/doc.rb
CHANGED
|
@@ -162,7 +162,7 @@ class Chef
|
|
|
162
162
|
# Called when a resource action has been skipped b/c of a conditional
|
|
163
163
|
def resource_skipped(resource, action, conditional)
|
|
164
164
|
# TODO: more info about conditional
|
|
165
|
-
puts " (skipped due to #{conditional.
|
|
165
|
+
puts " (skipped due to #{conditional.short_description})"
|
|
166
166
|
end
|
|
167
167
|
|
|
168
168
|
# Called after #load_current_resource has run.
|
|
@@ -31,7 +31,7 @@ class Chef
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def section(heading, text)
|
|
34
|
-
@sections <<
|
|
34
|
+
@sections << {heading => text}
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def display(out)
|
|
@@ -40,7 +40,9 @@ class Chef
|
|
|
40
40
|
out.puts "=" * 80
|
|
41
41
|
out.puts "\n"
|
|
42
42
|
sections.each do |section|
|
|
43
|
-
|
|
43
|
+
section.each do |heading, text|
|
|
44
|
+
display_section(heading, text, out)
|
|
45
|
+
end
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
48
|
|
|
@@ -53,8 +55,7 @@ class Chef
|
|
|
53
55
|
|
|
54
56
|
private
|
|
55
57
|
|
|
56
|
-
def display_section(
|
|
57
|
-
heading, text = section
|
|
58
|
+
def display_section(heading, text, out)
|
|
58
59
|
out.puts heading
|
|
59
60
|
out.puts "-" * heading.size
|
|
60
61
|
out.puts text
|
|
@@ -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.
|
|
@@ -80,6 +80,9 @@ E
|
|
|
80
80
|
def describe_412_error(error_description)
|
|
81
81
|
explanation = ""
|
|
82
82
|
error_reasons = extract_412_error_message
|
|
83
|
+
|
|
84
|
+
# Prepare the error message if there is detailed information
|
|
85
|
+
# about individual cookbooks.
|
|
83
86
|
if !error_reasons.respond_to?(:key?)
|
|
84
87
|
explanation << error_reasons.to_s
|
|
85
88
|
else
|
|
@@ -99,7 +102,24 @@ E
|
|
|
99
102
|
end
|
|
100
103
|
end
|
|
101
104
|
|
|
102
|
-
|
|
105
|
+
if !explanation.empty?
|
|
106
|
+
error_description.section("Missing Cookbooks:", explanation)
|
|
107
|
+
else
|
|
108
|
+
# If we don't have any cookbook details print a more
|
|
109
|
+
# generic error message.
|
|
110
|
+
if error_reasons.respond_to?(:key?) && error_reasons["message"]
|
|
111
|
+
explanation << "Error message: #{error_reasons["message"]}\n"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
explanation << <<EOM
|
|
115
|
+
You might be able to resolve this issue with:
|
|
116
|
+
1-) Removing cookbook versions that depend on deleted cookbooks.
|
|
117
|
+
2-) Removing unused cookbook versions.
|
|
118
|
+
3-) Pinning exact cookbook versions using environments.
|
|
119
|
+
EOM
|
|
120
|
+
error_description.section("Cookbook dependency resolution error:", explanation)
|
|
121
|
+
end
|
|
122
|
+
|
|
103
123
|
error_description.section("Expanded Run List:", expanded_run_list_ul)
|
|
104
124
|
end
|
|
105
125
|
|
|
@@ -40,6 +40,10 @@ readable by chef-client.
|
|
|
40
40
|
E
|
|
41
41
|
error_description.section("Relevant Config Settings:",<<-E)
|
|
42
42
|
validation_key "#{api_key}"
|
|
43
|
+
E
|
|
44
|
+
when Chef::Exceptions::InvalidRedirect
|
|
45
|
+
error_description.section("Invalid Redirect:",<<-E)
|
|
46
|
+
Change your server location in client.rb to the server's FQDN to avoid unwanted redirections.
|
|
43
47
|
E
|
|
44
48
|
else
|
|
45
49
|
"#{exception.class.name}: #{exception.message}"
|
data/lib/chef/json_compat.rb
CHANGED
|
@@ -27,6 +27,7 @@ class Chef
|
|
|
27
27
|
JSON_CLASS = "json_class".freeze
|
|
28
28
|
|
|
29
29
|
CHEF_APICLIENT = "Chef::ApiClient".freeze
|
|
30
|
+
CHEF_CHECKSUM = "Chef::Checksum".freeze
|
|
30
31
|
CHEF_COOKBOOKVERSION = "Chef::CookbookVersion".freeze
|
|
31
32
|
CHEF_DATABAG = "Chef::DataBag".freeze
|
|
32
33
|
CHEF_DATABAGITEM = "Chef::DataBagItem".freeze
|
|
@@ -114,6 +115,8 @@ class Chef
|
|
|
114
115
|
case json_class
|
|
115
116
|
when CHEF_APICLIENT
|
|
116
117
|
Chef::ApiClient
|
|
118
|
+
when CHEF_CHECKSUM
|
|
119
|
+
Chef::Checksum
|
|
117
120
|
when CHEF_COOKBOOKVERSION
|
|
118
121
|
Chef::CookbookVersion
|
|
119
122
|
when CHEF_DATABAG
|
data/lib/chef/knife.rb
CHANGED
|
@@ -150,7 +150,7 @@ class Chef
|
|
|
150
150
|
commands_to_show.sort.each do |category, commands|
|
|
151
151
|
next if category =~ /deprecated/i
|
|
152
152
|
msg "** #{category.upcase} COMMANDS **"
|
|
153
|
-
commands.each do |command|
|
|
153
|
+
commands.sort.each do |command|
|
|
154
154
|
msg subcommands[command].banner if subcommands[command]
|
|
155
155
|
end
|
|
156
156
|
msg
|
|
@@ -201,12 +201,18 @@ class Chef
|
|
|
201
201
|
subcommand_class || subcommand_not_found!(args)
|
|
202
202
|
end
|
|
203
203
|
|
|
204
|
+
def self.dependency_loaders
|
|
205
|
+
@dependency_loaders ||= []
|
|
206
|
+
end
|
|
207
|
+
|
|
204
208
|
def self.deps(&block)
|
|
205
|
-
|
|
209
|
+
dependency_loaders << block
|
|
206
210
|
end
|
|
207
211
|
|
|
208
212
|
def self.load_deps
|
|
209
|
-
|
|
213
|
+
dependency_loaders.each do |dep_loader|
|
|
214
|
+
dep_loader.call
|
|
215
|
+
end
|
|
210
216
|
end
|
|
211
217
|
|
|
212
218
|
private
|
|
@@ -481,6 +487,9 @@ class Chef
|
|
|
481
487
|
when Chef::Exceptions::PrivateKeyMissing
|
|
482
488
|
ui.error "Your private key could not be loaded from #{api_key}"
|
|
483
489
|
ui.info "Check your configuration file and ensure that your private key is readable"
|
|
490
|
+
when Chef::Exceptions::InvalidRedirect
|
|
491
|
+
ui.error "Invalid Redirect: #{e.message}"
|
|
492
|
+
ui.info "Change your server location in knife.rb to the server's FQDN to avoid unwanted redirections."
|
|
484
493
|
else
|
|
485
494
|
ui.error "#{e.class.name}: #{e.message}"
|
|
486
495
|
end
|
data/lib/chef/knife/bootstrap.rb
CHANGED
|
@@ -59,6 +59,12 @@ class Chef
|
|
|
59
59
|
:description => "The ssh gateway",
|
|
60
60
|
:proc => Proc.new { |key| Chef::Config[:knife][:ssh_gateway] = key }
|
|
61
61
|
|
|
62
|
+
option :forward_agent,
|
|
63
|
+
:short => "-A",
|
|
64
|
+
:long => "--forward-agent",
|
|
65
|
+
:description => "Enable SSH agent forwarding",
|
|
66
|
+
:boolean => true
|
|
67
|
+
|
|
62
68
|
option :identity_file,
|
|
63
69
|
:short => "-i IDENTITY_FILE",
|
|
64
70
|
:long => "--identity-file IDENTITY_FILE",
|
|
@@ -94,6 +100,11 @@ class Chef
|
|
|
94
100
|
:description => "Execute the bootstrap via sudo",
|
|
95
101
|
:boolean => true
|
|
96
102
|
|
|
103
|
+
option :use_sudo_password,
|
|
104
|
+
:long => "--use-sudo-password",
|
|
105
|
+
:description => "Execute the bootstrap via sudo with password",
|
|
106
|
+
:boolean => false
|
|
107
|
+
|
|
97
108
|
option :template_file,
|
|
98
109
|
:long => "--template-file TEMPLATE",
|
|
99
110
|
:description => "Full path to location of template to use",
|
|
@@ -127,6 +138,15 @@ class Chef
|
|
|
127
138
|
name, path = h.split("=")
|
|
128
139
|
Chef::Config[:knife][:hints][name] = path ? JSON.parse(::File.read(path)) : Hash.new }
|
|
129
140
|
|
|
141
|
+
option :secret,
|
|
142
|
+
:short => "-s SECRET",
|
|
143
|
+
:long => "--secret ",
|
|
144
|
+
:description => "The secret key to use to encrypt data bag item values"
|
|
145
|
+
|
|
146
|
+
option :secret_file,
|
|
147
|
+
:long => "--secret-file SECRET_FILE",
|
|
148
|
+
:description => "A file containing the secret key to use to encrypt data bag item values"
|
|
149
|
+
|
|
130
150
|
def find_template(template=nil)
|
|
131
151
|
# Are we bootstrapping using an already shipped template?
|
|
132
152
|
if config[:template_file]
|
|
@@ -166,11 +186,12 @@ class Chef
|
|
|
166
186
|
|
|
167
187
|
def run
|
|
168
188
|
validate_name_args!
|
|
189
|
+
warn_chef_config_secret_key
|
|
169
190
|
@template_file = find_template(config[:bootstrap_template])
|
|
170
191
|
@node_name = Array(@name_args).first
|
|
171
192
|
# back compat--templates may use this setting:
|
|
172
193
|
config[:server_name] = @node_name
|
|
173
|
-
|
|
194
|
+
|
|
174
195
|
$stdout.sync = true
|
|
175
196
|
|
|
176
197
|
ui.info("Bootstrapping Chef on #{ui.color(@node_name, :bold)}")
|
|
@@ -204,6 +225,7 @@ class Chef
|
|
|
204
225
|
ssh.config[:ssh_password] = config[:ssh_password]
|
|
205
226
|
ssh.config[:ssh_port] = Chef::Config[:knife][:ssh_port] || config[:ssh_port]
|
|
206
227
|
ssh.config[:ssh_gateway] = Chef::Config[:knife][:ssh_gateway] || config[:ssh_gateway]
|
|
228
|
+
ssh.config[:forward_agent] = Chef::Config[:knife][:forward_agent] || config[:forward_agent]
|
|
207
229
|
ssh.config[:identity_file] = Chef::Config[:knife][:identity_file] || config[:identity_file]
|
|
208
230
|
ssh.config[:manual] = true
|
|
209
231
|
ssh.config[:host_key_verify] = Chef::Config[:knife][:host_key_verify] || config[:host_key_verify]
|
|
@@ -222,12 +244,34 @@ class Chef
|
|
|
222
244
|
command = render_template(read_template)
|
|
223
245
|
|
|
224
246
|
if config[:use_sudo]
|
|
225
|
-
command = "sudo #{command}"
|
|
247
|
+
command = config[:use_sudo_password] ? "echo #{config[:ssh_password]} | sudo -S #{command}" : "sudo #{command}"
|
|
226
248
|
end
|
|
227
249
|
|
|
228
250
|
command
|
|
229
251
|
end
|
|
230
252
|
|
|
253
|
+
def warn_chef_config_secret_key
|
|
254
|
+
unless Chef::Config[:encrypted_data_bag_secret].nil?
|
|
255
|
+
ui.warn "* " * 40
|
|
256
|
+
ui.warn(<<-WARNING)
|
|
257
|
+
Specifying the encrypted data bag secret key using an 'encrypted_data_bag_secret'
|
|
258
|
+
entry in 'knife.rb' is deprecated. Please see CHEF-4011 for more details. You
|
|
259
|
+
can supress this warning and still distribute the secret key to all bootstrapped
|
|
260
|
+
machines by adding the following to your 'knife.rb' file:
|
|
261
|
+
|
|
262
|
+
knife[:secret_file] = "/path/to/your/secret"
|
|
263
|
+
|
|
264
|
+
If you would like to selectively distribute a secret key during bootstrap
|
|
265
|
+
please use the '--secret' or '--secret-file' options of this command instead.
|
|
266
|
+
|
|
267
|
+
#{ui.color('IMPORTANT:', :red, :bold)} In a future version of Chef, this
|
|
268
|
+
behavior will be removed and any 'encrypted_data_bag_secret' entries in
|
|
269
|
+
'knife.rb' will be ignored completely.
|
|
270
|
+
WARNING
|
|
271
|
+
ui.warn "* " * 40
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
231
275
|
end
|
|
232
276
|
end
|
|
233
277
|
end
|