chef 16.2.73-universal-mingw32 → 16.4.41-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/Gemfile +4 -4
- data/Rakefile +1 -1
- data/chef-universal-mingw32.gemspec +2 -3
- data/chef.gemspec +2 -1
- data/lib/chef/action_collection.rb +4 -0
- data/lib/chef/api_client/registration.rb +2 -2
- data/lib/chef/application.rb +13 -1
- data/lib/chef/application/apply.rb +5 -5
- data/lib/chef/application/windows_service.rb +27 -27
- data/lib/chef/{whitelist.rb → attribute_allowlist.rb} +11 -11
- data/lib/chef/{blacklist.rb → attribute_blocklist.rb} +9 -9
- data/lib/chef/chef_class.rb +0 -1
- data/lib/chef/chef_fs/chef_fs_data_store.rb +54 -54
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -2
- data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +1 -5
- data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -0
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
- data/lib/chef/client.rb +14 -14
- data/lib/chef/cookbook/remote_file_vendor.rb +1 -3
- data/lib/chef/cookbook/syntax_check.rb +1 -2
- data/lib/chef/cookbook_loader.rb +15 -29
- data/lib/chef/data_bag.rb +1 -2
- data/lib/chef/data_collector/run_end_message.rb +11 -1
- data/lib/chef/deprecated.rb +8 -0
- data/lib/chef/dsl/platform_introspection.rb +9 -7
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
- data/lib/chef/environment.rb +3 -4
- data/lib/chef/exceptions.rb +4 -1
- data/lib/chef/file_content_management/tempfile.rb +9 -9
- data/lib/chef/handler.rb +2 -0
- data/lib/chef/http.rb +11 -11
- data/lib/chef/http/authenticator.rb +3 -1
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/knife.rb +4 -4
- data/lib/chef/knife/bootstrap.rb +6 -12
- data/lib/chef/knife/bootstrap/train_connector.rb +1 -0
- data/lib/chef/knife/config_get.rb +1 -0
- data/lib/chef/knife/config_list_profiles.rb +4 -1
- data/lib/chef/knife/configure.rb +3 -1
- data/lib/chef/knife/cookbook_download.rb +1 -1
- data/lib/chef/knife/cookbook_metadata.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +28 -33
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +3 -2
- data/lib/chef/knife/core/subcommand_loader.rb +20 -1
- data/lib/chef/knife/core/ui.rb +8 -2
- data/lib/chef/knife/core/windows_bootstrap_context.rb +32 -25
- data/lib/chef/knife/delete.rb +15 -15
- data/lib/chef/knife/exec.rb +2 -2
- data/lib/chef/knife/rehash.rb +3 -21
- data/lib/chef/knife/ssh.rb +11 -7
- data/lib/chef/knife/xargs.rb +19 -19
- data/lib/chef/knife/yaml_convert.rb +1 -1
- data/lib/chef/log.rb +7 -2
- data/lib/chef/mixin/checksum.rb +0 -1
- data/lib/chef/mixin/chef_utils_wiring.rb +40 -0
- data/lib/chef/mixin/deep_merge.rb +35 -6
- data/{spec/unit/log_spec.rb → lib/chef/mixin/default_paths.rb} +13 -5
- data/lib/chef/mixin/openssl_helper.rb +30 -6
- data/lib/chef/mixin/path_sanity.rb +5 -4
- data/lib/chef/mixin/shell_out.rb +4 -188
- data/lib/chef/mixin/template.rb +1 -0
- data/lib/chef/mixin/which.rb +6 -3
- data/lib/chef/mixins.rb +1 -0
- data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
- data/lib/chef/node.rb +36 -12
- data/lib/chef/node/attribute.rb +2 -4
- data/lib/chef/node_map.rb +21 -18
- data/lib/chef/platform/service_helpers.rb +31 -28
- data/lib/chef/property.rb +1 -1
- data/lib/chef/provider/cron/unix.rb +0 -2
- data/lib/chef/provider/git.rb +17 -9
- data/lib/chef/provider/group.rb +0 -2
- data/lib/chef/provider/group/suse.rb +5 -5
- data/lib/chef/provider/ifconfig.rb +1 -4
- data/lib/chef/provider/mount.rb +0 -2
- data/lib/chef/provider/mount/solaris.rb +0 -1
- data/lib/chef/provider/package.rb +0 -2
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/snap.rb +3 -4
- data/lib/chef/provider/package/windows.rb +9 -4
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -9
- data/lib/chef/provider/package/zypper.rb +0 -1
- data/lib/chef/provider/powershell_script.rb +21 -5
- data/lib/chef/provider/route.rb +1 -1
- data/lib/chef/provider/service.rb +2 -2
- data/lib/chef/provider/service/arch.rb +1 -1
- data/lib/chef/provider/service/debian.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +1 -4
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +10 -10
- data/lib/chef/provider/systemd_unit.rb +0 -2
- data/lib/chef/provider/template/content.rb +1 -0
- data/lib/chef/provider/user/dscl.rb +2 -2
- data/lib/chef/provider/user/mac.rb +9 -9
- data/lib/chef/provider/windows_task.rb +0 -3
- data/lib/chef/provider/yum_repository.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +1 -2
- data/lib/chef/providers.rb +0 -1
- data/lib/chef/recipe.rb +1 -1
- data/lib/chef/resource.rb +8 -10
- data/lib/chef/resource/apt_repository.rb +1 -10
- data/lib/chef/resource/build_essential.rb +2 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
- data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
- data/lib/chef/resource/chef_vault_secret.rb +13 -13
- data/lib/chef/resource/chocolatey_feature.rb +1 -2
- data/lib/chef/resource/cron/cron_d.rb +1 -1
- data/lib/chef/resource/cron_access.rb +2 -2
- data/lib/chef/resource/execute.rb +4 -5
- data/lib/chef/resource/homebrew_update.rb +2 -2
- data/lib/chef/resource/hostname.rb +18 -18
- data/lib/chef/resource/lwrp_base.rb +1 -0
- data/lib/chef/resource/macos_userdefaults.rb +176 -61
- data/lib/chef/resource/openssl_dhparam.rb +2 -0
- data/lib/chef/resource/openssl_ec_private_key.rb +2 -0
- data/lib/chef/resource/openssl_ec_public_key.rb +2 -0
- data/lib/chef/resource/openssl_rsa_private_key.rb +2 -0
- data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
- data/lib/chef/resource/openssl_x509_certificate.rb +35 -35
- data/lib/chef/resource/openssl_x509_crl.rb +3 -2
- data/lib/chef/resource/openssl_x509_request.rb +23 -20
- data/lib/chef/resource/osx_profile.rb +227 -5
- data/lib/chef/resource/powershell_package_source.rb +1 -1
- data/lib/chef/resource/powershell_script.rb +24 -30
- data/lib/chef/resource/service.rb +2 -2
- data/lib/chef/resource/ssh_known_hosts_entry.rb +1 -1
- data/lib/chef/resource/sudo.rb +2 -2
- data/lib/chef/resource/sysctl.rb +5 -5
- data/lib/chef/resource/timezone.rb +112 -73
- data/lib/chef/resource/user_ulimit.rb +1 -1
- data/lib/chef/resource/windows_ad_join.rb +2 -0
- data/lib/chef/resource/windows_audit_policy.rb +3 -0
- data/lib/chef/resource/windows_auto_run.rb +2 -0
- data/lib/chef/resource/windows_certificate.rb +2 -0
- data/lib/chef/resource/windows_dfs_folder.rb +2 -0
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
- data/lib/chef/resource/windows_dfs_server.rb +2 -0
- data/lib/chef/resource/windows_dns_record.rb +25 -5
- data/lib/chef/resource/windows_dns_zone.rb +12 -7
- data/lib/chef/resource/windows_feature.rb +2 -0
- data/lib/chef/resource/windows_feature_dism.rb +10 -0
- data/lib/chef/resource/windows_feature_powershell.rb +14 -2
- data/lib/chef/resource/windows_firewall_profile.rb +199 -0
- data/lib/chef/resource/windows_firewall_rule.rb +5 -3
- data/lib/chef/resource/windows_font.rb +3 -1
- data/lib/chef/resource/windows_pagefile.rb +4 -0
- data/lib/chef/resource/windows_printer.rb +17 -18
- data/lib/chef/resource/windows_printer_port.rb +14 -13
- data/lib/chef/resource/windows_security_policy.rb +51 -20
- data/lib/chef/resource/windows_share.rb +5 -3
- data/lib/chef/resource/windows_shortcut.rb +2 -0
- data/lib/chef/resource/windows_uac.rb +2 -0
- data/lib/chef/resource/windows_user_privilege.rb +2 -0
- data/lib/chef/resource/windows_workgroup.rb +2 -3
- data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
- data/lib/chef/resource_inspector.rb +7 -1
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/role.rb +3 -4
- data/lib/chef/run_context/cookbook_compiler.rb +20 -20
- data/lib/chef/run_status.rb +2 -6
- data/lib/chef/server_api_versions.rb +4 -0
- data/lib/chef/shell.rb +1 -1
- data/lib/chef/shell/shell_session.rb +2 -0
- data/lib/chef/util/backup.rb +1 -1
- data/lib/chef/util/diff.rb +11 -12
- data/lib/chef/util/powershell/cmdlet.rb +1 -1
- data/lib/chef/version.rb +2 -2
- data/lib/chef/win32/file.rb +2 -2
- data/lib/chef/win32/file/version_info.rb +5 -5
- data/lib/chef/win32/registry.rb +1 -2
- data/spec/data/ssl/chef-rspec.cert +15 -15
- data/spec/functional/knife/ssh_spec.rb +5 -16
- data/spec/functional/resource/aix_service_spec.rb +0 -2
- data/spec/functional/resource/aixinit_service_spec.rb +7 -8
- data/spec/functional/resource/apt_package_spec.rb +0 -1
- data/spec/functional/resource/bff_spec.rb +2 -2
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +0 -1
- data/spec/functional/resource/dsc_resource_spec.rb +1 -1
- data/spec/functional/resource/dsc_script_spec.rb +0 -1
- data/spec/functional/resource/git_spec.rb +23 -1
- data/spec/functional/resource/group_spec.rb +12 -8
- data/spec/functional/resource/insserv_spec.rb +4 -5
- data/spec/functional/resource/link_spec.rb +20 -20
- data/spec/functional/resource/powershell_script_spec.rb +4 -4
- data/spec/functional/resource/remote_file_spec.rb +1 -7
- data/spec/functional/resource/rpm_spec.rb +2 -2
- data/spec/functional/resource/windows_certificate_spec.rb +3 -3
- data/spec/functional/resource/windows_font_spec.rb +49 -0
- data/spec/functional/resource/windows_security_policy_spec.rb +0 -3
- data/spec/functional/resource/windows_user_privilege_spec.rb +1 -1
- data/spec/functional/run_lock_spec.rb +26 -25
- data/spec/functional/shell_spec.rb +5 -5
- data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/registry_spec.rb +8 -8
- data/spec/functional/win32/service_manager_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +12 -12
- data/spec/integration/knife/config_get_profile_spec.rb +69 -68
- data/spec/integration/knife/config_get_spec.rb +126 -125
- data/spec/integration/knife/config_list_profiles_spec.rb +181 -152
- data/spec/integration/knife/config_use_profile_spec.rb +110 -109
- data/spec/integration/knife/cookbook_upload_spec.rb +27 -0
- data/spec/integration/knife/diff_spec.rb +3 -1
- data/spec/integration/knife/download_spec.rb +3 -1
- data/spec/integration/knife/serve_spec.rb +5 -5
- data/spec/integration/knife/upload_spec.rb +3 -1
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +2 -2
- data/spec/integration/recipes/lwrp_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +1 -1
- data/spec/integration/recipes/notifying_block_spec.rb +1 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +1 -1
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +2 -0
- data/spec/integration/recipes/resource_load_spec.rb +2 -0
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +1 -1
- data/spec/scripts/ssl-serve.rb +1 -1
- data/spec/spec_helper.rb +16 -10
- data/spec/support/chef_helpers.rb +1 -20
- data/spec/support/platform_helpers.rb +9 -11
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/shared/functional/directory_resource.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/functional/file_resource.rb +20 -21
- data/spec/support/shared/functional/win32_service.rb +1 -1
- data/spec/support/shared/functional/windows_script.rb +3 -3
- data/spec/support/shared/integration/integration_helper.rb +22 -52
- data/spec/support/shared/integration/knife_support.rb +2 -9
- data/spec/support/shared/unit/application_dot_d.rb +0 -1
- data/spec/support/shared/unit/script_resource.rb +6 -20
- data/spec/support/shared/unit/windows_script_resource.rb +15 -28
- data/spec/unit/application_spec.rb +4 -2
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +2 -4
- data/spec/unit/chef_fs/{parallelizer.rb → parallelizer_spec.rb} +1 -1
- data/spec/unit/cookbook/gem_installer_spec.rb +2 -1
- data/spec/unit/data_collector_spec.rb +29 -1
- data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
- data/spec/unit/environment_spec.rb +7 -7
- data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
- data/spec/unit/http/api_versions_spec.rb +19 -1
- data/spec/unit/json_compat_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +16 -20
- data/spec/unit/knife/cookbook_download_spec.rb +4 -4
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
- data/spec/unit/knife/cookbook_upload_spec.rb +7 -10
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
- data/spec/unit/knife/supermarket_share_spec.rb +1 -1
- data/spec/unit/log/syslog_spec.rb +6 -10
- data/spec/unit/log/winevt_spec.rb +21 -13
- data/spec/unit/lwrp_spec.rb +4 -4
- data/spec/unit/mixin/{path_sanity_spec.rb → default_paths_spec.rb} +14 -14
- data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +0 -1
- data/spec/unit/mixin/shell_out_spec.rb +25 -26
- data/spec/unit/mixin/template_spec.rb +30 -30
- data/spec/unit/mixin/which.rb +8 -0
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
- data/spec/unit/node/immutable_collections_spec.rb +6 -2
- data/spec/unit/node_spec.rb +103 -16
- data/spec/unit/property_spec.rb +5 -5
- data/spec/unit/provider/execute_spec.rb +0 -7
- data/spec/unit/provider/ifconfig_spec.rb +0 -1
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
- data/spec/unit/provider/package/rubygems_spec.rb +5 -10
- data/spec/unit/provider/package/smartos_spec.rb +1 -1
- data/spec/unit/provider/package/windows_spec.rb +30 -53
- data/spec/unit/provider/powershell_script_spec.rb +11 -4
- data/spec/unit/provider/remote_directory_spec.rb +9 -9
- data/spec/unit/provider/service/arch_service_spec.rb +3 -2
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
- data/spec/unit/provider/service/macosx_spec.rb +3 -3
- data/spec/unit/provider/service/redhat_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
- data/spec/unit/provider/service/windows_spec.rb +2 -6
- data/spec/unit/provider/systemd_unit_spec.rb +28 -24
- data/spec/unit/provider_resolver_spec.rb +6 -6
- data/spec/unit/provider_spec.rb +1 -0
- data/spec/unit/resource/batch_spec.rb +6 -6
- data/spec/unit/resource/execute_spec.rb +123 -118
- data/spec/unit/resource/macos_user_defaults_spec.rb +103 -2
- data/spec/unit/resource/osx_profile_spec.rb +233 -0
- data/spec/unit/resource/powershell_script_spec.rb +11 -29
- data/spec/unit/resource/script_spec.rb +6 -1
- data/spec/unit/resource/timezone_spec.rb +63 -0
- data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
- data/spec/unit/resource/windows_firewall_profile_spec.rb +77 -0
- data/spec/unit/resource/windows_package_spec.rb +1 -0
- data/spec/unit/resource_reporter_spec.rb +1 -1
- data/spec/unit/role_spec.rb +11 -11
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
- data/spec/unit/run_lock_spec.rb +1 -1
- data/spec/unit/scan_access_control_spec.rb +1 -1
- data/spec/unit/server_api_spec.rb +43 -16
- data/spec/unit/util/diff_spec.rb +1 -15
- data/spec/unit/win32/security_spec.rb +4 -3
- data/tasks/rspec.rb +1 -1
- metadata +39 -31
- data/lib/chef/provider/osx_profile.rb +0 -255
- data/spec/unit/provider/osx_profile_spec.rb +0 -255
@@ -47,7 +47,7 @@ class Chef
|
|
47
47
|
|
48
48
|
def find_subcommands_via_dirglob
|
49
49
|
# The "require paths" of the core knife subcommands bundled with chef
|
50
|
-
files = Dir[File.join(Chef::Util::PathHelper.escape_glob_dir(File.expand_path("
|
50
|
+
files = Dir[File.join(Chef::Util::PathHelper.escape_glob_dir(File.expand_path("../../knife", __dir__)), "*.rb")]
|
51
51
|
subcommand_files = {}
|
52
52
|
files.each do |knife_file|
|
53
53
|
rel_path = knife_file[/#{CHEF_ROOT}#{Regexp.escape(File::SEPARATOR)}(.*)\.rb/, 1]
|
@@ -27,6 +27,7 @@ class Chef
|
|
27
27
|
KEY = "_autogenerated_command_paths".freeze
|
28
28
|
|
29
29
|
attr_accessor :manifest
|
30
|
+
|
30
31
|
def initialize(chef_config_dir, plugin_manifest)
|
31
32
|
super(chef_config_dir)
|
32
33
|
@manifest = plugin_manifest
|
@@ -52,7 +53,7 @@ class Chef
|
|
52
53
|
paths = manifest[KEY]["plugins_paths"][command]
|
53
54
|
if paths && paths.is_a?(Array)
|
54
55
|
# It is only an error if all the paths don't exist
|
55
|
-
if paths.all? { |sc| !File.
|
56
|
+
if paths.all? { |sc| !File.exist?(sc) }
|
56
57
|
errors[command] = paths
|
57
58
|
end
|
58
59
|
end
|
@@ -76,7 +77,7 @@ class Chef
|
|
76
77
|
false
|
77
78
|
else
|
78
79
|
paths.each do |sc|
|
79
|
-
if File.
|
80
|
+
if File.exist?(sc)
|
80
81
|
Kernel.load sc
|
81
82
|
else
|
82
83
|
return false
|
@@ -75,6 +75,25 @@ class Chef
|
|
75
75
|
Chef::Util::PathHelper.home(".chef", "plugin_manifest.json")
|
76
76
|
end
|
77
77
|
|
78
|
+
def self.generate_hash
|
79
|
+
output = if plugin_manifest?
|
80
|
+
plugin_manifest
|
81
|
+
else
|
82
|
+
{ Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY => {} }
|
83
|
+
end
|
84
|
+
output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_paths"] = Chef::Knife.subcommand_files
|
85
|
+
output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_by_category"] = Chef::Knife.subcommands_by_category
|
86
|
+
output
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.write_hash(data)
|
90
|
+
plugin_manifest_dir = File.expand_path("..", plugin_manifest_path)
|
91
|
+
FileUtils.mkdir_p(plugin_manifest_dir) unless File.directory?(plugin_manifest_dir)
|
92
|
+
File.open(plugin_manifest_path, "w") do |f|
|
93
|
+
f.write(Chef::JSONCompat.to_json_pretty(data))
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
78
97
|
def initialize(chef_config_dir)
|
79
98
|
@chef_config_dir = chef_config_dir
|
80
99
|
end
|
@@ -125,7 +144,7 @@ class Chef
|
|
125
144
|
#
|
126
145
|
def find_subcommands_via_dirglob
|
127
146
|
# The "require paths" of the core knife subcommands bundled with chef
|
128
|
-
files = Dir[File.join(Chef::Util::PathHelper.escape_glob_dir(File.expand_path("
|
147
|
+
files = Dir[File.join(Chef::Util::PathHelper.escape_glob_dir(File.expand_path("../../knife", __dir__)), "*.rb")]
|
129
148
|
subcommand_files = {}
|
130
149
|
files.each do |knife_file|
|
131
150
|
rel_path = knife_file[/#{CHEF_ROOT}#{Regexp.escape(File::SEPARATOR)}(.*)\.rb/, 1]
|
data/lib/chef/knife/core/ui.rb
CHANGED
@@ -61,6 +61,12 @@ class Chef
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
+
# Creates a new object of class TTY::Prompt
|
65
|
+
# with interrupt as exit so that it can be terminated with status code.
|
66
|
+
def prompt
|
67
|
+
@prompt ||= TTY::Prompt.new(interrupt: :exit)
|
68
|
+
end
|
69
|
+
|
64
70
|
# pastel.decorate is a lightweight replacement for highline.color
|
65
71
|
def pastel
|
66
72
|
@pastel ||= begin
|
@@ -163,8 +169,8 @@ class Chef
|
|
163
169
|
Chef::Config[:color] && stdout.tty?
|
164
170
|
end
|
165
171
|
|
166
|
-
def ask(*args, &block)
|
167
|
-
|
172
|
+
def ask(*args, **options, &block)
|
173
|
+
prompt.ask(*args, **options, &block)
|
168
174
|
end
|
169
175
|
|
170
176
|
def list(*args)
|
@@ -41,21 +41,6 @@ class Chef
|
|
41
41
|
super(config, run_list, chef_config, secret)
|
42
42
|
end
|
43
43
|
|
44
|
-
# This is a duplicate of ChefConfig::PathHelper.cleanpath, however
|
45
|
-
# this presumes Windows so we can avoid changing the method definitions
|
46
|
-
# across Chef, ChefConfig, and ChefUtils for the circumstance where
|
47
|
-
# the methods are being run for a system other than the one Ruby is
|
48
|
-
# executing on.
|
49
|
-
#
|
50
|
-
# We only need to cleanpath the paths that we are passing to cmd.exe,
|
51
|
-
# anything written to a configuration file or passed as an argument
|
52
|
-
# will be interpreted by ruby later and do the right thing.
|
53
|
-
def cleanpath(path)
|
54
|
-
path = Pathname.new(path).cleanpath.to_s
|
55
|
-
path = path.gsub(File::SEPARATOR, '\\')
|
56
|
-
path
|
57
|
-
end
|
58
|
-
|
59
44
|
def validation_key
|
60
45
|
if File.exist?(File.expand_path(chef_config[:validation_key]))
|
61
46
|
IO.read(File.expand_path(chef_config[:validation_key]))
|
@@ -73,12 +58,21 @@ class Chef
|
|
73
58
|
end
|
74
59
|
|
75
60
|
def config_content
|
61
|
+
# The windows: true / windows: false in the block that follows is more than a bit weird. The way to read this is that we need
|
62
|
+
# the e.g. var_chef_dir to be rendered for the windows value ("C:\chef"), but then we are rendering into a file to be read by
|
63
|
+
# ruby, so we don't actually care about forward-vs-backslashes and by rendering into unix we avoid having to deal with the
|
64
|
+
# double-backwhacking of everything. So we expect to see:
|
65
|
+
#
|
66
|
+
# file_cache_path "C:/chef"
|
67
|
+
#
|
68
|
+
# Which is mildly odd, but should be entirely correct as far as ruby cares.
|
69
|
+
#
|
76
70
|
client_rb = <<~CONFIG
|
77
71
|
chef_server_url "#{chef_config[:chef_server_url]}"
|
78
72
|
validation_client_name "#{chef_config[:validation_client_name]}"
|
79
|
-
file_cache_path "#{ChefConfig::Config.var_chef_dir(true)}
|
80
|
-
file_backup_path "#{ChefConfig::Config.var_chef_dir(true)}
|
81
|
-
cache_options ({:path => "#{ChefConfig::Config.etc_chef_dir(true)}
|
73
|
+
file_cache_path "#{ChefConfig::PathHelper.escapepath(ChefConfig::Config.var_chef_dir(windows: true))}\\\\cache"
|
74
|
+
file_backup_path "#{ChefConfig::PathHelper.escapepath(ChefConfig::Config.var_chef_dir(windows: true))}\\\\backup"
|
75
|
+
cache_options ({:path => "#{ChefConfig::PathHelper.escapepath(ChefConfig::Config.etc_chef_dir(windows: true))}\\\\cache\\\\checksums", :skip_expires => true})
|
82
76
|
CONFIG
|
83
77
|
|
84
78
|
unless chef_config[:chef_license].nil?
|
@@ -91,8 +85,8 @@ class Chef
|
|
91
85
|
client_rb << "# Using default node name (fqdn)\n"
|
92
86
|
end
|
93
87
|
|
94
|
-
if
|
95
|
-
client_rb << %Q{log_level :#{
|
88
|
+
if config[:config_log_level]
|
89
|
+
client_rb << %Q{log_level :#{config[:config_log_level]}\n}
|
96
90
|
else
|
97
91
|
client_rb << "log_level :auto\n"
|
98
92
|
end
|
@@ -141,11 +135,11 @@ class Chef
|
|
141
135
|
end
|
142
136
|
|
143
137
|
if config[:secret]
|
144
|
-
client_rb << %Q{encrypted_data_bag_secret "#{ChefConfig::Config.etc_chef_dir(true)}/encrypted_data_bag_secret"\n}
|
138
|
+
client_rb << %Q{encrypted_data_bag_secret "#{ChefConfig::Config.etc_chef_dir(windows: true)}/encrypted_data_bag_secret"\n}
|
145
139
|
end
|
146
140
|
|
147
141
|
unless trusted_certs_script.empty?
|
148
|
-
client_rb << %Q{trusted_certs_dir "#{ChefConfig::Config.etc_chef_dir(true)}/trusted_certs"\n}
|
142
|
+
client_rb << %Q{trusted_certs_dir "#{ChefConfig::Config.etc_chef_dir(windows: true)}/trusted_certs"\n}
|
149
143
|
end
|
150
144
|
|
151
145
|
if chef_config[:fips]
|
@@ -174,9 +168,14 @@ class Chef
|
|
174
168
|
end
|
175
169
|
|
176
170
|
def start_chef
|
171
|
+
c_opscode_dir = ChefConfig::PathHelper.cleanpath(ChefConfig::Config.c_opscode_dir, windows: true)
|
172
|
+
client_rb = clean_etc_chef_file("client.rb")
|
173
|
+
first_boot = clean_etc_chef_file("first-boot.json")
|
174
|
+
|
177
175
|
bootstrap_environment_option = bootstrap_environment.nil? ? "" : " -E #{bootstrap_environment}"
|
178
|
-
|
179
|
-
start_chef
|
176
|
+
|
177
|
+
start_chef = "SET \"PATH=%SYSTEM32%;%SystemRoot%;%SYSTEM32%\\Wbem;%SYSTEM32%\\WindowsPowerShell\\v1.0\\;C:\\ruby\\bin;#{c_opscode_dir}\\bin;#{c_opscode_dir}\\embedded\\bin\;%PATH%\"\n"
|
178
|
+
start_chef << "#{Chef::Dist::CLIENT} -c #{client_rb} -j #{first_boot}#{bootstrap_environment_option}\n"
|
180
179
|
end
|
181
180
|
|
182
181
|
def win_wget
|
@@ -276,8 +275,16 @@ class Chef
|
|
276
275
|
install_command('"') + "\n" + fallback_install_task_command
|
277
276
|
end
|
278
277
|
|
278
|
+
def clean_etc_chef_file(path)
|
279
|
+
ChefConfig::PathHelper.cleanpath(etc_chef_file(path), windows: true)
|
280
|
+
end
|
281
|
+
|
282
|
+
def etc_chef_file(path)
|
283
|
+
"#{bootstrap_directory}/#{path}"
|
284
|
+
end
|
285
|
+
|
279
286
|
def bootstrap_directory
|
280
|
-
|
287
|
+
ChefConfig::Config.etc_chef_dir(windows: true)
|
281
288
|
end
|
282
289
|
|
283
290
|
def local_download_path
|
data/lib/chef/knife/delete.rb
CHANGED
@@ -96,21 +96,21 @@ class Chef
|
|
96
96
|
found_any = false
|
97
97
|
error = false
|
98
98
|
results.each do |result|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
99
|
+
|
100
|
+
result.delete(config[:recurse])
|
101
|
+
deleted_any = true
|
102
|
+
found_any = true
|
103
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError
|
104
|
+
# This is not an error unless *all* of them were not found
|
105
|
+
rescue Chef::ChefFS::FileSystem::MustDeleteRecursivelyError => e
|
106
|
+
ui.error "#{format_path_with_root(e.entry)} must be deleted recursively! Pass -r to knife delete."
|
107
|
+
found_any = true
|
108
|
+
error = true
|
109
|
+
rescue Chef::ChefFS::FileSystem::OperationNotAllowedError => e
|
110
|
+
ui.error "#{format_path_with_root(e.entry)} #{e.reason}."
|
111
|
+
found_any = true
|
112
|
+
error = true
|
113
|
+
|
114
114
|
end
|
115
115
|
if deleted_any
|
116
116
|
output("Deleted #{format_path(results[0])}")
|
data/lib/chef/knife/exec.rb
CHANGED
@@ -76,7 +76,7 @@ class Chef::Knife::Exec < Chef::Knife
|
|
76
76
|
def find_script(x)
|
77
77
|
# Try to find a script. First try expanding the path given.
|
78
78
|
script = File.expand_path(x)
|
79
|
-
return script if File.
|
79
|
+
return script if File.exist?(script)
|
80
80
|
|
81
81
|
# Failing that, try searching the script path. If we can't find
|
82
82
|
# anything, fail gracefully.
|
@@ -86,7 +86,7 @@ class Chef::Knife::Exec < Chef::Knife
|
|
86
86
|
path = File.expand_path(path)
|
87
87
|
test = File.join(path, x)
|
88
88
|
Chef::Log.trace("Testing: #{test}")
|
89
|
-
if File.
|
89
|
+
if File.exist?(test)
|
90
90
|
script = test
|
91
91
|
Chef::Log.trace("Found: #{test}")
|
92
92
|
return script
|
data/lib/chef/knife/rehash.rb
CHANGED
@@ -34,7 +34,9 @@ class Chef
|
|
34
34
|
else
|
35
35
|
reload_plugins
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
|
+
ui.msg "Knife subcommands are cached in #{Chef::Knife::SubcommandLoader.plugin_manifest_path}. Delete this file to disable the caching."
|
39
|
+
Chef::Knife::SubcommandLoader.write_hash(Chef::Knife::SubcommandLoader.generate_hash)
|
38
40
|
end
|
39
41
|
|
40
42
|
def reload_plugins
|
@@ -43,26 +45,6 @@ class Chef
|
|
43
45
|
# loaded plugins and `load_commands` shouldn't have an effect.
|
44
46
|
Chef::Knife.subcommand_loader.load_commands
|
45
47
|
end
|
46
|
-
|
47
|
-
def generate_hash
|
48
|
-
output = if Chef::Knife::SubcommandLoader.plugin_manifest?
|
49
|
-
Chef::Knife::SubcommandLoader.plugin_manifest
|
50
|
-
else
|
51
|
-
{ Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY => {} }
|
52
|
-
end
|
53
|
-
output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_paths"] = Chef::Knife.subcommand_files
|
54
|
-
output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_by_category"] = Chef::Knife.subcommands_by_category
|
55
|
-
output
|
56
|
-
end
|
57
|
-
|
58
|
-
def write_hash(data)
|
59
|
-
plugin_manifest_dir = File.expand_path("..", Chef::Knife::SubcommandLoader.plugin_manifest_path)
|
60
|
-
FileUtils.mkdir_p(plugin_manifest_dir) unless File.directory?(plugin_manifest_dir)
|
61
|
-
File.open(Chef::Knife::SubcommandLoader.plugin_manifest_path, "w") do |f|
|
62
|
-
f.write(Chef::JSONCompat.to_json_pretty(data))
|
63
|
-
ui.msg "Knife subcommands are cached in #{Chef::Knife::SubcommandLoader.plugin_manifest_path}. Delete this file to disable the caching."
|
64
|
-
end
|
65
|
-
end
|
66
48
|
end
|
67
49
|
end
|
68
50
|
end
|
data/lib/chef/knife/ssh.rb
CHANGED
@@ -296,6 +296,10 @@ class Chef
|
|
296
296
|
opts[:keepalive] = true
|
297
297
|
opts[:keepalive_interval] = ssh_config[:keepalive_interval]
|
298
298
|
end
|
299
|
+
# maintain support for legacy key types / ciphers / key exchange algorithms.
|
300
|
+
# most importantly this adds back support for DSS host keys
|
301
|
+
# See https://github.com/net-ssh/net-ssh/pull/709
|
302
|
+
opts[:append_all_supported_algorithms] = true
|
299
303
|
end
|
300
304
|
end
|
301
305
|
|
@@ -384,7 +388,7 @@ class Chef
|
|
384
388
|
end
|
385
389
|
|
386
390
|
def prompt_for_password(prompt = "Enter your password: ")
|
387
|
-
ui.ask(prompt
|
391
|
+
ui.ask(prompt, echo: false)
|
388
392
|
end
|
389
393
|
|
390
394
|
# Present the prompt and read a single line from the console. It also
|
@@ -521,12 +525,12 @@ class Chef
|
|
521
525
|
def cssh
|
522
526
|
cssh_cmd = nil
|
523
527
|
%w{csshX cssh}.each do |cmd|
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
528
|
+
|
529
|
+
# Unix and Mac only
|
530
|
+
cssh_cmd = shell_out!("which #{cmd}").stdout.strip
|
531
|
+
break
|
532
|
+
rescue Mixlib::ShellOut::ShellCommandFailed
|
533
|
+
|
530
534
|
end
|
531
535
|
raise Chef::Exceptions::Exec, "no command found for cssh" unless cssh_cmd
|
532
536
|
|
data/lib/chef/knife/xargs.rb
CHANGED
@@ -204,25 +204,25 @@ class Chef
|
|
204
204
|
error = false
|
205
205
|
# Create the temporary files
|
206
206
|
tempfiles.each_pair do |tempfile, file|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
207
|
+
|
208
|
+
value = file[:file].read
|
209
|
+
file[:value] = value
|
210
|
+
tempfile.open
|
211
|
+
tempfile.write(value)
|
212
|
+
tempfile.close
|
213
|
+
rescue Chef::ChefFS::FileSystem::OperationNotAllowedError => e
|
214
|
+
ui.error "#{format_path(e.entry)}: #{e.reason}."
|
215
|
+
error = true
|
216
|
+
tempfile.close!
|
217
|
+
tempfiles.delete(tempfile)
|
218
|
+
next
|
219
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError => e
|
220
|
+
ui.error "#{format_path(e.entry)}: No such file or directory"
|
221
|
+
error = true
|
222
|
+
tempfile.close!
|
223
|
+
tempfiles.delete(tempfile)
|
224
|
+
next
|
225
|
+
|
226
226
|
end
|
227
227
|
|
228
228
|
return error if error && tempfiles.size == 0
|
data/lib/chef/log.rb
CHANGED
@@ -28,8 +28,13 @@ class Chef
|
|
28
28
|
class Log
|
29
29
|
extend Mixlib::Log
|
30
30
|
|
31
|
+
def self.setup!
|
32
|
+
init(MonoLogger.new(STDOUT))
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
31
36
|
# Force initialization of the primary log device (@logger)
|
32
|
-
|
37
|
+
setup!
|
33
38
|
|
34
39
|
class Formatter
|
35
40
|
def self.show_time=(*args)
|
@@ -47,7 +52,7 @@ class Chef
|
|
47
52
|
def self.caller_location
|
48
53
|
# Pick the first caller that is *not* part of the Chef gem, that's the
|
49
54
|
# thing the user wrote. Or failing that, the most recent caller.
|
50
|
-
chef_gem_path = File.expand_path("
|
55
|
+
chef_gem_path = File.expand_path("..", __dir__)
|
51
56
|
caller(0..20).find { |c| !c.start_with?(chef_gem_path) } || caller(0..1)[0]
|
52
57
|
end
|
53
58
|
|
data/lib/chef/mixin/checksum.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require_relative "../log"
|
18
|
+
require_relative "../config"
|
19
|
+
require_relative "../chef_class"
|
20
|
+
|
21
|
+
class Chef
|
22
|
+
module Mixin
|
23
|
+
# Common Dependency Injection wiring for ChefUtils-related modules
|
24
|
+
module ChefUtilsWiring
|
25
|
+
private
|
26
|
+
|
27
|
+
def __config
|
28
|
+
Chef::Config
|
29
|
+
end
|
30
|
+
|
31
|
+
def __log
|
32
|
+
Chef::Log
|
33
|
+
end
|
34
|
+
|
35
|
+
def __transport_connection
|
36
|
+
Chef.run_context&.transport_connection
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|