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,297 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 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 'spec_helper'
|
|
21
|
+
require 'webrick'
|
|
22
|
+
|
|
23
|
+
module AptServer
|
|
24
|
+
def enable_testing_apt_source
|
|
25
|
+
File.open("/etc/apt/sources.list.d/chef-integration-test.list", "w+") do |f|
|
|
26
|
+
f.puts "deb http://localhost:9000/ sid main"
|
|
27
|
+
end
|
|
28
|
+
# Magic to update apt cache for only our repo
|
|
29
|
+
shell_out!("apt-get update " +
|
|
30
|
+
'-o Dir::Etc::sourcelist="sources.list.d/chef-integration-test.list" ' +
|
|
31
|
+
'-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def disable_testing_apt_source
|
|
35
|
+
FileUtils.rm("/etc/apt/sources.list.d/chef-integration-test.list")
|
|
36
|
+
rescue Errno::ENOENT
|
|
37
|
+
puts("Attempted to remove integration test from /etc/apt/sources.list.d but it didn't exist")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def tcp_test_port(hostname, port)
|
|
41
|
+
tcp_socket = TCPSocket.new(hostname, port)
|
|
42
|
+
true
|
|
43
|
+
rescue Errno::ETIMEDOUT
|
|
44
|
+
false
|
|
45
|
+
rescue Errno::ECONNREFUSED
|
|
46
|
+
false
|
|
47
|
+
ensure
|
|
48
|
+
tcp_socket && tcp_socket.close
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def apt_server
|
|
52
|
+
@apt_server ||= WEBrick::HTTPServer.new(
|
|
53
|
+
:Port => 9000,
|
|
54
|
+
:DocumentRoot => apt_data_dir + "/var/www/apt",
|
|
55
|
+
# Make WEBrick quiet, comment out for debug.
|
|
56
|
+
:Logger => Logger.new(StringIO.new),
|
|
57
|
+
:AccessLog => [ StringIO.new, WEBrick::AccessLog::COMMON_LOG_FORMAT ]
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def run_apt_server
|
|
62
|
+
apt_server.start
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def start_apt_server
|
|
66
|
+
@apt_server_thread = Thread.new do
|
|
67
|
+
run_apt_server
|
|
68
|
+
end
|
|
69
|
+
until tcp_test_port("localhost", 9000) do
|
|
70
|
+
if @apt_server_thread.alive?
|
|
71
|
+
sleep 1
|
|
72
|
+
else
|
|
73
|
+
@apt_server_thread.join
|
|
74
|
+
raise "apt server failed to start"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def stop_apt_server
|
|
80
|
+
apt_server.shutdown
|
|
81
|
+
@apt_server_thread.join
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def apt_data_dir
|
|
85
|
+
File.join(CHEF_SPEC_DATA, "apt")
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
metadata = { :unix_only => true,
|
|
90
|
+
:requires_root => true,
|
|
91
|
+
:provider => {:package => Chef::Provider::Package::Apt},
|
|
92
|
+
:arch => "x86_64" # test packages are 64bit
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
describe Chef::Resource::Package, metadata do
|
|
96
|
+
include Chef::Mixin::ShellOut
|
|
97
|
+
|
|
98
|
+
def chef_test_dpkg_installed?
|
|
99
|
+
shell_out("dpkg -l chef-integration-test").status.success?
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def dpkg_should_be_installed(pkg_name)
|
|
103
|
+
shell_out!("dpkg -l #{pkg_name}")
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
context "with a remote package source" do
|
|
108
|
+
|
|
109
|
+
include AptServer
|
|
110
|
+
|
|
111
|
+
before(:all) do
|
|
112
|
+
# Disable mixlib-shellout live streams
|
|
113
|
+
Chef::Log.level = :warn
|
|
114
|
+
start_apt_server
|
|
115
|
+
enable_testing_apt_source
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
after(:all) do
|
|
119
|
+
stop_apt_server
|
|
120
|
+
disable_testing_apt_source
|
|
121
|
+
shell_out!("apt-get clean")
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
after do
|
|
126
|
+
shell_out!("dpkg -r chef-integration-test")
|
|
127
|
+
shell_out("dpkg --clear-avail")
|
|
128
|
+
shell_out!("apt-get clean")
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
let(:node) do
|
|
132
|
+
n = Chef::Node.new
|
|
133
|
+
n.consume_external_attrs(OHAI_SYSTEM.data.dup, {})
|
|
134
|
+
n
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
let(:events) do
|
|
138
|
+
Chef::EventDispatch::Dispatcher.new
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# TODO: lots of duplication from client.rb;
|
|
142
|
+
# All of this must be setup for preseed files to get found
|
|
143
|
+
let(:cookbook_collection) do
|
|
144
|
+
cookbook_path = File.join(CHEF_SPEC_DATA, "cookbooks")
|
|
145
|
+
cl = Chef::CookbookLoader.new(cookbook_path)
|
|
146
|
+
cl.load_cookbooks
|
|
147
|
+
Chef::Cookbook::FileVendor.on_create do |manifest|
|
|
148
|
+
Chef::Cookbook::FileSystemFileVendor.new(manifest, cookbook_path)
|
|
149
|
+
end
|
|
150
|
+
Chef::CookbookCollection.new(cl)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
let(:run_context) do
|
|
154
|
+
Chef::RunContext.new(node, cookbook_collection, events)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def base_resource
|
|
158
|
+
r = Chef::Resource::Package.new("chef-integration-test", run_context)
|
|
159
|
+
# The apt repository in the spec data is not gpg signed, so we need to
|
|
160
|
+
# force apt to accept the package:
|
|
161
|
+
r.options("--force-yes")
|
|
162
|
+
r
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
let(:package_resource) do
|
|
166
|
+
base_resource
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# it "results in a usable apt server" do
|
|
170
|
+
# shell_out!("apt-get install -q -y --force-yes chef-integration-test ", :env => { "DEBIAN_FRONTEND" => "noninteractive" })
|
|
171
|
+
# shell_out!("dpkg -l chef-integration-test")
|
|
172
|
+
# end
|
|
173
|
+
|
|
174
|
+
context "when the package is not yet installed" do
|
|
175
|
+
it "installs the package with action :install" do
|
|
176
|
+
package_resource.run_action(:install)
|
|
177
|
+
shell_out!("dpkg -l chef-integration-test")
|
|
178
|
+
package_resource.should be_updated_by_last_action
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "installs the package for action :upgrade" do
|
|
182
|
+
package_resource.run_action(:upgrade)
|
|
183
|
+
shell_out!("dpkg -l chef-integration-test")
|
|
184
|
+
package_resource.should be_updated_by_last_action
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "does nothing for action :remove" do
|
|
188
|
+
package_resource.run_action(:remove)
|
|
189
|
+
shell_out!("dpkg -l chef-integration-test", :returns => [1])
|
|
190
|
+
package_resource.should_not be_updated_by_last_action
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "does nothing for action :purge" do
|
|
194
|
+
package_resource.run_action(:purge)
|
|
195
|
+
shell_out!("dpkg -l chef-integration-test", :returns => [1])
|
|
196
|
+
package_resource.should_not be_updated_by_last_action
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
context "and a not-available package version is specified" do
|
|
200
|
+
let(:package_resource) do
|
|
201
|
+
r = base_resource
|
|
202
|
+
r.version("2.0")
|
|
203
|
+
r
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it "raises a reasonable error for action :install" do
|
|
207
|
+
expect do
|
|
208
|
+
package_resource.run_action(:install)
|
|
209
|
+
end.to raise_error(Chef::Exceptions::Exec)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
describe "when preseeding the install" do
|
|
215
|
+
|
|
216
|
+
let(:file_cache_path) { Dir.mktmpdir }
|
|
217
|
+
|
|
218
|
+
before do
|
|
219
|
+
@old_config = Chef::Config.configuration.dup
|
|
220
|
+
Chef::Config[:file_cache_path] = file_cache_path
|
|
221
|
+
debconf_reset = 'chef-integration-test chef-integration-test/sample-var string "INVALID"'
|
|
222
|
+
shell_out!("echo #{debconf_reset} |debconf-set-selections")
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
after do
|
|
226
|
+
FileUtils.rm_rf(file_cache_path)
|
|
227
|
+
Chef::Config.configuration = @old_config
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
context "with a preseed file" do
|
|
231
|
+
|
|
232
|
+
let(:package_resource) do
|
|
233
|
+
r = base_resource
|
|
234
|
+
r.cookbook_name = "preseed"
|
|
235
|
+
r.response_file("preseed-file.seed")
|
|
236
|
+
r
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
it "preseeds the package, then installs it" do
|
|
240
|
+
package_resource.run_action(:install)
|
|
241
|
+
cmd = shell_out!("debconf-show chef-integration-test")
|
|
242
|
+
cmd.stdout.should include('chef-integration-test/sample-var: "hello world"')
|
|
243
|
+
package_resource.should be_updated_by_last_action
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
context "and the preseed file exists and is up-to-date" do
|
|
247
|
+
|
|
248
|
+
before do
|
|
249
|
+
# Code here is duplicated from the implementation. Not great, but
|
|
250
|
+
# it should at least fail if the code gets out of sync.
|
|
251
|
+
source = File.join(CHEF_SPEC_DATA, "cookbooks/preseed/files/default/preseed-file.seed")
|
|
252
|
+
file_cache_dir = Chef::FileCache.create_cache_path("preseed/preseed")
|
|
253
|
+
dest = "#{file_cache_dir}/chef-integration-test-1.1-1.seed"
|
|
254
|
+
FileUtils.cp(source, dest)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
it "does not update the package configuration" do
|
|
258
|
+
package_resource.run_action(:install)
|
|
259
|
+
cmd = shell_out!("debconf-show chef-integration-test")
|
|
260
|
+
cmd.stdout.should include('chef-integration-test/sample-var: INVALID')
|
|
261
|
+
package_resource.should be_updated_by_last_action
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
context "with a preseed template" do
|
|
269
|
+
|
|
270
|
+
let(:package_resource) do
|
|
271
|
+
r = base_resource
|
|
272
|
+
r.cookbook_name = "preseed"
|
|
273
|
+
r.response_file("preseed-template.seed")
|
|
274
|
+
r
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
before do
|
|
278
|
+
node.set[:preseed_value] = "FROM TEMPLATE"
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
it "preseeds the package, then installs it" do
|
|
282
|
+
package_resource.run_action(:install)
|
|
283
|
+
cmd = shell_out!("debconf-show chef-integration-test")
|
|
284
|
+
cmd.stdout.should include('chef-integration-test/sample-var: "FROM TEMPLATE"')
|
|
285
|
+
package_resource.should be_updated_by_last_action
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Edwards (<adamed@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2013 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'spec_helper'
|
|
20
|
+
require 'functional/resource/batch_spec.rb'
|
|
21
|
+
|
|
22
|
+
describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
23
|
+
|
|
24
|
+
include_context Chef::Resource::WindowsScript
|
|
25
|
+
|
|
26
|
+
let(:successful_executable_script_content) { "#{ENV['SystemRoot']}\\system32\\attrib.exe $env:systemroot" }
|
|
27
|
+
let(:failed_executable_script_content) { "#{ENV['SystemRoot']}\\system32\\attrib.exe /badargument" }
|
|
28
|
+
let(:processor_architecture_script_content) { "echo $env:PROCESSOR_ARCHITECTURE" }
|
|
29
|
+
let(:native_architecture_script_content) { "echo $env:PROCESSOR_ARCHITECTUREW6432" }
|
|
30
|
+
let(:cmdlet_exit_code_not_found_content) { "get-item '.\\thisdoesnotexist'" }
|
|
31
|
+
let(:cmdlet_exit_code_success_content) { "get-item ." }
|
|
32
|
+
let(:windows_process_exit_code_success_content) { "#{ENV['SystemRoot']}\\system32\\attrib.exe $env:systemroot" }
|
|
33
|
+
let(:windows_process_exit_code_not_found_content) { "findstr /notavalidswitch" }
|
|
34
|
+
# Note that process exit codes on 32-bit Win2k3 cannot
|
|
35
|
+
# exceed maximum value of signed integer
|
|
36
|
+
let(:arbitrary_nonzero_process_exit_code) { 4193 }
|
|
37
|
+
let(:arbitrary_nonzero_process_exit_code_content) { "exit #{arbitrary_nonzero_process_exit_code}" }
|
|
38
|
+
let(:invalid_powershell_interpreter_flag) { "/thisflagisinvalid" }
|
|
39
|
+
let(:valid_powershell_interpreter_flag) { "-Sta" }
|
|
40
|
+
let!(:resource) do
|
|
41
|
+
r = Chef::Resource::WindowsScript::PowershellScript.new("Powershell resource functional test", @run_context)
|
|
42
|
+
r.code(successful_executable_script_content)
|
|
43
|
+
r
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "when the run action is invoked on Windows" do
|
|
47
|
+
it "successfully executes a non-cmdlet Windows binary as the last command of the script" do
|
|
48
|
+
resource.code(successful_executable_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
|
49
|
+
resource.returns(0)
|
|
50
|
+
resource.run_action(:run)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "returns the process exit code" do
|
|
54
|
+
resource.code(arbitrary_nonzero_process_exit_code_content)
|
|
55
|
+
resource.returns(arbitrary_nonzero_process_exit_code)
|
|
56
|
+
resource.run_action(:run)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "returns 0 if the last command was a cmdlet that succeeded" do
|
|
60
|
+
resource.code(cmdlet_exit_code_success_content)
|
|
61
|
+
resource.returns(0)
|
|
62
|
+
resource.run_action(:run)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "returns 0 if the last command was a cmdlet that succeeded and was preceded by a non-cmdlet Windows binary that failed" do
|
|
66
|
+
resource.code([windows_process_exit_code_not_found_content, cmdlet_exit_code_success_content].join(';'))
|
|
67
|
+
resource.returns(0)
|
|
68
|
+
resource.run_action(:run)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "returns 1 if the last command was a cmdlet that failed" do
|
|
72
|
+
resource.code(cmdlet_exit_code_not_found_content)
|
|
73
|
+
resource.returns(1)
|
|
74
|
+
resource.run_action(:run)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "returns 1 if the last command was a cmdlet that failed and was preceded by a successfully executed non-cmdlet Windows binary" do
|
|
78
|
+
resource.code([windows_process_exit_code_success_content, cmdlet_exit_code_not_found_content].join(';'))
|
|
79
|
+
resource.returns(1)
|
|
80
|
+
resource.run_action(:run)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# This somewhat ambiguous case, two failures of different types,
|
|
84
|
+
# seems to violate the principle of returning the status of the
|
|
85
|
+
# last line executed -- in this case, we return the status of the
|
|
86
|
+
# second to last line. This happens because Powershell gives no
|
|
87
|
+
# way for us to determine whether the last operation was a cmdlet
|
|
88
|
+
# or Windows process. Because the latter gives more specified
|
|
89
|
+
# errors than 0 or 1, we return that instead, which is acceptable
|
|
90
|
+
# since callers can test for nonzero rather than testing for 1.
|
|
91
|
+
it "returns 1 if the last command was a cmdlet that failed and was preceded by an unsuccessfully executed non-cmdlet Windows binary" do
|
|
92
|
+
resource.code([arbitrary_nonzero_process_exit_code_content,cmdlet_exit_code_not_found_content].join(';'))
|
|
93
|
+
resource.returns(arbitrary_nonzero_process_exit_code)
|
|
94
|
+
resource.run_action(:run)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "returns 0 if the last command was a non-cmdlet Windows binary that succeeded and was preceded by a failed cmdlet" do
|
|
98
|
+
resource.code([cmdlet_exit_code_success_content, arbitrary_nonzero_process_exit_code_content].join(';'))
|
|
99
|
+
resource.returns(arbitrary_nonzero_process_exit_code)
|
|
100
|
+
resource.run_action(:run)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "returns a specific error code if the last command was a non-cmdlet Windows binary that failed and was preceded by cmdlet that succeeded" do
|
|
104
|
+
resource.code([cmdlet_exit_code_success_content, arbitrary_nonzero_process_exit_code_content].join(';'))
|
|
105
|
+
resource.returns(arbitrary_nonzero_process_exit_code)
|
|
106
|
+
resource.run_action(:run)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "returns a specific error code if the last command was a non-cmdlet Windows binary that failed and was preceded by cmdlet that failed" do
|
|
110
|
+
resource.code([cmdlet_exit_code_not_found_content, arbitrary_nonzero_process_exit_code_content].join(';'))
|
|
111
|
+
resource.returns(arbitrary_nonzero_process_exit_code)
|
|
112
|
+
resource.run_action(:run)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "executes a script with a 64-bit process on a 64-bit OS, otherwise a 32-bit process" do
|
|
116
|
+
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
|
117
|
+
resource.returns(0)
|
|
118
|
+
resource.run_action(:run)
|
|
119
|
+
|
|
120
|
+
is_64_bit = (ENV['PROCESSOR_ARCHITECTURE'] == 'AMD64') || (ENV['PROCESSOR_ARCHITEW6432'] == 'AMD64')
|
|
121
|
+
|
|
122
|
+
detected_64_bit = source_contains_case_insensitive_content?( get_script_output, 'AMD64' )
|
|
123
|
+
|
|
124
|
+
is_64_bit.should == detected_64_bit
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "returns 1 if an invalid flag is passed to the interpreter" do
|
|
128
|
+
resource.code(cmdlet_exit_code_success_content)
|
|
129
|
+
resource.flags(invalid_powershell_interpreter_flag)
|
|
130
|
+
resource.returns(1)
|
|
131
|
+
resource.run_action(:run)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "returns 0 if a valid flag is passed to the interpreter" do
|
|
135
|
+
resource.code(cmdlet_exit_code_success_content)
|
|
136
|
+
resource.flags(valid_powershell_interpreter_flag)
|
|
137
|
+
resource.returns(0)
|
|
138
|
+
resource.run_action(:run)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
context "when running on a 32-bit version of Windows", :windows32_only do
|
|
143
|
+
|
|
144
|
+
it "executes a script with a 32-bit process if process architecture :i386 is specified" do
|
|
145
|
+
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
|
146
|
+
resource.architecture(:i386)
|
|
147
|
+
resource.returns(0)
|
|
148
|
+
resource.run_action(:run)
|
|
149
|
+
|
|
150
|
+
source_contains_case_insensitive_content?( get_script_output, 'x86' ).should == true
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "raises an exception if :x86_64 process architecture is specified" do
|
|
154
|
+
begin
|
|
155
|
+
resource.architecture(:x86_64).should raise_error Chef::Exceptions::Win32ArchitectureIncorrect
|
|
156
|
+
rescue Chef::Exceptions::Win32ArchitectureIncorrect
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context "when running on a 64-bit version of Windows", :windows64_only do
|
|
162
|
+
it "executes a script with a 64-bit process if :x86_64 arch is specified" do
|
|
163
|
+
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
|
164
|
+
resource.architecture(:x86_64)
|
|
165
|
+
resource.returns(0)
|
|
166
|
+
resource.run_action(:run)
|
|
167
|
+
|
|
168
|
+
source_contains_case_insensitive_content?( get_script_output, 'AMD64' ).should == true
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it "executes a script with a 32-bit process if :i386 arch is specified" do
|
|
172
|
+
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
|
173
|
+
resource.architecture(:i386)
|
|
174
|
+
resource.returns(0)
|
|
175
|
+
resource.run_action(:run)
|
|
176
|
+
|
|
177
|
+
source_contains_case_insensitive_content?( get_script_output, 'x86' ).should == true
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def get_script_output
|
|
182
|
+
script_output = File.read(script_output_path)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def source_contains_case_insensitive_content?( source, content )
|
|
186
|
+
source.downcase.include?(content.downcase)
|
|
187
|
+
end
|
|
188
|
+
end
|