chef 16.2.44 → 16.4.35
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 +3 -16
- data/chef-universal-mingw32.gemspec +2 -3
- data/chef.gemspec +4 -3
- data/lib/chef/action_collection.rb +4 -0
- data/lib/chef/api_client/registration.rb +8 -8
- data/lib/chef/application.rb +18 -1
- data/lib/chef/application/apply.rb +6 -5
- data/lib/chef/application/base.rb +2 -0
- data/lib/chef/application/client.rb +3 -0
- 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/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/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/digester.rb +3 -2
- 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_access_control/windows.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
- data/lib/chef/file_content_management/tempfile.rb +9 -9
- data/lib/chef/handler.rb +2 -0
- data/lib/chef/http.rb +12 -12
- 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 +18 -15
- 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/config_use_profile.rb +15 -5
- data/lib/chef/knife/configure.rb +1 -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 +29 -37
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- 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 +33 -26
- 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/{spec/functional/resource/base.rb → lib/chef/mixin/chef_utils_wiring.rb} +24 -12
- 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 +9 -11
- data/lib/chef/resource/alternatives.rb +1 -1
- 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_gem.rb +57 -21
- 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/dmg_package.rb +2 -2
- data/lib/chef/resource/execute.rb +4 -5
- data/lib/chef/resource/gem_package.rb +35 -2
- data/lib/chef/resource/homebrew_update.rb +2 -2
- data/lib/chef/resource/hostname.rb +18 -18
- 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/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 +16 -1
- data/lib/chef/resource/sudo.rb +31 -4
- data/lib/chef/resource/swap_file.rb +17 -0
- data/lib/chef/resource/sysctl.rb +5 -5
- 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 +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 +52 -21
- 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 +27 -2
- 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/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 +8 -9
- 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 +3 -3
- data/spec/functional/resource/chocolatey_package_spec.rb +4 -0
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +10 -2
- data/spec/functional/resource/dnf_package_spec.rb +4 -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/execute_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +23 -1
- data/spec/functional/resource/group_spec.rb +21 -9
- data/spec/functional/resource/ifconfig_spec.rb +9 -1
- data/spec/functional/resource/insserv_spec.rb +7 -7
- data/spec/functional/resource/link_spec.rb +22 -25
- 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 +8 -8
- data/spec/functional/resource/remote_file_spec.rb +7 -13
- data/spec/functional/resource/rpm_spec.rb +3 -3
- data/spec/functional/resource/timezone_spec.rb +2 -0
- 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_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 -4
- data/spec/functional/resource/windows_service_spec.rb +4 -0
- data/spec/functional/resource/windows_task_spec.rb +4 -3
- 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 +26 -25
- 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/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 +115 -61
- 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/diff_spec.rb +3 -1
- data/spec/integration/knife/download_spec.rb +3 -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/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 +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 +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/securable_resource.rb +1 -2
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
- data/spec/support/shared/functional/win32_service.rb +1 -1
- data/spec/support/shared/functional/windows_script.rb +5 -5
- 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/provider/file.rb +12 -8
- 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/solo_spec.rb +4 -2
- data/spec/unit/application_spec.rb +4 -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 +23 -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 +12 -8
- 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/json_compat_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +17 -20
- data/spec/unit/knife/cookbook_download_spec.rb +6 -6
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
- data/spec/unit/knife/cookbook_show_spec.rb +6 -7
- 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/data_bag_edit_spec.rb +1 -1
- 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 +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/template_spec.rb +30 -30
- data/spec/unit/mixin/unformatter_spec.rb +2 -2
- data/spec/unit/mixin/uris_spec.rb +1 -1
- 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/batch_spec.rb +1 -1
- data/spec/unit/provider/cron/unix_spec.rb +1 -1
- 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/rubygems_spec.rb +5 -10
- data/spec/unit/provider/package/smartos_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 +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/user/dscl_spec.rb +2 -2
- data/spec/unit/provider/windows_env_spec.rb +5 -4
- 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/chef_client_cron_spec.rb +23 -7
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +7 -4
- data/spec/unit/resource/execute_spec.rb +123 -118
- data/spec/unit/resource/file/verification_spec.rb +2 -1
- 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/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/resource_spec.rb +25 -8
- data/spec/unit/role_spec.rb +30 -28
- 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/powershell/ps_credential_spec.rb +2 -2
- data/spec/unit/util/selinux_spec.rb +2 -1
- data/spec/unit/win32/security_spec.rb +4 -3
- data/tasks/rspec.rb +1 -1
- metadata +45 -24
- data/lib/chef/provider/osx_profile.rb +0 -255
- data/spec/unit/provider/osx_profile_spec.rb +0 -255
data/lib/chef/json_compat.rb
CHANGED
data/lib/chef/knife.rb
CHANGED
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
require "forwardable" unless defined?(Forwardable)
|
|
21
21
|
require_relative "version"
|
|
22
22
|
require "mixlib/cli" unless defined?(Mixlib::CLI)
|
|
23
|
-
require "chef-utils/dsl/
|
|
23
|
+
require "chef-utils/dsl/default_paths" unless defined?(ChefUtils::DSL::DefaultPaths)
|
|
24
24
|
require_relative "workstation_config_loader"
|
|
25
25
|
require_relative "mixin/convert_to_class_name"
|
|
26
|
-
require_relative "mixin/
|
|
26
|
+
require_relative "mixin/default_paths"
|
|
27
27
|
require_relative "knife/core/subcommand_loader"
|
|
28
28
|
require_relative "knife/core/ui"
|
|
29
29
|
require_relative "local_mode"
|
|
@@ -40,7 +40,7 @@ class Chef
|
|
|
40
40
|
Chef::HTTP::HTTPRequest.user_agent = "#{Chef::Dist::PRODUCT} Knife#{Chef::HTTP::HTTPRequest::UA_COMMON}"
|
|
41
41
|
|
|
42
42
|
include Mixlib::CLI
|
|
43
|
-
include ChefUtils::DSL::
|
|
43
|
+
include ChefUtils::DSL::DefaultPaths
|
|
44
44
|
extend Chef::Mixin::ConvertToClassName
|
|
45
45
|
extend Forwardable
|
|
46
46
|
|
|
@@ -484,7 +484,7 @@ class Chef
|
|
|
484
484
|
unless respond_to?(:run)
|
|
485
485
|
ui.error "You need to add a #run method to your knife command before you can use it"
|
|
486
486
|
end
|
|
487
|
-
ENV["PATH"] =
|
|
487
|
+
ENV["PATH"] = default_paths if Chef::Config[:enforce_default_paths] || Chef::Config[:enforce_path_sanity]
|
|
488
488
|
maybe_setup_fips
|
|
489
489
|
Chef::LocalMode.with_server_connectivity do
|
|
490
490
|
run
|
data/lib/chef/knife/bootstrap.rb
CHANGED
|
@@ -480,7 +480,7 @@ class Chef
|
|
|
480
480
|
template = bootstrap_template
|
|
481
481
|
|
|
482
482
|
# Use the template directly if it's a path to an actual file
|
|
483
|
-
if File.
|
|
483
|
+
if File.exist?(template)
|
|
484
484
|
Chef::Log.trace("Using the specified bootstrap template: #{File.dirname(template)}")
|
|
485
485
|
return template
|
|
486
486
|
end
|
|
@@ -495,7 +495,7 @@ class Chef
|
|
|
495
495
|
|
|
496
496
|
template_file = Array(bootstrap_files).find do |bootstrap_template|
|
|
497
497
|
Chef::Log.trace("Looking for bootstrap template in #{File.dirname(bootstrap_template)}")
|
|
498
|
-
File.
|
|
498
|
+
File.exist?(bootstrap_template)
|
|
499
499
|
end
|
|
500
500
|
|
|
501
501
|
unless template_file
|
|
@@ -538,7 +538,7 @@ class Chef
|
|
|
538
538
|
end
|
|
539
539
|
|
|
540
540
|
def run
|
|
541
|
-
check_license
|
|
541
|
+
check_license if ChefConfig::Dist::ENFORCE_LICENSE
|
|
542
542
|
|
|
543
543
|
plugin_setup!
|
|
544
544
|
validate_name_args!
|
|
@@ -630,9 +630,7 @@ class Chef
|
|
|
630
630
|
raise
|
|
631
631
|
else
|
|
632
632
|
ui.warn("Failed to authenticate #{opts[:user]} to #{server_name} - trying password auth")
|
|
633
|
-
password = ui.ask("Enter password for #{opts[:user]}@#{server_name}:"
|
|
634
|
-
q.echo = false
|
|
635
|
-
end
|
|
633
|
+
password = ui.ask("Enter password for #{opts[:user]}@#{server_name}:", echo: false)
|
|
636
634
|
end
|
|
637
635
|
|
|
638
636
|
opts.merge! force_ssh_password_opts(password)
|
|
@@ -646,9 +644,7 @@ class Chef
|
|
|
646
644
|
raise
|
|
647
645
|
else
|
|
648
646
|
ui.warn("Failed to authenticate #{opts[:user]} to #{server_name} - trying password auth")
|
|
649
|
-
password = ui.ask("Enter password for #{opts[:user]}@#{server_name}:"
|
|
650
|
-
q.echo = false
|
|
651
|
-
end
|
|
647
|
+
password = ui.ask("Enter password for #{opts[:user]}@#{server_name}:", echo: false)
|
|
652
648
|
end
|
|
653
649
|
|
|
654
650
|
opts.merge! force_winrm_password_opts(password)
|
|
@@ -681,9 +677,7 @@ class Chef
|
|
|
681
677
|
retry
|
|
682
678
|
elsif config[:use_sudo_password] && (e.reason == :sudo_password_required || e.reason == :bad_sudo_password) && limit < 3
|
|
683
679
|
ui.warn("Failed to authenticate #{conn_options[:user]} to #{server_name} - #{e.message} \n sudo: #{limit} incorrect password attempt")
|
|
684
|
-
sudo_password = ui.ask("Enter sudo password for #{conn_options[:user]}@#{server_name}:"
|
|
685
|
-
q.echo = false
|
|
686
|
-
end
|
|
680
|
+
sudo_password = ui.ask("Enter sudo password for #{conn_options[:user]}@#{server_name}:", echo: false)
|
|
687
681
|
limit += 1
|
|
688
682
|
conn_options[:sudo_password] = sudo_password
|
|
689
683
|
|
|
@@ -703,8 +697,17 @@ class Chef
|
|
|
703
697
|
true
|
|
704
698
|
end
|
|
705
699
|
|
|
700
|
+
# FIXME: someone needs to clean this up properly: https://github.com/chef/chef/issues/9645
|
|
701
|
+
# This code is deliberately left without an abstraction around deprecating the config options to avoid knife plugins from
|
|
702
|
+
# using those methods (which will need to be deprecated and break them) via inheritance (ruby does not have a true `private`
|
|
703
|
+
# so the lack of any inheritable implementation is because of that).
|
|
704
|
+
#
|
|
706
705
|
def winrm_auth_method
|
|
707
|
-
|
|
706
|
+
config.key?(:winrm_auth_method) ? config[:winrm_auth_method] : config.key?(:winrm_authentications_protocol) ? config[:winrm_authentication_protocol] : "negotiate" # rubocop:disable Style/NestedTernaryOperator
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
def ssh_verify_host_key
|
|
710
|
+
config.key?(:ssh_verify_host_key) ? config[:ssh_verify_host_key] : config.key?(:host_key_verify) ? config[:host_key_verify] : "always" # rubocop:disable Style/NestedTernaryOperator
|
|
708
711
|
end
|
|
709
712
|
|
|
710
713
|
# Fail if using plaintext auth without ssl because
|
|
@@ -905,7 +908,7 @@ class Chef
|
|
|
905
908
|
{ self_signed: config[:winrm_no_verify_cert] === true }
|
|
906
909
|
elsif ssh?
|
|
907
910
|
# Fall back to the old knife config key name for back compat.
|
|
908
|
-
{ verify_host_key:
|
|
911
|
+
{ verify_host_key: ssh_verify_host_key }
|
|
909
912
|
else
|
|
910
913
|
{}
|
|
911
914
|
end
|
|
@@ -1051,7 +1054,7 @@ class Chef
|
|
|
1051
1054
|
# @api deprecated
|
|
1052
1055
|
#
|
|
1053
1056
|
def config_value(key, fallback_key = nil, default = nil)
|
|
1054
|
-
Chef.deprecated(:knife_bootstrap_apis, "Use of config_value
|
|
1057
|
+
Chef.deprecated(:knife_bootstrap_apis, "Use of config_value is deprecated. Knife plugin authors should access the config hash directly, which does correct merging of cli and config options.")
|
|
1055
1058
|
if config.key?(key)
|
|
1056
1059
|
# the first key is the primary key so we check the merged hash first
|
|
1057
1060
|
config[key]
|
|
@@ -62,6 +62,7 @@ class Chef
|
|
|
62
62
|
config_data.delete(:color)
|
|
63
63
|
# Only keep these if true, false is much less important because it's the default.
|
|
64
64
|
config_data.delete(:local_mode) unless config_data[:local_mode]
|
|
65
|
+
config_data.delete(:enforce_default_paths) unless config_data[:enforce_default_paths]
|
|
65
66
|
config_data.delete(:enforce_path_sanity) unless config_data[:enforce_path_sanity]
|
|
66
67
|
end
|
|
67
68
|
|
|
@@ -32,6 +32,10 @@ class Chef
|
|
|
32
32
|
description: "Ignore the current config.rb/knife.rb configuration.",
|
|
33
33
|
default: false
|
|
34
34
|
|
|
35
|
+
def configure_chef
|
|
36
|
+
apply_computed_config
|
|
37
|
+
end
|
|
38
|
+
|
|
35
39
|
def run
|
|
36
40
|
credentials_data = self.class.config_loader.parse_credentials_file
|
|
37
41
|
if credentials_data.nil? || credentials_data.empty?
|
|
@@ -72,7 +76,6 @@ class Chef
|
|
|
72
76
|
# Try to reset the config.
|
|
73
77
|
unless config[:ignore_knife_rb]
|
|
74
78
|
Chef::Config.reset
|
|
75
|
-
Chef::WorkstationConfigLoader.new(config[:config_file], Chef::Log, profile: config[:profile]).load
|
|
76
79
|
apply_computed_config
|
|
77
80
|
end
|
|
78
81
|
|
|
@@ -33,17 +33,27 @@ class Chef
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def run
|
|
36
|
+
credentials_data = self.class.config_loader.parse_credentials_file
|
|
36
37
|
context_file = ChefConfig::PathHelper.home(".chef", "context").freeze
|
|
37
38
|
profile = @name_args[0]&.strip
|
|
38
|
-
if profile
|
|
39
|
+
if profile.nil? || profile.empty?
|
|
40
|
+
show_usage
|
|
41
|
+
ui.fatal("You must specify a profile")
|
|
42
|
+
exit 1
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if credentials_data.nil? || credentials_data.empty?
|
|
46
|
+
ui.fatal("No profiles found, #{self.class.config_loader.credentials_file_path} does not exist or is empty")
|
|
47
|
+
exit 1
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if credentials_data[profile].nil?
|
|
51
|
+
raise ChefConfig::ConfigurationError, "Profile #{profile} doesn't exist. Please add it to #{self.class.config_loader.credentials_file_path} and if it is profile with DNS name check that you are not missing single quotes around it as per docs https://docs.chef.io/workstation/knife_setup/#knife-profiles."
|
|
52
|
+
else
|
|
39
53
|
# Ensure the .chef/ folder exists.
|
|
40
54
|
FileUtils.mkdir_p(File.dirname(context_file))
|
|
41
55
|
IO.write(context_file, "#{profile}\n")
|
|
42
56
|
ui.msg("Set default profile to #{profile}")
|
|
43
|
-
else
|
|
44
|
-
show_usage
|
|
45
|
-
ui.fatal("You must specify a profile")
|
|
46
|
-
exit 1
|
|
47
57
|
end
|
|
48
58
|
end
|
|
49
59
|
|
data/lib/chef/knife/configure.rb
CHANGED
|
@@ -92,7 +92,7 @@ class Chef
|
|
|
92
92
|
user_create = Chef::Knife::UserCreate.new
|
|
93
93
|
user_create.name_args = [ new_client_name ]
|
|
94
94
|
user_create.config[:user_password] = config[:user_password] ||
|
|
95
|
-
ui.ask("Please enter a password for the new user: "
|
|
95
|
+
ui.ask("Please enter a password for the new user: ", echo: false)
|
|
96
96
|
user_create.config[:admin] = true
|
|
97
97
|
user_create.config[:file] = new_client_key
|
|
98
98
|
user_create.config[:yes] = true
|
|
@@ -73,7 +73,7 @@ class Chef
|
|
|
73
73
|
manifest = cookbook.cookbook_manifest
|
|
74
74
|
|
|
75
75
|
basedir = File.join(config[:download_directory], "#{@cookbook_name}-#{cookbook.version}")
|
|
76
|
-
if File.
|
|
76
|
+
if File.exist?(basedir)
|
|
77
77
|
if config[:force]
|
|
78
78
|
Chef::Log.trace("Deleting #{basedir}")
|
|
79
79
|
FileUtils.rm_rf(basedir)
|
|
@@ -62,7 +62,7 @@ class Chef
|
|
|
62
62
|
def generate_metadata(cookbook)
|
|
63
63
|
Array(config[:cookbook_path]).reverse_each do |path|
|
|
64
64
|
file = File.expand_path(File.join(path, cookbook, "metadata.rb"))
|
|
65
|
-
if File.
|
|
65
|
+
if File.exist?(file)
|
|
66
66
|
generate_metadata_from_file(cookbook, file)
|
|
67
67
|
else
|
|
68
68
|
validate_metadata_json(path, cookbook)
|
|
@@ -23,9 +23,6 @@ require_relative "../knife"
|
|
|
23
23
|
class Chef
|
|
24
24
|
class Knife
|
|
25
25
|
class CookbookUpload < Knife
|
|
26
|
-
CHECKSUM = "checksum".freeze
|
|
27
|
-
MATCH_CHECKSUM = /[0-9a-f]{32,}/.freeze
|
|
28
|
-
|
|
29
26
|
deps do
|
|
30
27
|
require_relative "../mixin/file_class"
|
|
31
28
|
include Chef::Mixin::FileClass
|
|
@@ -37,10 +34,10 @@ class Chef
|
|
|
37
34
|
banner "knife cookbook upload [COOKBOOKS...] (options)"
|
|
38
35
|
|
|
39
36
|
option :cookbook_path,
|
|
40
|
-
short: "-o PATH:PATH",
|
|
41
|
-
long: "--cookbook-path PATH:PATH",
|
|
42
|
-
description: "A
|
|
43
|
-
proc: lambda { |o| o.split(
|
|
37
|
+
short: "-o 'PATH:PATH'",
|
|
38
|
+
long: "--cookbook-path 'PATH:PATH'",
|
|
39
|
+
description: "A delimited path to search for cookbooks. On Unix the delimiter is ':', on Windows it is ';'.",
|
|
40
|
+
proc: lambda { |o| o.split(File::PATH_SEPARATOR) }
|
|
44
41
|
|
|
45
42
|
option :freeze,
|
|
46
43
|
long: "--freeze",
|
|
@@ -110,8 +107,7 @@ class Chef
|
|
|
110
107
|
cookbook_path = config[:cookbook_path].respond_to?(:join) ? config[:cookbook_path].join(", ") : config[:cookbook_path]
|
|
111
108
|
ui.warn("Could not find any cookbooks in your cookbook path: '#{File.expand_path(cookbook_path)}'. Use --cookbook-path to specify the desired path.")
|
|
112
109
|
else
|
|
113
|
-
|
|
114
|
-
tmp_cl = Chef::CookbookLoader.copy_to_tmp_dir_from_array(cookbooks)
|
|
110
|
+
Chef::CookbookLoader.copy_to_tmp_dir_from_array(cookbooks) do |tmp_cl|
|
|
115
111
|
tmp_cl.load_cookbooks
|
|
116
112
|
tmp_cl.compile_metadata
|
|
117
113
|
tmp_cl.freeze_versions if config[:freeze]
|
|
@@ -130,28 +126,26 @@ class Chef
|
|
|
130
126
|
ui.error("Uploading of some of the cookbooks must be failed. Remove cookbook whose version is frozen from your cookbooks repo OR use --force option.")
|
|
131
127
|
upload_failures += 1
|
|
132
128
|
rescue SystemExit => e
|
|
133
|
-
tmp_cl.unlink!
|
|
134
129
|
raise exit e.status
|
|
135
130
|
end
|
|
136
131
|
ui.info("Uploaded all cookbooks.") if upload_failures == 0
|
|
137
132
|
end
|
|
138
133
|
else
|
|
139
134
|
tmp_cl.each do |cookbook_name, cookbook|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
end
|
|
135
|
+
|
|
136
|
+
upload([cookbook], justify_width)
|
|
137
|
+
upload_ok += 1
|
|
138
|
+
rescue Exceptions::CookbookNotFoundInRepo => e
|
|
139
|
+
upload_failures += 1
|
|
140
|
+
ui.error("Could not find cookbook #{cookbook_name} in your cookbook path, skipping it")
|
|
141
|
+
Log.debug(e)
|
|
142
|
+
upload_failures += 1
|
|
143
|
+
rescue Exceptions::CookbookFrozen
|
|
144
|
+
ui.warn("Not updating version constraints for #{cookbook_name} in the environment as the cookbook is frozen.")
|
|
145
|
+
upload_failures += 1
|
|
146
|
+
rescue SystemExit => e
|
|
147
|
+
raise exit e.status
|
|
148
|
+
|
|
155
149
|
end
|
|
156
150
|
|
|
157
151
|
if upload_failures == 0
|
|
@@ -167,8 +161,6 @@ class Chef
|
|
|
167
161
|
unless version_constraints_to_update.empty?
|
|
168
162
|
update_version_constraints(version_constraints_to_update) if config[:environment]
|
|
169
163
|
end
|
|
170
|
-
ensure
|
|
171
|
-
tmp_cl.unlink!
|
|
172
164
|
end
|
|
173
165
|
end
|
|
174
166
|
end
|
|
@@ -180,17 +172,17 @@ class Chef
|
|
|
180
172
|
else
|
|
181
173
|
upload_set = {}
|
|
182
174
|
@name_args.each do |cookbook_name|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
end
|
|
175
|
+
|
|
176
|
+
unless upload_set.key?(cookbook_name)
|
|
177
|
+
upload_set[cookbook_name] = cookbook_repo[cookbook_name]
|
|
178
|
+
if config[:depends]
|
|
179
|
+
upload_set[cookbook_name].metadata.dependencies.each_key { |dep| @name_args << dep }
|
|
189
180
|
end
|
|
190
|
-
rescue Exceptions::CookbookNotFoundInRepo => e
|
|
191
|
-
ui.error(e.message)
|
|
192
|
-
Log.debug(e)
|
|
193
181
|
end
|
|
182
|
+
rescue Exceptions::CookbookNotFoundInRepo => e
|
|
183
|
+
ui.error(e.message)
|
|
184
|
+
Log.debug(e)
|
|
185
|
+
|
|
194
186
|
end
|
|
195
187
|
upload_set
|
|
196
188
|
end
|
|
@@ -245,7 +237,7 @@ class Chef
|
|
|
245
237
|
# manifest object, but the manifest becomes invalid when you
|
|
246
238
|
# regenerate the metadata
|
|
247
239
|
broken_files = cookbook.dup.manifest_records_by_path.select do |path, info|
|
|
248
|
-
|
|
240
|
+
!/[0-9a-f]{32,}/.match?(info["checksum"])
|
|
249
241
|
end
|
|
250
242
|
unless broken_files.empty?
|
|
251
243
|
broken_filenames = Array(broken_files).map { |path, info| path }
|
|
@@ -28,7 +28,7 @@ class Chef
|
|
|
28
28
|
# bootstrap templates. For backwards compatibility, they +must+ set the
|
|
29
29
|
# following instance variables:
|
|
30
30
|
# * @config - a hash of knife's config values
|
|
31
|
-
# * @run_list - the run list for the node to
|
|
31
|
+
# * @run_list - the run list for the node to bootstrap
|
|
32
32
|
#
|
|
33
33
|
class BootstrapContext
|
|
34
34
|
|
|
@@ -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)
|