chef 16.1.16-universal-mingw32 → 16.3.45-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 +6 -7
- data/README.md +3 -3
- data/Rakefile +3 -16
- data/chef-universal-mingw32.gemspec +2 -2
- data/chef.gemspec +7 -6
- data/lib/chef/application.rb +12 -0
- data/lib/chef/application/apply.rb +2 -1
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/windows_service_manager.rb +1 -1
- data/lib/chef/{whitelist.rb → attribute_allowlist.rb} +11 -11
- data/lib/chef/{blacklist.rb → attribute_blocklist.rb} +9 -9
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +1 -5
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -0
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +1 -1
- data/lib/chef/client.rb +3 -3
- data/lib/chef/cookbook/chefignore.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +1 -1
- 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/cookbook_version.rb +2 -2
- data/lib/chef/data_bag.rb +5 -6
- data/lib/chef/deprecated.rb +12 -0
- data/lib/chef/digester.rb +3 -2
- data/lib/chef/dsl/platform_introspection.rb +2 -0
- data/lib/chef/environment.rb +1 -2
- data/lib/chef/exceptions.rb +3 -0
- data/lib/chef/file_access_control.rb +1 -1
- data/lib/chef/file_access_control/windows.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
- data/lib/chef/handler.rb +2 -0
- data/lib/chef/http.rb +27 -13
- data/lib/chef/http/authenticator.rb +3 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/http/json_output.rb +1 -1
- data/lib/chef/http/ssl_policies.rb +18 -0
- data/lib/chef/knife.rb +5 -5
- data/lib/chef/knife/bootstrap.rb +19 -19
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
- data/lib/chef/knife/bootstrap/train_connector.rb +1 -0
- data/lib/chef/knife/client_bulk_delete.rb +1 -1
- data/lib/chef/knife/config_get.rb +2 -1
- data/lib/chef/knife/config_list_profiles.rb +4 -1
- data/lib/chef/knife/config_use_profile.rb +15 -5
- data/lib/chef/knife/configure.rb +1 -1
- data/lib/chef/knife/cookbook_delete.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +6 -14
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +1 -0
- 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 +2 -3
- data/lib/chef/knife/data_bag_create.rb +1 -1
- data/lib/chef/knife/node_bulk_delete.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +1 -1
- data/lib/chef/knife/rehash.rb +3 -21
- data/lib/chef/knife/role_bulk_delete.rb +1 -1
- data/lib/chef/knife/ssh.rb +6 -2
- data/lib/chef/knife/supermarket_share.rb +1 -1
- data/lib/chef/knife/supermarket_unshare.rb +1 -1
- data/lib/chef/log.rb +8 -3
- data/{spec/functional/resource/base.rb → lib/chef/mixin/chef_utils_wiring.rb} +24 -12
- data/{spec/unit/log_spec.rb → lib/chef/mixin/default_paths.rb} +13 -5
- data/lib/chef/mixin/openssl_helper.rb +27 -5
- data/lib/chef/mixin/path_sanity.rb +5 -4
- data/lib/chef/mixin/securable.rb +2 -2
- 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/node.rb +36 -12
- data/lib/chef/node_map.rb +21 -18
- data/lib/chef/platform/service_helpers.rb +31 -28
- data/lib/chef/powershell.rb +1 -1
- data/lib/chef/provider/batch.rb +3 -10
- data/lib/chef/provider/cron.rb +2 -14
- data/lib/chef/provider/execute.rb +2 -1
- data/lib/chef/provider/git.rb +12 -4
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +7 -7
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/mount/solaris.rb +0 -1
- data/lib/chef/provider/mount/windows.rb +2 -2
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/package/openbsd.rb +1 -1
- data/lib/chef/provider/package/portage.rb +2 -2
- data/lib/chef/provider/package/powershell.rb +6 -2
- data/lib/chef/provider/package/rubygems.rb +2 -2
- data/lib/chef/provider/package/snap.rb +97 -29
- data/lib/chef/provider/package/windows.rb +9 -4
- data/lib/chef/provider/package/windows/msi.rb +3 -3
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +0 -1
- data/lib/chef/provider/powershell_script.rb +10 -14
- data/lib/chef/provider/remote_file/http.rb +4 -1
- data/lib/chef/provider/script.rb +4 -75
- data/lib/chef/provider/service.rb +2 -2
- data/lib/chef/provider/service/arch.rb +1 -1
- data/lib/chef/provider/service/debian.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +4 -4
- data/lib/chef/provider/service/redhat.rb +1 -1
- data/lib/chef/provider/service/windows.rb +1 -1
- data/lib/chef/provider/subversion.rb +2 -2
- data/lib/chef/provider/user/dscl.rb +4 -4
- data/lib/chef/provider/user/linux.rb +3 -3
- data/lib/chef/provider/user/mac.rb +5 -5
- data/lib/chef/provider/windows_script.rb +87 -25
- data/lib/chef/provider/yum_repository.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +31 -11
- data/lib/chef/resource.rb +24 -11
- data/lib/chef/resource/alternatives.rb +1 -1
- data/lib/chef/resource/apt_package.rb +1 -1
- data/lib/chef/resource/archive_file.rb +28 -8
- data/lib/chef/resource/bash.rb +0 -1
- data/lib/chef/resource/batch.rb +4 -2
- data/lib/chef/resource/build_essential.rb +2 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +14 -2
- data/lib/chef/resource/chef_gem.rb +57 -21
- data/lib/chef/resource/chocolatey_feature.rb +1 -2
- data/lib/chef/resource/cron/_cron_shared.rb +98 -0
- data/lib/chef/resource/cron/cron.rb +46 -0
- data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +7 -87
- data/lib/chef/resource/cron_access.rb +13 -5
- data/lib/chef/resource/csh.rb +0 -1
- data/lib/chef/resource/dmg_package.rb +2 -2
- data/lib/chef/resource/execute.rb +479 -9
- data/lib/chef/resource/file.rb +1 -1
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +35 -2
- data/lib/chef/resource/helpers/cron_validations.rb +6 -3
- data/lib/chef/resource/homebrew_package.rb +30 -1
- data/lib/chef/resource/homebrew_update.rb +107 -0
- data/lib/chef/resource/hostname.rb +23 -36
- data/lib/chef/resource/kernel_module.rb +14 -1
- data/lib/chef/resource/launchd.rb +1 -1
- data/lib/chef/resource/lwrp_base.rb +1 -0
- data/lib/chef/resource/macos_userdefaults.rb +176 -61
- data/lib/chef/resource/mount.rb +1 -1
- data/lib/chef/resource/openssl_x509_certificate.rb +11 -14
- data/lib/chef/resource/openssl_x509_crl.rb +1 -2
- data/lib/chef/resource/perl.rb +0 -1
- data/lib/chef/resource/plist.rb +23 -4
- data/lib/chef/resource/powershell_script.rb +4 -2
- data/lib/chef/resource/python.rb +0 -1
- data/lib/chef/resource/remote_file.rb +26 -10
- data/lib/chef/resource/ruby.rb +0 -1
- data/lib/chef/resource/service.rb +2 -2
- data/lib/chef/resource/ssh_known_hosts_entry.rb +16 -1
- data/lib/chef/resource/sudo.rb +30 -3
- data/lib/chef/resource/swap_file.rb +17 -0
- data/lib/chef/resource/template.rb +1 -1
- data/lib/chef/resource/timezone.rb +15 -0
- data/lib/chef/resource/user_ulimit.rb +1 -1
- data/lib/chef/resource/windows_ad_join.rb +30 -1
- data/lib/chef/resource/windows_audit_policy.rb +227 -0
- data/lib/chef/resource/windows_auto_run.rb +11 -0
- data/lib/chef/resource/windows_certificate.rb +26 -0
- data/lib/chef/resource/windows_dns_record.rb +17 -0
- data/lib/chef/resource/windows_firewall_profile.rb +197 -0
- data/lib/chef/resource/windows_font.rb +3 -3
- data/lib/chef/resource/windows_package.rb +1 -1
- data/lib/chef/resource/windows_pagefile.rb +1 -1
- data/lib/chef/resource/windows_script.rb +2 -16
- data/lib/chef/resource/windows_security_policy.rb +67 -36
- data/lib/chef/resource/windows_shortcut.rb +1 -2
- data/lib/chef/resource/windows_task.rb +4 -4
- data/lib/chef/resource/windows_user_privilege.rb +30 -7
- data/lib/chef/resource/yum_repository.rb +9 -9
- data/lib/chef/resource_inspector.rb +7 -1
- data/lib/chef/resources.rb +5 -2
- data/lib/chef/role.rb +1 -2
- data/lib/chef/search/query.rb +1 -1
- data/lib/chef/server_api_versions.rb +4 -0
- data/lib/chef/shell/shell_session.rb +2 -0
- data/lib/chef/util/diff.rb +2 -3
- data/lib/chef/util/windows/net_user.rb +1 -1
- data/lib/chef/util/windows/volume.rb +1 -1
- data/lib/chef/version.rb +2 -2
- data/lib/chef/win32/file.rb +1 -1
- data/lib/chef/win32/registry.rb +3 -4
- data/lib/chef/win32/security.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
- data/spec/functional/knife/configure_spec.rb +1 -1
- data/spec/functional/knife/ssh_spec.rb +5 -16
- data/spec/functional/resource/aix_service_spec.rb +9 -2
- data/spec/functional/resource/aixinit_service_spec.rb +1 -2
- data/spec/functional/resource/apt_package_spec.rb +0 -1
- data/spec/functional/resource/bash_spec.rb +3 -2
- data/spec/functional/resource/bff_spec.rb +1 -1
- data/spec/functional/resource/chocolatey_package_spec.rb +4 -0
- data/spec/functional/resource/cron_spec.rb +20 -2
- data/spec/functional/resource/dnf_package_spec.rb +4 -1
- data/spec/functional/resource/execute_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +23 -1
- data/spec/functional/resource/group_spec.rb +15 -3
- data/spec/functional/resource/ifconfig_spec.rb +9 -1
- data/spec/functional/resource/insserv_spec.rb +3 -3
- data/spec/functional/resource/link_spec.rb +2 -5
- data/spec/functional/resource/mount_spec.rb +9 -1
- data/spec/functional/resource/msu_package_spec.rb +9 -3
- data/spec/functional/resource/powershell_script_spec.rb +4 -4
- data/spec/functional/resource/remote_file_spec.rb +9 -15
- data/spec/functional/resource/rpm_spec.rb +1 -1
- data/spec/functional/resource/timezone_spec.rb +2 -0
- data/spec/functional/resource/windows_package_spec.rb +0 -1
- data/spec/functional/resource/windows_path_spec.rb +4 -0
- data/spec/functional/resource/windows_security_policy_spec.rb +0 -1
- data/spec/functional/resource/windows_service_spec.rb +4 -0
- data/spec/functional/resource/windows_task_spec.rb +12 -11
- data/spec/functional/resource/windows_user_privilege_spec.rb +1 -2
- data/spec/functional/resource/yum_package_spec.rb +4 -1
- data/spec/functional/resource/zypper_package_spec.rb +4 -1
- data/spec/functional/run_lock_spec.rb +2 -1
- data/spec/functional/shell_spec.rb +5 -6
- data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/crypto_spec.rb +1 -1
- data/spec/integration/knife/config_list_profiles_spec.rb +30 -2
- data/spec/integration/knife/config_use_profile_spec.rb +55 -2
- data/spec/integration/knife/cookbook_upload_spec.rb +28 -1
- data/spec/integration/knife/data_bag_from_file_spec.rb +1 -1
- data/spec/integration/knife/environment_from_file_spec.rb +1 -1
- data/spec/integration/knife/node_from_file_spec.rb +1 -1
- data/spec/integration/knife/role_from_file_spec.rb +1 -1
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- 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 +5 -1
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +2 -0
- data/spec/integration/recipes/resource_load_spec.rb +4 -2
- 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 +10 -4
- data/spec/support/chef_helpers.rb +1 -20
- data/spec/support/platform_helpers.rb +1 -3
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/functional/file_resource.rb +0 -1
- data/spec/support/shared/functional/securable_resource.rb +1 -2
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
- data/spec/support/shared/functional/windows_script.rb +2 -2
- 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/execute_resource.rb +1 -1
- data/spec/support/shared/unit/provider/file.rb +12 -8
- data/spec/unit/application/solo_spec.rb +4 -2
- data/spec/unit/application_spec.rb +11 -2
- data/spec/unit/chef_fs/config_spec.rb +2 -2
- data/spec/unit/chef_fs/diff_spec.rb +8 -8
- 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/client_spec.rb +4 -1
- data/spec/unit/cookbook/gem_installer_spec.rb +2 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +26 -24
- data/spec/unit/data_bag_spec.rb +6 -3
- data/spec/unit/data_collector_spec.rb +1 -1
- data/spec/unit/decorator_spec.rb +23 -23
- data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
- data/spec/unit/environment_spec.rb +5 -1
- data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
- data/spec/unit/guard_interpreter_spec.rb +1 -1
- data/spec/unit/http/api_versions_spec.rb +20 -2
- data/spec/unit/http/ssl_policies_spec.rb +20 -0
- data/spec/unit/json_compat_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +5 -8
- data/spec/unit/knife/cookbook_download_spec.rb +2 -2
- data/spec/unit/knife/cookbook_show_spec.rb +6 -7
- data/spec/unit/knife/cookbook_upload_spec.rb +7 -10
- data/spec/unit/knife/data_bag_edit_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 +9 -6
- 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/powershell_out_spec.rb +2 -4
- data/spec/unit/mixin/powershell_type_coercions_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/subclass_directive_spec.rb +2 -2
- data/spec/unit/mixin/unformatter_spec.rb +2 -2
- data/spec/unit/mixin/uris_spec.rb +1 -1
- data/spec/unit/mixin/user_context_spec.rb +1 -9
- data/spec/unit/mixin/which.rb +8 -0
- data/spec/unit/node_spec.rb +98 -11
- data/spec/unit/property_spec.rb +6 -6
- data/spec/unit/provider/batch_spec.rb +130 -0
- data/spec/unit/provider/cron/unix_spec.rb +1 -1
- data/spec/unit/provider/cron_spec.rb +9 -49
- data/spec/unit/provider/dsc_resource_spec.rb +22 -38
- data/spec/unit/provider/dsc_script_spec.rb +10 -10
- data/spec/unit/provider/execute_spec.rb +1 -8
- data/spec/unit/provider/git_spec.rb +3 -3
- data/spec/unit/provider/ifconfig_spec.rb +0 -1
- data/spec/unit/provider/mdadm_spec.rb +1 -3
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
- data/spec/unit/provider/package/openbsd_spec.rb +1 -1
- data/spec/unit/provider/package/pacman_spec.rb +17 -20
- data/spec/unit/provider/package/powershell_spec.rb +95 -86
- 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/snap_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +30 -53
- data/spec/unit/provider/powershell_script_spec.rb +3 -45
- data/spec/unit/provider/script_spec.rb +20 -110
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/windows_spec.rb +2 -6
- data/spec/unit/provider/systemd_unit_spec.rb +28 -24
- data/spec/unit/provider/user/dscl_spec.rb +2 -2
- data/spec/unit/provider/windows_env_spec.rb +5 -4
- data/spec/unit/provider/zypper_repository_spec.rb +60 -10
- data/spec/unit/provider_spec.rb +1 -0
- data/spec/unit/resource/archive_file_spec.rb +11 -2
- data/spec/unit/resource/chef_client_cron_spec.rb +23 -7
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +7 -4
- data/spec/unit/resource/cron_spec.rb +2 -2
- data/spec/unit/resource/execute_spec.rb +10 -0
- data/spec/unit/resource/file/verification_spec.rb +2 -1
- data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
- data/spec/unit/resource/homebrew_update_spec.rb +30 -0
- data/spec/unit/resource/macos_user_defaults_spec.rb +103 -2
- data/spec/unit/resource/powershell_script_spec.rb +10 -15
- data/spec/unit/resource/timezone_spec.rb +1 -1
- data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
- data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
- data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
- 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/windows_task_spec.rb +1 -1
- data/spec/unit/resource/windows_uac_spec.rb +2 -2
- data/spec/unit/resource/yum_repository_spec.rb +21 -21
- data/spec/unit/resource_reporter_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +84 -1
- data/spec/unit/role_spec.rb +23 -21
- 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/backup_spec.rb +1 -1
- data/spec/unit/util/diff_spec.rb +1 -15
- data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
- data/spec/unit/util/powershell/ps_credential_spec.rb +2 -2
- data/spec/unit/util/selinux_spec.rb +2 -1
- data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
- data/spec/unit/win32/security_spec.rb +4 -3
- metadata +68 -40
- data/lib/chef/resource/cron.rb +0 -157
@@ -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]
|
@@ -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)
|
@@ -27,7 +27,7 @@ class Chef
|
|
27
27
|
# bootstrap templates. For backwards compatibility, they +must+ set the
|
28
28
|
# following instance variables:
|
29
29
|
# * @config - a hash of knife's config values
|
30
|
-
# * @run_list - the run list for the node to
|
30
|
+
# * @run_list - the run list for the node to bootstrap
|
31
31
|
#
|
32
32
|
class WindowsBootstrapContext < BootstrapContext
|
33
33
|
attr_accessor :config
|
@@ -52,8 +52,7 @@ class Chef
|
|
52
52
|
# will be interpreted by ruby later and do the right thing.
|
53
53
|
def cleanpath(path)
|
54
54
|
path = Pathname.new(path).cleanpath.to_s
|
55
|
-
path
|
56
|
-
path
|
55
|
+
path.gsub(File::SEPARATOR, '\\')
|
57
56
|
end
|
58
57
|
|
59
58
|
def validation_key
|
@@ -54,7 +54,7 @@ class Chef
|
|
54
54
|
rest.get("data/#{@data_bag_name}")
|
55
55
|
ui.info("Data bag #{@data_bag_name} already exists")
|
56
56
|
rescue Net::HTTPClientException => e
|
57
|
-
raise unless e.to_s
|
57
|
+
raise unless /^404/.match?(e.to_s)
|
58
58
|
|
59
59
|
# if it doesn't exists, try to create it
|
60
60
|
rest.post("data", { "name" => @data_bag_name })
|
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
|
|
@@ -364,7 +368,7 @@ class Chef
|
|
364
368
|
|
365
369
|
ch.on_data do |ichannel, data|
|
366
370
|
print_data(ichannel.connection[:prefix], data)
|
367
|
-
if
|
371
|
+
if /^knife sudo password: /.match?(data)
|
368
372
|
print_data(ichannel.connection[:prefix], "\n")
|
369
373
|
ichannel.send_data("#{get_password}\n")
|
370
374
|
end
|
@@ -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
|
@@ -132,7 +132,7 @@ class Chef
|
|
132
132
|
res = Chef::JSONCompat.from_json(http_resp.body)
|
133
133
|
if http_resp.code.to_i != 201
|
134
134
|
if res["error_messages"]
|
135
|
-
if res["error_messages"][0]
|
135
|
+
if /Version already exists/.match?(res["error_messages"][0])
|
136
136
|
ui.error "The same version of this cookbook already exists on Supermarket."
|
137
137
|
exit(1)
|
138
138
|
else
|
@@ -48,7 +48,7 @@ class Chef
|
|
48
48
|
begin
|
49
49
|
rest.delete "#{config[:supermarket_site]}/api/v1/cookbooks/#{@name_args[0]}"
|
50
50
|
rescue Net::HTTPClientException => e
|
51
|
-
raise e unless e.message
|
51
|
+
raise e unless /Forbidden/.match?(e.message)
|
52
52
|
|
53
53
|
ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it."
|
54
54
|
exit 1
|
data/lib/chef/log.rb
CHANGED
@@ -21,15 +21,20 @@ require "logger"
|
|
21
21
|
require_relative "monologger"
|
22
22
|
require_relative "exceptions"
|
23
23
|
require "mixlib/log"
|
24
|
-
require_relative "log/syslog" unless RUBY_PLATFORM
|
24
|
+
require_relative "log/syslog" unless RUBY_PLATFORM.match?(/mswin|mingw|windows/)
|
25
25
|
require_relative "log/winevt"
|
26
26
|
|
27
27
|
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
|
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
1
|
+
#--
|
3
2
|
# Copyright:: Copyright (c) Chef Software Inc.
|
4
3
|
# License:: Apache License, Version 2.0
|
5
4
|
#
|
@@ -7,22 +6,35 @@
|
|
7
6
|
# you may not use this file except in compliance with the License.
|
8
7
|
# You may obtain a copy of the License at
|
9
8
|
#
|
10
|
-
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
10
|
#
|
12
11
|
# Unless required by applicable law or agreed to in writing, software
|
13
12
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
14
|
# See the License for the specific language governing permissions and
|
16
15
|
# limitations under the License.
|
17
|
-
#
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
27
39
|
end
|
28
40
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
3
2
|
# Copyright:: Copyright (c) Chef Software Inc.
|
4
3
|
# License:: Apache License, Version 2.0
|
5
4
|
#
|
@@ -16,9 +15,18 @@
|
|
16
15
|
# limitations under the License.
|
17
16
|
#
|
18
17
|
|
19
|
-
require "
|
20
|
-
require "logger"
|
21
|
-
require "spec_helper"
|
18
|
+
require "chef-utils/dsl/default_paths" unless defined?(ChefUtils::DSL::DefaultPaths)
|
22
19
|
|
23
|
-
|
20
|
+
class Chef
|
21
|
+
module Mixin
|
22
|
+
module DefaultPaths
|
23
|
+
include ChefUtils::DSL::DefaultPaths
|
24
|
+
|
25
|
+
def enforce_default_paths(env = ENV)
|
26
|
+
if Chef::Config[:enforce_default_paths] || Chef::Config[:enforce_path_sanity]
|
27
|
+
env["PATH"] = default_paths(env)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
24
32
|
end
|
@@ -282,7 +282,9 @@ class Chef
|
|
282
282
|
ef.issuer_certificate = info["issuer"]
|
283
283
|
end
|
284
284
|
ef.subject_certificate = cert
|
285
|
-
|
285
|
+
if openssl_config = __openssl_config
|
286
|
+
ef.config = openssl_config
|
287
|
+
end
|
286
288
|
|
287
289
|
cert.extensions = extension
|
288
290
|
cert.add_extension ef.create_extension("subjectKeyIdentifier", "hash")
|
@@ -313,7 +315,9 @@ class Chef
|
|
313
315
|
crl.last_update = Time.now
|
314
316
|
crl.next_update = Time.now + 3600 * 24 * info["validity"]
|
315
317
|
|
316
|
-
|
318
|
+
if openssl_config = __openssl_config
|
319
|
+
ef.config = openssl_config
|
320
|
+
end
|
317
321
|
ef.issuer_certificate = info["issuer"]
|
318
322
|
|
319
323
|
crl.add_extension ::OpenSSL::X509::Extension.new("crlNumber", ::OpenSSL::ASN1::Integer(1))
|
@@ -369,8 +373,7 @@ class Chef
|
|
369
373
|
revoked.add_extension(ext)
|
370
374
|
crl.add_revoked(revoked)
|
371
375
|
|
372
|
-
|
373
|
-
crl
|
376
|
+
renew_x509_crl(crl, ca_private_key, info)
|
374
377
|
end
|
375
378
|
|
376
379
|
# renew a X509 crl given
|
@@ -391,7 +394,9 @@ class Chef
|
|
391
394
|
crl.next_update = crl.last_update + 3600 * 24 * info["validity"]
|
392
395
|
|
393
396
|
ef = ::OpenSSL::X509::ExtensionFactory.new
|
394
|
-
|
397
|
+
if openssl_config = __openssl_config
|
398
|
+
ef.config = openssl_config
|
399
|
+
end
|
395
400
|
ef.issuer_certificate = info["issuer"]
|
396
401
|
|
397
402
|
crl.extensions = [ ::OpenSSL::X509::Extension.new("crlNumber",
|
@@ -422,6 +427,23 @@ class Chef
|
|
422
427
|
|
423
428
|
resp
|
424
429
|
end
|
430
|
+
|
431
|
+
private
|
432
|
+
|
433
|
+
def __openssl_config
|
434
|
+
path = if File.exist?(::OpenSSL::Config::DEFAULT_CONFIG_FILE)
|
435
|
+
OpenSSL::Config::DEFAULT_CONFIG_FILE
|
436
|
+
else
|
437
|
+
Dir[File.join(RbConfig::CONFIG["prefix"], "**", "openssl.cnf")].first
|
438
|
+
end
|
439
|
+
|
440
|
+
if File.exist?(path)
|
441
|
+
::OpenSSL::Config.load(path)
|
442
|
+
else
|
443
|
+
Chef::Log.warn("Couldn't find OpenSSL config file")
|
444
|
+
nil
|
445
|
+
end
|
446
|
+
end
|
425
447
|
end
|
426
448
|
end
|
427
449
|
end
|
@@ -16,14 +16,15 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
+
require_relative "default_paths"
|
20
|
+
|
19
21
|
class Chef
|
20
22
|
module Mixin
|
21
|
-
# @ deprecated
|
22
23
|
module PathSanity
|
24
|
+
include Chef::Mixin::DefaultPaths
|
25
|
+
|
23
26
|
def enforce_path_sanity(env = ENV)
|
24
|
-
|
25
|
-
env["PATH"] = ChefUtils::DSL::PathSanity.sanitized_path(env)
|
26
|
-
end
|
27
|
+
enforce_default_paths(env)
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
data/lib/chef/mixin/securable.rb
CHANGED
@@ -172,14 +172,14 @@ class Chef
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
175
|
-
if RUBY_PLATFORM
|
175
|
+
if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
|
176
176
|
include WindowsSecurableAttributes
|
177
177
|
end
|
178
178
|
|
179
179
|
# Callback that fires when included; will extend the including class
|
180
180
|
# with WindowsMacros and define #rights and #deny_rights on it.
|
181
181
|
def self.included(including_class)
|
182
|
-
if RUBY_PLATFORM
|
182
|
+
if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
|
183
183
|
including_class.extend(WindowsMacros)
|
184
184
|
# create a default 'rights' attribute
|
185
185
|
including_class.rights_attribute(:rights)
|
data/lib/chef/mixin/shell_out.rb
CHANGED
@@ -15,198 +15,14 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
-
require "mixlib/shellout" unless defined?(Mixlib::ShellOut::
|
19
|
-
require "chef
|
18
|
+
require "mixlib/shellout/helper" unless defined?(Mixlib::ShellOut::Helper)
|
19
|
+
require "chef/mixin/chef_utils_wiring" unless defined?(Chef::Mixin::ChefUtilsWiring)
|
20
20
|
|
21
21
|
class Chef
|
22
22
|
module Mixin
|
23
23
|
module ShellOut
|
24
|
-
|
25
|
-
|
26
|
-
#
|
27
|
-
# all consumers should now call shell_out!/shell_out.
|
28
|
-
#
|
29
|
-
# the shell_out_compacted/shell_out_compacted! APIs are private but are intended for use
|
30
|
-
# in rspec tests, and should ideally always be used to make code refactoring that do not
|
31
|
-
# change behavior easier:
|
32
|
-
#
|
33
|
-
# allow(provider).to receive(:shell_out_compacted!).with("foo", "bar", "baz")
|
34
|
-
# provider.shell_out!("foo", [ "bar", nil, "baz"])
|
35
|
-
# provider.shell_out!(["foo", nil, "bar" ], ["baz"])
|
36
|
-
#
|
37
|
-
# note that shell_out_compacted also includes adding the magical timeout option to force
|
38
|
-
# people to setup expectations on that value explicitly. it does not include the default_env
|
39
|
-
# mangling in order to avoid users having to setup an expectation on anything other than
|
40
|
-
# setting `default_env: false` and allow us to make tweak to the default_env without breaking
|
41
|
-
# a thousand unit tests.
|
42
|
-
#
|
43
|
-
|
44
|
-
def shell_out(*args, **options)
|
45
|
-
options = options.dup
|
46
|
-
options = Chef::Mixin::ShellOut.maybe_add_timeout(self, options)
|
47
|
-
if options.empty?
|
48
|
-
shell_out_compacted(*Chef::Mixin::ShellOut.clean_array(*args))
|
49
|
-
else
|
50
|
-
shell_out_compacted(*Chef::Mixin::ShellOut.clean_array(*args), **options)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def shell_out!(*args, **options)
|
55
|
-
options = options.dup
|
56
|
-
options = Chef::Mixin::ShellOut.maybe_add_timeout(self, options)
|
57
|
-
if options.empty?
|
58
|
-
shell_out_compacted!(*Chef::Mixin::ShellOut.clean_array(*args))
|
59
|
-
else
|
60
|
-
shell_out_compacted!(*Chef::Mixin::ShellOut.clean_array(*args), **options)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# helper sugar for resources that support passing timeouts to shell_out
|
65
|
-
#
|
66
|
-
# module method to not pollute namespaces, but that means we need self injected as an arg
|
67
|
-
# @api private
|
68
|
-
def self.maybe_add_timeout(obj, options)
|
69
|
-
options = options.dup
|
70
|
-
# historically resources have not properly declared defaults on their timeouts, so a default default of 900s was enforced here
|
71
|
-
default_val = 900
|
72
|
-
return options if options.key?(:timeout)
|
73
|
-
|
74
|
-
# FIXME: need to nuke descendent tracker out of Chef::Provider so we can just define that class here without requiring the
|
75
|
-
# world, and then just use symbol lookup
|
76
|
-
if obj.class.ancestors.map(&:name).include?("Chef::Provider") && obj.respond_to?(:new_resource) && obj.new_resource.respond_to?(:timeout) && !options.key?(:timeout)
|
77
|
-
options[:timeout] = obj.new_resource.timeout ? obj.new_resource.timeout.to_f : default_val
|
78
|
-
end
|
79
|
-
options
|
80
|
-
end
|
81
|
-
|
82
|
-
# helper function to mangle options when `default_env` is true
|
83
|
-
#
|
84
|
-
# @api private
|
85
|
-
def self.apply_default_env(options)
|
86
|
-
options = options.dup
|
87
|
-
default_env = options.delete(:default_env)
|
88
|
-
default_env = true if default_env.nil?
|
89
|
-
if default_env
|
90
|
-
env_key = options.key?(:env) ? :env : :environment
|
91
|
-
options[env_key] = {
|
92
|
-
"LC_ALL" => Chef::Config[:internal_locale],
|
93
|
-
"LANGUAGE" => Chef::Config[:internal_locale],
|
94
|
-
"LANG" => Chef::Config[:internal_locale],
|
95
|
-
env_path => ChefUtils::DSL::PathSanity.sanitized_path,
|
96
|
-
}.update(options[env_key] || {})
|
97
|
-
end
|
98
|
-
options
|
99
|
-
end
|
100
|
-
|
101
|
-
private
|
102
|
-
|
103
|
-
# this SHOULD be used for setting up expectations in rspec, see banner comment at top.
|
104
|
-
#
|
105
|
-
# the private constraint is meant to avoid code calling this directly, rspec expectations are fine.
|
106
|
-
#
|
107
|
-
def shell_out_compacted(*args, **options)
|
108
|
-
options = Chef::Mixin::ShellOut.apply_default_env(options)
|
109
|
-
if options.empty?
|
110
|
-
Chef::Mixin::ShellOut.shell_out_command(*args)
|
111
|
-
else
|
112
|
-
Chef::Mixin::ShellOut.shell_out_command(*args, **options)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
# this SHOULD be used for setting up expectations in rspec, see banner comment at top.
|
117
|
-
#
|
118
|
-
# the private constraint is meant to avoid code calling this directly, rspec expectations are fine.
|
119
|
-
#
|
120
|
-
def shell_out_compacted!(*args, **options)
|
121
|
-
options = Chef::Mixin::ShellOut.apply_default_env(options)
|
122
|
-
cmd = if options.empty?
|
123
|
-
Chef::Mixin::ShellOut.shell_out_command(*args)
|
124
|
-
else
|
125
|
-
Chef::Mixin::ShellOut.shell_out_command(*args, **options)
|
126
|
-
end
|
127
|
-
cmd.error!
|
128
|
-
cmd
|
129
|
-
end
|
130
|
-
|
131
|
-
# Helper for subclasses to reject nil out of an array. It allows
|
132
|
-
# using the array form of shell_out (which avoids the need to surround arguments with
|
133
|
-
# quote marks to deal with shells).
|
134
|
-
#
|
135
|
-
# Usage:
|
136
|
-
# shell_out!(*clean_array("useradd", universal_options, useradd_options, new_resource.username))
|
137
|
-
#
|
138
|
-
# universal_options and useradd_options can be nil, empty array, empty string, strings or arrays
|
139
|
-
# and the result makes sense.
|
140
|
-
#
|
141
|
-
# keeping this separate from shell_out!() makes it a bit easier to write expectations against the
|
142
|
-
# shell_out args and be able to omit nils and such in the tests (and to test that the nils are
|
143
|
-
# being rejected correctly).
|
144
|
-
#
|
145
|
-
# @param args [String] variable number of string arguments
|
146
|
-
# @return [Array] array of strings with nil and null string rejection
|
147
|
-
|
148
|
-
def self.clean_array(*args)
|
149
|
-
args.flatten.compact.map(&:to_s)
|
150
|
-
end
|
151
|
-
|
152
|
-
def self.transport_connection
|
153
|
-
Chef.run_context.transport_connection
|
154
|
-
end
|
155
|
-
|
156
|
-
def self.shell_out_command(*args, **options)
|
157
|
-
if Chef::Config.target_mode?
|
158
|
-
FakeShellOut.new(args, options, transport_connection.run_command(args.join(" "))) # FIXME: train should accept run_command(*args)
|
159
|
-
else
|
160
|
-
cmd = if options.empty?
|
161
|
-
Mixlib::ShellOut.new(*args)
|
162
|
-
else
|
163
|
-
Mixlib::ShellOut.new(*args, **options)
|
164
|
-
end
|
165
|
-
cmd.live_stream ||= io_for_live_stream
|
166
|
-
cmd.run_command
|
167
|
-
cmd
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
def self.io_for_live_stream
|
172
|
-
if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.debug?
|
173
|
-
STDOUT
|
174
|
-
else
|
175
|
-
nil
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def self.env_path
|
180
|
-
if ChefUtils.windows?
|
181
|
-
"Path"
|
182
|
-
else
|
183
|
-
"PATH"
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
class FakeShellOut
|
188
|
-
attr_reader :stdout, :stderr, :exitstatus, :status
|
189
|
-
|
190
|
-
def initialize(args, options, result)
|
191
|
-
@args = args
|
192
|
-
@options = options
|
193
|
-
@stdout = result.stdout
|
194
|
-
@stderr = result.stderr
|
195
|
-
@exitstatus = result.exit_status
|
196
|
-
@status = OpenStruct.new(success?: ( exitstatus == 0 ))
|
197
|
-
end
|
198
|
-
|
199
|
-
def error?
|
200
|
-
exitstatus != 0
|
201
|
-
end
|
202
|
-
|
203
|
-
def error!
|
204
|
-
raise Mixlib::ShellOut::ShellCommandFailed, "Unexpected exit status of #{exitstatus} running #{@args}" if error?
|
205
|
-
end
|
206
|
-
end
|
24
|
+
include Mixlib::ShellOut::Helper
|
25
|
+
include Chef::Mixin::ChefUtilsWiring
|
207
26
|
end
|
208
27
|
end
|
209
28
|
end
|
210
|
-
|
211
|
-
# Break circular dep
|
212
|
-
require_relative "../config"
|