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,60 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Jesse Campbell (<hikeit@gmail.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2013 Jesse Campbell
|
|
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 'spec_helper'
|
|
20
|
+
|
|
21
|
+
describe Chef::Provider::RemoteFile::LocalFile do
|
|
22
|
+
|
|
23
|
+
let(:uri) { URI.parse("file:///nyan_cat.png") }
|
|
24
|
+
|
|
25
|
+
let(:new_resource) { Chef::Resource::RemoteFile.new("local file backend test (new_resource)") }
|
|
26
|
+
let(:current_resource) { Chef::Resource::RemoteFile.new("local file backend test (current_resource)") }
|
|
27
|
+
subject(:fetcher) { Chef::Provider::RemoteFile::LocalFile.new(uri, new_resource, current_resource) }
|
|
28
|
+
|
|
29
|
+
context "when first created" do
|
|
30
|
+
|
|
31
|
+
it "stores the uri it is passed" do
|
|
32
|
+
fetcher.uri.should == uri
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "stores the new_resource" do
|
|
36
|
+
fetcher.new_resource.should == new_resource
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "when fetching the object" do
|
|
42
|
+
|
|
43
|
+
let(:tempfile) { mock("Tempfile", :path => "/tmp/foo/bar/nyan.png") }
|
|
44
|
+
let(:chef_tempfile) { mock("Chef::FileContentManagement::Tempfile", :tempfile => tempfile) }
|
|
45
|
+
|
|
46
|
+
before do
|
|
47
|
+
current_resource.source("file:///nyan_cat.png")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "stages the local file to a temporary file" do
|
|
51
|
+
Chef::FileContentManagement::Tempfile.should_receive(:new).with(new_resource).and_return(chef_tempfile)
|
|
52
|
+
::FileUtils.should_receive(:cp).with(uri.path, tempfile.path)
|
|
53
|
+
|
|
54
|
+
result = fetcher.fetch
|
|
55
|
+
result.should == tempfile
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
-
#
|
|
3
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2008-2013 Opscode, Inc.
|
|
4
5
|
# License:: Apache License, Version 2.0
|
|
5
6
|
#
|
|
6
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -18,307 +19,44 @@
|
|
|
18
19
|
|
|
19
20
|
require 'spec_helper'
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
before(:each) do
|
|
23
|
-
@resource = Chef::Resource::RemoteFile.new("seattle")
|
|
24
|
-
@resource.path(File.expand_path(File.join(CHEF_SPEC_DATA, "seattle.txt")))
|
|
25
|
-
@resource.source("http://foo")
|
|
26
|
-
@node = Chef::Node.new
|
|
27
|
-
@node.name "latte"
|
|
22
|
+
require 'support/shared/unit/provider/file'
|
|
28
23
|
|
|
29
|
-
@events = Chef::EventDispatch::Dispatcher.new
|
|
30
|
-
@run_context = Chef::RunContext.new(@node, {}, @events)
|
|
31
24
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
describe Chef::Provider::RemoteFile do
|
|
26
|
+
let(:resource) do
|
|
27
|
+
resource = Chef::Resource::RemoteFile.new("seattle", @run_context)
|
|
28
|
+
resource.path(resource_path)
|
|
29
|
+
resource.source("http://foo")
|
|
30
|
+
resource.cookbook_name = "monkey"
|
|
31
|
+
resource
|
|
35
32
|
end
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
@provider.current_resource = @resource.dup
|
|
40
|
-
@resource.checksum("0fd012fdc96e96f8f7cf2046522a54aed0ce470224513e45da6bc1a17a4924aa")
|
|
41
|
-
@provider.current_resource.checksum("0fd012fdc96e96f8f7cf2046522a54aed0ce470224513e45da6bc1a17a4924aa")
|
|
42
|
-
@provider.current_resource_matches_target_checksum?.should be_true
|
|
43
|
-
end
|
|
34
|
+
let(:content) do
|
|
35
|
+
content = mock('Chef::Provider::File::Content::RemoteFile')
|
|
44
36
|
end
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
after do
|
|
65
|
-
@tempfile.close!
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
before do
|
|
69
|
-
@resource.source("http://opscode.com/seattle.txt")
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
describe "and the target location's enclosing directory does not exist" do
|
|
73
|
-
before do
|
|
74
|
-
@resource.path("/tmp/this/path/does/not/exist/file.txt")
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "raises a specific error describing the problem" do
|
|
78
|
-
lambda {@provider.run_action(:create)}.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
shared_examples_for "source specified with multiple URIs" do
|
|
83
|
-
it "should try to download the next URI when the first one fails" do
|
|
84
|
-
@rest.should_receive(:streaming_request).with("http://foo", {}).once.and_raise(SocketError)
|
|
85
|
-
@rest.should_receive(:streaming_request).with("http://bar", {}).once.and_return(@tempfile)
|
|
86
|
-
@provider.run_action(:create)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should raise an exception when all the URIs fail" do
|
|
90
|
-
@rest.should_receive(:streaming_request).with("http://foo", {}).once.and_raise(SocketError)
|
|
91
|
-
@rest.should_receive(:streaming_request).with("http://bar", {}).once.and_raise(SocketError)
|
|
92
|
-
lambda { @provider.run_action(:create) }.should raise_error(SocketError)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "should download from only one URI when the first one works" do
|
|
96
|
-
@rest.should_receive(:streaming_request).once.and_return(@tempfile)
|
|
97
|
-
@provider.run_action(:create)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
describe "and the source specifies multiple URIs using multiple arguments" do
|
|
103
|
-
it_should_behave_like "source specified with multiple URIs"
|
|
104
|
-
|
|
105
|
-
before(:each) do
|
|
106
|
-
@resource.source("http://foo", "http://bar")
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
describe "and the source specifies multiple URIs using an array" do
|
|
111
|
-
it_should_behave_like "source specified with multiple URIs"
|
|
112
|
-
|
|
113
|
-
before(:each) do
|
|
114
|
-
@resource.source([ "http://foo", "http://bar" ])
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
describe "and the resource specifies a checksum" do
|
|
119
|
-
|
|
120
|
-
describe "and the existing file matches the checksum exactly" do
|
|
121
|
-
before do
|
|
122
|
-
@resource.checksum("0fd012fdc96e96f8f7cf2046522a54aed0ce470224513e45da6bc1a17a4924aa")
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
it "does not download the file" do
|
|
126
|
-
@rest.should_not_receive(:fetch).with("http://opscode.com/seattle.txt").and_return(@tempfile)
|
|
127
|
-
@provider.run_action(:create)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "does not update the resource" do
|
|
131
|
-
@provider.run_action(:create)
|
|
132
|
-
@provider.new_resource.should_not be_updated
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
describe "and the existing file matches the given partial checksum" do
|
|
138
|
-
before do
|
|
139
|
-
@resource.checksum("0fd012fd")
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "should not download the file if the checksum is a partial match from the beginning" do
|
|
143
|
-
@rest.should_not_receive(:fetch).with("http://opscode.com/seattle.txt").and_return(@tempfile)
|
|
144
|
-
@provider.run_action(:create)
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it "does not update the resource" do
|
|
148
|
-
@provider.run_action(:create)
|
|
149
|
-
@provider.new_resource.should_not be_updated
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
describe "and the existing file doesn't match the given checksum" do
|
|
155
|
-
it "downloads the file" do
|
|
156
|
-
@resource.checksum("this hash doesn't match")
|
|
157
|
-
@rest.should_receive(:streaming_request).with("http://opscode.com/seattle.txt", {}).and_return(@tempfile)
|
|
158
|
-
@provider.stub!(:update_new_file_state)
|
|
159
|
-
@provider.run_action(:create)
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
it "does not consider the checksum a match if the matching string is offset" do
|
|
163
|
-
# i.e., the existing file is "0fd012fdc96e96f8f7cf2046522a54aed0ce470224513e45da6bc1a17a4924aa"
|
|
164
|
-
@resource.checksum("fd012fd")
|
|
165
|
-
@rest.should_receive(:streaming_request).with("http://opscode.com/seattle.txt", {}).and_return(@tempfile)
|
|
166
|
-
@provider.stub!(:update_new_file_state)
|
|
167
|
-
@provider.run_action(:create)
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
describe "and the resource doesn't specify a checksum" do
|
|
174
|
-
it "should download the file from the remote URL" do
|
|
175
|
-
@resource.checksum(nil)
|
|
176
|
-
@rest.should_receive(:streaming_request).with("http://opscode.com/seattle.txt", {}).and_return(@tempfile)
|
|
177
|
-
@provider.run_action(:create)
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
# CHEF-3140
|
|
182
|
-
# Some servers return tarballs as content type tar and encoding gzip, which
|
|
183
|
-
# is totally wrong. When this happens and gzip isn't disabled, Chef::REST
|
|
184
|
-
# will decompress the file for you, which is not at all what you expected
|
|
185
|
-
# to happen (you end up with an uncomressed tar archive instead of the
|
|
186
|
-
# gzipped tar archive you expected). To work around this behavior, we
|
|
187
|
-
# detect when users are fetching gzipped files and turn off gzip in
|
|
188
|
-
# Chef::REST.
|
|
189
|
-
|
|
190
|
-
context "and the target file is a tarball" do
|
|
191
|
-
before do
|
|
192
|
-
@resource.path(File.expand_path(File.join(CHEF_SPEC_DATA, "seattle.tar.gz")))
|
|
193
|
-
Chef::REST.should_receive(:new).with("http://opscode.com/seattle.txt", nil, nil, :disable_gzip => true).and_return(@rest)
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
it "disables gzip in the http client" do
|
|
197
|
-
@provider.action_create
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
context "and the source appears to be a tarball" do
|
|
203
|
-
before do
|
|
204
|
-
@resource.source("http://example.com/tarball.tgz")
|
|
205
|
-
Chef::REST.should_receive(:new).with("http://example.com/tarball.tgz", nil, nil, :disable_gzip => true).and_return(@rest)
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
it "disables gzip in the http client" do
|
|
209
|
-
@provider.action_create
|
|
210
|
-
end
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "should raise an exception if it's any other kind of retriable response than 304" do
|
|
214
|
-
r = Net::HTTPMovedPermanently.new("one", "two", "three")
|
|
215
|
-
e = Net::HTTPRetriableError.new("301", r)
|
|
216
|
-
@rest.stub!(:streaming_request).and_raise(e)
|
|
217
|
-
lambda { @provider.run_action(:create) }.should raise_error(Net::HTTPRetriableError)
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it "should raise an exception if anything else happens" do
|
|
221
|
-
r = Net::HTTPBadRequest.new("one", "two", "three")
|
|
222
|
-
e = Net::HTTPServerException.new("fake exception", r)
|
|
223
|
-
@rest.stub!(:streaming_request).and_raise(e)
|
|
224
|
-
lambda { @provider.run_action(:create) }.should raise_error(Net::HTTPServerException)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
it "should checksum the raw file" do
|
|
228
|
-
@provider.should_receive(:checksum).with(@tempfile.path).and_return("0fd012fdc96e96f8f7cf2046522a54aed0ce470224513e45da6bc1a17a4924aa")
|
|
229
|
-
@provider.run_action(:create)
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
describe "when the target file does not exist" do
|
|
233
|
-
before do
|
|
234
|
-
::File.stub!(:exists?).with(@resource.path).and_return(false)
|
|
235
|
-
@provider.stub!(:get_from_server).and_return(@tempfile)
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
it "should copy the raw file to the new resource" do
|
|
239
|
-
FileUtils.should_receive(:cp).with(@tempfile.path, @resource.path).and_return(true)
|
|
240
|
-
@provider.stub!(:update_new_file_state)
|
|
241
|
-
@provider.run_action(:create)
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
it "should set the new resource to updated" do
|
|
245
|
-
@provider.stub!(:update_new_file_state)
|
|
246
|
-
@provider.run_action(:create)
|
|
247
|
-
@resource.should be_updated
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
describe "and create_if_missing is invoked" do
|
|
251
|
-
it "should invoke action_create" do
|
|
252
|
-
@provider.should_receive(:action_create)
|
|
253
|
-
@provider.run_action(:create_if_missing)
|
|
254
|
-
end
|
|
255
|
-
end
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
describe "when the target file already exists" do
|
|
259
|
-
before do
|
|
260
|
-
::File.stub!(:exists?).with(@resource.path).and_return(true)
|
|
261
|
-
@provider.stub!(:diff_current).and_return([
|
|
262
|
-
"--- /tmp/foo 2012-08-30 21:28:17.632782551 +0000",
|
|
263
|
-
"+++ /tmp/bar 2012-08-30 21:28:20.816975437 +0000",
|
|
264
|
-
"@@ -1 +1 @@",
|
|
265
|
-
"-foo bar",
|
|
266
|
-
"+bar foo"
|
|
267
|
-
])
|
|
268
|
-
@provider.stub!(:get_from_server).and_return(@tempfile)
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
describe "and create_if_missing is invoked" do
|
|
272
|
-
it "should take no action" do
|
|
273
|
-
@provider.should_not_receive(:action_create)
|
|
274
|
-
@provider.run_action(:create_if_missing)
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
describe "and the file downloaded from the remote is identical to the current" do
|
|
279
|
-
it "shouldn't backup the original file" do
|
|
280
|
-
@provider.should_not_receive(:backup).with(@resource.path)
|
|
281
|
-
@provider.run_action(:create)
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
it "doesn't mark the resource as updated" do
|
|
285
|
-
@provider.run_action(:create)
|
|
286
|
-
@provider.new_resource.should_not be_updated
|
|
287
|
-
end
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
describe "and the checksum doesn't match" do
|
|
291
|
-
before do
|
|
292
|
-
sha2_256 = "0fd012fdc96e96f8f7cf2046522a54aed0ce470224513e45da6bc1a17a4924aa-NO_MATCHY"
|
|
293
|
-
@provider.current_resource.checksum(sha2_256)
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
it "should backup the original file" do
|
|
297
|
-
@provider.stub!(:update_new_file_state)
|
|
298
|
-
@provider.should_receive(:backup).with(@resource.path).and_return(true)
|
|
299
|
-
@provider.run_action(:create)
|
|
300
|
-
end
|
|
301
|
-
|
|
302
|
-
it "should copy the raw file to the new resource" do
|
|
303
|
-
@provider.stub!(:update_new_file_state)
|
|
304
|
-
FileUtils.should_receive(:cp).with(@tempfile.path, @resource.path).and_return(true)
|
|
305
|
-
@provider.run_action(:create)
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
it "should set the new resource to updated" do
|
|
309
|
-
@provider.stub!(:update_new_file_state)
|
|
310
|
-
@provider.run_action(:create)
|
|
311
|
-
@resource.should be_updated
|
|
312
|
-
end
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it "should set permissions" do
|
|
316
|
-
@provider.should_receive(:set_all_access_controls).and_return(true)
|
|
317
|
-
@provider.run_action(:create)
|
|
318
|
-
end
|
|
38
|
+
let(:node) { double('Chef::Node') }
|
|
39
|
+
let(:events) { double('Chef::Events').as_null_object } # mock all the methods
|
|
40
|
+
let(:run_context) { double('Chef::RunContext', :node => node, :events => events) }
|
|
41
|
+
let(:enclosing_directory) {
|
|
42
|
+
canonicalize_path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates")))
|
|
43
|
+
}
|
|
44
|
+
let(:resource_path) {
|
|
45
|
+
canonicalize_path(File.expand_path(File.join(enclosing_directory, "seattle.txt")))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
subject(:provider) do
|
|
49
|
+
provider = described_class.new(resource, run_context)
|
|
50
|
+
provider.stub!(:content).and_return(content)
|
|
51
|
+
provider.stub!(:update_new_resource_checksum).and_return(nil) # Otherwise it doesn't behave like a File provider
|
|
52
|
+
provider
|
|
53
|
+
end
|
|
319
54
|
|
|
55
|
+
before do
|
|
56
|
+
Chef::FileCache.stub!(:load).with("remote_file/#{resource.name}").and_raise(Chef::Exceptions::FileNotFound)
|
|
57
|
+
end
|
|
320
58
|
|
|
321
|
-
|
|
59
|
+
it_behaves_like Chef::Provider::File
|
|
322
60
|
|
|
323
|
-
end
|
|
324
61
|
end
|
|
62
|
+
|
|
@@ -108,6 +108,21 @@ describe Chef::Provider::Route do
|
|
|
108
108
|
@provider.run_action(:add)
|
|
109
109
|
@new_resource.should_not be_updated
|
|
110
110
|
end
|
|
111
|
+
|
|
112
|
+
it "should not delete config file for :add action (CHEF-3332)" do
|
|
113
|
+
@node.automatic_attrs[:platform] = 'centos'
|
|
114
|
+
|
|
115
|
+
route_file = StringIO.new
|
|
116
|
+
File.should_receive(:new).and_return(route_file)
|
|
117
|
+
@resource_add = Chef::Resource::Route.new('192.168.1.0/24 via 192.168.0.1')
|
|
118
|
+
@run_context.resource_collection << @resource_add
|
|
119
|
+
@provider.stub!(:run_command).and_return(true)
|
|
120
|
+
|
|
121
|
+
@resource_add.action(:add)
|
|
122
|
+
@provider.run_action(:add)
|
|
123
|
+
route_file.string.split("\n").should have(1).items
|
|
124
|
+
route_file.string.should match(/^192\.168\.1\.0\/24 via 192\.168\.0\.1$/)
|
|
125
|
+
end
|
|
111
126
|
end
|
|
112
127
|
|
|
113
128
|
describe Chef::Provider::Route, "action_delete" do
|
|
@@ -140,12 +155,12 @@ describe Chef::Provider::Route do
|
|
|
140
155
|
end
|
|
141
156
|
|
|
142
157
|
it "should include ' via $gateway ' when a gateway is specified" do
|
|
143
|
-
@provider.generate_command(:add).should match(/\svia\s#{@new_resource.gateway}\s/)
|
|
158
|
+
@provider.generate_command(:add).should match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
|
|
144
159
|
end
|
|
145
160
|
|
|
146
161
|
it "should not include ' via $gateway ' when a gateway is not specified" do
|
|
147
162
|
@new_resource.stub!(:gateway).and_return(nil)
|
|
148
|
-
@provider.generate_command(:add).should_not match(/\svia\s#{@new_resource.gateway}\s/)
|
|
163
|
+
@provider.generate_command(:add).should_not match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
|
|
149
164
|
end
|
|
150
165
|
end
|
|
151
166
|
|
|
@@ -161,12 +176,12 @@ describe Chef::Provider::Route do
|
|
|
161
176
|
end
|
|
162
177
|
|
|
163
178
|
it "should include ' via $gateway ' when a gateway is specified" do
|
|
164
|
-
@provider.generate_command(:delete).should match(/\svia\s#{@new_resource.gateway}\s/)
|
|
179
|
+
@provider.generate_command(:delete).should match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
|
|
165
180
|
end
|
|
166
181
|
|
|
167
182
|
it "should not include ' via $gateway ' when a gateway is not specified" do
|
|
168
183
|
@new_resource.stub!(:gateway).and_return(nil)
|
|
169
|
-
@provider.generate_command(:delete).should_not match(/\svia\s#{@new_resource.gateway}\s/)
|
|
184
|
+
@provider.generate_command(:delete).should_not match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
|
|
170
185
|
end
|
|
171
186
|
end
|
|
172
187
|
|
|
@@ -181,11 +196,11 @@ describe Chef::Provider::Route do
|
|
|
181
196
|
end
|
|
182
197
|
|
|
183
198
|
it "should include ' via $gateway ' when a gateway is specified" do
|
|
184
|
-
@provider.config_file_contents(:add, { :target => @new_resource.target, :gateway => @new_resource.gateway}).should match(/\svia\s#{@new_resource.gateway}\n/)
|
|
199
|
+
@provider.config_file_contents(:add, { :target => @new_resource.target, :gateway => @new_resource.gateway}).should match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\n/)
|
|
185
200
|
end
|
|
186
201
|
|
|
187
202
|
it "should not include ' via $gateway ' when a gateway is not specified" do
|
|
188
|
-
@provider.generate_command(:add).should_not match(/\svia\s#{@new_resource.gateway}\n/)
|
|
203
|
+
@provider.generate_command(:add).should_not match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\n/)
|
|
189
204
|
end
|
|
190
205
|
end
|
|
191
206
|
|
|
@@ -217,11 +232,12 @@ describe Chef::Provider::Route do
|
|
|
217
232
|
@run_context.resource_collection << Chef::Resource::Route.new('192.168.2.0/24 via 192.168.0.1')
|
|
218
233
|
@run_context.resource_collection << Chef::Resource::Route.new('192.168.3.0/24 via 192.168.0.1')
|
|
219
234
|
|
|
235
|
+
@provider.action = :add
|
|
220
236
|
@provider.generate_config
|
|
221
237
|
route_file.string.split("\n").should have(3).items
|
|
222
|
-
route_file.string.should match(/^192
|
|
223
|
-
route_file.string.should match(/^192
|
|
224
|
-
route_file.string.should match(/^192
|
|
238
|
+
route_file.string.should match(/^192\.168\.1\.0\/24 via 192\.168\.0\.1$/)
|
|
239
|
+
route_file.string.should match(/^192\.168\.2\.0\/24 via 192\.168\.0\.1$/)
|
|
240
|
+
route_file.string.should match(/^192\.168\.3\.0\/24 via 192\.168\.0\.1$/)
|
|
225
241
|
end
|
|
226
242
|
end
|
|
227
243
|
end
|