chef 16.10.8-universal-mingw32 → 17.0.242-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 +9 -10
- data/README.md +1 -1
- data/Rakefile +13 -2
- data/chef-universal-mingw32.gemspec +1 -1
- data/chef.gemspec +7 -9
- data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.Wrapper.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
- data/distro/ruby_bin_folder/x86/Chef.PowerShell.dll +0 -0
- data/distro/ruby_bin_folder/x86/Chef.Powershell.Wrapper.dll +0 -0
- data/distro/ruby_bin_folder/x86/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/applications.rb +0 -1
- data/lib/chef/chef_fs/command_line.rb +5 -2
- data/lib/chef/chef_fs/file_system.rb +9 -10
- data/lib/chef/client.rb +2 -2
- data/lib/chef/compliance/default_attributes.rb +10 -5
- data/lib/chef/compliance/fetcher/automate.rb +15 -11
- data/lib/chef/compliance/reporter/automate.rb +17 -7
- data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
- data/lib/chef/compliance/reporter/cli.rb +77 -0
- data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
- data/lib/chef/compliance/reporter/json_file.rb +8 -1
- data/lib/chef/compliance/runner.rb +71 -28
- data/lib/chef/cookbook/synchronizer.rb +3 -5
- data/lib/chef/cookbook_loader.rb +2 -4
- data/lib/chef/cookbook_uploader.rb +0 -1
- data/lib/chef/data_bag_item.rb +11 -2
- data/lib/chef/delayed_evaluator.rb +4 -0
- data/lib/chef/deprecated.rb +4 -0
- data/lib/chef/dsl/chef_vault.rb +6 -6
- data/lib/chef/dsl/reboot_pending.rb +1 -2
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
- data/lib/chef/group.rb +75 -0
- data/lib/chef/mixin/get_source_from_package.rb +1 -1
- data/lib/chef/node/attribute.rb +6 -4
- data/lib/chef/node/immutable_collections.rb +13 -0
- data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
- data/lib/chef/org.rb +3 -2
- data/lib/chef/property.rb +18 -0
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/cron.rb +1 -1
- data/lib/chef/provider/execute.rb +2 -1
- data/lib/chef/provider/file.rb +2 -2
- data/lib/chef/provider/git.rb +5 -7
- data/lib/chef/provider/group/groupadd.rb +3 -3
- data/lib/chef/provider/group/groupmod.rb +3 -3
- data/lib/chef/provider/group/pw.rb +3 -3
- data/lib/chef/provider/ifconfig.rb +2 -2
- data/lib/chef/provider/link.rb +2 -2
- data/lib/chef/provider/mount.rb +12 -7
- data/lib/chef/provider/mount/aix.rb +3 -3
- data/lib/chef/provider/mount/mount.rb +6 -6
- data/lib/chef/provider/mount/windows.rb +1 -1
- data/lib/chef/provider/package.rb +17 -21
- data/lib/chef/provider/package/apt.rb +27 -1
- data/lib/chef/provider/package/deb.rb +3 -3
- data/lib/chef/provider/package/dnf/dnf_helper.py +5 -1
- data/lib/chef/provider/package/portage.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +11 -17
- data/lib/chef/provider/package/windows.rb +2 -4
- data/lib/chef/provider/package/yum/yum_helper.py +5 -1
- data/lib/chef/provider/route.rb +2 -2
- data/lib/chef/provider/service.rb +6 -6
- data/lib/chef/provider/service/aixinit.rb +1 -1
- data/lib/chef/provider/service/debian.rb +1 -1
- data/lib/chef/provider/service/freebsd.rb +15 -21
- data/lib/chef/provider/service/macosx.rb +7 -7
- data/lib/chef/provider/service/systemd.rb +43 -14
- data/lib/chef/provider/service/upstart.rb +2 -13
- data/lib/chef/provider/service/windows.rb +12 -12
- data/lib/chef/provider/subversion.rb +10 -12
- data/lib/chef/provider/systemd_unit.rb +36 -10
- data/lib/chef/provider/template/content.rb +2 -6
- data/lib/chef/provider/user.rb +2 -2
- data/lib/chef/provider/user/dscl.rb +1 -1
- data/lib/chef/provider/user/mac.rb +17 -20
- data/lib/chef/provider/user/pw.rb +1 -1
- data/lib/chef/provider/user/windows.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +2 -2
- data/lib/chef/providers.rb +0 -1
- data/lib/chef/resource/alternatives.rb +6 -6
- data/lib/chef/resource/apt_package.rb +1 -1
- data/lib/chef/resource/apt_preference.rb +2 -2
- data/lib/chef/resource/apt_repository.rb +6 -6
- data/lib/chef/resource/apt_update.rb +3 -2
- data/lib/chef/resource/archive_file.rb +2 -3
- data/lib/chef/resource/breakpoint.rb +1 -1
- data/lib/chef/resource/build_essential.rb +2 -6
- data/lib/chef/resource/chef_client_config.rb +2 -2
- data/lib/chef/resource/chef_client_cron.rb +5 -5
- data/lib/chef/resource/chef_client_launchd.rb +4 -4
- 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_handler.rb +3 -7
- data/lib/chef/resource/chef_sleep.rb +1 -1
- data/lib/chef/resource/chef_vault_secret.rb +3 -8
- data/lib/chef/resource/chocolatey_config.rb +2 -6
- data/lib/chef/resource/chocolatey_feature.rb +2 -6
- data/lib/chef/resource/chocolatey_source.rb +4 -10
- data/lib/chef/resource/cron/_cron_shared.rb +2 -2
- data/lib/chef/resource/cron_access.rb +2 -4
- data/lib/chef/resource/dmg_package.rb +6 -10
- data/lib/chef/resource/dpkg_package.rb +1 -1
- data/lib/chef/resource/execute.rb +6 -1
- data/lib/chef/resource/file.rb +1 -1
- data/lib/chef/resource/group.rb +2 -2
- data/lib/chef/resource/homebrew_cask.rb +2 -6
- data/lib/chef/resource/homebrew_tap.rb +2 -6
- data/lib/chef/resource/hostname.rb +21 -17
- data/lib/chef/resource/http_request.rb +1 -1
- data/lib/chef/resource/kernel_module.rb +6 -17
- data/lib/chef/resource/locale.rb +2 -3
- data/lib/chef/resource/lwrp_base.rb +4 -0
- data/lib/chef/resource/macos_userdefaults.rb +10 -14
- data/lib/chef/resource/mdadm.rb +53 -7
- data/lib/chef/resource/mount.rb +2 -1
- data/lib/chef/resource/openssl_ec_private_key.rb +2 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
- data/lib/chef/resource/openssl_x509_certificate.rb +2 -2
- data/lib/chef/resource/plist.rb +7 -7
- data/lib/chef/resource/powershell_script.rb +1 -1
- data/lib/chef/resource/remote_file.rb +1 -1
- data/lib/chef/resource/rhsm_errata.rb +16 -1
- data/lib/chef/resource/rhsm_errata_level.rb +10 -1
- data/lib/chef/resource/rhsm_register.rb +12 -6
- data/lib/chef/resource/rhsm_repo.rb +2 -6
- data/lib/chef/resource/rhsm_subscription.rb +2 -6
- data/lib/chef/resource/scm/git.rb +1 -1
- data/lib/chef/resource/sudo.rb +6 -6
- data/lib/chef/resource/sysctl.rb +2 -6
- data/lib/chef/resource/systemd_unit.rb +2 -2
- data/lib/chef/resource/template.rb +1 -1
- data/lib/chef/resource/timezone.rb +1 -3
- data/lib/chef/resource/user/mac_user.rb +1 -1
- data/lib/chef/resource/user_ulimit.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +2 -6
- data/lib/chef/resource/windows_audit_policy.rb +1 -1
- data/lib/chef/resource/windows_auto_run.rb +2 -5
- data/lib/chef/resource/windows_certificate.rb +207 -73
- data/lib/chef/resource/windows_dfs_folder.rb +2 -6
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
- data/lib/chef/resource/windows_dfs_server.rb +1 -3
- data/lib/chef/resource/windows_dns_record.rb +2 -6
- data/lib/chef/resource/windows_dns_zone.rb +2 -6
- data/lib/chef/resource/windows_env.rb +5 -4
- data/lib/chef/resource/windows_feature.rb +3 -9
- data/lib/chef/resource/windows_feature_dism.rb +2 -6
- data/lib/chef/resource/windows_feature_powershell.rb +3 -3
- data/lib/chef/resource/windows_firewall_profile.rb +4 -4
- data/lib/chef/resource/windows_firewall_rule.rb +2 -5
- data/lib/chef/resource/windows_font.rb +2 -4
- data/lib/chef/resource/windows_pagefile.rb +2 -6
- data/lib/chef/resource/windows_path.rb +2 -2
- data/lib/chef/resource/windows_printer.rb +4 -4
- data/lib/chef/resource/windows_printer_port.rb +6 -6
- data/lib/chef/resource/windows_security_policy.rb +53 -40
- data/lib/chef/resource/windows_share.rb +14 -21
- data/lib/chef/resource/windows_shortcut.rb +4 -6
- data/lib/chef/resource/windows_task.rb +17 -5
- data/lib/chef/resource/windows_uac.rb +1 -1
- data/lib/chef/resource/windows_user_privilege.rb +4 -4
- data/lib/chef/resource/windows_workgroup.rb +1 -2
- data/lib/chef/resources.rb +0 -1
- data/lib/chef/user.rb +0 -1
- data/lib/chef/user_v1.rb +3 -4
- data/lib/chef/util/dsc/configuration_generator.rb +1 -0
- data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/registry.rb +4 -2
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
- data/spec/data/lwrp/resources/bar.rb +2 -0
- data/spec/data/lwrp/resources/buck_passer.rb +1 -0
- data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
- data/spec/data/lwrp/resources/foo.rb +2 -0
- data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
- data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
- data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
- data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
- data/spec/data/lwrp_override/resources/foo.rb +1 -0
- data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
- data/spec/data/rubygems.org/sexp_processor-info +49 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
- data/spec/functional/dsl/registry_helper_spec.rb +1 -1
- data/spec/functional/resource/aixinit_service_spec.rb +7 -7
- data/spec/functional/resource/apt_package_spec.rb +1 -1
- data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
- data/spec/functional/resource/cron_spec.rb +1 -1
- data/spec/functional/resource/dnf_package_spec.rb +4 -1
- data/spec/functional/resource/registry_spec.rb +8 -8
- data/spec/functional/resource/user/mac_user_spec.rb +2 -2
- data/spec/functional/resource/windows_certificate_spec.rb +92 -35
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/registry_spec.rb +1 -1
- data/spec/integration/client/client_spec.rb +5 -2
- data/spec/integration/client/exit_code_spec.rb +1 -1
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/compliance/compliance_spec.rb +3 -2
- data/spec/integration/ohai/ohai_spec.rb +7 -6
- data/spec/integration/recipes/accumulator_spec.rb +13 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
- data/spec/integration/recipes/lwrp_spec.rb +3 -1
- data/spec/integration/recipes/notifies_spec.rb +15 -1
- data/spec/integration/recipes/notifying_block_spec.rb +2 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +4 -1
- data/spec/spec_helper.rb +11 -13
- data/spec/support/chef_helpers.rb +0 -16
- data/spec/support/lib/chef/resource/with_state.rb +0 -1
- data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
- data/spec/support/lib/chef/resource/zen_master.rb +0 -1
- data/spec/support/matchers/leak.rb +7 -9
- data/spec/support/platform_helpers.rb +5 -8
- data/spec/support/shared/integration/integration_helper.rb +0 -1
- data/spec/support/shared/unit/provider/file.rb +14 -0
- data/spec/support/shared/unit/script_resource.rb +2 -2
- data/spec/unit/application/solo_spec.rb +2 -2
- data/spec/unit/chef_fs/diff_spec.rb +1 -1
- data/spec/unit/chef_fs/file_system_spec.rb +1 -1
- data/spec/unit/compliance/fetcher/automate_spec.rb +5 -13
- data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
- data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
- data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
- data/spec/unit/compliance/runner_spec.rb +84 -9
- data/spec/unit/data_bag_item_spec.rb +1 -6
- data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
- data/spec/unit/dsl/registry_helper_spec.rb +1 -1
- data/spec/unit/lwrp_spec.rb +1 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -3
- data/spec/unit/node/attribute_spec.rb +1 -1
- data/spec/unit/node_spec.rb +78 -0
- data/spec/unit/org_group_spec.rb +45 -0
- data/spec/unit/property_spec.rb +23 -22
- data/spec/unit/provider/cron_spec.rb +1 -1
- data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
- data/spec/unit/provider/group/groupmod_spec.rb +2 -2
- data/spec/unit/provider/group/pw_spec.rb +2 -2
- data/spec/unit/provider/group_spec.rb +1 -1
- data/spec/unit/provider/mount/mount_spec.rb +52 -0
- data/spec/unit/provider/package/apt_spec.rb +84 -18
- data/spec/unit/provider/package/deb_spec.rb +3 -3
- data/spec/unit/provider/package/rubygems_spec.rb +21 -33
- data/spec/unit/provider/service/arch_service_spec.rb +1 -0
- data/spec/unit/provider/service/debian_service_spec.rb +1 -0
- data/spec/unit/provider/service/macosx_spec.rb +5 -5
- data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
- data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
- data/spec/unit/provider/service/windows_spec.rb +2 -2
- data/spec/unit/provider/subversion_spec.rb +2 -2
- data/spec/unit/provider/systemd_unit_spec.rb +79 -60
- data/spec/unit/provider/zypper_repository_spec.rb +2 -2
- data/spec/unit/provider_spec.rb +0 -8
- data/spec/unit/resource/chef_client_cron_spec.rb +8 -8
- data/spec/unit/resource/powershell_script_spec.rb +2 -2
- data/spec/unit/resource/windows_task_spec.rb +1 -1
- data/spec/unit/user_spec.rb +1 -1
- data/spec/unit/user_v1_spec.rb +6 -4
- data/tasks/rspec.rb +16 -8
- metadata +25 -386
- data/bin/knife +0 -24
- data/lib/chef/application/knife.rb +0 -234
- data/lib/chef/application/windows_service.rb +0 -338
- data/lib/chef/application/windows_service_manager.rb +0 -205
- data/lib/chef/chef_fs/knife.rb +0 -160
- data/lib/chef/chef_fs/parallelizer.rb +0 -102
- data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
- data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
- data/lib/chef/knife.rb +0 -665
- data/lib/chef/knife/acl_add.rb +0 -57
- data/lib/chef/knife/acl_base.rb +0 -183
- data/lib/chef/knife/acl_bulk_add.rb +0 -78
- data/lib/chef/knife/acl_bulk_remove.rb +0 -83
- data/lib/chef/knife/acl_remove.rb +0 -62
- data/lib/chef/knife/acl_show.rb +0 -56
- data/lib/chef/knife/bootstrap.rb +0 -1192
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
- data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
- data/lib/chef/knife/bootstrap/templates/README.md +0 -11
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
- data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
- data/lib/chef/knife/client_bulk_delete.rb +0 -104
- data/lib/chef/knife/client_create.rb +0 -101
- data/lib/chef/knife/client_delete.rb +0 -62
- data/lib/chef/knife/client_edit.rb +0 -52
- data/lib/chef/knife/client_key_create.rb +0 -73
- data/lib/chef/knife/client_key_delete.rb +0 -80
- data/lib/chef/knife/client_key_edit.rb +0 -83
- data/lib/chef/knife/client_key_list.rb +0 -73
- data/lib/chef/knife/client_key_show.rb +0 -80
- data/lib/chef/knife/client_list.rb +0 -41
- data/lib/chef/knife/client_reregister.rb +0 -58
- data/lib/chef/knife/client_show.rb +0 -48
- data/lib/chef/knife/config_get.rb +0 -39
- data/lib/chef/knife/config_get_profile.rb +0 -37
- data/lib/chef/knife/config_list.rb +0 -139
- data/lib/chef/knife/config_list_profiles.rb +0 -37
- data/lib/chef/knife/config_show.rb +0 -127
- data/lib/chef/knife/config_use.rb +0 -61
- data/lib/chef/knife/config_use_profile.rb +0 -47
- data/lib/chef/knife/configure.rb +0 -150
- data/lib/chef/knife/configure_client.rb +0 -48
- data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
- data/lib/chef/knife/cookbook_delete.rb +0 -151
- data/lib/chef/knife/cookbook_download.rb +0 -142
- data/lib/chef/knife/cookbook_list.rb +0 -47
- data/lib/chef/knife/cookbook_metadata.rb +0 -106
- data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
- data/lib/chef/knife/cookbook_show.rb +0 -98
- data/lib/chef/knife/cookbook_upload.rb +0 -292
- data/lib/chef/knife/core/bootstrap_context.rb +0 -264
- data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
- data/lib/chef/knife/core/formatting_options.rb +0 -49
- data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
- data/lib/chef/knife/core/generic_presenter.rb +0 -232
- data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
- data/lib/chef/knife/core/node_editor.rb +0 -130
- data/lib/chef/knife/core/node_presenter.rb +0 -133
- data/lib/chef/knife/core/object_loader.rb +0 -115
- data/lib/chef/knife/core/status_presenter.rb +0 -147
- data/lib/chef/knife/core/subcommand_loader.rb +0 -203
- data/lib/chef/knife/core/text_formatter.rb +0 -85
- data/lib/chef/knife/core/ui.rb +0 -338
- data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -406
- data/lib/chef/knife/data_bag_create.rb +0 -81
- data/lib/chef/knife/data_bag_delete.rb +0 -49
- data/lib/chef/knife/data_bag_edit.rb +0 -74
- data/lib/chef/knife/data_bag_from_file.rb +0 -113
- data/lib/chef/knife/data_bag_list.rb +0 -42
- data/lib/chef/knife/data_bag_secret_options.rb +0 -122
- data/lib/chef/knife/data_bag_show.rb +0 -69
- data/lib/chef/knife/delete.rb +0 -125
- data/lib/chef/knife/deps.rb +0 -156
- data/lib/chef/knife/diff.rb +0 -83
- data/lib/chef/knife/download.rb +0 -84
- data/lib/chef/knife/edit.rb +0 -88
- data/lib/chef/knife/environment_compare.rb +0 -128
- data/lib/chef/knife/environment_create.rb +0 -52
- data/lib/chef/knife/environment_delete.rb +0 -44
- data/lib/chef/knife/environment_edit.rb +0 -44
- data/lib/chef/knife/environment_from_file.rb +0 -84
- data/lib/chef/knife/environment_list.rb +0 -41
- data/lib/chef/knife/environment_show.rb +0 -47
- data/lib/chef/knife/exec.rb +0 -99
- data/lib/chef/knife/group_add.rb +0 -55
- data/lib/chef/knife/group_create.rb +0 -49
- data/lib/chef/knife/group_destroy.rb +0 -53
- data/lib/chef/knife/group_list.rb +0 -43
- data/lib/chef/knife/group_remove.rb +0 -56
- data/lib/chef/knife/group_show.rb +0 -49
- data/lib/chef/knife/key_create.rb +0 -112
- data/lib/chef/knife/key_create_base.rb +0 -50
- data/lib/chef/knife/key_delete.rb +0 -55
- data/lib/chef/knife/key_edit.rb +0 -118
- data/lib/chef/knife/key_edit_base.rb +0 -55
- data/lib/chef/knife/key_list.rb +0 -90
- data/lib/chef/knife/key_list_base.rb +0 -45
- data/lib/chef/knife/key_show.rb +0 -53
- data/lib/chef/knife/list.rb +0 -177
- data/lib/chef/knife/node_bulk_delete.rb +0 -75
- data/lib/chef/knife/node_create.rb +0 -47
- data/lib/chef/knife/node_delete.rb +0 -46
- data/lib/chef/knife/node_edit.rb +0 -70
- data/lib/chef/knife/node_environment_set.rb +0 -53
- data/lib/chef/knife/node_from_file.rb +0 -51
- data/lib/chef/knife/node_list.rb +0 -44
- data/lib/chef/knife/node_policy_set.rb +0 -79
- data/lib/chef/knife/node_run_list_add.rb +0 -104
- data/lib/chef/knife/node_run_list_remove.rb +0 -67
- data/lib/chef/knife/node_run_list_set.rb +0 -66
- data/lib/chef/knife/node_show.rb +0 -63
- data/lib/chef/knife/null.rb +0 -12
- data/lib/chef/knife/raw.rb +0 -123
- data/lib/chef/knife/recipe_list.rb +0 -32
- data/lib/chef/knife/rehash.rb +0 -50
- data/lib/chef/knife/role_bulk_delete.rb +0 -66
- data/lib/chef/knife/role_create.rb +0 -53
- data/lib/chef/knife/role_delete.rb +0 -46
- data/lib/chef/knife/role_edit.rb +0 -45
- data/lib/chef/knife/role_env_run_list_add.rb +0 -87
- data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
- data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
- data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
- data/lib/chef/knife/role_env_run_list_set.rb +0 -70
- data/lib/chef/knife/role_from_file.rb +0 -51
- data/lib/chef/knife/role_list.rb +0 -42
- data/lib/chef/knife/role_run_list_add.rb +0 -87
- data/lib/chef/knife/role_run_list_clear.rb +0 -55
- data/lib/chef/knife/role_run_list_remove.rb +0 -56
- data/lib/chef/knife/role_run_list_replace.rb +0 -60
- data/lib/chef/knife/role_run_list_set.rb +0 -69
- data/lib/chef/knife/role_show.rb +0 -48
- data/lib/chef/knife/search.rb +0 -194
- data/lib/chef/knife/serve.rb +0 -65
- data/lib/chef/knife/show.rb +0 -72
- data/lib/chef/knife/ssh.rb +0 -645
- data/lib/chef/knife/ssl_check.rb +0 -284
- data/lib/chef/knife/ssl_fetch.rb +0 -161
- data/lib/chef/knife/status.rb +0 -95
- data/lib/chef/knife/supermarket_download.rb +0 -121
- data/lib/chef/knife/supermarket_install.rb +0 -192
- data/lib/chef/knife/supermarket_list.rb +0 -76
- data/lib/chef/knife/supermarket_search.rb +0 -53
- data/lib/chef/knife/supermarket_share.rb +0 -166
- data/lib/chef/knife/supermarket_show.rb +0 -66
- data/lib/chef/knife/supermarket_unshare.rb +0 -61
- data/lib/chef/knife/tag_create.rb +0 -52
- data/lib/chef/knife/tag_delete.rb +0 -60
- data/lib/chef/knife/tag_list.rb +0 -47
- data/lib/chef/knife/upload.rb +0 -86
- data/lib/chef/knife/user_create.rb +0 -107
- data/lib/chef/knife/user_delete.rb +0 -44
- data/lib/chef/knife/user_dissociate.rb +0 -42
- data/lib/chef/knife/user_edit.rb +0 -52
- data/lib/chef/knife/user_invite_add.rb +0 -43
- data/lib/chef/knife/user_invite_list.rb +0 -34
- data/lib/chef/knife/user_invite_rescind.rb +0 -63
- data/lib/chef/knife/user_key_create.rb +0 -73
- data/lib/chef/knife/user_key_delete.rb +0 -80
- data/lib/chef/knife/user_key_edit.rb +0 -83
- data/lib/chef/knife/user_key_list.rb +0 -73
- data/lib/chef/knife/user_key_show.rb +0 -80
- data/lib/chef/knife/user_list.rb +0 -42
- data/lib/chef/knife/user_reregister.rb +0 -59
- data/lib/chef/knife/user_show.rb +0 -48
- data/lib/chef/knife/xargs.rb +0 -282
- data/lib/chef/knife/yaml_convert.rb +0 -91
- data/lib/chef/resource/user/dscl_user.rb +0 -35
- data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
- data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
- data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
- data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
- data/spec/data/knife_subcommand/test_yourself.rb +0 -21
- data/spec/functional/knife/configure_spec.rb +0 -33
- data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
- data/spec/functional/knife/exec_spec.rb +0 -55
- data/spec/functional/knife/rehash_spec.rb +0 -39
- data/spec/functional/knife/smoke_test.rb +0 -42
- data/spec/functional/knife/ssh_spec.rb +0 -352
- data/spec/functional/resource/user/dscl_spec.rb +0 -188
- data/spec/functional/resource/windows_service_spec.rb +0 -105
- data/spec/functional/win32/service_manager_spec.rb +0 -220
- data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
- data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
- data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
- data/spec/integration/knife/chefignore_spec.rb +0 -301
- data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
- data/spec/integration/knife/client_create_spec.rb +0 -70
- data/spec/integration/knife/client_delete_spec.rb +0 -64
- data/spec/integration/knife/client_key_create_spec.rb +0 -66
- data/spec/integration/knife/client_key_delete_spec.rb +0 -43
- data/spec/integration/knife/client_key_list_spec.rb +0 -61
- data/spec/integration/knife/client_key_show_spec.rb +0 -45
- data/spec/integration/knife/client_list_spec.rb +0 -49
- data/spec/integration/knife/client_show_spec.rb +0 -37
- data/spec/integration/knife/common_options_spec.rb +0 -174
- data/spec/integration/knife/config_list_spec.rb +0 -220
- data/spec/integration/knife/config_show_spec.rb +0 -192
- data/spec/integration/knife/config_use_spec.rb +0 -198
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
- data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
- data/spec/integration/knife/cookbook_download_spec.rb +0 -72
- data/spec/integration/knife/cookbook_list_spec.rb +0 -55
- data/spec/integration/knife/cookbook_show_spec.rb +0 -149
- data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
- data/spec/integration/knife/data_bag_create_spec.rb +0 -125
- data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
- data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
- data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
- data/spec/integration/knife/data_bag_list_spec.rb +0 -44
- data/spec/integration/knife/data_bag_show_spec.rb +0 -95
- data/spec/integration/knife/delete_spec.rb +0 -1018
- data/spec/integration/knife/deps_spec.rb +0 -703
- data/spec/integration/knife/diff_spec.rb +0 -605
- data/spec/integration/knife/download_spec.rb +0 -1336
- data/spec/integration/knife/environment_compare_spec.rb +0 -75
- data/spec/integration/knife/environment_create_spec.rb +0 -41
- data/spec/integration/knife/environment_delete_spec.rb +0 -37
- data/spec/integration/knife/environment_from_file_spec.rb +0 -116
- data/spec/integration/knife/environment_list_spec.rb +0 -42
- data/spec/integration/knife/environment_show_spec.rb +0 -77
- data/spec/integration/knife/list_spec.rb +0 -1060
- data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
- data/spec/integration/knife/node_create_spec.rb +0 -47
- data/spec/integration/knife/node_delete_spec.rb +0 -48
- data/spec/integration/knife/node_environment_set_spec.rb +0 -46
- data/spec/integration/knife/node_from_file_spec.rb +0 -59
- data/spec/integration/knife/node_list_spec.rb +0 -45
- data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
- data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
- data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
- data/spec/integration/knife/node_show_spec.rb +0 -36
- data/spec/integration/knife/raw_spec.rb +0 -297
- data/spec/integration/knife/redirection_spec.rb +0 -64
- data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
- data/spec/integration/knife/role_create_spec.rb +0 -41
- data/spec/integration/knife/role_delete_spec.rb +0 -48
- data/spec/integration/knife/role_from_file_spec.rb +0 -96
- data/spec/integration/knife/role_list_spec.rb +0 -45
- data/spec/integration/knife/role_show_spec.rb +0 -51
- data/spec/integration/knife/search_node_spec.rb +0 -40
- data/spec/integration/knife/serve_spec.rb +0 -92
- data/spec/integration/knife/show_spec.rb +0 -197
- data/spec/integration/knife/upload_spec.rb +0 -1617
- data/spec/support/shared/functional/knife.rb +0 -37
- data/spec/support/shared/functional/win32_service.rb +0 -57
- data/spec/support/shared/integration/knife_support.rb +0 -192
- data/spec/support/shared/unit/knife_shared.rb +0 -39
- data/spec/unit/application/knife_spec.rb +0 -241
- data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
- data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
- data/spec/unit/knife/bootstrap_spec.rb +0 -2220
- data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
- data/spec/unit/knife/client_create_spec.rb +0 -169
- data/spec/unit/knife/client_delete_spec.rb +0 -99
- data/spec/unit/knife/client_edit_spec.rb +0 -53
- data/spec/unit/knife/client_list_spec.rb +0 -34
- data/spec/unit/knife/client_reregister_spec.rb +0 -62
- data/spec/unit/knife/client_show_spec.rb +0 -52
- data/spec/unit/knife/configure_client_spec.rb +0 -81
- data/spec/unit/knife/configure_spec.rb +0 -190
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
- data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
- data/spec/unit/knife/cookbook_download_spec.rb +0 -255
- data/spec/unit/knife/cookbook_list_spec.rb +0 -88
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
- data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
- data/spec/unit/knife/cookbook_show_spec.rb +0 -253
- data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
- data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
- data/spec/unit/knife/core/node_editor_spec.rb +0 -211
- data/spec/unit/knife/core/object_loader_spec.rb +0 -81
- data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
- data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
- data/spec/unit/knife/core/ui_spec.rb +0 -656
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
- data/spec/unit/knife/data_bag_create_spec.rb +0 -175
- data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
- data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
- data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
- data/spec/unit/knife/data_bag_show_spec.rb +0 -139
- data/spec/unit/knife/environment_compare_spec.rb +0 -112
- data/spec/unit/knife/environment_create_spec.rb +0 -91
- data/spec/unit/knife/environment_delete_spec.rb +0 -71
- data/spec/unit/knife/environment_edit_spec.rb +0 -79
- data/spec/unit/knife/environment_from_file_spec.rb +0 -90
- data/spec/unit/knife/environment_list_spec.rb +0 -54
- data/spec/unit/knife/environment_show_spec.rb +0 -52
- data/spec/unit/knife/key_create_spec.rb +0 -223
- data/spec/unit/knife/key_delete_spec.rb +0 -133
- data/spec/unit/knife/key_edit_spec.rb +0 -264
- data/spec/unit/knife/key_helper.rb +0 -74
- data/spec/unit/knife/key_list_spec.rb +0 -216
- data/spec/unit/knife/key_show_spec.rb +0 -126
- data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
- data/spec/unit/knife/node_delete_spec.rb +0 -77
- data/spec/unit/knife/node_edit_spec.rb +0 -116
- data/spec/unit/knife/node_environment_set_spec.rb +0 -61
- data/spec/unit/knife/node_from_file_spec.rb +0 -59
- data/spec/unit/knife/node_list_spec.rb +0 -62
- data/spec/unit/knife/node_policy_set_spec.rb +0 -122
- data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
- data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
- data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
- data/spec/unit/knife/node_show_spec.rb +0 -65
- data/spec/unit/knife/raw_spec.rb +0 -43
- data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
- data/spec/unit/knife/role_create_spec.rb +0 -80
- data/spec/unit/knife/role_delete_spec.rb +0 -67
- data/spec/unit/knife/role_edit_spec.rb +0 -77
- data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
- data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
- data/spec/unit/knife/role_from_file_spec.rb +0 -69
- data/spec/unit/knife/role_list_spec.rb +0 -54
- data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
- data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
- data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
- data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
- data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
- data/spec/unit/knife/role_show_spec.rb +0 -59
- data/spec/unit/knife/ssh_spec.rb +0 -403
- data/spec/unit/knife/ssl_check_spec.rb +0 -256
- data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
- data/spec/unit/knife/status_spec.rb +0 -112
- data/spec/unit/knife/supermarket_download_spec.rb +0 -152
- data/spec/unit/knife/supermarket_install_spec.rb +0 -202
- data/spec/unit/knife/supermarket_list_spec.rb +0 -70
- data/spec/unit/knife/supermarket_search_spec.rb +0 -85
- data/spec/unit/knife/supermarket_share_spec.rb +0 -208
- data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
- data/spec/unit/knife/tag_create_spec.rb +0 -23
- data/spec/unit/knife/tag_delete_spec.rb +0 -25
- data/spec/unit/knife/tag_list_spec.rb +0 -23
- data/spec/unit/knife/user_create_spec.rb +0 -184
- data/spec/unit/knife/user_delete_spec.rb +0 -46
- data/spec/unit/knife/user_edit_spec.rb +0 -48
- data/spec/unit/knife/user_list_spec.rb +0 -36
- data/spec/unit/knife/user_reregister_spec.rb +0 -56
- data/spec/unit/knife/user_show_spec.rb +0 -46
- data/spec/unit/knife_spec.rb +0 -634
- data/spec/unit/provider/user/dscl_spec.rb +0 -699
- data/spec/unit/windows_service_spec.rb +0 -118
data/spec/unit/knife_spec.rb
DELETED
@@ -1,634 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
3
|
-
# Author:: Tim Hinderliter (<tim@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
#
|
19
|
-
|
20
|
-
# Fixtures for subcommand loading live in this namespace
|
21
|
-
module KnifeSpecs
|
22
|
-
end
|
23
|
-
|
24
|
-
require "spec_helper"
|
25
|
-
require "uri"
|
26
|
-
require "chef/knife/core/gem_glob_loader"
|
27
|
-
|
28
|
-
describe Chef::Knife do
|
29
|
-
|
30
|
-
let(:stderr) { StringIO.new }
|
31
|
-
|
32
|
-
let(:knife) { Chef::Knife.new }
|
33
|
-
|
34
|
-
let(:config_location) { File.expand_path("~/.chef/config.rb") }
|
35
|
-
|
36
|
-
let(:config_loader) do
|
37
|
-
instance_double("WorkstationConfigLoader",
|
38
|
-
load: nil, no_config_found?: false,
|
39
|
-
config_location: config_location,
|
40
|
-
chef_config_dir: "/etc/chef")
|
41
|
-
end
|
42
|
-
|
43
|
-
before(:each) do
|
44
|
-
Chef::Log.logger = Logger.new(StringIO.new)
|
45
|
-
|
46
|
-
Chef::Config[:node_name] = "webmonkey.example.com"
|
47
|
-
|
48
|
-
allow(Chef::WorkstationConfigLoader).to receive(:new).and_return(config_loader)
|
49
|
-
allow(config_loader).to receive(:explicit_config_file=)
|
50
|
-
allow(config_loader).to receive(:profile=)
|
51
|
-
|
52
|
-
# Prevent gratuitous code reloading:
|
53
|
-
allow(Chef::Knife).to receive(:load_commands)
|
54
|
-
allow(knife.ui).to receive(:puts)
|
55
|
-
allow(knife.ui).to receive(:print)
|
56
|
-
allow(Chef::Log).to receive(:init)
|
57
|
-
allow(Chef::Log).to receive(:level)
|
58
|
-
%i{debug info warn error crit}.each do |level_sym|
|
59
|
-
allow(Chef::Log).to receive(level_sym)
|
60
|
-
end
|
61
|
-
allow(Chef::Knife).to receive(:puts)
|
62
|
-
end
|
63
|
-
|
64
|
-
after(:each) do
|
65
|
-
Chef::Knife.reset_config_loader!
|
66
|
-
end
|
67
|
-
|
68
|
-
it "does not reset Chef::Config[:verbosity to nil if config[:verbosity] is nil" do
|
69
|
-
Chef::Config[:verbosity] = 2
|
70
|
-
Chef::Knife.new
|
71
|
-
expect(Chef::Config[:verbosity]).to eq(2)
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "after loading a subcommand" do
|
75
|
-
before do
|
76
|
-
Chef::Knife.reset_subcommands!
|
77
|
-
|
78
|
-
if KnifeSpecs.const_defined?(:TestNameMapping)
|
79
|
-
KnifeSpecs.send(:remove_const, :TestNameMapping)
|
80
|
-
end
|
81
|
-
|
82
|
-
if KnifeSpecs.const_defined?(:TestExplicitCategory)
|
83
|
-
KnifeSpecs.send(:remove_const, :TestExplicitCategory)
|
84
|
-
end
|
85
|
-
|
86
|
-
Kernel.load(File.join(CHEF_SPEC_DATA, "knife_subcommand", "test_name_mapping.rb"))
|
87
|
-
Kernel.load(File.join(CHEF_SPEC_DATA, "knife_subcommand", "test_explicit_category.rb"))
|
88
|
-
end
|
89
|
-
|
90
|
-
it "has a category based on its name" do
|
91
|
-
expect(KnifeSpecs::TestNameMapping.subcommand_category).to eq("test")
|
92
|
-
end
|
93
|
-
|
94
|
-
it "has an explicitly defined category if set" do
|
95
|
-
expect(KnifeSpecs::TestExplicitCategory.subcommand_category).to eq("cookbook site")
|
96
|
-
end
|
97
|
-
|
98
|
-
it "can reference the subcommand by its snake cased name" do
|
99
|
-
expect(Chef::Knife.subcommands["test_name_mapping"]).to equal(KnifeSpecs::TestNameMapping)
|
100
|
-
end
|
101
|
-
|
102
|
-
it "lists subcommands by category" do
|
103
|
-
expect(Chef::Knife.subcommands_by_category["test"]).to include("test_name_mapping")
|
104
|
-
end
|
105
|
-
|
106
|
-
it "lists subcommands by category when the subcommands have explicit categories" do
|
107
|
-
expect(Chef::Knife.subcommands_by_category["cookbook site"]).to include("test_explicit_category")
|
108
|
-
end
|
109
|
-
|
110
|
-
it "has empty dependency_loader list by default" do
|
111
|
-
expect(KnifeSpecs::TestNameMapping.dependency_loaders).to be_empty
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "after loading all subcommands" do
|
116
|
-
before do
|
117
|
-
Chef::Knife.reset_subcommands!
|
118
|
-
Chef::Knife.load_commands
|
119
|
-
end
|
120
|
-
|
121
|
-
it "references a subcommand class by its snake cased name" do
|
122
|
-
class SuperAwesomeCommand < Chef::Knife
|
123
|
-
end
|
124
|
-
|
125
|
-
Chef::Knife.load_commands
|
126
|
-
|
127
|
-
expect(Chef::Knife.subcommands).to have_key("super_awesome_command")
|
128
|
-
expect(Chef::Knife.subcommands["super_awesome_command"]).to eq(SuperAwesomeCommand)
|
129
|
-
end
|
130
|
-
|
131
|
-
it "records the location of ChefFS-based commands correctly" do
|
132
|
-
class AwesomeCheffsCommand < Chef::ChefFS::Knife
|
133
|
-
end
|
134
|
-
|
135
|
-
Chef::Knife.load_commands
|
136
|
-
expect(Chef::Knife.subcommand_files["awesome_cheffs_command"]).to eq([__FILE__])
|
137
|
-
end
|
138
|
-
|
139
|
-
it "guesses a category from a given ARGV" do
|
140
|
-
Chef::Knife.subcommands_by_category["cookbook"] << :cookbook
|
141
|
-
Chef::Knife.subcommands_by_category["cookbook site"] << :cookbook_site
|
142
|
-
expect(Chef::Knife.guess_category(%w{cookbook foo bar baz})).to eq("cookbook")
|
143
|
-
expect(Chef::Knife.guess_category(%w{cookbook site foo bar baz})).to eq("cookbook site")
|
144
|
-
expect(Chef::Knife.guess_category(%w{cookbook site --help})).to eq("cookbook site")
|
145
|
-
end
|
146
|
-
|
147
|
-
it "finds a subcommand class based on ARGV" do
|
148
|
-
Chef::Knife.subcommands["cookbook_site_install"] = :CookbookSiteInstall
|
149
|
-
Chef::Knife.subcommands["cookbook"] = :Cookbook
|
150
|
-
expect(Chef::Knife.subcommand_class_from(%w{cookbook site install --help foo bar baz})).to eq(:CookbookSiteInstall)
|
151
|
-
end
|
152
|
-
|
153
|
-
it "special case sets the subcommand_loader to GemGlobLoader when running rehash" do
|
154
|
-
Chef::Knife.subcommands["rehash"] = :Rehash
|
155
|
-
expect(Chef::Knife.subcommand_class_from(%w{rehash })).to eq(:Rehash)
|
156
|
-
expect(Chef::Knife.subcommand_loader).to be_a(Chef::Knife::SubcommandLoader::GemGlobLoader)
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
160
|
-
|
161
|
-
describe "the headers include X-Remote-Request-Id" do
|
162
|
-
|
163
|
-
let(:headers) do
|
164
|
-
{ "Accept" => "application/json",
|
165
|
-
"Accept-Encoding" => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
|
166
|
-
"X-Chef-Version" => Chef::VERSION,
|
167
|
-
"Host" => "api.opscode.piab",
|
168
|
-
"X-REMOTE-REQUEST-ID" => request_id,
|
169
|
-
}
|
170
|
-
end
|
171
|
-
|
172
|
-
let(:request_id) { "1234" }
|
173
|
-
|
174
|
-
let(:request_mock) { {} }
|
175
|
-
|
176
|
-
let(:rest) do
|
177
|
-
allow(Net::HTTP).to receive(:new).and_return(http_client)
|
178
|
-
allow(Chef::RequestID.instance).to receive(:request_id).and_return(request_id)
|
179
|
-
allow(Chef::Config).to receive(:chef_server_url).and_return("https://api.opscode.piab")
|
180
|
-
command = Chef::Knife.run(%w{test yourself})
|
181
|
-
rest = command.noauth_rest
|
182
|
-
rest
|
183
|
-
end
|
184
|
-
|
185
|
-
let!(:http_client) do
|
186
|
-
http_client = Net::HTTP.new(url.host, url.port)
|
187
|
-
allow(http_client).to receive(:request).and_yield(http_response).and_return(http_response)
|
188
|
-
http_client
|
189
|
-
end
|
190
|
-
|
191
|
-
let(:url) { URI.parse("https://api.opscode.piab") }
|
192
|
-
|
193
|
-
let(:http_response) do
|
194
|
-
http_response = Net::HTTPSuccess.new("1.1", "200", "successful rest req")
|
195
|
-
allow(http_response).to receive(:read_body)
|
196
|
-
allow(http_response).to receive(:body).and_return(body)
|
197
|
-
http_response["Content-Length"] = body.bytesize.to_s
|
198
|
-
http_response
|
199
|
-
end
|
200
|
-
|
201
|
-
let(:body) { "ninja" }
|
202
|
-
|
203
|
-
before(:each) do
|
204
|
-
Chef::Config[:chef_server_url] = "https://api.opscode.piab"
|
205
|
-
if KnifeSpecs.const_defined?(:TestYourself)
|
206
|
-
KnifeSpecs.send :remove_const, :TestYourself
|
207
|
-
end
|
208
|
-
Kernel.load(File.join(CHEF_SPEC_DATA, "knife_subcommand", "test_yourself.rb"))
|
209
|
-
Chef::Knife.subcommands.each { |name, klass| Chef::Knife.subcommands.delete(name) unless klass.is_a?(Class) }
|
210
|
-
end
|
211
|
-
|
212
|
-
it "confirms that the headers include X-Remote-Request-Id" do
|
213
|
-
expect(Net::HTTP::Get).to receive(:new).with("/monkey", headers).and_return(request_mock)
|
214
|
-
rest.get("monkey")
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
describe "when running a command" do
|
219
|
-
before(:each) do
|
220
|
-
if KnifeSpecs.const_defined?(:TestYourself)
|
221
|
-
KnifeSpecs.send :remove_const, :TestYourself
|
222
|
-
end
|
223
|
-
Kernel.load(File.join(CHEF_SPEC_DATA, "knife_subcommand", "test_yourself.rb"))
|
224
|
-
Chef::Knife.subcommands.each { |name, klass| Chef::Knife.subcommands.delete(name) unless klass.is_a?(Class) }
|
225
|
-
end
|
226
|
-
|
227
|
-
it "merges the global knife CLI options" do
|
228
|
-
extra_opts = {}
|
229
|
-
extra_opts[:editor] = { long: "--editor EDITOR",
|
230
|
-
description: "Set the editor to use for interactive commands",
|
231
|
-
short: "-e EDITOR",
|
232
|
-
default: "/usr/bin/vim" }
|
233
|
-
|
234
|
-
# there is special hackery to return the subcommand instance going on here.
|
235
|
-
command = Chef::Knife.run(%w{test yourself}, extra_opts)
|
236
|
-
editor_opts = command.options[:editor]
|
237
|
-
expect(editor_opts[:long]).to eq("--editor EDITOR")
|
238
|
-
expect(editor_opts[:description]).to eq("Set the editor to use for interactive commands")
|
239
|
-
expect(editor_opts[:short]).to eq("-e EDITOR")
|
240
|
-
expect(editor_opts[:default]).to eq("/usr/bin/vim")
|
241
|
-
end
|
242
|
-
|
243
|
-
it "creates an instance of the subcommand and runs it" do
|
244
|
-
command = Chef::Knife.run(%w{test yourself})
|
245
|
-
expect(command).to be_an_instance_of(KnifeSpecs::TestYourself)
|
246
|
-
expect(command.ran).to be_truthy
|
247
|
-
end
|
248
|
-
|
249
|
-
it "passes the command specific args to the subcommand" do
|
250
|
-
command = Chef::Knife.run(%w{test yourself with some args})
|
251
|
-
expect(command.name_args).to eq(%w{with some args})
|
252
|
-
end
|
253
|
-
|
254
|
-
it "excludes the command name from the name args when parts are joined with underscores" do
|
255
|
-
command = Chef::Knife.run(%w{test_yourself with some args})
|
256
|
-
expect(command.name_args).to eq(%w{with some args})
|
257
|
-
end
|
258
|
-
|
259
|
-
it "exits if no subcommand matches the CLI args" do
|
260
|
-
stdout = StringIO.new
|
261
|
-
|
262
|
-
allow(Chef::Knife.ui).to receive(:stderr).and_return(stderr)
|
263
|
-
allow(Chef::Knife.ui).to receive(:stdout).and_return(stdout)
|
264
|
-
expect(Chef::Knife.ui).to receive(:fatal)
|
265
|
-
expect { Chef::Knife.run(%w{fuuu uuuu fuuuu}) }.to raise_error(SystemExit) { |e| expect(e.status).not_to eq(0) }
|
266
|
-
end
|
267
|
-
|
268
|
-
it "loads lazy dependencies" do
|
269
|
-
Chef::Knife.run(%w{test yourself})
|
270
|
-
expect(KnifeSpecs::TestYourself.test_deps_loaded).to be_truthy
|
271
|
-
end
|
272
|
-
|
273
|
-
it "loads lazy dependencies from multiple deps calls" do
|
274
|
-
other_deps_loaded = false
|
275
|
-
KnifeSpecs::TestYourself.class_eval do
|
276
|
-
deps { other_deps_loaded = true }
|
277
|
-
end
|
278
|
-
|
279
|
-
Chef::Knife.run(%w{test yourself})
|
280
|
-
expect(KnifeSpecs::TestYourself.test_deps_loaded).to be_truthy
|
281
|
-
expect(other_deps_loaded).to be_truthy
|
282
|
-
end
|
283
|
-
|
284
|
-
describe "working with unmerged configuration in #config_source" do
|
285
|
-
let(:command) { KnifeSpecs::TestYourself.new([]) }
|
286
|
-
|
287
|
-
before do
|
288
|
-
KnifeSpecs::TestYourself.option(:opt_with_default,
|
289
|
-
short: "-D VALUE",
|
290
|
-
default: "default-value")
|
291
|
-
end
|
292
|
-
# This supports a use case used by plugins, where the pattern
|
293
|
-
# seems to follow:
|
294
|
-
# cmd = KnifeCommand.new
|
295
|
-
# cmd.config[:config_key] = value
|
296
|
-
# cmd.run
|
297
|
-
#
|
298
|
-
# This bypasses Knife::run and the `merge_configs` call it
|
299
|
-
# performs - config_source should break when that happens.
|
300
|
-
context "when config is fed in directly without a merge" do
|
301
|
-
it "retains the value but returns nil as a config source" do
|
302
|
-
command.config[:test1] = "value"
|
303
|
-
expect(command.config[:test1]).to eq "value"
|
304
|
-
expect(command.config_source(:test1)).to eq nil
|
305
|
-
end
|
306
|
-
end
|
307
|
-
|
308
|
-
end
|
309
|
-
describe "merging configuration options" do
|
310
|
-
before do
|
311
|
-
KnifeSpecs::TestYourself.option(:opt_with_default,
|
312
|
-
short: "-D VALUE",
|
313
|
-
default: "default-value")
|
314
|
-
end
|
315
|
-
|
316
|
-
it "sets the default log_location to STDERR for Chef::Log warnings" do
|
317
|
-
knife_command = KnifeSpecs::TestYourself.new([])
|
318
|
-
knife_command.configure_chef
|
319
|
-
expect(Chef::Config[:log_location]).to eq(STDERR)
|
320
|
-
end
|
321
|
-
|
322
|
-
it "sets the default log_level to warn so we can issue Chef::Log.warn" do
|
323
|
-
knife_command = KnifeSpecs::TestYourself.new([])
|
324
|
-
knife_command.configure_chef
|
325
|
-
expect(Chef::Config[:log_level]).to eql(:warn)
|
326
|
-
end
|
327
|
-
|
328
|
-
it "prefers the default value from option definition if no config or command line value is present and reports the source as default" do
|
329
|
-
knife_command = KnifeSpecs::TestYourself.new([]) # empty argv
|
330
|
-
knife_command.configure_chef
|
331
|
-
expect(knife_command.config[:opt_with_default]).to eq("default-value")
|
332
|
-
expect(knife_command.config_source(:opt_with_default)).to eq(:cli_default)
|
333
|
-
end
|
334
|
-
|
335
|
-
it "prefers a value in Chef::Config[:knife] to the default and reports the source as config" do
|
336
|
-
Chef::Config[:knife][:opt_with_default] = "from-knife-config"
|
337
|
-
knife_command = KnifeSpecs::TestYourself.new([]) # empty argv
|
338
|
-
knife_command.configure_chef
|
339
|
-
expect(knife_command.config[:opt_with_default]).to eq("from-knife-config")
|
340
|
-
expect(knife_command.config_source(:opt_with_default)).to eq(:config)
|
341
|
-
end
|
342
|
-
|
343
|
-
it "prefers a value from command line over Chef::Config and the default and reports the source as CLI" do
|
344
|
-
knife_command = KnifeSpecs::TestYourself.new(["-D", "from-cli"])
|
345
|
-
knife_command.configure_chef
|
346
|
-
expect(knife_command.config[:opt_with_default]).to eq("from-cli")
|
347
|
-
expect(knife_command.config_source(:opt_with_default)).to eq(:cli)
|
348
|
-
end
|
349
|
-
|
350
|
-
it "merges `listen` config to Chef::Config" do
|
351
|
-
knife_command = Chef::Knife.run(%w{test yourself --no-listen}, Chef::Application::Knife.options)
|
352
|
-
expect(Chef::Config[:listen]).to be(false)
|
353
|
-
expect(knife_command.config_source(:listen)).to eq(:cli)
|
354
|
-
end
|
355
|
-
|
356
|
-
it "merges Chef::Config[:knife] values into the config hash even if they have no cli keys" do
|
357
|
-
Chef::Config[:knife][:opt_with_no_cli_key] = "from-knife-config"
|
358
|
-
knife_command = KnifeSpecs::TestYourself.new([]) # empty argv
|
359
|
-
knife_command.configure_chef
|
360
|
-
expect(knife_command.config[:opt_with_no_cli_key]).to eq("from-knife-config")
|
361
|
-
expect(knife_command.config_source(:opt_with_no_cli_key)).to eq(:config)
|
362
|
-
end
|
363
|
-
|
364
|
-
it "merges Chef::Config[:knife] default values into the config hash even if they have no cli keys" do
|
365
|
-
Chef::Config.config_context :knife do
|
366
|
-
default :opt_with_no_cli_key, "from-knife-default"
|
367
|
-
end
|
368
|
-
knife_command = KnifeSpecs::TestYourself.new([]) # empty argv
|
369
|
-
knife_command.configure_chef
|
370
|
-
expect(knife_command.config[:opt_with_no_cli_key]).to eq("from-knife-default")
|
371
|
-
expect(knife_command.config_source(:opt_with_no_cli_key)).to eq(:config_default)
|
372
|
-
end
|
373
|
-
|
374
|
-
context "verbosity is one" do
|
375
|
-
let(:fake_config) { "/does/not/exist/knife.rb" }
|
376
|
-
|
377
|
-
before do
|
378
|
-
knife.config[:verbosity] = 1
|
379
|
-
knife.config[:config_file] = fake_config
|
380
|
-
config_loader = double("Chef::WorkstationConfigLoader", load: true, no_config_found?: false, chef_config_dir: "/etc/chef", config_location: fake_config)
|
381
|
-
allow(config_loader).to receive(:explicit_config_file=).with(fake_config).and_return(fake_config)
|
382
|
-
allow(config_loader).to receive(:profile=)
|
383
|
-
allow(Chef::WorkstationConfigLoader).to receive(:new).and_return(config_loader)
|
384
|
-
end
|
385
|
-
|
386
|
-
it "prints the path to the configuration file used" do
|
387
|
-
stdout, stderr, stdin = StringIO.new, StringIO.new, StringIO.new
|
388
|
-
knife.ui = Chef::Knife::UI.new(stdout, stderr, stdin, {})
|
389
|
-
expect(Chef::Log).to receive(:info).with("Using configuration from #{fake_config}")
|
390
|
-
knife.configure_chef
|
391
|
-
end
|
392
|
-
end
|
393
|
-
|
394
|
-
# -VV (2) is debug, -VVV (3) is trace
|
395
|
-
[ 2, 3 ].each do |verbosity|
|
396
|
-
it "does not humanize the exception if Chef::Config[:verbosity] is #{verbosity}" do
|
397
|
-
Chef::Config[:verbosity] = verbosity
|
398
|
-
allow(knife).to receive(:run).and_raise(Exception)
|
399
|
-
expect(knife).not_to receive(:humanize_exception)
|
400
|
-
expect { knife.run_with_pretty_exceptions }.to raise_error(Exception)
|
401
|
-
end
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
describe "setting arbitrary configuration with --config-option" do
|
406
|
-
|
407
|
-
let(:stdout) { StringIO.new }
|
408
|
-
|
409
|
-
let(:stderr) { StringIO.new }
|
410
|
-
|
411
|
-
let(:stdin) { StringIO.new }
|
412
|
-
|
413
|
-
let(:ui) { Chef::Knife::UI.new(stdout, stderr, stdin, disable_editing: true) }
|
414
|
-
|
415
|
-
let(:subcommand) do
|
416
|
-
KnifeSpecs::TestYourself.options = Chef::Application::Knife.options.merge(KnifeSpecs::TestYourself.options)
|
417
|
-
KnifeSpecs::TestYourself.new(%w{--config-option badly_formatted_arg}).tap do |cmd|
|
418
|
-
cmd.ui = ui
|
419
|
-
end
|
420
|
-
end
|
421
|
-
|
422
|
-
it "sets arbitrary configuration via --config-option" do
|
423
|
-
Chef::Knife.run(%w{test yourself --config-option arbitrary_config_thing=hello}, Chef::Application::Knife.options)
|
424
|
-
expect(Chef::Config[:arbitrary_config_thing]).to eq("hello")
|
425
|
-
end
|
426
|
-
|
427
|
-
it "handles errors in arbitrary configuration" do
|
428
|
-
expect(subcommand).to receive(:exit).with(1)
|
429
|
-
subcommand.configure_chef
|
430
|
-
expect(stderr.string).to include("ERROR: Unparsable config option \"badly_formatted_arg\"")
|
431
|
-
expect(stdout.string).to include(subcommand.opt_parser.to_s)
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
|
-
end
|
436
|
-
|
437
|
-
describe "when first created" do
|
438
|
-
|
439
|
-
let(:knife) {
|
440
|
-
Kernel.load "spec/data/knife_subcommand/test_yourself.rb"
|
441
|
-
KnifeSpecs::TestYourself.new(%w{with some args -s scrogramming})
|
442
|
-
}
|
443
|
-
|
444
|
-
it "it parses the options passed to it" do
|
445
|
-
expect(knife.config[:scro]).to eq("scrogramming")
|
446
|
-
end
|
447
|
-
|
448
|
-
it "extracts its command specific args from the full arg list" do
|
449
|
-
expect(knife.name_args).to eq(%w{with some args})
|
450
|
-
end
|
451
|
-
|
452
|
-
it "does not have lazy dependencies loaded" do
|
453
|
-
skip "unstable with randomization... prolly needs more isolation"
|
454
|
-
|
455
|
-
expect(knife.class.test_deps_loaded).not_to be_truthy
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|
459
|
-
describe "when formatting exceptions" do
|
460
|
-
|
461
|
-
let(:stdout) { StringIO.new }
|
462
|
-
let(:stderr) { StringIO.new }
|
463
|
-
let(:stdin) { StringIO.new }
|
464
|
-
|
465
|
-
let(:ui) { Chef::Knife::UI.new(stdout, stderr, stdin, {}) }
|
466
|
-
|
467
|
-
before do
|
468
|
-
knife.ui = ui
|
469
|
-
expect(knife).to receive(:exit).with(100)
|
470
|
-
end
|
471
|
-
|
472
|
-
it "formats 401s nicely" do
|
473
|
-
response = Net::HTTPUnauthorized.new("1.1", "401", "Unauthorized")
|
474
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
475
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "y u no syncronize your clock?"))
|
476
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPClientException.new("401 Unauthorized", response))
|
477
|
-
knife.run_with_pretty_exceptions
|
478
|
-
expect(stderr.string).to match(/ERROR: Failed to authenticate to/)
|
479
|
-
expect(stderr.string).to match(/Response: y u no syncronize your clock\?/)
|
480
|
-
end
|
481
|
-
|
482
|
-
it "formats 403s nicely" do
|
483
|
-
response = Net::HTTPForbidden.new("1.1", "403", "Forbidden")
|
484
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
485
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "y u no administrator"))
|
486
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPClientException.new("403 Forbidden", response))
|
487
|
-
allow(knife).to receive(:username).and_return("sadpanda")
|
488
|
-
knife.run_with_pretty_exceptions
|
489
|
-
expect(stderr.string).to match(/ERROR: You authenticated successfully to http.+ as sadpanda but you are not authorized for this action/)
|
490
|
-
expect(stderr.string).to match(/Response: y u no administrator/)
|
491
|
-
end
|
492
|
-
|
493
|
-
context "when proxy servers are set" do
|
494
|
-
before do
|
495
|
-
ENV["http_proxy"] = "xyz"
|
496
|
-
end
|
497
|
-
|
498
|
-
after do
|
499
|
-
ENV.delete("http_proxy")
|
500
|
-
end
|
501
|
-
|
502
|
-
it "formats proxy errors nicely" do
|
503
|
-
response = Net::HTTPForbidden.new("1.1", "403", "Forbidden")
|
504
|
-
response.instance_variable_set(:@read, true)
|
505
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "y u no administrator"))
|
506
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPClientException.new("403 Forbidden", response))
|
507
|
-
allow(knife).to receive(:username).and_return("sadpanda")
|
508
|
-
knife.run_with_pretty_exceptions
|
509
|
-
expect(stderr.string).to match(/ERROR: You authenticated successfully to http.+ as sadpanda but you are not authorized for this action/)
|
510
|
-
expect(stderr.string).to match(/ERROR: There are proxy servers configured, your server url may need to be added to NO_PROXY./)
|
511
|
-
expect(stderr.string).to match(/Response: y u no administrator/)
|
512
|
-
end
|
513
|
-
end
|
514
|
-
|
515
|
-
it "formats 400s nicely" do
|
516
|
-
response = Net::HTTPBadRequest.new("1.1", "400", "Bad Request")
|
517
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
518
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "y u search wrong"))
|
519
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPClientException.new("400 Bad Request", response))
|
520
|
-
knife.run_with_pretty_exceptions
|
521
|
-
expect(stderr.string).to match(/ERROR: The data in your request was invalid/)
|
522
|
-
expect(stderr.string).to match(/Response: y u search wrong/)
|
523
|
-
end
|
524
|
-
|
525
|
-
it "formats 404s nicely" do
|
526
|
-
response = Net::HTTPNotFound.new("1.1", "404", "Not Found")
|
527
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
528
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "nothing to see here"))
|
529
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPClientException.new("404 Not Found", response))
|
530
|
-
knife.run_with_pretty_exceptions
|
531
|
-
expect(stderr.string).to match(/ERROR: The object you are looking for could not be found/)
|
532
|
-
expect(stderr.string).to match(/Response: nothing to see here/)
|
533
|
-
end
|
534
|
-
|
535
|
-
it "formats 406s (non-supported API version error) nicely" do
|
536
|
-
response = Net::HTTPNotAcceptable.new("1.1", "406", "Not Acceptable")
|
537
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
538
|
-
|
539
|
-
# set the header
|
540
|
-
response["x-ops-server-api-version"] = Chef::JSONCompat.to_json(min_version: "0", max_version: "1", request_version: "10000000")
|
541
|
-
|
542
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "sad trombone"))
|
543
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPClientException.new("406 Not Acceptable", response))
|
544
|
-
|
545
|
-
knife.run_with_pretty_exceptions
|
546
|
-
expect(stderr.string).to match(/The request that .* sent was using API version 10000000./)
|
547
|
-
expect(stderr.string).to match(/The server you sent the request to supports a min API version of 0 and a max API version of 1./)
|
548
|
-
expect(stderr.string).to match(/Please either update your .* or the server to be a compatible set./)
|
549
|
-
end
|
550
|
-
|
551
|
-
it "formats 500s nicely" do
|
552
|
-
response = Net::HTTPInternalServerError.new("1.1", "500", "Internal Server Error")
|
553
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
554
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "sad trombone"))
|
555
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPFatalError.new("500 Internal Server Error", response))
|
556
|
-
knife.run_with_pretty_exceptions
|
557
|
-
expect(stderr.string).to match(/ERROR: internal server error/)
|
558
|
-
expect(stderr.string).to match(/Response: sad trombone/)
|
559
|
-
end
|
560
|
-
|
561
|
-
it "formats 502s nicely" do
|
562
|
-
response = Net::HTTPBadGateway.new("1.1", "502", "Bad Gateway")
|
563
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
564
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "sadder trombone"))
|
565
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPFatalError.new("502 Bad Gateway", response))
|
566
|
-
knife.run_with_pretty_exceptions
|
567
|
-
expect(stderr.string).to match(/ERROR: bad gateway/)
|
568
|
-
expect(stderr.string).to match(/Response: sadder trombone/)
|
569
|
-
end
|
570
|
-
|
571
|
-
it "formats 503s nicely" do
|
572
|
-
response = Net::HTTPServiceUnavailable.new("1.1", "503", "Service Unavailable")
|
573
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
574
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "saddest trombone"))
|
575
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPFatalError.new("503 Service Unavailable", response))
|
576
|
-
knife.run_with_pretty_exceptions
|
577
|
-
expect(stderr.string).to match(/ERROR: Service temporarily unavailable/)
|
578
|
-
expect(stderr.string).to match(/Response: saddest trombone/)
|
579
|
-
end
|
580
|
-
|
581
|
-
it "formats other HTTP errors nicely" do
|
582
|
-
response = Net::HTTPPaymentRequired.new("1.1", "402", "Payment Required")
|
583
|
-
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
584
|
-
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(error: "nobugfixtillyoubuy"))
|
585
|
-
allow(knife).to receive(:run).and_raise(Net::HTTPClientException.new("402 Payment Required", response))
|
586
|
-
knife.run_with_pretty_exceptions
|
587
|
-
expect(stderr.string).to match(/ERROR: Payment Required/)
|
588
|
-
expect(stderr.string).to match(/Response: nobugfixtillyoubuy/)
|
589
|
-
end
|
590
|
-
|
591
|
-
it "formats NameError and NoMethodError nicely" do
|
592
|
-
allow(knife).to receive(:run).and_raise(NameError.new("Undefined constant FUUU"))
|
593
|
-
knife.run_with_pretty_exceptions
|
594
|
-
expect(stderr.string).to match(/ERROR: .* encountered an unexpected error/)
|
595
|
-
expect(stderr.string).to match(/This may be a bug in the 'knife' .* command or plugin/)
|
596
|
-
expect(stderr.string).to match(/Exception: NameError: Undefined constant FUUU/)
|
597
|
-
end
|
598
|
-
|
599
|
-
it "formats missing private key errors nicely" do
|
600
|
-
allow(knife).to receive(:run).and_raise(Chef::Exceptions::PrivateKeyMissing.new("key not there"))
|
601
|
-
allow(knife).to receive(:api_key).and_return("/home/root/.chef/no-key-here.pem")
|
602
|
-
knife.run_with_pretty_exceptions
|
603
|
-
expect(stderr.string).to match(%r{ERROR: Your private key could not be loaded from /home/root/.chef/no-key-here.pem})
|
604
|
-
expect(stderr.string).to match(/Check your configuration file and ensure that your private key is readable/)
|
605
|
-
end
|
606
|
-
|
607
|
-
it "formats connection refused errors nicely" do
|
608
|
-
allow(knife).to receive(:run).and_raise(Errno::ECONNREFUSED.new("y u no shut up"))
|
609
|
-
knife.run_with_pretty_exceptions
|
610
|
-
# Errno::ECONNREFUSED message differs by platform
|
611
|
-
# *nix = Errno::ECONNREFUSED: Connection refused
|
612
|
-
# win32: Errno::ECONNREFUSED: No connection could be made because the target machine actively refused it.
|
613
|
-
expect(stderr.string).to match(/ERROR: Network Error: .* - y u no shut up/)
|
614
|
-
expect(stderr.string).to match(/Check your .* configuration and network settings/)
|
615
|
-
end
|
616
|
-
|
617
|
-
it "formats SSL errors nicely and suggests to use `knife ssl check` and `knife ssl fetch`" do
|
618
|
-
error = OpenSSL::SSL::SSLError.new("SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed")
|
619
|
-
allow(knife).to receive(:run).and_raise(error)
|
620
|
-
|
621
|
-
knife.run_with_pretty_exceptions
|
622
|
-
|
623
|
-
expected_message = <<~MSG
|
624
|
-
ERROR: Could not establish a secure connection to the server.
|
625
|
-
Use `.* ssl check` to troubleshoot your SSL configuration.
|
626
|
-
If your server uses a self-signed certificate, you can use
|
627
|
-
`.* ssl fetch` to make .* trust the server's certificates.
|
628
|
-
MSG
|
629
|
-
expect(stderr.string).to match(expected_message)
|
630
|
-
end
|
631
|
-
|
632
|
-
end
|
633
|
-
|
634
|
-
end
|