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
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
# limitations under the License.
|
|
19
19
|
#
|
|
20
20
|
|
|
21
|
-
# TODO test that these work when you are logged on as a user joined to a domain (rather than local computer)
|
|
22
|
-
# TODO test that you can set users from other domains
|
|
23
|
-
|
|
24
21
|
require 'etc'
|
|
25
22
|
|
|
26
23
|
shared_context "setup correct permissions" do
|
|
24
|
+
if windows?
|
|
25
|
+
include_context "use Windows permissions"
|
|
26
|
+
end
|
|
27
27
|
|
|
28
28
|
# I could not get this to work with :requires_unprivileged_user for whatever
|
|
29
29
|
# reason. The setup when running as root is the same as non-root, except we
|
|
@@ -39,10 +39,20 @@ shared_context "setup correct permissions" do
|
|
|
39
39
|
File.chown(Etc.getpwnam('nobody').uid, 1337, path)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
before :each, :windows_only do
|
|
43
|
+
so = SecurableObject.new(path)
|
|
44
|
+
so.owner = SID.Administrator
|
|
45
|
+
so.group = SID.Administrators
|
|
46
|
+
dacl = ACL.create(denied_acl(SID.Guest, expected_modify_perms) +
|
|
47
|
+
allowed_acl(SID.Guest, expected_read_perms))
|
|
48
|
+
so.dacl = dacl
|
|
49
|
+
end
|
|
43
50
|
end
|
|
44
51
|
|
|
45
52
|
shared_context "setup broken permissions" do
|
|
53
|
+
if windows?
|
|
54
|
+
include_context "use Windows permissions"
|
|
55
|
+
end
|
|
46
56
|
|
|
47
57
|
before :each, :unix_only do
|
|
48
58
|
File.chmod(0644, path)
|
|
@@ -52,13 +62,21 @@ shared_context "setup broken permissions" do
|
|
|
52
62
|
File.chown(0, 0, path)
|
|
53
63
|
end
|
|
54
64
|
|
|
55
|
-
|
|
65
|
+
before :each, :windows_only do
|
|
66
|
+
so = SecurableObject.new(path)
|
|
67
|
+
so.owner = SID.Guest
|
|
68
|
+
so.group = SID.Everyone
|
|
69
|
+
dacl = ACL.create(allowed_acl(SID.Guest, expected_modify_perms))
|
|
70
|
+
so.set_dacl(dacl, true)
|
|
71
|
+
end
|
|
56
72
|
end
|
|
57
73
|
|
|
58
74
|
shared_context "use Windows permissions", :windows_only do
|
|
59
75
|
if windows?
|
|
60
76
|
SID ||= Chef::ReservedNames::Win32::Security::SID
|
|
61
77
|
ACE ||= Chef::ReservedNames::Win32::Security::ACE
|
|
78
|
+
ACL ||= Chef::ReservedNames::Win32::Security::ACL
|
|
79
|
+
SecurableObject ||= Chef::ReservedNames::Win32::Security::SecurableObject
|
|
62
80
|
end
|
|
63
81
|
|
|
64
82
|
def get_security_descriptor(path)
|
|
@@ -126,7 +144,7 @@ shared_context "use Windows permissions", :windows_only do
|
|
|
126
144
|
end
|
|
127
145
|
end
|
|
128
146
|
|
|
129
|
-
shared_examples_for "a securable resource" do
|
|
147
|
+
shared_examples_for "a securable resource with existing target" do
|
|
130
148
|
|
|
131
149
|
include_context "diff disabled"
|
|
132
150
|
|
|
@@ -211,10 +229,65 @@ shared_examples_for "a securable resource" do
|
|
|
211
229
|
context "on Windows", :windows_only do
|
|
212
230
|
include_context "use Windows permissions"
|
|
213
231
|
|
|
214
|
-
|
|
215
|
-
|
|
232
|
+
describe "when setting owner" do
|
|
233
|
+
before do
|
|
234
|
+
resource.owner('Administrator')
|
|
235
|
+
resource.run_action(:create)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "should set the owner" do
|
|
239
|
+
descriptor.owner.should == SID.Administrator
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
it "is marked as updated only if changes are made" do
|
|
243
|
+
resource.updated_by_last_action?.should == expect_updated?
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
describe "when setting group" do
|
|
248
|
+
before do
|
|
249
|
+
resource.group('Administrators')
|
|
250
|
+
resource.run_action(:create)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
it "should set the group" do
|
|
254
|
+
descriptor.group.should == SID.Administrators
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
it "is marked as updated only if changes are made" do
|
|
258
|
+
resource.updated_by_last_action?.should == expect_updated?
|
|
259
|
+
end
|
|
216
260
|
end
|
|
217
261
|
|
|
262
|
+
describe "when setting rights and deny_rights" do
|
|
263
|
+
before do
|
|
264
|
+
resource.deny_rights(:modify, 'Guest')
|
|
265
|
+
resource.rights(:read, 'Guest')
|
|
266
|
+
resource.run_action(:create)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "should set the rights and deny_rights" do
|
|
270
|
+
explicit_aces.should == denied_acl(SID.Guest, expected_modify_perms) + allowed_acl(SID.Guest, expected_read_perms)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
it "is marked as updated only if changes are made" do
|
|
274
|
+
resource.updated_by_last_action?.should == expect_updated?
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
shared_examples_for "a securable resource without existing target" do
|
|
281
|
+
|
|
282
|
+
include_context "diff disabled"
|
|
283
|
+
|
|
284
|
+
context "on Unix", :unix_only do
|
|
285
|
+
pending "if we need any securable resource tests on Unix without existing target resource."
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
context "on Windows", :windows_only do
|
|
289
|
+
include_context "use Windows permissions"
|
|
290
|
+
|
|
218
291
|
it "sets owner to Administrators on create if owner is not specified" do
|
|
219
292
|
File.exist?(path).should == false
|
|
220
293
|
resource.run_action(:create)
|
|
@@ -428,5 +501,33 @@ shared_examples_for "a securable resource" do
|
|
|
428
501
|
end
|
|
429
502
|
end
|
|
430
503
|
|
|
504
|
+
it "does not inherit aces if inherits is set to false" do
|
|
505
|
+
# We need at least one ACE if we're creating a securable without
|
|
506
|
+
# inheritance
|
|
507
|
+
resource.rights(:full_control, 'Administrators')
|
|
508
|
+
resource.inherits(false)
|
|
509
|
+
resource.run_action(:create)
|
|
510
|
+
|
|
511
|
+
descriptor.dacl.each do | ace |
|
|
512
|
+
ace.inherited?.should == false
|
|
513
|
+
end
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
it "has the inheritable acls of parent directory if no acl is specified" do
|
|
517
|
+
File.exist?(path).should == false
|
|
518
|
+
|
|
519
|
+
parent_acls = parent_inheritable_acls
|
|
520
|
+
|
|
521
|
+
resource.run_action(:create)
|
|
522
|
+
|
|
523
|
+
descriptor.dacl.each_with_index do |ace, index|
|
|
524
|
+
# On Windows Server 2003 OS creates a default non-inheritable
|
|
525
|
+
# ACL during file creation unless otherwise specified.
|
|
526
|
+
ace.inherited?.should == true unless windows_win2k3?
|
|
527
|
+
ace.should == parent_acls.dacl[index]
|
|
528
|
+
end
|
|
529
|
+
end
|
|
530
|
+
|
|
431
531
|
end
|
|
432
532
|
end
|
|
533
|
+
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
|
|
2
|
+
ALL_EXPANDED_PERMISSIONS = ["generic read",
|
|
3
|
+
"generic write",
|
|
4
|
+
"generic execute",
|
|
5
|
+
"generic all",
|
|
6
|
+
"delete",
|
|
7
|
+
"read permissions",
|
|
8
|
+
"change permissions",
|
|
9
|
+
"take ownership",
|
|
10
|
+
"synchronize",
|
|
11
|
+
"access system security",
|
|
12
|
+
"read data / list directory",
|
|
13
|
+
"write data / add file",
|
|
14
|
+
"append data / add subdirectory",
|
|
15
|
+
"read extended attributes",
|
|
16
|
+
"write extended attributes",
|
|
17
|
+
"execute / traverse",
|
|
18
|
+
"delete child",
|
|
19
|
+
"read attributes",
|
|
20
|
+
"write attributes"]
|
|
21
|
+
|
|
22
|
+
|
|
2
23
|
shared_examples_for "a securable resource with reporting" do
|
|
3
24
|
|
|
4
25
|
include_context "diff disabled"
|
|
@@ -15,6 +36,18 @@ shared_examples_for "a securable resource with reporting" do
|
|
|
15
36
|
# let(:default_mode) { ((0100666 - File.umask) & 07777).to_s(8) }
|
|
16
37
|
|
|
17
38
|
describe "reading file security metadata for reporting on unix", :unix_only => true do
|
|
39
|
+
# According to POSIX standard created files get either the
|
|
40
|
+
# effective gid of the process or inherits the gid of the parent
|
|
41
|
+
# directory based on file system. Since it's hard to guess what
|
|
42
|
+
# would happen on each platform we create a dummy file and see
|
|
43
|
+
# what the group name should be.
|
|
44
|
+
before do
|
|
45
|
+
FileUtils.touch(path)
|
|
46
|
+
@expected_gid = File.stat(path).gid
|
|
47
|
+
@expected_group_name = Etc.getgrgid(@expected_gid).name
|
|
48
|
+
FileUtils.rm_rf(path)
|
|
49
|
+
end
|
|
50
|
+
|
|
18
51
|
context "when the target file doesn't exist" do
|
|
19
52
|
before do
|
|
20
53
|
resource.action(:create)
|
|
@@ -31,7 +64,7 @@ shared_examples_for "a securable resource with reporting" do
|
|
|
31
64
|
resource.run_action(:create)
|
|
32
65
|
# TODO: most stable way to specify?
|
|
33
66
|
resource.owner.should == Etc.getpwuid(Process.uid).name
|
|
34
|
-
resource.group.should ==
|
|
67
|
+
resource.group.should == @expected_group_name
|
|
35
68
|
resource.mode.should == "0#{default_mode}"
|
|
36
69
|
end
|
|
37
70
|
end
|
|
@@ -140,7 +173,7 @@ shared_examples_for "a securable resource with reporting" do
|
|
|
140
173
|
it "sets the current values on current resource as strings" do
|
|
141
174
|
# TODO: most stable way to specify?
|
|
142
175
|
current_resource.owner.should == Etc.getpwuid(Process.uid).name
|
|
143
|
-
current_resource.group.should ==
|
|
176
|
+
current_resource.group.should == @expected_group_name
|
|
144
177
|
current_resource.mode.should == "0#{((0100666 - File.umask) & 07777).to_s(8)}"
|
|
145
178
|
end
|
|
146
179
|
end
|
|
@@ -173,28 +206,23 @@ shared_examples_for "a securable resource with reporting" do
|
|
|
173
206
|
end
|
|
174
207
|
|
|
175
208
|
context "and group is specified with a String (group name)" do
|
|
176
|
-
|
|
177
|
-
let(:expected_group_name) { Etc.getgrgid(Process.gid).name }
|
|
178
|
-
|
|
179
209
|
before do
|
|
180
|
-
resource.group(expected_group_name)
|
|
210
|
+
resource.group(@expected_group_name)
|
|
181
211
|
end
|
|
182
212
|
|
|
183
213
|
it "sets the group on new_resource to the group name (String) of the group" do
|
|
184
|
-
current_resource.group.should == expected_group_name
|
|
214
|
+
current_resource.group.should == @expected_group_name
|
|
185
215
|
end
|
|
186
216
|
|
|
187
217
|
end
|
|
188
218
|
|
|
189
219
|
context "and group is specified with an Integer (gid)" do
|
|
190
|
-
let(:expected_gid) { Process.gid }
|
|
191
|
-
|
|
192
220
|
before do
|
|
193
|
-
resource.group(expected_gid)
|
|
221
|
+
resource.group(@expected_gid)
|
|
194
222
|
end
|
|
195
223
|
|
|
196
224
|
it "sets the group on new_resource to the gid (Integer)" do
|
|
197
|
-
current_resource.group.should == expected_gid
|
|
225
|
+
current_resource.group.should == @expected_gid
|
|
198
226
|
end
|
|
199
227
|
|
|
200
228
|
end
|
|
@@ -233,26 +261,6 @@ shared_examples_for "a securable resource with reporting" do
|
|
|
233
261
|
pending "windows reporting not yet fully supported"
|
|
234
262
|
end
|
|
235
263
|
|
|
236
|
-
ALL_EXPANDED_PERMISSIONS = ["generic read",
|
|
237
|
-
"generic write",
|
|
238
|
-
"generic execute",
|
|
239
|
-
"generic all",
|
|
240
|
-
"delete",
|
|
241
|
-
"read permissions",
|
|
242
|
-
"change permissions",
|
|
243
|
-
"take ownership",
|
|
244
|
-
"synchronize",
|
|
245
|
-
"access system security",
|
|
246
|
-
"read data / list directory",
|
|
247
|
-
"write data / add file",
|
|
248
|
-
"append data / add subdirectory",
|
|
249
|
-
"read extended attributes",
|
|
250
|
-
"write extended attributes",
|
|
251
|
-
"execute / traverse",
|
|
252
|
-
"delete child",
|
|
253
|
-
"read attributes",
|
|
254
|
-
"write attributes"]
|
|
255
|
-
|
|
256
264
|
|
|
257
265
|
context "when the target file doesn't exist" do
|
|
258
266
|
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: John Keiser (<jkeiser@opscode.com>)
|
|
3
|
+
# Author:: Ho-Sheng Hsiao (<hosh@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2012, 2013 Opscode, Inc.
|
|
5
|
+
# License:: Apache License, Version 2.0
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'tmpdir'
|
|
21
|
+
require 'fileutils'
|
|
22
|
+
require 'chef/config'
|
|
23
|
+
require 'chef_zero/rspec'
|
|
24
|
+
require 'json'
|
|
25
|
+
require 'support/shared/integration/knife_support'
|
|
26
|
+
require 'spec_helper'
|
|
27
|
+
|
|
28
|
+
module IntegrationSupport
|
|
29
|
+
include ChefZero::RSpec
|
|
30
|
+
|
|
31
|
+
def self.extended(base)
|
|
32
|
+
base.before :each do
|
|
33
|
+
# We mess with Chef::Config a lot. Save and restore it.
|
|
34
|
+
@old_chef_config = Chef::Config.configuration
|
|
35
|
+
Chef::Config.configuration = Chef::Config.configuration.dup
|
|
36
|
+
Chef::Config.repo_mode = nil
|
|
37
|
+
Chef::Config.versioned_cookbooks = nil
|
|
38
|
+
end
|
|
39
|
+
base.after :each do
|
|
40
|
+
Chef::Config.configuration = @old_chef_config
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def when_the_repository(description, *args, &block)
|
|
45
|
+
context "When the local repository #{description}", *args do
|
|
46
|
+
before :each do
|
|
47
|
+
raise "Can only create one directory per test" if @repository_dir
|
|
48
|
+
@repository_dir = Dir.mktmpdir('chef_repo')
|
|
49
|
+
@old_chef_repo_path = Chef::Config.chef_repo_path
|
|
50
|
+
@old_paths = {}
|
|
51
|
+
Chef::Config.chef_repo_path = @repository_dir
|
|
52
|
+
%w(client cookbook data_bag environment node role user).each do |object_name|
|
|
53
|
+
@old_paths[object_name] = Chef::Config["#{object_name}_path".to_sym]
|
|
54
|
+
Chef::Config["#{object_name}_path".to_sym] = nil
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
after :each do
|
|
59
|
+
if @repository_dir
|
|
60
|
+
begin
|
|
61
|
+
%w(client cookbook data_bag environment node role user).each do |object_name|
|
|
62
|
+
Chef::Config["#{object_name}_path".to_sym] = @old_paths[object_name]
|
|
63
|
+
end
|
|
64
|
+
Chef::Config.chef_repo_path = @old_chef_repo_path
|
|
65
|
+
FileUtils.remove_entry_secure(@repository_dir)
|
|
66
|
+
ensure
|
|
67
|
+
@old_chef_repo_path = nil
|
|
68
|
+
@old_paths = nil
|
|
69
|
+
@repository_dir = nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def directory(relative_path, &block)
|
|
75
|
+
old_parent_path = @parent_path
|
|
76
|
+
@parent_path = path_to(relative_path)
|
|
77
|
+
FileUtils.mkdir_p(@parent_path)
|
|
78
|
+
instance_eval(&block) if block
|
|
79
|
+
@parent_path = old_parent_path
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def file(relative_path, contents)
|
|
83
|
+
filename = path_to(relative_path)
|
|
84
|
+
dir = File.dirname(filename)
|
|
85
|
+
FileUtils.mkdir_p(dir) unless dir == '.'
|
|
86
|
+
File.open(filename, 'w') do |file|
|
|
87
|
+
raw = case contents
|
|
88
|
+
when Hash
|
|
89
|
+
JSON.pretty_generate(contents)
|
|
90
|
+
when Array
|
|
91
|
+
contents.join("\n")
|
|
92
|
+
else
|
|
93
|
+
contents
|
|
94
|
+
end
|
|
95
|
+
file.write(raw)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def symlink(relative_path, relative_dest)
|
|
100
|
+
filename = path_to(relative_path)
|
|
101
|
+
dir = File.dirname(filename)
|
|
102
|
+
FileUtils.mkdir_p(dir) unless dir == '.'
|
|
103
|
+
dest_filename = path_to(relative_dest)
|
|
104
|
+
File.symlink(dest_filename, filename)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def path_to(relative_path)
|
|
108
|
+
File.expand_path(relative_path, (@parent_path || @repository_dir))
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def self.path_to(relative_path)
|
|
112
|
+
File.expand_path(relative_path, (@parent_path || @repository_dir))
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def self.directory(relative_path, &block)
|
|
116
|
+
before :each do
|
|
117
|
+
directory(relative_path, &block)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def self.file(relative_path, contents)
|
|
122
|
+
before :each do
|
|
123
|
+
file(relative_path, contents)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def self.symlink(relative_path, relative_dest)
|
|
128
|
+
before :each do
|
|
129
|
+
symlink(relative_path, relative_dest)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def self.cwd(relative_path)
|
|
134
|
+
before :each do
|
|
135
|
+
@old_cwd = Dir.pwd
|
|
136
|
+
Dir.chdir(path_to(relative_path))
|
|
137
|
+
end
|
|
138
|
+
after :each do
|
|
139
|
+
Dir.chdir(@old_cwd)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
instance_eval(&block)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Versioned cookbooks
|
|
148
|
+
|
|
149
|
+
def with_versioned_cookbooks(_metadata = {}, &block)
|
|
150
|
+
_m = { :versioned_cookbooks => true }.merge(_metadata)
|
|
151
|
+
context 'with versioned cookbooks', _m do
|
|
152
|
+
before(:each) { Chef::Config[:versioned_cookbooks] = true }
|
|
153
|
+
after(:each) { Chef::Config[:versioned_cookbooks] = false }
|
|
154
|
+
instance_eval(&block)
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def without_versioned_cookbooks(_metadata = {}, &block)
|
|
159
|
+
_m = { :versioned_cookbooks => false }.merge(_metadata)
|
|
160
|
+
context 'with versioned cookbooks', _m do
|
|
161
|
+
# Just make sure this goes back to default
|
|
162
|
+
before(:each) { Chef::Config[:versioned_cookbooks] = false }
|
|
163
|
+
instance_eval(&block)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|