chef 12.4.3-universal-mingw32 → 12.5.1-universal-mingw32
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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +21 -25
- data/Gemfile +46 -0
- data/README.md +4 -4
- data/Rakefile +4 -110
- data/bin/chef-service-manager +3 -1
- data/distro/common/html/knife_cookbook_site.html +18 -18
- data/distro/common/man/man1/knife-cookbook-site.1 +11 -11
- data/lib/chef.rb +1 -1
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/apply.rb +19 -1
- data/lib/chef/application/client.rb +11 -5
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +1 -1
- data/lib/chef/application/windows_service_manager.rb +19 -12
- data/lib/chef/chef_class.rb +46 -0
- data/lib/chef/chef_fs/config.rb +22 -24
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +3 -1
- data/lib/chef/chef_fs/file_pattern.rb +4 -15
- data/lib/chef/chef_fs/file_system/acl_dir.rb +3 -4
- data/lib/chef/chef_fs/file_system/acls_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +0 -5
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +5 -2
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +2 -9
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +2 -9
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +10 -17
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -12
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +15 -11
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +8 -2
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +4 -4
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -11
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +3 -5
- data/lib/chef/chef_fs/file_system/environments_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +7 -4
- data/lib/chef/chef_fs/file_system/memory_dir.rb +2 -3
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +15 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -2
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +4 -9
- data/lib/chef/chef_fs/knife.rb +35 -7
- data/lib/chef/chef_fs/path_utils.rb +65 -34
- data/lib/chef/client.rb +2 -3
- data/lib/chef/config.rb +34 -2
- data/lib/chef/{mixin/wstring.rb → constants.rb} +9 -13
- data/lib/chef/cookbook/metadata.rb +25 -3
- data/lib/chef/cookbook/synchronizer.rb +1 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +3 -3
- data/lib/chef/delayed_evaluator.rb +21 -0
- data/lib/chef/deprecation/mixin/template.rb +1 -2
- data/lib/chef/deprecation/provider/cookbook_file.rb +1 -1
- data/lib/chef/deprecation/provider/file.rb +1 -1
- data/lib/chef/deprecation/provider/remote_directory.rb +52 -0
- data/lib/chef/deprecation/provider/remote_file.rb +1 -2
- data/lib/chef/deprecation/provider/template.rb +1 -1
- data/lib/chef/deprecation/warnings.rb +3 -4
- data/lib/chef/dsl/reboot_pending.rb +3 -2
- data/lib/chef/dsl/recipe.rb +26 -7
- data/lib/chef/dsl/resources.rb +2 -2
- data/lib/chef/event_dispatch/base.rb +51 -22
- data/lib/chef/event_dispatch/dispatcher.rb +21 -6
- data/lib/chef/event_dispatch/dsl.rb +64 -0
- data/lib/chef/exceptions.rb +28 -1
- data/lib/chef/file_content_management/tempfile.rb +1 -1
- data/lib/chef/formatters/base.rb +3 -0
- data/lib/chef/formatters/doc.rb +56 -6
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +36 -0
- data/lib/chef/formatters/minimal.rb +2 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/knife.rb +35 -55
- data/lib/chef/knife/bootstrap.rb +41 -0
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -0
- data/lib/chef/knife/bootstrap/client_builder.rb +16 -0
- data/lib/chef/knife/bootstrap/templates/README.md +3 -4
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +1 -1
- data/lib/chef/knife/cookbook_create.rb +1 -1
- data/lib/chef/knife/cookbook_site_download.rb +1 -1
- data/lib/chef/knife/cookbook_site_install.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +6 -6
- data/lib/chef/knife/cookbook_site_unshare.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +12 -4
- data/lib/chef/knife/core/custom_manifest_loader.rb +69 -0
- data/lib/chef/knife/core/gem_glob_loader.rb +138 -0
- data/lib/chef/knife/core/hashed_command_loader.rb +80 -0
- data/lib/chef/knife/core/node_presenter.rb +24 -1
- data/lib/chef/knife/core/object_loader.rb +1 -0
- data/lib/chef/knife/core/subcommand_loader.rb +131 -146
- data/lib/chef/knife/node_run_list_remove.rb +12 -1
- data/lib/chef/knife/null.rb +10 -0
- data/lib/chef/knife/rehash.rb +62 -0
- data/lib/chef/knife/search.rb +3 -3
- data/lib/chef/knife/ssh.rb +52 -30
- data/lib/chef/knife/ssl_check.rb +3 -2
- data/lib/chef/knife/user_edit.rb +1 -2
- data/lib/chef/local_mode.rb +5 -0
- data/lib/chef/log.rb +5 -1
- data/lib/chef/mixin/deprecation.rb +8 -8
- data/lib/chef/mixin/params_validate.rb +362 -135
- data/lib/chef/mixin/template.rb +48 -0
- data/lib/chef/mixin/which.rb +1 -1
- data/lib/chef/mixin/wide_string.rb +72 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +15 -39
- data/lib/chef/mixin/windows_env_helper.rb +4 -1
- data/lib/chef/monkey_patches/webrick-utils.rb +51 -0
- data/lib/chef/monkey_patches/win32/registry.rb +72 -0
- data/lib/chef/node.rb +116 -3
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/platform/handler_map.rb +0 -5
- data/lib/chef/platform/provider_mapping.rb +5 -6
- data/lib/chef/platform/query_helpers.rb +46 -4
- data/lib/chef/platform/rebooter.rb +1 -1
- data/lib/chef/platform/service_helpers.rb +30 -32
- data/lib/chef/policy_builder.rb +1 -8
- data/lib/chef/policy_builder/dynamic.rb +186 -0
- data/lib/chef/policy_builder/expand_node_object.rb +30 -15
- data/lib/chef/policy_builder/policyfile.rb +155 -18
- data/lib/chef/property.rb +568 -0
- data/lib/chef/provider.rb +222 -13
- data/lib/chef/provider/batch.rb +8 -0
- data/lib/chef/provider/deploy.rb +5 -7
- data/lib/chef/provider/directory.rb +14 -2
- data/lib/chef/provider/dsc_resource.rb +5 -9
- data/lib/chef/provider/group/pw.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +2 -2
- data/lib/chef/provider/lwrp_base.rb +1 -75
- data/lib/chef/provider/mount.rb +7 -3
- data/lib/chef/provider/package.rb +1 -1
- data/lib/chef/provider/package/dpkg.rb +5 -11
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/windows/msi.rb +2 -2
- data/lib/chef/provider/package/yum.rb +17 -5
- data/lib/chef/provider/powershell_script.rb +59 -23
- data/lib/chef/provider/registry_key.rb +5 -5
- data/lib/chef/provider/remote_directory.rb +190 -102
- data/lib/chef/provider/service.rb +12 -2
- data/lib/chef/provider/service/aix.rb +1 -1
- data/lib/chef/provider/service/debian.rb +3 -5
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +3 -3
- data/lib/chef/provider/service/init.rb +3 -3
- data/lib/chef/provider/service/insserv.rb +2 -4
- data/lib/chef/provider/service/invokercd.rb +2 -4
- data/lib/chef/provider/service/macosx.rb +5 -1
- data/lib/chef/provider/service/openbsd.rb +2 -1
- data/lib/chef/provider/service/redhat.rb +52 -16
- data/lib/chef/provider/service/simple.rb +2 -2
- data/lib/chef/provider/service/systemd.rb +3 -5
- data/lib/chef/provider/service/upstart.rb +4 -6
- data/lib/chef/provider/subversion.rb +13 -7
- data/lib/chef/provider/template/content.rb +16 -6
- data/lib/chef/provider/user/solaris.rb +32 -4
- data/lib/chef/provider/windows_script.rb +3 -5
- data/lib/chef/provider_resolver.rb +2 -2
- data/lib/chef/recipe.rb +1 -8
- data/lib/chef/resource.rb +563 -90
- data/lib/chef/resource/action_class.rb +83 -0
- data/lib/chef/resource/chef_gem.rb +3 -3
- data/lib/chef/resource/deploy.rb +8 -2
- data/lib/chef/resource/dsc_script.rb +2 -0
- data/lib/chef/resource/file/verification.rb +7 -1
- data/lib/chef/resource/lwrp_base.rb +1 -7
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/service.rb +10 -2
- data/lib/chef/resource/subversion.rb +5 -0
- data/lib/chef/resource/windows_script.rb +6 -2
- data/lib/chef/resource/yum_package.rb +10 -1
- data/lib/chef/resource_resolver.rb +3 -3
- data/lib/chef/run_context.rb +402 -83
- data/lib/chef/run_list/versioned_recipe_list.rb +15 -0
- data/lib/chef/run_lock.rb +30 -21
- data/lib/chef/util/powershell/ps_credential.rb +4 -0
- data/lib/chef/util/windows.rb +0 -32
- data/lib/chef/util/windows/net_group.rb +85 -106
- data/lib/chef/util/windows/net_use.rb +35 -71
- data/lib/chef/util/windows/net_user.rb +0 -1
- data/lib/chef/util/windows/volume.rb +19 -19
- data/lib/chef/version.rb +3 -3
- data/lib/chef/win32/api.rb +1 -0
- data/lib/chef/win32/api/file.rb +20 -0
- data/lib/chef/win32/api/net.rb +163 -43
- data/lib/chef/win32/api/registry.rb +51 -0
- data/lib/chef/win32/api/system.rb +23 -0
- data/lib/chef/win32/api/unicode.rb +0 -43
- data/lib/chef/win32/crypto.rb +2 -1
- data/lib/chef/win32/file.rb +28 -3
- data/lib/chef/win32/mutex.rb +1 -2
- data/lib/chef/win32/net.rb +162 -8
- data/lib/chef/win32/process.rb +13 -0
- data/lib/chef/win32/registry.rb +35 -30
- data/lib/chef/win32/security.rb +1 -1
- data/lib/chef/win32/security/token.rb +1 -1
- data/lib/chef/win32/system.rb +62 -0
- data/lib/chef/win32/unicode.rb +7 -2
- data/lib/chef/win32/version.rb +0 -4
- data/lib/chef/workstation_config_loader.rb +3 -158
- data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -0
- data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -0
- data/spec/data/dsc_lcm.pfx +0 -0
- data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -0
- data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +33 -43
- data/spec/functional/knife/cookbook_delete_spec.rb +17 -7
- data/spec/functional/knife/ssh_spec.rb +16 -0
- data/spec/functional/rebooter_spec.rb +1 -1
- data/spec/functional/resource/deploy_revision_spec.rb +1 -1
- data/spec/functional/resource/dsc_resource_spec.rb +2 -0
- data/spec/functional/resource/dsc_script_spec.rb +91 -2
- data/spec/functional/resource/group_spec.rb +67 -44
- data/spec/functional/resource/{powershell_spec.rb → powershell_script_spec.rb} +107 -18
- data/spec/functional/resource/windows_service_spec.rb +1 -1
- data/spec/functional/run_lock_spec.rb +368 -189
- data/spec/functional/win32/{registry_helper_spec.rb → registry_spec.rb} +16 -23
- data/spec/functional/win32/service_manager_spec.rb +2 -2
- data/spec/integration/client/client_spec.rb +51 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +13 -11
- data/spec/integration/knife/download_spec.rb +4 -0
- data/spec/integration/knife/list_spec.rb +8 -0
- data/spec/integration/knife/upload_spec.rb +1 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +1 -16
- data/spec/integration/recipes/remote_directory.rb +74 -0
- data/spec/integration/recipes/resource_action_spec.rb +363 -0
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +423 -0
- data/spec/integration/recipes/resource_load_spec.rb +206 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/platform_helpers.rb +13 -0
- data/spec/support/shared/context/win32.rb +34 -0
- data/spec/support/shared/functional/win32_service.rb +2 -1
- data/spec/support/shared/functional/windows_script.rb +63 -26
- data/spec/support/shared/unit/mock_shellout.rb +46 -0
- data/spec/support/shared/unit/provider/file.rb +10 -4
- data/spec/unit/application/client_spec.rb +16 -3
- data/spec/unit/application/knife_spec.rb +2 -2
- data/spec/unit/application/solo_spec.rb +4 -3
- data/spec/unit/chef_class_spec.rb +23 -4
- data/spec/unit/chef_fs/path_util_spec.rb +108 -0
- data/spec/unit/client_spec.rb +6 -1
- data/spec/unit/config_spec.rb +31 -0
- data/spec/unit/cookbook/metadata_spec.rb +23 -3
- data/spec/unit/cookbook/syntax_check_spec.rb +3 -0
- data/spec/unit/deprecation_spec.rb +3 -6
- data/spec/unit/dsl/reboot_pending_spec.rb +12 -6
- data/spec/unit/event_dispatch/dispatcher_spec.rb +65 -3
- data/spec/unit/event_dispatch/dsl_spec.rb +83 -0
- data/spec/unit/formatters/doc_spec.rb +32 -0
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +26 -0
- data/spec/unit/json_compat_spec.rb +4 -3
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +27 -0
- data/spec/unit/knife/bootstrap_spec.rb +55 -3
- data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
- data/spec/unit/knife/core/bootstrap_context_spec.rb +21 -4
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -0
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +210 -0
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +93 -0
- data/spec/unit/knife/core/subcommand_loader_spec.rb +16 -192
- data/spec/unit/knife/node_run_list_remove_spec.rb +17 -0
- data/spec/unit/knife/ssl_check_spec.rb +4 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +10 -10
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/template_spec.rb +5 -1
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +13 -8
- data/spec/unit/node_spec.rb +220 -0
- data/spec/unit/platform/query_helpers_spec.rb +146 -3
- data/spec/unit/policy_builder/dynamic_spec.rb +275 -0
- data/spec/unit/policy_builder/expand_node_object_spec.rb +37 -38
- data/spec/unit/policy_builder/policyfile_spec.rb +260 -46
- data/spec/unit/property/state_spec.rb +506 -0
- data/spec/unit/property/validation_spec.rb +663 -0
- data/spec/unit/property_spec.rb +1094 -0
- data/spec/unit/provider/deploy_spec.rb +5 -5
- data/spec/unit/provider/directory_spec.rb +35 -0
- data/spec/unit/provider/dsc_resource_spec.rb +3 -10
- data/spec/unit/provider/ifconfig_spec.rb +22 -2
- data/spec/unit/provider/mount/aix_spec.rb +2 -1
- data/spec/unit/provider/mount/mount_spec.rb +6 -0
- data/spec/unit/provider/mount/windows_spec.rb +14 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/package/dpkg_spec.rb +8 -1
- data/spec/unit/provider/package/rpm_spec.rb +18 -1
- data/spec/unit/provider/package/rubygems_spec.rb +18 -0
- data/spec/unit/provider/package/yum_spec.rb +97 -24
- data/spec/unit/provider/powershell_script_spec.rb +106 -0
- data/spec/unit/provider/registry_key_spec.rb +12 -0
- data/spec/unit/provider/remote_directory_spec.rb +1 -2
- data/spec/unit/provider/service/aix_service_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +4 -4
- data/spec/unit/provider/service/openbsd_service_spec.rb +10 -8
- data/spec/unit/provider/service/redhat_spec.rb +88 -8
- data/spec/unit/provider/service/upstart_service_spec.rb +11 -7
- data/spec/unit/provider/service/windows_spec.rb +211 -200
- data/spec/unit/provider/subversion_spec.rb +50 -31
- data/spec/unit/provider/template/content_spec.rb +93 -2
- data/spec/unit/provider/user/solaris_spec.rb +66 -9
- data/spec/unit/provider_resolver_spec.rb +707 -650
- data/spec/unit/provider_spec.rb +1 -3
- data/spec/unit/recipe_spec.rb +0 -4
- data/spec/unit/resource/deploy_spec.rb +7 -1
- data/spec/unit/resource/dsc_script_spec.rb +4 -0
- data/spec/unit/resource/file/verification_spec.rb +33 -5
- data/spec/unit/resource/{powershell_spec.rb → powershell_script_spec.rb} +17 -13
- data/spec/unit/resource/service_spec.rb +4 -4
- data/spec/unit/resource/subversion_spec.rb +4 -0
- data/spec/unit/resource/yum_package_spec.rb +10 -1
- data/spec/unit/resource_spec.rb +2 -2
- data/spec/unit/run_context/child_run_context_spec.rb +133 -0
- data/spec/unit/run_context_spec.rb +7 -0
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +5 -0
- data/spec/unit/win32/registry_spec.rb +394 -0
- data/tasks/external_tests.rb +47 -23
- data/tasks/maintainers.rb +155 -14
- metadata +64 -53
- data/lib/chef/knife/bootstrap/templates/archlinux-gems.erb +0 -76
- data/lib/chef/knife/bootstrap/templates/chef-aix.erb +0 -72
- data/spec/unit/provider/powershell_spec.rb +0 -80
- data/spec/unit/registry_helper_spec.rb +0 -376
- data/spec/unit/workstation_config_loader_spec.rb +0 -283
@@ -0,0 +1,46 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John Keiser <jkeiser@chef.io>
|
3
|
+
# Copyright:: Copyright (c) 2015 John Keiser.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
#
|
20
|
+
# Mocks shellout results. Examples:
|
21
|
+
# mock_shellout_command("systemctl --all", exitstatus: 1)
|
22
|
+
#
|
23
|
+
class MockShellout
|
24
|
+
module RSpec
|
25
|
+
def mock_shellout_command(command, **result)
|
26
|
+
allow(::Mixlib::ShellOut).to receive(:new).with(command, anything).and_return MockShellout.new(result)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(**properties)
|
31
|
+
@properties = {
|
32
|
+
stdout: "",
|
33
|
+
stderr: "",
|
34
|
+
exitstatus: 0
|
35
|
+
}.merge(properties)
|
36
|
+
end
|
37
|
+
def method_missing(name, *args)
|
38
|
+
@properties[name.to_sym]
|
39
|
+
end
|
40
|
+
def error?
|
41
|
+
exitstatus != 0
|
42
|
+
end
|
43
|
+
def error!
|
44
|
+
raise Mixlib::ShellOut::ShellCommandFailed, "Expected process to exit with 0, but received #{exitstatus}" if error?
|
45
|
+
end
|
46
|
+
end
|
@@ -465,11 +465,13 @@ shared_examples_for Chef::Provider::File do
|
|
465
465
|
t
|
466
466
|
}
|
467
467
|
|
468
|
-
let(:verification) {
|
468
|
+
let(:verification) { instance_double(Chef::Resource::File::Verification) }
|
469
|
+
let(:verification_fail) { instance_double(Chef::Resource::File::Verification) }
|
469
470
|
|
470
471
|
context "with user-supplied verifications" do
|
471
472
|
it "calls #verify on each verification with tempfile path" do
|
472
|
-
allow(Chef::Resource::File::Verification).to
|
473
|
+
allow(Chef::Resource::File::Verification).to(
|
474
|
+
receive(:new).with(anything(), "true", anything()).and_return(verification))
|
473
475
|
provider.new_resource.verify "true"
|
474
476
|
provider.new_resource.verify "true"
|
475
477
|
expect(verification).to receive(:verify).with(tempfile.path).twice.and_return(true)
|
@@ -477,10 +479,14 @@ shared_examples_for Chef::Provider::File do
|
|
477
479
|
end
|
478
480
|
|
479
481
|
it "raises an exception if any verification fails" do
|
482
|
+
allow(Chef::Resource::File::Verification).to(
|
483
|
+
receive(:new).with(anything(), "true", anything()).and_return(verification))
|
484
|
+
allow(Chef::Resource::File::Verification).to(
|
485
|
+
receive(:new).with(anything(), "false", anything()).and_return(verification_fail))
|
480
486
|
provider.new_resource.verify "true"
|
481
487
|
provider.new_resource.verify "false"
|
482
|
-
|
483
|
-
|
488
|
+
expect(verification).to receive(:verify).with(tempfile.path).and_return(true)
|
489
|
+
expect(verification_fail).to receive(:verify).with(tempfile.path).and_return(false)
|
484
490
|
expect{provider.send(:do_validate_content)}.to raise_error(Chef::Exceptions::ValidationFailed)
|
485
491
|
end
|
486
492
|
end
|
@@ -47,6 +47,19 @@ describe Chef::Application::Client, "reconfigure" do
|
|
47
47
|
expect(app).to receive(:set_specific_recipes).and_return(true)
|
48
48
|
app.reconfigure
|
49
49
|
end
|
50
|
+
|
51
|
+
context "when given a named_run_list" do
|
52
|
+
|
53
|
+
before do
|
54
|
+
ARGV.replace( %w[ --named-run-list arglebargle-example ] )
|
55
|
+
app.reconfigure
|
56
|
+
end
|
57
|
+
|
58
|
+
it "sets named_run_list in Chef::Config" do
|
59
|
+
expect(Chef::Config[:named_run_list]).to eq("arglebargle-example")
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
50
63
|
end
|
51
64
|
|
52
65
|
describe "when configured to not fork the client process" do
|
@@ -237,7 +250,7 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
|
|
237
250
|
end
|
238
251
|
|
239
252
|
it "should throw an exception" do
|
240
|
-
expect {
|
253
|
+
expect { app.reconfigure }.to raise_error(Chef::Exceptions::PIDFileLockfileMatch)
|
241
254
|
end
|
242
255
|
end
|
243
256
|
end
|
@@ -275,9 +288,9 @@ describe Chef::Application::Client, "configure_chef" do
|
|
275
288
|
ARGV.replace(@original_argv)
|
276
289
|
end
|
277
290
|
|
278
|
-
it "should set the colored output to
|
291
|
+
it "should set the colored output to true by default on windows and true on all other platforms as well" do
|
279
292
|
if windows?
|
280
|
-
expect(Chef::Config[:color]).to
|
293
|
+
expect(Chef::Config[:color]).to be_truthy
|
281
294
|
else
|
282
295
|
expect(Chef::Config[:color]).to be_truthy
|
283
296
|
end
|
@@ -70,13 +70,13 @@ describe Chef::Application::Knife do
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
it "should set the colored output to
|
73
|
+
it "should set the colored output to true by default on windows and true on all other platforms as well" do
|
74
74
|
with_argv(*%w{noop knife command}) do
|
75
75
|
expect(@knife).to receive(:exit).with(0)
|
76
76
|
@knife.run
|
77
77
|
end
|
78
78
|
if windows?
|
79
|
-
expect(Chef::Config[:color]).to
|
79
|
+
expect(Chef::Config[:color]).to be_truthy
|
80
80
|
else
|
81
81
|
expect(Chef::Config[:color]).to be_truthy
|
82
82
|
end
|
@@ -106,7 +106,8 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
|
|
106
106
|
describe "when the recipe_url configuration option is specified" do
|
107
107
|
let(:tarfile) { StringIO.new("remote_tarball_content") }
|
108
108
|
let(:target_file) { StringIO.new }
|
109
|
-
|
109
|
+
let(:shellout) { double(run_command: nil, error!: nil, stdout: '') }
|
110
|
+
|
110
111
|
before do
|
111
112
|
Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
|
112
113
|
Chef::Config[:recipe_url] = "http://junglist.gen.nz/recipes.tgz"
|
@@ -117,7 +118,7 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
|
|
117
118
|
allow(app).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile)
|
118
119
|
allow(File).to receive(:open).with("#{Dir.tmpdir}/chef-solo/recipes.tgz", "wb").and_yield(target_file)
|
119
120
|
|
120
|
-
allow(
|
121
|
+
allow(Mixlib::ShellOut).to receive(:new).and_return(shellout)
|
121
122
|
end
|
122
123
|
|
123
124
|
it "should create the recipes path based on the parent of the cookbook path" do
|
@@ -136,7 +137,7 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
|
|
136
137
|
end
|
137
138
|
|
138
139
|
it "should untar the target file to the parent of the cookbook path" do
|
139
|
-
expect(
|
140
|
+
expect(Mixlib::ShellOut).to receive(:new).with("tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo")
|
140
141
|
app.reconfigure
|
141
142
|
end
|
142
143
|
end
|
@@ -46,10 +46,6 @@ describe "Chef class" do
|
|
46
46
|
Chef.set_provider_priority_map(provider_priority_map)
|
47
47
|
end
|
48
48
|
|
49
|
-
after do
|
50
|
-
Chef.reset!
|
51
|
-
end
|
52
|
-
|
53
49
|
context "priority maps" do
|
54
50
|
context "#get_provider_priority_array" do
|
55
51
|
it "should use the current node to get the right priority_map" do
|
@@ -88,4 +84,27 @@ describe "Chef class" do
|
|
88
84
|
expect(Chef.node).to eql(node)
|
89
85
|
end
|
90
86
|
end
|
87
|
+
|
88
|
+
context '#event_handler' do
|
89
|
+
it 'adds a new handler' do
|
90
|
+
x = 1
|
91
|
+
Chef.event_handler do
|
92
|
+
on :converge_start do
|
93
|
+
x = 2
|
94
|
+
end
|
95
|
+
end
|
96
|
+
expect(Chef::Config[:event_handlers]).to_not be_empty
|
97
|
+
Chef::Config[:event_handlers].first.send(:converge_start)
|
98
|
+
expect(x).to eq(2)
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'raise error if unknown event type is passed' do
|
102
|
+
expect do
|
103
|
+
Chef.event_handler do
|
104
|
+
on :yolo do
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end.to raise_error(Chef::Exceptions::InvalidEventType)
|
108
|
+
end
|
109
|
+
end
|
91
110
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Kartik Null Cating-Subramanian (<ksubramanian@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) 2015 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 'chef/chef_fs/path_utils'
|
21
|
+
|
22
|
+
describe Chef::ChefFS::PathUtils do
|
23
|
+
context 'invoking join' do
|
24
|
+
it 'joins well-behaved distinct path elements' do
|
25
|
+
expect(Chef::ChefFS::PathUtils.join('a', 'b', 'c')).to eq('a/b/c')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'strips extraneous slashes in the middle of paths' do
|
29
|
+
expect(Chef::ChefFS::PathUtils.join('a/', '/b', '/c/')).to eq('a/b/c')
|
30
|
+
expect(Chef::ChefFS::PathUtils.join('a/', '/b', '///c/')).to eq('a/b/c')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'preserves the whether the first element was absolute or not' do
|
34
|
+
expect(Chef::ChefFS::PathUtils.join('/a/', '/b', 'c/')).to eq('/a/b/c')
|
35
|
+
expect(Chef::ChefFS::PathUtils.join('///a/', '/b', 'c/')).to eq('/a/b/c')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'invoking is_absolute?' do
|
40
|
+
it 'confirms that paths starting with / are absolute' do
|
41
|
+
expect(Chef::ChefFS::PathUtils.is_absolute?('/foo/bar/baz')).to be true
|
42
|
+
expect(Chef::ChefFS::PathUtils.is_absolute?('/foo')).to be true
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'confirms that paths starting with // are absolute even though that looks like some windows network path' do
|
46
|
+
expect(Chef::ChefFS::PathUtils.is_absolute?('//foo/bar/baz')).to be true
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'confirms that root is indeed absolute' do
|
50
|
+
expect(Chef::ChefFS::PathUtils.is_absolute?('/')).to be true
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'confirms that paths starting without / are relative' do
|
54
|
+
expect(Chef::ChefFS::PathUtils.is_absolute?('foo/bar/baz')).to be false
|
55
|
+
expect(Chef::ChefFS::PathUtils.is_absolute?('a')).to be false
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'returns false for an empty path.' do
|
59
|
+
expect(Chef::ChefFS::PathUtils.is_absolute?('')).to be false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'invoking realest_path' do
|
64
|
+
let(:good_path) { File.dirname(__FILE__) }
|
65
|
+
let(:parent_path) { File.dirname(good_path) }
|
66
|
+
|
67
|
+
it 'handles paths with no wildcards or globs' do
|
68
|
+
expect(Chef::ChefFS::PathUtils.realest_path(good_path)).to eq(File.expand_path(good_path))
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'handles paths with .. and .' do
|
72
|
+
expect(Chef::ChefFS::PathUtils.realest_path(good_path+'/../.')).to eq(File.expand_path(parent_path))
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'handles paths with *' do
|
76
|
+
expect(Chef::ChefFS::PathUtils.realest_path(good_path + '/*/foo')).to eq(File.expand_path(good_path + '/*/foo'))
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'handles directories that do not exist' do
|
80
|
+
expect(Chef::ChefFS::PathUtils.realest_path(good_path + '/something/or/other')).to eq(File.expand_path(good_path + '/something/or/other'))
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'handles root correctly' do
|
84
|
+
if Chef::Platform.windows?
|
85
|
+
expect(Chef::ChefFS::PathUtils.realest_path('C:/')).to eq('C:/')
|
86
|
+
else
|
87
|
+
expect(Chef::ChefFS::PathUtils.realest_path('/')).to eq('/')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'invoking descendant_path' do
|
93
|
+
it 'handles paths with various casing on windows' do
|
94
|
+
allow(Chef::ChefFS).to receive(:windows?) { true }
|
95
|
+
expect(Chef::ChefFS::PathUtils.descendant_path('C:/ab/b/c', 'C:/AB/B')).to eq('c')
|
96
|
+
expect(Chef::ChefFS::PathUtils.descendant_path('C:/ab/b/c', 'c:/ab/B')).to eq('c')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'returns nil if the path does not have the given ancestor' do
|
100
|
+
expect(Chef::ChefFS::PathUtils.descendant_path('/D/E/F', '/A/B/C')).to be_nil
|
101
|
+
expect(Chef::ChefFS::PathUtils.descendant_path('/A/B/D', '/A/B/C')).to be_nil
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'returns blank if the ancestor equals the path' do
|
105
|
+
expect(Chef::ChefFS::PathUtils.descendant_path('/A/B/D', '/A/B/D')).to eq('')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
data/spec/unit/client_spec.rb
CHANGED
@@ -364,6 +364,8 @@ describe Chef::Client do
|
|
364
364
|
expect(node[:expanded_run_list]).to be_nil
|
365
365
|
|
366
366
|
allow(client.policy_builder).to receive(:node).and_return(node)
|
367
|
+
client.policy_builder.select_implementation(node)
|
368
|
+
allow(client.policy_builder.implementation).to receive(:node).and_return(node)
|
367
369
|
|
368
370
|
# chefspec and possibly others use the return value of this method
|
369
371
|
expect(client.build_node).to eq(node)
|
@@ -373,7 +375,8 @@ describe Chef::Client do
|
|
373
375
|
expect(node[:roles].length).to eq(1)
|
374
376
|
expect(node[:roles]).to include("role_containing_cookbook1")
|
375
377
|
expect(node[:recipes]).not_to be_nil
|
376
|
-
expect(node[:recipes].length).to eq(
|
378
|
+
expect(node[:recipes].length).to eq(2)
|
379
|
+
expect(node[:recipes]).to include("cookbook1")
|
377
380
|
expect(node[:recipes]).to include("cookbook1::default")
|
378
381
|
expect(node[:expanded_run_list]).not_to be_nil
|
379
382
|
expect(node[:expanded_run_list].length).to eq(1)
|
@@ -391,6 +394,8 @@ describe Chef::Client do
|
|
391
394
|
expect(mock_chef_rest).to receive(:get_rest).with("environments/A").and_return(test_env)
|
392
395
|
expect(Chef::REST).to receive(:new).and_return(mock_chef_rest)
|
393
396
|
allow(client.policy_builder).to receive(:node).and_return(node)
|
397
|
+
client.policy_builder.select_implementation(node)
|
398
|
+
allow(client.policy_builder.implementation).to receive(:node).and_return(node)
|
394
399
|
expect(client.build_node).to eq(node)
|
395
400
|
|
396
401
|
expect(node.chef_environment).to eq("A")
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
require 'chef/config'
|
5
|
+
|
6
|
+
RSpec.describe Chef::Config do
|
7
|
+
|
8
|
+
shared_examples_for "deprecated by ohai but not deprecated" do
|
9
|
+
it "does not emit a deprecation warning when set" do
|
10
|
+
expect(Chef::Log).to_not receive(:warn).
|
11
|
+
with(/Ohai::Config\[:#{option}\] is deprecated/)
|
12
|
+
Chef::Config[option] = value
|
13
|
+
expect(Chef::Config[option]).to eq(value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ":log_level" do
|
18
|
+
include_examples "deprecated by ohai but not deprecated" do
|
19
|
+
let(:option) { :log_level }
|
20
|
+
let(:value) { :debug }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ":log_location" do
|
25
|
+
include_examples "deprecated by ohai but not deprecated" do
|
26
|
+
let(:option) { :log_location }
|
27
|
+
let(:value) { "path/to/log" }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -30,7 +30,7 @@ describe Chef::Cookbook::Metadata do
|
|
30
30
|
:maintainer_email, :license, :platforms, :dependencies,
|
31
31
|
:recommendations, :suggestions, :conflicting, :providing,
|
32
32
|
:replacing, :attributes, :groupings, :recipes, :version,
|
33
|
-
:source_url, :issues_url ]
|
33
|
+
:source_url, :issues_url, :privacy ]
|
34
34
|
end
|
35
35
|
|
36
36
|
it "does not depend on object identity for equality" do
|
@@ -148,6 +148,10 @@ describe Chef::Cookbook::Metadata do
|
|
148
148
|
it "has an empty issues_url string" do
|
149
149
|
expect(metadata.issues_url).to eq('')
|
150
150
|
end
|
151
|
+
|
152
|
+
it "is not private" do
|
153
|
+
expect(metadata.privacy).to eq(false)
|
154
|
+
end
|
151
155
|
end
|
152
156
|
|
153
157
|
describe "validation" do
|
@@ -198,7 +202,8 @@ describe Chef::Cookbook::Metadata do
|
|
198
202
|
:long_description => "Much Longer\nSeriously",
|
199
203
|
:version => "0.6.0",
|
200
204
|
:source_url => "http://example.com",
|
201
|
-
:issues_url => "http://example.com/issues"
|
205
|
+
:issues_url => "http://example.com/issues",
|
206
|
+
:privacy => true
|
202
207
|
}
|
203
208
|
params.sort { |a,b| a.to_s <=> b.to_s }.each do |field, field_value|
|
204
209
|
describe field do
|
@@ -360,7 +365,8 @@ describe Chef::Cookbook::Metadata do
|
|
360
365
|
"recipes" => [ "mysql::server", "mysql::master" ],
|
361
366
|
"default" => [ ],
|
362
367
|
"source_url" => "http://example.com",
|
363
|
-
"issues_url" => "http://example.com/issues"
|
368
|
+
"issues_url" => "http://example.com/issues",
|
369
|
+
"privacy" => true
|
364
370
|
}
|
365
371
|
expect(metadata.attribute("/db/mysql/databases", attrs)).to eq(attrs)
|
366
372
|
end
|
@@ -401,6 +407,18 @@ describe Chef::Cookbook::Metadata do
|
|
401
407
|
}.to raise_error(ArgumentError)
|
402
408
|
end
|
403
409
|
|
410
|
+
it "should not accept anything but true or false for the privacy flag" do
|
411
|
+
expect {
|
412
|
+
metadata.attribute("db/mysql/databases", :privacy => true)
|
413
|
+
}.not_to raise_error
|
414
|
+
expect {
|
415
|
+
metadata.attribute("db/mysql/databases", :privacy => false)
|
416
|
+
}.not_to raise_error
|
417
|
+
expect {
|
418
|
+
metadata.attribute("db/mysql/databases", :privacy => 'true')
|
419
|
+
}.to raise_error(ArgumentError)
|
420
|
+
end
|
421
|
+
|
404
422
|
it "should not accept anything but an array of strings for choice" do
|
405
423
|
expect {
|
406
424
|
metadata.attribute("db/mysql/databases", :choice => ['dedicated', 'shared'])
|
@@ -699,6 +717,7 @@ describe Chef::Cookbook::Metadata do
|
|
699
717
|
version
|
700
718
|
source_url
|
701
719
|
issues_url
|
720
|
+
privacy
|
702
721
|
}.each do |t|
|
703
722
|
it "should include '#{t}'" do
|
704
723
|
expect(deserialized_metadata[t]).to eq(metadata.send(t.to_sym))
|
@@ -734,6 +753,7 @@ describe Chef::Cookbook::Metadata do
|
|
734
753
|
version
|
735
754
|
source_url
|
736
755
|
issues_url
|
756
|
+
privacy
|
737
757
|
}.each do |t|
|
738
758
|
it "should match '#{t}'" do
|
739
759
|
expect(deserialized_metadata.send(t.to_sym)).to eq(metadata.send(t.to_sym))
|
@@ -53,7 +53,10 @@ describe Chef::Cookbook::SyntaxCheck do
|
|
53
53
|
@ruby_files = @attr_files + @libr_files + @defn_files + @recipes + [File.join(cookbook_path, "metadata.rb")]
|
54
54
|
basenames = %w{ helpers_via_partial_test.erb
|
55
55
|
helper_test.erb
|
56
|
+
helpers.erb
|
56
57
|
openldap_stuff.conf.erb
|
58
|
+
nested_openldap_partials.erb
|
59
|
+
nested_partial.erb
|
57
60
|
openldap_variable_stuff.conf.erb
|
58
61
|
test.erb
|
59
62
|
some_windows_line_endings.erb
|