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/lib/chef/knife/serve.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# License:: Apache License, Version 2.0
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
#
|
16
|
-
|
17
|
-
require_relative "../knife"
|
18
|
-
require_relative "../local_mode"
|
19
|
-
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
20
|
-
|
21
|
-
class Chef
|
22
|
-
class Knife
|
23
|
-
class Serve < Knife
|
24
|
-
|
25
|
-
banner "knife serve (options)"
|
26
|
-
|
27
|
-
option :repo_mode,
|
28
|
-
long: "--repo-mode MODE",
|
29
|
-
description: "Specifies the local repository layout. Values: static (only environments/roles/data_bags/cookbooks), everything (includes nodes/clients/users), hosted_everything (includes acls/groups/etc. for Enterprise/Hosted Chef). Default: everything/hosted_everything."
|
30
|
-
|
31
|
-
option :chef_repo_path,
|
32
|
-
long: "--chef-repo-path PATH",
|
33
|
-
description: "Overrides the location of #{ChefUtils::Dist::Infra::PRODUCT} repo. Default is specified by chef_repo_path in the config."
|
34
|
-
|
35
|
-
option :chef_zero_host,
|
36
|
-
long: "--chef-zero-host IP",
|
37
|
-
description: "Overrides the host upon which #{ChefUtils::Dist::Zero::PRODUCT} listens. Default is 127.0.0.1."
|
38
|
-
|
39
|
-
def configure_chef
|
40
|
-
super
|
41
|
-
Chef::Config.local_mode = true
|
42
|
-
Chef::Config[:repo_mode] = config[:repo_mode] if config[:repo_mode]
|
43
|
-
|
44
|
-
# --chef-repo-path forcibly overrides all other paths
|
45
|
-
if config[:chef_repo_path]
|
46
|
-
Chef::Config.chef_repo_path = config[:chef_repo_path]
|
47
|
-
%w{acl client cookbook container data_bag environment group node role user}.each do |variable_name|
|
48
|
-
Chef::Config.delete("#{variable_name}_path".to_sym)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def run
|
54
|
-
server = Chef::LocalMode.chef_zero_server
|
55
|
-
begin
|
56
|
-
output "Serving files from:\n#{Chef::LocalMode.chef_fs.fs_description}"
|
57
|
-
server.stop
|
58
|
-
server.start(stdout) # to print header
|
59
|
-
ensure
|
60
|
-
server.stop
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
data/lib/chef/knife/show.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# License:: Apache License, Version 2.0
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
#
|
16
|
-
|
17
|
-
require_relative "../chef_fs/knife"
|
18
|
-
|
19
|
-
class Chef
|
20
|
-
class Knife
|
21
|
-
class Show < Chef::ChefFS::Knife
|
22
|
-
banner "knife show [PATTERN1 ... PATTERNn] (options)"
|
23
|
-
|
24
|
-
category "path-based"
|
25
|
-
|
26
|
-
deps do
|
27
|
-
require_relative "../chef_fs/file_system"
|
28
|
-
require_relative "../chef_fs/file_system/exceptions"
|
29
|
-
end
|
30
|
-
|
31
|
-
option :local,
|
32
|
-
long: "--local",
|
33
|
-
boolean: true,
|
34
|
-
description: "Show local files instead of remote."
|
35
|
-
|
36
|
-
def run
|
37
|
-
# Get the matches (recursively)
|
38
|
-
error = false
|
39
|
-
entry_values = parallelize(pattern_args) do |pattern|
|
40
|
-
parallelize(Chef::ChefFS::FileSystem.list(config[:local] ? local_fs : chef_fs, pattern)) do |entry|
|
41
|
-
if entry.dir?
|
42
|
-
ui.error "#{format_path(entry)}: is a directory" if pattern.exact_path
|
43
|
-
error = true
|
44
|
-
nil
|
45
|
-
else
|
46
|
-
begin
|
47
|
-
[entry, entry.read]
|
48
|
-
rescue Chef::ChefFS::FileSystem::OperationNotAllowedError => e
|
49
|
-
ui.error "#{format_path(e.entry)}: #{e.reason}."
|
50
|
-
error = true
|
51
|
-
nil
|
52
|
-
rescue Chef::ChefFS::FileSystem::NotFoundError => e
|
53
|
-
ui.error "#{format_path(e.entry)}: No such file or directory"
|
54
|
-
error = true
|
55
|
-
nil
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end.flatten(1)
|
60
|
-
entry_values.each do |entry, value|
|
61
|
-
if entry
|
62
|
-
output "#{format_path(entry)}:"
|
63
|
-
output(format_for_display(value))
|
64
|
-
end
|
65
|
-
end
|
66
|
-
if error
|
67
|
-
exit 1
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/lib/chef/knife/ssh.rb
DELETED
@@ -1,645 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
3
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require_relative "../knife"
|
20
|
-
|
21
|
-
class Chef
|
22
|
-
class Knife
|
23
|
-
class Ssh < Knife
|
24
|
-
|
25
|
-
deps do
|
26
|
-
require_relative "../mixin/shell_out"
|
27
|
-
require "net/ssh" unless defined?(Net::SSH)
|
28
|
-
require "net/ssh/multi"
|
29
|
-
require "readline"
|
30
|
-
require_relative "../exceptions"
|
31
|
-
require_relative "../search/query"
|
32
|
-
require_relative "../util/path_helper"
|
33
|
-
|
34
|
-
include Chef::Mixin::ShellOut
|
35
|
-
end
|
36
|
-
|
37
|
-
attr_writer :password
|
38
|
-
|
39
|
-
banner "knife ssh QUERY COMMAND (options)"
|
40
|
-
|
41
|
-
option :concurrency,
|
42
|
-
short: "-C NUM",
|
43
|
-
long: "--concurrency NUM",
|
44
|
-
description: "The number of concurrent connections.",
|
45
|
-
default: nil,
|
46
|
-
proc: lambda { |o| o.to_i }
|
47
|
-
|
48
|
-
option :ssh_attribute,
|
49
|
-
short: "-a ATTR",
|
50
|
-
long: "--attribute ATTR",
|
51
|
-
description: "The attribute to use for opening the connection - default depends on the context."
|
52
|
-
|
53
|
-
option :manual,
|
54
|
-
short: "-m",
|
55
|
-
long: "--manual-list",
|
56
|
-
boolean: true,
|
57
|
-
description: "QUERY is a space separated list of servers.",
|
58
|
-
default: false
|
59
|
-
|
60
|
-
option :prefix_attribute,
|
61
|
-
long: "--prefix-attribute ATTR",
|
62
|
-
description: "The attribute to use for prefixing the output - default depends on the context."
|
63
|
-
|
64
|
-
option :ssh_user,
|
65
|
-
short: "-x USERNAME",
|
66
|
-
long: "--ssh-user USERNAME",
|
67
|
-
description: "The ssh username."
|
68
|
-
|
69
|
-
option :ssh_password,
|
70
|
-
short: "-P [PASSWORD]",
|
71
|
-
long: "--ssh-password [PASSWORD]",
|
72
|
-
description: "The ssh password - will prompt if flag is specified but no password is given.",
|
73
|
-
# default to a value that can not be a password (boolean)
|
74
|
-
# so we can effectively test if this parameter was specified
|
75
|
-
# without a value
|
76
|
-
default: false
|
77
|
-
|
78
|
-
option :ssh_port,
|
79
|
-
short: "-p PORT",
|
80
|
-
long: "--ssh-port PORT",
|
81
|
-
description: "The ssh port.",
|
82
|
-
proc: Proc.new { |key| key.strip }
|
83
|
-
|
84
|
-
option :ssh_timeout,
|
85
|
-
short: "-t SECONDS",
|
86
|
-
long: "--ssh-timeout SECONDS",
|
87
|
-
description: "The ssh connection timeout.",
|
88
|
-
proc: Proc.new { |key| key.strip.to_i },
|
89
|
-
default: 120
|
90
|
-
|
91
|
-
option :ssh_gateway,
|
92
|
-
short: "-G GATEWAY",
|
93
|
-
long: "--ssh-gateway GATEWAY",
|
94
|
-
description: "The ssh gateway.",
|
95
|
-
proc: Proc.new { |key| key.strip }
|
96
|
-
|
97
|
-
option :ssh_gateway_identity,
|
98
|
-
long: "--ssh-gateway-identity SSH_GATEWAY_IDENTITY",
|
99
|
-
description: "The SSH identity file used for gateway authentication."
|
100
|
-
|
101
|
-
option :forward_agent,
|
102
|
-
short: "-A",
|
103
|
-
long: "--forward-agent",
|
104
|
-
description: "Enable SSH agent forwarding.",
|
105
|
-
boolean: true
|
106
|
-
|
107
|
-
option :ssh_identity_file,
|
108
|
-
short: "-i IDENTITY_FILE",
|
109
|
-
long: "--ssh-identity-file IDENTITY_FILE",
|
110
|
-
description: "The SSH identity file used for authentication."
|
111
|
-
|
112
|
-
option :host_key_verify,
|
113
|
-
long: "--[no-]host-key-verify",
|
114
|
-
description: "Verify host key, enabled by default.",
|
115
|
-
boolean: true,
|
116
|
-
default: true
|
117
|
-
|
118
|
-
option :on_error,
|
119
|
-
short: "-e",
|
120
|
-
long: "--exit-on-error",
|
121
|
-
description: "Immediately exit if an error is encountered.",
|
122
|
-
boolean: true,
|
123
|
-
default: false
|
124
|
-
|
125
|
-
option :duplicated_fqdns,
|
126
|
-
long: "--duplicated-fqdns",
|
127
|
-
description: "Behavior if FQDNs are duplicated, ignored by default.",
|
128
|
-
proc: Proc.new { |key| key.strip.to_sym },
|
129
|
-
default: :ignore
|
130
|
-
|
131
|
-
option :tmux_split,
|
132
|
-
long: "--tmux-split",
|
133
|
-
description: "Split tmux window.",
|
134
|
-
boolean: true,
|
135
|
-
default: false
|
136
|
-
|
137
|
-
def session
|
138
|
-
ssh_error_handler = Proc.new do |server|
|
139
|
-
if config[:on_error]
|
140
|
-
# Net::SSH::Multi magic to force exception to be re-raised.
|
141
|
-
throw :go, :raise
|
142
|
-
else
|
143
|
-
ui.warn "Failed to connect to #{server.host} -- #{$!.class.name}: #{$!.message}"
|
144
|
-
$!.backtrace.each { |l| Chef::Log.debug(l) }
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
@session ||= Net::SSH::Multi.start(concurrent_connections: config[:concurrency], on_error: ssh_error_handler)
|
149
|
-
end
|
150
|
-
|
151
|
-
def configure_gateway
|
152
|
-
if config[:ssh_gateway]
|
153
|
-
gw_host, gw_user = config[:ssh_gateway].split("@").reverse
|
154
|
-
gw_host, gw_port = gw_host.split(":")
|
155
|
-
gw_opts = session_options(gw_host, gw_port, gw_user, gateway: true)
|
156
|
-
user = gw_opts.delete(:user)
|
157
|
-
|
158
|
-
begin
|
159
|
-
# Try to connect with a key.
|
160
|
-
session.via(gw_host, user, gw_opts)
|
161
|
-
rescue Net::SSH::AuthenticationFailed
|
162
|
-
prompt = "Enter the password for #{user}@#{gw_host}: "
|
163
|
-
gw_opts[:password] = prompt_for_password(prompt)
|
164
|
-
# Try again with a password.
|
165
|
-
session.via(gw_host, user, gw_opts)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
def configure_session
|
171
|
-
list = config[:manual] ? @name_args[0].split(" ") : search_nodes
|
172
|
-
if list.length == 0
|
173
|
-
if @search_count == 0
|
174
|
-
ui.fatal("No nodes returned from search")
|
175
|
-
else
|
176
|
-
ui.fatal("#{@search_count} #{@search_count > 1 ? "nodes" : "node"} found, " +
|
177
|
-
"but does not have the required attribute to establish the connection. " +
|
178
|
-
"Try setting another attribute to open the connection using --attribute.")
|
179
|
-
end
|
180
|
-
exit 10
|
181
|
-
end
|
182
|
-
if %i{warn fatal}.include?(config[:duplicated_fqdns])
|
183
|
-
fqdns = list.map { |v| v[0] }
|
184
|
-
if fqdns.count != fqdns.uniq.count
|
185
|
-
duplicated_fqdns = fqdns.uniq
|
186
|
-
ui.send(config[:duplicated_fqdns],
|
187
|
-
"SSH #{duplicated_fqdns.count > 1 ? "nodes are" : "node is"} " +
|
188
|
-
"duplicated: #{duplicated_fqdns.join(",")}")
|
189
|
-
exit 10 if config[:duplicated_fqdns] == :fatal
|
190
|
-
end
|
191
|
-
end
|
192
|
-
session_from_list(list)
|
193
|
-
end
|
194
|
-
|
195
|
-
def get_prefix_attribute(item)
|
196
|
-
# Order of precedence for prefix
|
197
|
-
# 1) config value (cli or knife config)
|
198
|
-
# 2) nil
|
199
|
-
msg = "Using node attribute '%s' as the prefix: %s"
|
200
|
-
if item["prefix"]
|
201
|
-
Chef::Log.debug(sprintf(msg, config[:prefix_attribute], item["prefix"]))
|
202
|
-
item["prefix"]
|
203
|
-
else
|
204
|
-
nil
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
def get_ssh_attribute(item)
|
209
|
-
# Order of precedence for ssh target
|
210
|
-
# 1) config value (cli or knife config)
|
211
|
-
# 2) cloud attribute
|
212
|
-
# 3) fqdn
|
213
|
-
msg = "Using node attribute '%s' as the ssh target: %s"
|
214
|
-
if item["target"]
|
215
|
-
Chef::Log.debug(sprintf(msg, config[:ssh_attribute], item["target"]))
|
216
|
-
item["target"]
|
217
|
-
elsif !item.dig("cloud", "public_hostname").to_s.empty?
|
218
|
-
Chef::Log.debug(sprintf(msg, "cloud.public_hostname", item["cloud"]["public_hostname"]))
|
219
|
-
item["cloud"]["public_hostname"]
|
220
|
-
else
|
221
|
-
Chef::Log.debug(sprintf(msg, "fqdn", item["fqdn"]))
|
222
|
-
item["fqdn"]
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
def search_nodes
|
227
|
-
list = []
|
228
|
-
query = Chef::Search::Query.new
|
229
|
-
required_attributes = { fqdn: ["fqdn"], cloud: ["cloud"] }
|
230
|
-
|
231
|
-
separator = ui.presenter.attribute_field_separator
|
232
|
-
|
233
|
-
if config[:prefix_attribute]
|
234
|
-
required_attributes[:prefix] = config[:prefix_attribute].split(separator)
|
235
|
-
end
|
236
|
-
|
237
|
-
if config[:ssh_attribute]
|
238
|
-
required_attributes[:target] = config[:ssh_attribute].split(separator)
|
239
|
-
end
|
240
|
-
|
241
|
-
@search_count = 0
|
242
|
-
query.search(:node, @name_args[0], filter_result: required_attributes, fuzz: true) do |item|
|
243
|
-
@search_count += 1
|
244
|
-
# we should skip the loop to next iteration if the item
|
245
|
-
# returned by the search is nil
|
246
|
-
next if item.nil?
|
247
|
-
|
248
|
-
# next if we couldn't find the specified attribute in the
|
249
|
-
# returned node object
|
250
|
-
host = get_ssh_attribute(item)
|
251
|
-
next if host.nil?
|
252
|
-
|
253
|
-
prefix = get_prefix_attribute(item)
|
254
|
-
ssh_port = item.dig("cloud", "public_ssh_port")
|
255
|
-
srv = [host, ssh_port, prefix]
|
256
|
-
list.push(srv)
|
257
|
-
end
|
258
|
-
|
259
|
-
list
|
260
|
-
end
|
261
|
-
|
262
|
-
# Net::SSH session options hash for global options. These should be
|
263
|
-
# options that will apply to the gateway connection in addition to the
|
264
|
-
# main one.
|
265
|
-
#
|
266
|
-
# @since 12.5.0
|
267
|
-
# @param host [String] Hostname for this session.
|
268
|
-
# @param port [String] SSH port for this session.
|
269
|
-
# @param user [String] Optional username for this session.
|
270
|
-
# @param gateway [Boolean] Flag: host or gateway key
|
271
|
-
# @return [Hash<Symbol, Object>]
|
272
|
-
def session_options(host, port, user = nil, gateway: false)
|
273
|
-
ssh_config = Net::SSH.configuration_for(host, true)
|
274
|
-
{}.tap do |opts|
|
275
|
-
opts[:user] = user || config[:ssh_user] || ssh_config[:user]
|
276
|
-
if !gateway && config[:ssh_identity_file]
|
277
|
-
opts[:keys] = File.expand_path(config[:ssh_identity_file])
|
278
|
-
opts[:keys_only] = true
|
279
|
-
elsif gateway && config[:ssh_gateway_identity]
|
280
|
-
opts[:keys] = File.expand_path(config[:ssh_gateway_identity])
|
281
|
-
opts[:keys_only] = true
|
282
|
-
elsif config[:ssh_password]
|
283
|
-
opts[:password] = config[:ssh_password]
|
284
|
-
end
|
285
|
-
# Don't set the keys to nil if we don't have them.
|
286
|
-
forward_agent = config[:forward_agent] || ssh_config[:forward_agent]
|
287
|
-
opts[:forward_agent] = forward_agent unless forward_agent.nil?
|
288
|
-
port ||= ssh_config[:port]
|
289
|
-
opts[:port] = port unless port.nil?
|
290
|
-
opts[:logger] = Chef::Log.with_child(subsystem: "net/ssh") if Chef::Log.level == :trace
|
291
|
-
unless config[:host_key_verify]
|
292
|
-
opts[:verify_host_key] = :never
|
293
|
-
opts[:user_known_hosts_file] = "/dev/null"
|
294
|
-
end
|
295
|
-
if ssh_config[:keepalive]
|
296
|
-
opts[:keepalive] = true
|
297
|
-
opts[:keepalive_interval] = ssh_config[:keepalive_interval]
|
298
|
-
end
|
299
|
-
# maintain support for legacy key types / ciphers / key exchange algorithms.
|
300
|
-
# most importantly this adds back support for DSS host keys
|
301
|
-
# See https://github.com/net-ssh/net-ssh/pull/709
|
302
|
-
opts[:append_all_supported_algorithms] = true
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
def session_from_list(list)
|
307
|
-
list.each do |item|
|
308
|
-
host, ssh_port, prefix = item
|
309
|
-
prefix = host unless prefix
|
310
|
-
Chef::Log.debug("Adding #{host}")
|
311
|
-
session_opts = session_options(host, ssh_port, gateway: false)
|
312
|
-
# Handle port overrides for the main connection.
|
313
|
-
session_opts[:port] = config[:ssh_port] if config[:ssh_port]
|
314
|
-
# Handle connection timeout
|
315
|
-
session_opts[:timeout] = config[:ssh_timeout] if config[:ssh_timeout]
|
316
|
-
# Handle session prefix
|
317
|
-
session_opts[:properties] = { prefix: prefix }
|
318
|
-
# Create the hostspec.
|
319
|
-
hostspec = session_opts[:user] ? "#{session_opts.delete(:user)}@#{host}" : host
|
320
|
-
# Connect a new session on the multi.
|
321
|
-
session.use(hostspec, session_opts)
|
322
|
-
|
323
|
-
@longest = prefix.length if prefix.length > @longest
|
324
|
-
end
|
325
|
-
|
326
|
-
session
|
327
|
-
end
|
328
|
-
|
329
|
-
def fixup_sudo(command)
|
330
|
-
command.sub(/^sudo/, "sudo -p 'knife sudo password: '")
|
331
|
-
end
|
332
|
-
|
333
|
-
def print_data(host, data)
|
334
|
-
@buffers ||= {}
|
335
|
-
if leftover = @buffers[host]
|
336
|
-
@buffers[host] = nil
|
337
|
-
print_data(host, leftover + data)
|
338
|
-
else
|
339
|
-
if newline_index = data.index("\n")
|
340
|
-
line = data.slice!(0...newline_index)
|
341
|
-
data.slice!(0)
|
342
|
-
print_line(host, line)
|
343
|
-
print_data(host, data)
|
344
|
-
else
|
345
|
-
@buffers[host] = data
|
346
|
-
end
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
|
-
def print_line(host, data)
|
351
|
-
padding = @longest - host.length
|
352
|
-
str = ui.color(host, :cyan) + (" " * (padding + 1)) + data
|
353
|
-
ui.msg(str)
|
354
|
-
end
|
355
|
-
|
356
|
-
def ssh_command(command, subsession = nil)
|
357
|
-
exit_status = 0
|
358
|
-
subsession ||= session
|
359
|
-
command = fixup_sudo(command)
|
360
|
-
command.force_encoding("binary") if command.respond_to?(:force_encoding)
|
361
|
-
begin
|
362
|
-
open_session(subsession, command)
|
363
|
-
rescue => e
|
364
|
-
open_session(subsession, command, true)
|
365
|
-
end
|
366
|
-
end
|
367
|
-
|
368
|
-
def open_session(subsession, command, pty = false)
|
369
|
-
stderr = ""
|
370
|
-
exit_status = 0
|
371
|
-
subsession.open_channel do |chan|
|
372
|
-
if config[:on_error] && exit_status != 0
|
373
|
-
chan.close
|
374
|
-
else
|
375
|
-
chan.request_pty if pty
|
376
|
-
chan.exec command do |ch, success|
|
377
|
-
raise ArgumentError, "Cannot execute #{command}" unless success
|
378
|
-
|
379
|
-
ch.on_data do |ichannel, data|
|
380
|
-
print_data(ichannel.connection[:prefix], data)
|
381
|
-
if /^knife sudo password: /.match?(data)
|
382
|
-
print_data(ichannel.connection[:prefix], "\n")
|
383
|
-
ichannel.send_data("#{get_password}\n")
|
384
|
-
end
|
385
|
-
end
|
386
|
-
|
387
|
-
ch.on_extended_data do |_, _type, data|
|
388
|
-
raise ArgumentError if data.eql?("sudo: no tty present and no askpass program specified\n")
|
389
|
-
|
390
|
-
stderr += data
|
391
|
-
end
|
392
|
-
|
393
|
-
ch.on_request "exit-status" do |ichannel, data|
|
394
|
-
exit_status = [exit_status, data.read_long].max
|
395
|
-
end
|
396
|
-
end
|
397
|
-
end
|
398
|
-
end
|
399
|
-
session.loop
|
400
|
-
exit_status
|
401
|
-
end
|
402
|
-
|
403
|
-
def get_password
|
404
|
-
@password ||= prompt_for_password
|
405
|
-
end
|
406
|
-
|
407
|
-
def prompt_for_password(prompt = "Enter your password: ")
|
408
|
-
ui.ask(prompt, echo: false)
|
409
|
-
end
|
410
|
-
|
411
|
-
# Present the prompt and read a single line from the console. It also
|
412
|
-
# detects ^D and returns "exit" in that case. Adds the input to the
|
413
|
-
# history, unless the input is empty. Loops repeatedly until a non-empty
|
414
|
-
# line is input.
|
415
|
-
def read_line
|
416
|
-
loop do
|
417
|
-
command = reader.readline("#{ui.color("knife-ssh>", :bold)} ", true)
|
418
|
-
|
419
|
-
if command.nil?
|
420
|
-
command = "exit"
|
421
|
-
puts(command)
|
422
|
-
else
|
423
|
-
command.strip!
|
424
|
-
end
|
425
|
-
|
426
|
-
unless command.empty?
|
427
|
-
return command
|
428
|
-
end
|
429
|
-
end
|
430
|
-
end
|
431
|
-
|
432
|
-
def reader
|
433
|
-
Readline
|
434
|
-
end
|
435
|
-
|
436
|
-
def interactive
|
437
|
-
puts "Connected to #{ui.list(session.servers_for.collect { |s| ui.color(s.host, :cyan) }, :inline, " and ")}"
|
438
|
-
puts
|
439
|
-
puts "To run a command on a list of servers, do:"
|
440
|
-
puts " on SERVER1 SERVER2 SERVER3; COMMAND"
|
441
|
-
puts " Example: on latte foamy; echo foobar"
|
442
|
-
puts
|
443
|
-
puts "To exit interactive mode, use 'quit!'"
|
444
|
-
puts
|
445
|
-
loop do
|
446
|
-
command = read_line
|
447
|
-
case command
|
448
|
-
when "quit!"
|
449
|
-
puts "Bye!"
|
450
|
-
break
|
451
|
-
when /^on (.+?); (.+)$/
|
452
|
-
raw_list = $1.split(" ")
|
453
|
-
server_list = []
|
454
|
-
session.servers.each do |session_server|
|
455
|
-
server_list << session_server if raw_list.include?(session_server.host)
|
456
|
-
end
|
457
|
-
command = $2
|
458
|
-
ssh_command(command, session.on(*server_list))
|
459
|
-
else
|
460
|
-
ssh_command(command)
|
461
|
-
end
|
462
|
-
end
|
463
|
-
end
|
464
|
-
|
465
|
-
def screen
|
466
|
-
tf = Tempfile.new("knife-ssh-screen")
|
467
|
-
Chef::Util::PathHelper.home(".screenrc") do |screenrc_path|
|
468
|
-
if File.exist? screenrc_path
|
469
|
-
tf.puts("source #{screenrc_path}")
|
470
|
-
end
|
471
|
-
end
|
472
|
-
tf.puts("caption always '%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<'")
|
473
|
-
tf.puts("hardstatus alwayslastline 'knife ssh #{@name_args[0]}'")
|
474
|
-
window = 0
|
475
|
-
session.servers_for.each do |server|
|
476
|
-
tf.print("screen -t \"#{server.host}\" #{window} ssh ")
|
477
|
-
tf.print("-i #{config[:ssh_identity_file]} ") if config[:ssh_identity_file]
|
478
|
-
server.user ? tf.puts("#{server.user}@#{server.host}") : tf.puts(server.host)
|
479
|
-
window += 1
|
480
|
-
end
|
481
|
-
tf.close
|
482
|
-
exec("screen -c #{tf.path}")
|
483
|
-
end
|
484
|
-
|
485
|
-
def tmux
|
486
|
-
ssh_dest = lambda do |server|
|
487
|
-
identity = "-i #{config[:ssh_identity_file]} " if config[:ssh_identity_file]
|
488
|
-
prefix = server.user ? "#{server.user}@" : ""
|
489
|
-
"'ssh #{identity}#{prefix}#{server.host}'"
|
490
|
-
end
|
491
|
-
|
492
|
-
new_window_cmds = lambda do
|
493
|
-
if session.servers_for.size > 1
|
494
|
-
[""] + session.servers_for[1..].map do |server|
|
495
|
-
if config[:tmux_split]
|
496
|
-
"split-window #{ssh_dest.call(server)}; tmux select-layout tiled"
|
497
|
-
else
|
498
|
-
"new-window -a -n '#{server.host}' #{ssh_dest.call(server)}"
|
499
|
-
end
|
500
|
-
end
|
501
|
-
else
|
502
|
-
[]
|
503
|
-
end.join(" \\; ")
|
504
|
-
end
|
505
|
-
|
506
|
-
tmux_name = "'knife ssh #{@name_args[0].tr(":.", "=-")}'"
|
507
|
-
begin
|
508
|
-
server = session.servers_for.first
|
509
|
-
cmd = ["tmux new-session -d -s #{tmux_name}",
|
510
|
-
"-n '#{server.host}'", ssh_dest.call(server),
|
511
|
-
new_window_cmds.call].join(" ")
|
512
|
-
shell_out!(cmd)
|
513
|
-
exec("tmux attach-session -t #{tmux_name}")
|
514
|
-
rescue Chef::Exceptions::Exec
|
515
|
-
end
|
516
|
-
end
|
517
|
-
|
518
|
-
def macterm
|
519
|
-
begin
|
520
|
-
require "appscript" unless defined?(Appscript)
|
521
|
-
rescue LoadError
|
522
|
-
STDERR.puts "You need the rb-appscript gem to use knife ssh macterm. `(sudo) gem install rb-appscript` to install"
|
523
|
-
raise
|
524
|
-
end
|
525
|
-
|
526
|
-
Appscript.app("/Applications/Utilities/Terminal.app").windows.first.activate
|
527
|
-
Appscript.app("System Events").application_processes["Terminal.app"].keystroke("n", using: :command_down)
|
528
|
-
term = Appscript.app("Terminal")
|
529
|
-
window = term.windows.first.get
|
530
|
-
|
531
|
-
(session.servers_for.size - 1).times do |i|
|
532
|
-
window.activate
|
533
|
-
Appscript.app("System Events").application_processes["Terminal.app"].keystroke("t", using: :command_down)
|
534
|
-
end
|
535
|
-
|
536
|
-
session.servers_for.each_with_index do |server, tab_number|
|
537
|
-
cmd = "unset PROMPT_COMMAND; echo -e \"\\033]0;#{server.host}\\007\"; ssh #{server.user ? "#{server.user}@#{server.host}" : server.host}"
|
538
|
-
Appscript.app("Terminal").do_script(cmd, in: window.tabs[tab_number + 1].get)
|
539
|
-
end
|
540
|
-
end
|
541
|
-
|
542
|
-
def cssh
|
543
|
-
cssh_cmd = nil
|
544
|
-
%w{csshX cssh}.each do |cmd|
|
545
|
-
|
546
|
-
# Unix and Mac only
|
547
|
-
cssh_cmd = shell_out!("which #{cmd}").stdout.strip
|
548
|
-
break
|
549
|
-
rescue Mixlib::ShellOut::ShellCommandFailed
|
550
|
-
|
551
|
-
end
|
552
|
-
raise Chef::Exceptions::Exec, "no command found for cssh" unless cssh_cmd
|
553
|
-
|
554
|
-
# pass in the consolidated identity file option to cssh(X)
|
555
|
-
if config[:ssh_identity_file]
|
556
|
-
cssh_cmd << " --ssh_args '-i #{File.expand_path(config[:ssh_identity_file])}'"
|
557
|
-
end
|
558
|
-
|
559
|
-
session.servers_for.each do |server|
|
560
|
-
cssh_cmd << " #{server.user ? "#{server.user}@#{server.host}" : server.host}"
|
561
|
-
end
|
562
|
-
Chef::Log.debug("Starting cssh session with command: #{cssh_cmd}")
|
563
|
-
exec(cssh_cmd)
|
564
|
-
end
|
565
|
-
|
566
|
-
def get_stripped_unfrozen_value(value)
|
567
|
-
return nil unless value
|
568
|
-
|
569
|
-
value.strip
|
570
|
-
end
|
571
|
-
|
572
|
-
def configure_user
|
573
|
-
config[:ssh_user] = get_stripped_unfrozen_value(config[:ssh_user] ||
|
574
|
-
Chef::Config[:knife][:ssh_user])
|
575
|
-
end
|
576
|
-
|
577
|
-
def configure_password
|
578
|
-
if config.key?(:ssh_password) && config[:ssh_password].nil?
|
579
|
-
# if we have an actual nil that means someone called "--ssh-password" with no value, so we prompt for a password
|
580
|
-
config[:ssh_password] = get_password
|
581
|
-
else
|
582
|
-
# the false default of ssh_password results in a nil here
|
583
|
-
config[:ssh_password] = get_stripped_unfrozen_value(config[:ssh_password])
|
584
|
-
end
|
585
|
-
end
|
586
|
-
|
587
|
-
def configure_ssh_identity_file
|
588
|
-
config[:ssh_identity_file] = get_stripped_unfrozen_value(config[:ssh_identity_file])
|
589
|
-
end
|
590
|
-
|
591
|
-
def configure_ssh_gateway_identity
|
592
|
-
config[:ssh_gateway_identity] = get_stripped_unfrozen_value(config[:ssh_gateway_identity])
|
593
|
-
end
|
594
|
-
|
595
|
-
def run
|
596
|
-
@longest = 0
|
597
|
-
|
598
|
-
if @name_args.length < 1
|
599
|
-
show_usage
|
600
|
-
ui.fatal("You must specify the SEARCH QUERY.")
|
601
|
-
exit(1)
|
602
|
-
end
|
603
|
-
|
604
|
-
configure_user
|
605
|
-
configure_password
|
606
|
-
@password = config[:ssh_password] if config[:ssh_password]
|
607
|
-
|
608
|
-
# If a password was not given, check for SSH identity file.
|
609
|
-
unless @password
|
610
|
-
configure_ssh_identity_file
|
611
|
-
configure_ssh_gateway_identity
|
612
|
-
end
|
613
|
-
|
614
|
-
configure_gateway
|
615
|
-
configure_session
|
616
|
-
|
617
|
-
exit_status =
|
618
|
-
case @name_args[1]
|
619
|
-
when "interactive"
|
620
|
-
interactive
|
621
|
-
when "screen"
|
622
|
-
screen
|
623
|
-
when "tmux"
|
624
|
-
tmux
|
625
|
-
when "macterm"
|
626
|
-
macterm
|
627
|
-
when "cssh"
|
628
|
-
cssh
|
629
|
-
else
|
630
|
-
ssh_command(@name_args[1..].join(" "))
|
631
|
-
end
|
632
|
-
|
633
|
-
session.close
|
634
|
-
if exit_status && exit_status != 0
|
635
|
-
exit exit_status
|
636
|
-
else
|
637
|
-
exit_status
|
638
|
-
end
|
639
|
-
end
|
640
|
-
|
641
|
-
private :search_nodes
|
642
|
-
|
643
|
-
end
|
644
|
-
end
|
645
|
-
end
|