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
data/lib/chef/win32/security.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Salim Alam (<salam@chef.io>)
|
3
|
+
# Copyright:: Copyright 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 'chef/win32/api/system'
|
20
|
+
require 'chef/win32/error'
|
21
|
+
require 'ffi'
|
22
|
+
|
23
|
+
class Chef
|
24
|
+
module ReservedNames::Win32
|
25
|
+
class System
|
26
|
+
include Chef::ReservedNames::Win32::API::System
|
27
|
+
extend Chef::ReservedNames::Win32::API::System
|
28
|
+
|
29
|
+
def self.get_system_wow64_directory
|
30
|
+
ptr = FFI::MemoryPointer.new(:char, 255, true)
|
31
|
+
succeeded = GetSystemWow64DirectoryA(ptr, 255)
|
32
|
+
|
33
|
+
if succeeded == 0
|
34
|
+
raise Win32APIError, "Failed to get Wow64 system directory"
|
35
|
+
end
|
36
|
+
|
37
|
+
ptr.read_string.strip
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.wow64_disable_wow64_fs_redirection
|
41
|
+
original_redirection_state = FFI::MemoryPointer.new(:pointer)
|
42
|
+
|
43
|
+
succeeded = Wow64DisableWow64FsRedirection(original_redirection_state)
|
44
|
+
|
45
|
+
if succeeded == 0
|
46
|
+
raise Win32APIError, "Failed to disable Wow64 file redirection"
|
47
|
+
end
|
48
|
+
|
49
|
+
original_redirection_state
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.wow64_revert_wow64_fs_redirection(original_redirection_state)
|
53
|
+
succeeded = Wow64RevertWow64FsRedirection(original_redirection_state)
|
54
|
+
|
55
|
+
if succeeded == 0
|
56
|
+
raise Win32APIError, "Failed to revert Wow64 file redirection"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/chef/win32/unicode.rb
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
19
|
|
20
|
+
require 'chef/mixin/wide_string'
|
20
21
|
require 'chef/win32/api/unicode'
|
21
22
|
|
22
23
|
class Chef
|
@@ -30,6 +31,8 @@ end
|
|
30
31
|
|
31
32
|
module FFI
|
32
33
|
class Pointer
|
34
|
+
include Chef::Mixin::WideString
|
35
|
+
|
33
36
|
def read_wstring(num_wchars = nil)
|
34
37
|
if num_wchars.nil?
|
35
38
|
# Find the length of the string
|
@@ -43,13 +46,15 @@ module FFI
|
|
43
46
|
num_wchars = length
|
44
47
|
end
|
45
48
|
|
46
|
-
|
49
|
+
wide_to_utf8(self.get_bytes(0, num_wchars*2))
|
47
50
|
end
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
51
54
|
class String
|
55
|
+
include Chef::Mixin::WideString
|
56
|
+
|
52
57
|
def to_wstring
|
53
|
-
|
58
|
+
utf8_to_wide(self)
|
54
59
|
end
|
55
60
|
end
|
data/lib/chef/win32/version.rb
CHANGED
@@ -122,10 +122,6 @@ class Chef
|
|
122
122
|
# WMI always returns the truth. See article at
|
123
123
|
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
|
124
124
|
|
125
|
-
# CHEF-4888: Work around ruby #2618, expected to be fixed in Ruby 2.1.0
|
126
|
-
# https://github.com/ruby/ruby/commit/588504b20f5cc880ad51827b93e571e32446e5db
|
127
|
-
# https://github.com/ruby/ruby/commit/27ed294c7134c0de582007af3c915a635a6506cd
|
128
|
-
|
129
125
|
wmi = WmiLite::Wmi.new
|
130
126
|
os_info = wmi.first_of('Win32_OperatingSystem')
|
131
127
|
os_version = os_info['version']
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Author::
|
2
|
+
# Author:: Claire McQuin (<claire@chef.io>)
|
3
3
|
# Copyright:: Copyright (c) 2014 Chef Software, Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
@@ -16,163 +16,8 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/
|
20
|
-
require 'chef/config'
|
21
|
-
require 'chef/null_logger'
|
22
|
-
require 'chef/util/path_helper'
|
19
|
+
require 'chef-config/workstation_config_loader'
|
23
20
|
|
24
21
|
class Chef
|
25
|
-
|
26
|
-
class WorkstationConfigLoader
|
27
|
-
|
28
|
-
# Path to a config file requested by user, (e.g., via command line option). Can be nil
|
29
|
-
attr_accessor :explicit_config_file
|
30
|
-
|
31
|
-
# TODO: initialize this with a logger for Chef and Knife
|
32
|
-
def initialize(explicit_config_file, logger=nil)
|
33
|
-
@explicit_config_file = explicit_config_file
|
34
|
-
@config_location = nil
|
35
|
-
@logger = logger || NullLogger.new
|
36
|
-
end
|
37
|
-
|
38
|
-
def no_config_found?
|
39
|
-
config_location.nil?
|
40
|
-
end
|
41
|
-
|
42
|
-
def config_location
|
43
|
-
@config_location ||= (explicit_config_file || locate_local_config)
|
44
|
-
end
|
45
|
-
|
46
|
-
def chef_config_dir
|
47
|
-
if @chef_config_dir.nil?
|
48
|
-
@chef_config_dir = false
|
49
|
-
full_path = working_directory.split(File::SEPARATOR)
|
50
|
-
(full_path.length - 1).downto(0) do |i|
|
51
|
-
candidate_directory = File.join(full_path[0..i] + [".chef" ])
|
52
|
-
if File.exist?(candidate_directory) && File.directory?(candidate_directory)
|
53
|
-
@chef_config_dir = candidate_directory
|
54
|
-
break
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
@chef_config_dir
|
59
|
-
end
|
60
|
-
|
61
|
-
def load
|
62
|
-
# Ignore it if there's no explicit_config_file and can't find one at a
|
63
|
-
# default path.
|
64
|
-
return false if config_location.nil?
|
65
|
-
|
66
|
-
if explicit_config_file && !path_exists?(config_location)
|
67
|
-
raise Exceptions::ConfigurationError, "Specified config file #{config_location} does not exist"
|
68
|
-
end
|
69
|
-
|
70
|
-
# Have to set Chef::Config.config_file b/c other config is derived from it.
|
71
|
-
Chef::Config.config_file = config_location
|
72
|
-
read_config(IO.read(config_location), config_location)
|
73
|
-
end
|
74
|
-
|
75
|
-
# (Private API, public for test purposes)
|
76
|
-
def env
|
77
|
-
ENV
|
78
|
-
end
|
79
|
-
|
80
|
-
# (Private API, public for test purposes)
|
81
|
-
def path_exists?(path)
|
82
|
-
Pathname.new(path).expand_path.exist?
|
83
|
-
end
|
84
|
-
|
85
|
-
private
|
86
|
-
|
87
|
-
def have_config?(path)
|
88
|
-
if path_exists?(path)
|
89
|
-
logger.info("Using config at #{path}")
|
90
|
-
true
|
91
|
-
else
|
92
|
-
logger.debug("Config not found at #{path}, trying next option")
|
93
|
-
false
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def locate_local_config
|
98
|
-
candidate_configs = []
|
99
|
-
|
100
|
-
# Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
|
101
|
-
if env['KNIFE_HOME']
|
102
|
-
candidate_configs << File.join(env['KNIFE_HOME'], 'config.rb')
|
103
|
-
candidate_configs << File.join(env['KNIFE_HOME'], 'knife.rb')
|
104
|
-
end
|
105
|
-
# Look for $PWD/knife.rb
|
106
|
-
if Dir.pwd
|
107
|
-
candidate_configs << File.join(Dir.pwd, 'config.rb')
|
108
|
-
candidate_configs << File.join(Dir.pwd, 'knife.rb')
|
109
|
-
end
|
110
|
-
# Look for $UPWARD/.chef/knife.rb
|
111
|
-
if chef_config_dir
|
112
|
-
candidate_configs << File.join(chef_config_dir, 'config.rb')
|
113
|
-
candidate_configs << File.join(chef_config_dir, 'knife.rb')
|
114
|
-
end
|
115
|
-
# Look for $HOME/.chef/knife.rb
|
116
|
-
Chef::Util::PathHelper.home('.chef') do |dot_chef_dir|
|
117
|
-
candidate_configs << File.join(dot_chef_dir, 'config.rb')
|
118
|
-
candidate_configs << File.join(dot_chef_dir, 'knife.rb')
|
119
|
-
end
|
120
|
-
|
121
|
-
candidate_configs.find do | candidate_config |
|
122
|
-
have_config?(candidate_config)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
def working_directory
|
127
|
-
a = if Chef::Platform.windows?
|
128
|
-
env['CD']
|
129
|
-
else
|
130
|
-
env['PWD']
|
131
|
-
end || Dir.pwd
|
132
|
-
|
133
|
-
a
|
134
|
-
end
|
135
|
-
|
136
|
-
def read_config(config_content, config_file_path)
|
137
|
-
Chef::Config.from_string(config_content, config_file_path)
|
138
|
-
rescue SignalException
|
139
|
-
raise
|
140
|
-
rescue SyntaxError => e
|
141
|
-
message = ""
|
142
|
-
message << "You have invalid ruby syntax in your config file #{config_file_path}\n\n"
|
143
|
-
message << "#{e.class.name}: #{e.message}\n"
|
144
|
-
if file_line = e.message[/#{Regexp.escape(config_file_path)}:[\d]+/]
|
145
|
-
line = file_line[/:([\d]+)$/, 1].to_i
|
146
|
-
message << highlight_config_error(config_file_path, line)
|
147
|
-
end
|
148
|
-
raise Exceptions::ConfigurationError, message
|
149
|
-
rescue Exception => e
|
150
|
-
message = "You have an error in your config file #{config_file_path}\n\n"
|
151
|
-
message << "#{e.class.name}: #{e.message}\n"
|
152
|
-
filtered_trace = e.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
|
153
|
-
filtered_trace.each {|bt_line| message << " " << bt_line << "\n" }
|
154
|
-
if !filtered_trace.empty?
|
155
|
-
line_nr = filtered_trace.first[/#{Regexp.escape(config_file_path)}:([\d]+)/, 1]
|
156
|
-
message << highlight_config_error(config_file_path, line_nr.to_i)
|
157
|
-
end
|
158
|
-
raise Exceptions::ConfigurationError, message
|
159
|
-
end
|
160
|
-
|
161
|
-
|
162
|
-
def highlight_config_error(file, line)
|
163
|
-
config_file_lines = []
|
164
|
-
IO.readlines(file).each_with_index {|l, i| config_file_lines << "#{(i + 1).to_s.rjust(3)}: #{l.chomp}"}
|
165
|
-
if line == 1
|
166
|
-
lines = config_file_lines[0..3]
|
167
|
-
else
|
168
|
-
lines = config_file_lines[Range.new(line - 2, line)]
|
169
|
-
end
|
170
|
-
"Relevant file content:\n" + lines.join("\n") + "\n"
|
171
|
-
end
|
172
|
-
|
173
|
-
def logger
|
174
|
-
@logger
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
22
|
+
WorkstationConfigLoader = ChefConfig::WorkstationConfigLoader
|
178
23
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= @cookbook_name %>
|
2
|
+
<%= @recipe_name %>
|
3
|
+
<%= @recipe_line_string %>
|
4
|
+
<%= @recipe_path %>
|
5
|
+
<%= @recipe_line %>
|
6
|
+
<%= @template_name %>
|
7
|
+
<%= @template_path %>
|
8
|
+
<%= cookbook_name %>
|
9
|
+
<%= recipe_name %>
|
10
|
+
<%= recipe_line_string %>
|
11
|
+
<%= recipe_path %>
|
12
|
+
<%= recipe_line %>
|
13
|
+
<%= template_name %>
|
14
|
+
<%= template_path %>
|
@@ -0,0 +1 @@
|
|
1
|
+
before <%= render 'nested_partial.erb', :variables => { :hello => @test } %> after
|
@@ -0,0 +1 @@
|
|
1
|
+
{<%= @hello %>}
|
Binary file
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ::RanResources
|
2
|
+
def self.resources
|
3
|
+
@resources ||= []
|
4
|
+
end
|
5
|
+
end
|
6
|
+
class RunContextCustomResource < Chef::Resource
|
7
|
+
action :create do
|
8
|
+
ruby_block '4' do
|
9
|
+
block { RanResources.resources << 4 }
|
10
|
+
end
|
11
|
+
recipe_eval do
|
12
|
+
ruby_block '1' do
|
13
|
+
block { RanResources.resources << 1 }
|
14
|
+
end
|
15
|
+
include_recipe 'include::includee'
|
16
|
+
ruby_block '3' do
|
17
|
+
block { RanResources.resources << 3 }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
ruby_block '5' do
|
21
|
+
block { RanResources.resources << 5 }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -30,13 +30,6 @@ describe Chef::DSL::RebootPending, :windows_only do
|
|
30
30
|
ohai
|
31
31
|
end
|
32
32
|
|
33
|
-
def registry_unsafe?
|
34
|
-
registry.value_exists?('HKLM\SYSTEM\CurrentControlSet\Control\Session Manager', { :name => 'PendingFileRenameOperations' }) ||
|
35
|
-
registry.key_exists?('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired')
|
36
|
-
registry.key_exists?('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired') ||
|
37
|
-
registry.key_exists?('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile')
|
38
|
-
end
|
39
|
-
|
40
33
|
let(:node) { Chef::Node.new }
|
41
34
|
let(:events) { Chef::EventDispatch::Dispatcher.new }
|
42
35
|
let!(:ohai) { run_ohai } # Ensure we have necessary node data
|
@@ -45,76 +38,73 @@ describe Chef::DSL::RebootPending, :windows_only do
|
|
45
38
|
let(:registry) { Chef::Win32::Registry.new(run_context) }
|
46
39
|
|
47
40
|
describe "reboot_pending?" do
|
41
|
+
let(:reg_key) { nil }
|
42
|
+
let(:original_set) { false }
|
48
43
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
expect(recipe.reboot_pending?).to be_falsey
|
53
|
-
end
|
54
|
-
end
|
44
|
+
before(:all) { @any_flag = Hash.new }
|
45
|
+
|
46
|
+
after { @any_flag[reg_key] = original_set }
|
55
47
|
|
56
48
|
describe 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations' do
|
49
|
+
let(:reg_key) { 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager' }
|
50
|
+
let(:original_set) { registry.value_exists?(reg_key, { :name => 'PendingFileRenameOperations' }) }
|
51
|
+
|
57
52
|
it "returns true if the registry value exists" do
|
58
|
-
skip
|
59
|
-
registry.set_value(
|
53
|
+
skip 'found existing registry key' if original_set
|
54
|
+
registry.set_value(reg_key,
|
60
55
|
{ :name => 'PendingFileRenameOperations', :type => :multi_string, :data => ['\??\C:\foo.txt|\??\C:\bar.txt'] })
|
61
56
|
|
62
57
|
expect(recipe.reboot_pending?).to be_truthy
|
63
58
|
end
|
64
59
|
|
65
60
|
after do
|
66
|
-
unless
|
67
|
-
registry.delete_value(
|
61
|
+
unless original_set
|
62
|
+
registry.delete_value(reg_key, { :name => 'PendingFileRenameOperations' })
|
68
63
|
end
|
69
64
|
end
|
70
65
|
end
|
71
66
|
|
72
|
-
describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\
|
67
|
+
describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired' do
|
68
|
+
let(:reg_key) { 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired' }
|
69
|
+
let(:original_set) { registry.key_exists?(reg_key) }
|
70
|
+
|
73
71
|
it "returns true if the registry key exists" do
|
74
|
-
skip
|
75
|
-
|
72
|
+
skip 'found existing registry key' if original_set
|
73
|
+
pending "Permissions are limited to 'TrustedInstaller' by default"
|
74
|
+
registry.create_key(reg_key, false)
|
76
75
|
|
77
76
|
expect(recipe.reboot_pending?).to be_truthy
|
78
77
|
end
|
79
78
|
|
80
79
|
after do
|
81
|
-
unless
|
82
|
-
registry.delete_key(
|
80
|
+
unless original_set
|
81
|
+
registry.delete_key(reg_key, false)
|
83
82
|
end
|
84
83
|
end
|
85
84
|
end
|
86
85
|
|
87
|
-
describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\
|
86
|
+
describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' do
|
87
|
+
let(:reg_key) { 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' }
|
88
|
+
let(:original_set) { registry.key_exists?(reg_key) }
|
89
|
+
|
88
90
|
it "returns true if the registry key exists" do
|
89
|
-
|
90
|
-
|
91
|
-
registry.create_key('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired', false)
|
91
|
+
skip 'found existing registry key' if original_set
|
92
|
+
registry.create_key(reg_key, false)
|
92
93
|
|
93
94
|
expect(recipe.reboot_pending?).to be_truthy
|
94
95
|
end
|
95
96
|
|
96
97
|
after do
|
97
|
-
unless
|
98
|
-
registry.delete_key(
|
98
|
+
unless original_set
|
99
|
+
registry.delete_key(reg_key, false)
|
99
100
|
end
|
100
101
|
end
|
101
102
|
end
|
102
103
|
|
103
|
-
describe
|
104
|
-
it "
|
105
|
-
skip
|
106
|
-
|
107
|
-
registry.set_value('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile',
|
108
|
-
{ :name => 'Flags', :type => :dword, :data => 3 })
|
109
|
-
|
110
|
-
expect(recipe.reboot_pending?).to be_truthy
|
111
|
-
end
|
112
|
-
|
113
|
-
after do
|
114
|
-
unless registry_unsafe?
|
115
|
-
registry.delete_value('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile', { :name => 'Flags' })
|
116
|
-
registry.delete_key('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile', false)
|
117
|
-
end
|
104
|
+
describe "when there is nothing to indicate a reboot is pending" do
|
105
|
+
it "should return false" do
|
106
|
+
skip 'reboot pending' if @any_flag.any? { |_,v| v == true }
|
107
|
+
expect(recipe.reboot_pending?).to be_falsey
|
118
108
|
end
|
119
109
|
end
|
120
110
|
end
|