chef 12.18.31 → 13.0.118
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 +15 -11
- data/README.md +13 -13
- data/Rakefile +1 -19
- data/VERSION +1 -1
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
- data/acceptance/Gemfile +8 -5
- data/acceptance/Gemfile.lock +90 -81
- data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
- data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
- data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
- data/chef-universal-mingw32.gemspec +2 -3
- data/chef.gemspec +8 -7
- data/lib/chef/api_client.rb +8 -15
- data/lib/chef/api_client_v1.rb +9 -11
- data/lib/chef/application/apply.rb +8 -10
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/exit_code.rb +11 -82
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +0 -1
- data/lib/chef/application/windows_service.rb +36 -37
- data/lib/chef/application/windows_service_manager.rb +1 -1
- data/lib/chef/application.rb +15 -25
- data/lib/chef/audit/audit_event_proxy.rb +2 -2
- data/lib/chef/audit/control_group_data.rb +1 -1
- data/lib/chef/blacklist.rb +81 -0
- data/lib/chef/chef_class.rb +1 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
- data/lib/chef/chef_fs/command_line.rb +15 -16
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
- data/lib/chef/chef_fs/file_pattern.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
- data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
- data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
- data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
- data/lib/chef/chef_fs/file_system.rb +1 -1
- data/lib/chef/chef_fs/parallelizer.rb +9 -11
- data/lib/chef/client.rb +47 -11
- data/lib/chef/config_fetcher.rb +4 -4
- data/lib/chef/constants.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
- data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
- data/lib/chef/cookbook/gem_installer.rb +10 -6
- data/lib/chef/cookbook/manifest_v0.rb +68 -0
- data/lib/chef/cookbook/manifest_v2.rb +41 -0
- data/lib/chef/cookbook/metadata.rb +25 -134
- data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
- data/lib/chef/cookbook/synchronizer.rb +24 -21
- data/lib/chef/cookbook/syntax_check.rb +1 -1
- data/lib/chef/cookbook_manifest.rb +91 -65
- data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +69 -157
- data/lib/chef/data_bag.rb +1 -7
- data/lib/chef/data_bag_item.rb +5 -10
- data/lib/chef/data_collector/messages.rb +2 -0
- data/lib/chef/data_collector/resource_report.rb +32 -4
- data/lib/chef/data_collector.rb +3 -4
- data/lib/chef/decorator/unchain.rb +0 -16
- data/lib/chef/decorator.rb +1 -1
- data/lib/chef/deprecated.rb +53 -19
- data/lib/chef/dsl/audit.rb +2 -2
- data/lib/chef/dsl/declare_resource.rb +11 -17
- data/lib/chef/dsl/platform_introspection.rb +29 -31
- data/lib/chef/dsl/reboot_pending.rb +1 -1
- data/lib/chef/dsl/recipe.rb +1 -4
- data/lib/chef/dsl/resources.rb +4 -13
- data/lib/chef/encrypted_data_bag_item.rb +2 -2
- data/lib/chef/environment.rb +9 -16
- data/lib/chef/event_dispatch/base.rb +16 -0
- data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
- data/lib/chef/exceptions.rb +6 -10
- data/lib/chef/file_access_control/unix.rb +14 -14
- data/lib/chef/file_access_control/windows.rb +1 -1
- data/lib/chef/formatters/error_description.rb +18 -1
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
- data/lib/chef/formatters/error_mapper.rb +6 -6
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
- data/lib/chef/http/api_versions.rb +54 -0
- data/lib/chef/http/authenticator.rb +15 -6
- data/lib/chef/http/json_output.rb +4 -1
- data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
- data/lib/chef/http/validate_content_length.rb +2 -2
- data/lib/chef/http.rb +39 -0
- data/lib/chef/json_compat.rb +7 -103
- data/lib/chef/key.rb +5 -10
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
- data/lib/chef/knife/bootstrap.rb +6 -0
- data/lib/chef/knife/configure.rb +1 -3
- data/lib/chef/knife/configure_client.rb +1 -3
- data/lib/chef/knife/cookbook_create.rb +1 -434
- data/lib/chef/knife/cookbook_download.rb +3 -4
- data/lib/chef/knife/cookbook_show.rb +7 -3
- data/lib/chef/knife/cookbook_site_install.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +8 -7
- data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/status_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +2 -32
- data/lib/chef/knife/core/ui.rb +20 -27
- data/lib/chef/knife/data_bag_create.rb +6 -4
- data/lib/chef/knife/data_bag_secret_options.rb +1 -1
- data/lib/chef/knife/deps.rb +32 -34
- data/lib/chef/knife/edit.rb +1 -1
- data/lib/chef/knife/help.rb +1 -1
- data/lib/chef/knife/list.rb +1 -1
- data/lib/chef/knife/search.rb +9 -20
- data/lib/chef/knife/ssh.rb +62 -36
- data/lib/chef/knife/ssl_check.rb +1 -1
- data/lib/chef/knife/user_delete.rb +1 -1
- data/lib/chef/knife/xargs.rb +1 -1
- data/lib/chef/knife.rb +6 -7
- data/lib/chef/mash.rb +1 -1
- data/lib/chef/mixin/create_path.rb +3 -5
- data/lib/chef/mixin/from_file.rb +2 -2
- data/lib/chef/mixin/get_source_from_package.rb +2 -2
- data/lib/chef/mixin/notifying_block.rb +7 -9
- data/lib/chef/mixin/params_validate.rb +9 -8
- data/lib/chef/mixin/path_sanity.rb +17 -19
- data/lib/chef/mixin/securable.rb +1 -1
- data/lib/chef/mixin/shell_out.rb +33 -29
- data/lib/chef/mixin/unformatter.rb +2 -2
- data/lib/chef/mixin/uris.rb +4 -6
- data/lib/chef/mixin/versioned_api.rb +84 -0
- data/lib/chef/mixin/which.rb +25 -8
- data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
- data/lib/chef/mixin/xml_escape.rb +3 -5
- data/lib/chef/mixins.rb +0 -1
- data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
- data/lib/chef/node/attribute.rb +9 -32
- data/lib/chef/node/attribute_collections.rb +1 -19
- data/lib/chef/node/common_api.rb +5 -7
- data/lib/chef/node/immutable_collections.rb +42 -38
- data/lib/chef/node/mixin/immutablize_array.rb +1 -1
- data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
- data/lib/chef/node.rb +21 -20
- data/lib/chef/node_map.rb +2 -5
- data/lib/chef/org.rb +10 -17
- data/lib/chef/platform/provider_mapping.rb +2 -169
- data/lib/chef/platform/query_helpers.rb +1 -1
- data/lib/chef/platform/rebooter.rb +1 -2
- data/lib/chef/policy_builder/expand_node_object.rb +3 -29
- data/lib/chef/policy_builder/policyfile.rb +8 -6
- data/lib/chef/property.rb +66 -80
- data/lib/chef/provider/apt_repository.rb +6 -10
- data/lib/chef/provider/apt_update.rb +1 -7
- data/lib/chef/provider/batch.rb +1 -1
- data/lib/chef/provider/breakpoint.rb +2 -2
- data/lib/chef/provider/cookbook_file.rb +3 -9
- data/lib/chef/provider/cron.rb +42 -60
- data/lib/chef/provider/deploy/revision.rb +3 -5
- data/lib/chef/provider/deploy.rb +82 -88
- data/lib/chef/provider/directory.rb +33 -37
- data/lib/chef/provider/dsc_resource.rb +23 -11
- data/lib/chef/provider/dsc_script.rb +1 -5
- data/lib/chef/provider/env/windows.rb +5 -1
- data/lib/chef/provider/env.rb +32 -30
- data/lib/chef/provider/erl_call.rb +15 -47
- data/lib/chef/provider/execute.rb +7 -8
- data/lib/chef/provider/file.rb +49 -61
- data/lib/chef/provider/git.rb +56 -60
- data/lib/chef/provider/group.rb +1 -7
- data/lib/chef/provider/http_request.rb +37 -41
- data/lib/chef/provider/ifconfig/redhat.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +0 -6
- data/lib/chef/provider/launchd.rb +6 -2
- data/lib/chef/provider/link.rb +51 -55
- data/lib/chef/provider/log.rb +3 -7
- data/lib/chef/provider/lwrp_base.rb +0 -9
- data/lib/chef/provider/mdadm.rb +25 -33
- data/lib/chef/provider/mount/aix.rb +2 -2
- data/lib/chef/provider/mount/mount.rb +2 -2
- data/lib/chef/provider/mount.rb +1 -5
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/ohai.rb +1 -7
- data/lib/chef/provider/osx_profile.rb +24 -29
- data/lib/chef/provider/package/aix.rb +55 -53
- data/lib/chef/provider/package/apt.rb +15 -13
- data/lib/chef/provider/package/cab.rb +48 -20
- data/lib/chef/provider/package/chocolatey.rb +9 -10
- data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
- data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
- data/lib/chef/provider/package/dnf/version.rb +1 -1
- data/lib/chef/provider/package/dnf.rb +21 -19
- data/lib/chef/provider/package/dpkg.rb +8 -9
- data/lib/chef/provider/package/freebsd/base.rb +10 -10
- data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
- data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
- data/lib/chef/provider/package/freebsd/port.rb +7 -7
- data/lib/chef/provider/package/homebrew.rb +11 -10
- data/lib/chef/provider/package/ips.rb +18 -24
- data/lib/chef/provider/package/macports.rb +23 -23
- data/lib/chef/provider/package/msu.rb +11 -12
- data/lib/chef/provider/package/openbsd.rb +25 -22
- data/lib/chef/provider/package/pacman.rb +16 -17
- data/lib/chef/provider/package/paludis.rb +26 -27
- data/lib/chef/provider/package/portage.rb +22 -23
- data/lib/chef/provider/package/powershell.rb +17 -17
- data/lib/chef/provider/package/rpm.rb +25 -26
- data/lib/chef/provider/package/rubygems.rb +64 -62
- data/lib/chef/provider/package/smartos.rb +16 -16
- data/lib/chef/provider/package/solaris.rb +44 -45
- data/lib/chef/provider/package/windows/exe.rb +6 -6
- data/lib/chef/provider/package/windows/msi.rb +7 -7
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
- data/lib/chef/provider/package/windows.rb +3 -3
- data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
- data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
- data/lib/chef/provider/package/yum.rb +319 -269
- data/lib/chef/provider/package/zypper.rb +10 -20
- data/lib/chef/provider/package.rb +71 -63
- data/lib/chef/provider/powershell_script.rb +15 -7
- data/lib/chef/provider/reboot.rb +10 -14
- data/lib/chef/provider/registry_key.rb +39 -43
- data/lib/chef/provider/remote_directory.rb +3 -15
- data/lib/chef/provider/remote_file.rb +3 -9
- data/lib/chef/provider/route.rb +1 -7
- data/lib/chef/provider/ruby_block.rb +4 -8
- data/lib/chef/provider/script.rb +42 -6
- data/lib/chef/provider/service/aix.rb +1 -5
- data/lib/chef/provider/service/debian.rb +15 -21
- data/lib/chef/provider/service/freebsd.rb +0 -1
- data/lib/chef/provider/service/gentoo.rb +0 -1
- data/lib/chef/provider/service/init.rb +0 -1
- data/lib/chef/provider/service/insserv.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +0 -1
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/service/simple.rb +0 -5
- data/lib/chef/provider/service/solaris.rb +5 -4
- data/lib/chef/provider/service/systemd.rb +1 -1
- data/lib/chef/provider/service/upstart.rb +10 -12
- data/lib/chef/provider/service/windows.rb +1 -5
- data/lib/chef/provider/service.rb +51 -58
- data/lib/chef/provider/subversion.rb +40 -46
- data/lib/chef/provider/systemd_unit.rb +2 -0
- data/lib/chef/provider/template/content.rb +24 -1
- data/lib/chef/provider/template.rb +3 -9
- data/lib/chef/provider/user/dscl.rb +3 -3
- data/lib/chef/provider/user/linux.rb +6 -5
- data/lib/chef/provider/user/pw.rb +4 -10
- data/lib/chef/provider/user/solaris.rb +2 -2
- data/lib/chef/provider/user/useradd.rb +5 -5
- data/lib/chef/provider/user.rb +43 -59
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
- data/lib/chef/provider/windows_task.rb +418 -0
- data/lib/chef/provider/yum_repository.rb +3 -6
- data/lib/chef/provider.rb +63 -115
- data/lib/chef/provider_resolver.rb +8 -34
- data/lib/chef/providers.rb +1 -1
- data/lib/chef/recipe.rb +9 -1
- data/lib/chef/resource/action_class.rb +13 -17
- data/lib/chef/resource/apt_repository.rb +0 -1
- data/lib/chef/resource/apt_update.rb +3 -1
- data/lib/chef/resource/chef_gem.rb +4 -11
- data/lib/chef/resource/chocolatey_package.rb +4 -1
- data/lib/chef/resource/dnf_package.rb +6 -3
- data/lib/chef/resource/dsc_resource.rb +9 -1
- data/lib/chef/resource/execute.rb +66 -19
- data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
- data/lib/chef/resource/file/verification.rb +2 -7
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +16 -2
- data/lib/chef/resource/launchd.rb +3 -3
- data/lib/chef/resource/lwrp_base.rb +0 -2
- data/lib/chef/resource/mount.rb +5 -12
- data/lib/chef/resource/package.rb +2 -2
- data/lib/chef/resource/powershell_script.rb +1 -1
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/script.rb +8 -34
- data/lib/chef/resource/service.rb +15 -13
- data/lib/chef/resource/systemd_unit.rb +5 -0
- data/lib/chef/resource/user/aix_user.rb +1 -1
- data/lib/chef/resource/user/dscl_user.rb +1 -1
- data/lib/chef/resource/user/linux_user.rb +1 -10
- data/lib/chef/resource/user/pw_user.rb +1 -1
- data/lib/chef/resource/user/solaris_user.rb +1 -1
- data/lib/chef/resource/user/windows_user.rb +1 -1
- data/lib/chef/resource/user.rb +1 -19
- data/lib/chef/resource/windows_package.rb +4 -1
- data/lib/chef/resource/windows_task.rb +237 -0
- data/lib/chef/resource/yum_package.rb +13 -4
- data/lib/chef/resource/yum_repository.rb +0 -1
- data/lib/chef/resource/zypper_package.rb +2 -0
- data/lib/chef/resource.rb +90 -202
- data/lib/chef/resource_builder.rb +1 -65
- data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
- data/lib/chef/resource_collection/resource_list.rb +6 -0
- data/lib/chef/resource_collection/resource_set.rb +44 -17
- data/lib/chef/resource_collection.rb +10 -0
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/resource_resolver.rb +1 -25
- data/lib/chef/resources.rb +1 -1
- data/lib/chef/role.rb +0 -6
- data/lib/chef/run_context/cookbook_compiler.rb +49 -5
- data/lib/chef/run_context.rb +4 -25
- data/lib/chef/run_list/run_list_item.rb +1 -1
- data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
- data/lib/chef/search/query.rb +26 -31
- data/lib/chef/server_api.rb +2 -0
- data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
- data/lib/chef/shell/ext.rb +3 -3
- data/lib/chef/shell/shell_session.rb +14 -4
- data/lib/chef/shell.rb +32 -7
- data/lib/chef/user.rb +9 -16
- data/lib/chef/user_v1.rb +9 -16
- data/lib/chef/util/diff.rb +1 -1
- data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
- data/lib/chef/util/selinux.rb +1 -1
- data/lib/chef/util/windows/net_group.rb +18 -30
- data/lib/chef/util/windows/net_use.rb +7 -11
- data/lib/chef/util/windows/net_user.rb +12 -18
- data/lib/chef/util/windows/volume.rb +9 -15
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/win32/api/file.rb +25 -31
- data/lib/chef/win32/api/installer.rb +2 -2
- data/lib/chef/win32/api.rb +4 -6
- data/lib/chef/win32/file.rb +4 -6
- data/lib/chef/win32/registry.rb +9 -9
- data/lib/chef/win32/security/acl.rb +2 -2
- data/lib/chef/win32/security/sid.rb +5 -0
- data/lib/chef/win32/security.rb +2 -2
- data/lib/chef/win32/unicode.rb +2 -2
- data/lib/chef/win32/version.rb +1 -1
- data/lib/chef.rb +1 -2
- data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
- data/spec/data/lwrp/providers/buck_passer.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
- data/spec/data/lwrp/providers/inline_compiler.rb +0 -2
- data/spec/data/lwrp/resources/buck_passer.rb +5 -0
- data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
- data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
- data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
- data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
- data/spec/data/prefer_metadata_json/metadata.json +51 -0
- data/spec/data/prefer_metadata_json/metadata.rb +6 -0
- data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
- data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
- data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
- data/spec/data/shef-config.rb +11 -10
- data/spec/functional/knife/ssh_spec.rb +34 -6
- data/spec/functional/rebooter_spec.rb +1 -0
- data/spec/functional/resource/bash_spec.rb +11 -45
- data/spec/functional/resource/batch_spec.rb +5 -1
- data/spec/functional/resource/cron_spec.rb +2 -2
- data/spec/functional/resource/dsc_script_spec.rb +2 -4
- data/spec/functional/resource/execute_spec.rb +17 -0
- data/spec/functional/resource/link_spec.rb +3 -3
- data/spec/functional/resource/template_spec.rb +33 -0
- data/spec/functional/resource/user/dscl_spec.rb +2 -4
- data/spec/functional/root_alias_spec.rb +78 -0
- data/spec/functional/shell_spec.rb +38 -40
- data/spec/integration/client/client_spec.rb +109 -16
- data/spec/integration/client/exit_code_spec.rb +1 -105
- data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
- data/spec/integration/knife/cookbook_download_spec.rb +0 -24
- data/spec/integration/knife/cookbook_show_spec.rb +12 -23
- data/spec/integration/knife/deps_spec.rb +5 -9
- data/spec/integration/knife/search_node_spec.rb +39 -0
- data/spec/integration/knife/serve_spec.rb +58 -22
- data/spec/integration/knife/upload_spec.rb +3 -11
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
- data/spec/integration/recipes/notifies_spec.rb +60 -0
- data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
- data/spec/integration/recipes/resource_action_spec.rb +37 -30
- data/spec/spec_helper.rb +7 -0
- data/spec/support/chef_helpers.rb +5 -7
- data/spec/support/platform_helpers.rb +10 -3
- data/spec/support/platforms/prof/gc.rb +4 -6
- data/spec/support/shared/context/client.rb +9 -2
- data/spec/support/shared/functional/execute_resource.rb +150 -0
- data/spec/support/shared/functional/windows_script.rb +74 -4
- data/spec/support/shared/integration/knife_support.rb +1 -1
- data/spec/support/shared/unit/execute_resource.rb +37 -9
- data/spec/support/shared/unit/provider/file.rb +10 -0
- data/spec/support/shared/unit/script_resource.rb +1 -9
- data/spec/unit/application/exit_code_spec.rb +4 -89
- data/spec/unit/application_spec.rb +39 -29
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
- data/spec/unit/client_spec.rb +72 -31
- data/spec/unit/config_fetcher_spec.rb +2 -2
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
- data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
- data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
- data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
- data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
- data/spec/unit/cookbook/metadata_spec.rb +29 -108
- data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
- data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
- data/spec/unit/cookbook_loader_spec.rb +17 -19
- data/spec/unit/cookbook_manifest_spec.rb +12 -44
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
- data/spec/unit/cookbook_spec.rb +10 -14
- data/spec/unit/cookbook_uploader_spec.rb +1 -1
- data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
- data/spec/unit/cookbook_version_spec.rb +19 -128
- data/spec/unit/data_bag_item_spec.rb +4 -0
- data/spec/unit/data_collector/messages_spec.rb +137 -0
- data/spec/unit/data_collector/resource_report_spec.rb +145 -0
- data/spec/unit/deprecation_spec.rb +0 -14
- data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
- data/spec/unit/formatters/error_description_spec.rb +52 -7
- data/spec/unit/http/api_versions_spec.rb +79 -0
- data/spec/unit/http/authenticator_spec.rb +20 -0
- data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
- data/spec/unit/json_compat_spec.rb +0 -32
- data/spec/unit/knife/bootstrap_spec.rb +34 -0
- data/spec/unit/knife/configure_client_spec.rb +0 -2
- data/spec/unit/knife/cookbook_create_spec.rb +1 -220
- data/spec/unit/knife/cookbook_download_spec.rb +46 -28
- data/spec/unit/knife/cookbook_show_spec.rb +42 -9
- data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
- data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
- data/spec/unit/knife/core/ui_spec.rb +21 -11
- data/spec/unit/knife/data_bag_create_spec.rb +65 -45
- data/spec/unit/knife/ssh_spec.rb +34 -36
- data/spec/unit/knife_spec.rb +2 -2
- data/spec/unit/lwrp_spec.rb +38 -127
- data/spec/unit/mixin/path_sanity_spec.rb +7 -7
- data/spec/unit/mixin/shell_out_spec.rb +18 -84
- data/spec/unit/mixin/versioned_api_spec.rb +128 -0
- data/spec/unit/mixin/which.rb +160 -0
- data/spec/unit/node/attribute_spec.rb +65 -33
- data/spec/unit/node/immutable_collections_spec.rb +104 -1
- data/spec/unit/node_map_spec.rb +1 -23
- data/spec/unit/node_spec.rb +81 -98
- data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
- data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
- data/spec/unit/property/validation_spec.rb +51 -69
- data/spec/unit/property_spec.rb +105 -125
- data/spec/unit/provider/apt_repository_spec.rb +33 -27
- data/spec/unit/provider/cron_spec.rb +15 -39
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/directory_spec.rb +10 -0
- data/spec/unit/provider/dsc_resource_spec.rb +175 -0
- data/spec/unit/provider/erl_call_spec.rb +5 -13
- data/spec/unit/provider/execute_spec.rb +3 -14
- data/spec/unit/provider/launchd_spec.rb +2 -2
- data/spec/unit/provider/package/aix_spec.rb +22 -22
- data/spec/unit/provider/package/apt_spec.rb +37 -27
- data/spec/unit/provider/package/cab_spec.rb +59 -5
- data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
- data/spec/unit/provider/package/dpkg_spec.rb +16 -16
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
- data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
- data/spec/unit/provider/package/homebrew_spec.rb +9 -9
- data/spec/unit/provider/package/ips_spec.rb +37 -31
- data/spec/unit/provider/package/macports_spec.rb +10 -10
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +6 -6
- data/spec/unit/provider/package/paludis_spec.rb +7 -7
- data/spec/unit/provider/package/portage_spec.rb +6 -7
- data/spec/unit/provider/package/rpm_spec.rb +23 -23
- data/spec/unit/provider/package/rubygems_spec.rb +135 -46
- data/spec/unit/provider/package/solaris_spec.rb +15 -15
- data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
- data/spec/unit/provider/package/windows_spec.rb +2 -1
- data/spec/unit/provider/package/yum_spec.rb +58 -50
- data/spec/unit/provider/package/zypper_spec.rb +54 -97
- data/spec/unit/provider/package_spec.rb +8 -0
- data/spec/unit/provider/powershell_script_spec.rb +14 -4
- data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +7 -1
- data/spec/unit/provider/script_spec.rb +49 -6
- data/spec/unit/provider/service/debian_service_spec.rb +14 -20
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
- data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
- data/spec/unit/provider/subversion_spec.rb +2 -2
- data/spec/unit/provider/user/linux_spec.rb +5 -43
- data/spec/unit/provider/user/pw_spec.rb +7 -27
- data/spec/unit/provider/windows_task_spec.rb +392 -0
- data/spec/unit/provider_resolver_spec.rb +0 -1
- data/spec/unit/provider_spec.rb +10 -3
- data/spec/unit/recipe_spec.rb +3 -172
- data/spec/unit/resource/chef_gem_spec.rb +16 -62
- data/spec/unit/resource/conditional_spec.rb +4 -4
- data/spec/unit/resource/cookbook_file_spec.rb +2 -2
- data/spec/unit/resource/cron_spec.rb +1 -1
- data/spec/unit/resource/deploy_spec.rb +4 -4
- data/spec/unit/resource/directory_spec.rb +2 -2
- data/spec/unit/resource/dsc_resource_spec.rb +6 -0
- data/spec/unit/resource/env_spec.rb +1 -1
- data/spec/unit/resource/execute_spec.rb +215 -1
- data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
- data/spec/unit/resource/file/verification_spec.rb +8 -14
- data/spec/unit/resource/file_spec.rb +3 -3
- data/spec/unit/resource/freebsd_package_spec.rb +2 -2
- data/spec/unit/resource/group_spec.rb +2 -2
- data/spec/unit/resource/ifconfig_spec.rb +1 -1
- data/spec/unit/resource/link_spec.rb +2 -2
- data/spec/unit/resource/mdadm_spec.rb +1 -1
- data/spec/unit/resource/mount_spec.rb +3 -3
- data/spec/unit/resource/ohai_spec.rb +1 -1
- data/spec/unit/resource/package_spec.rb +14 -4
- data/spec/unit/resource/registry_key_spec.rb +2 -2
- data/spec/unit/resource/remote_directory_spec.rb +2 -2
- data/spec/unit/resource/remote_file_spec.rb +2 -2
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/scm_spec.rb +2 -2
- data/spec/unit/resource/script_spec.rb +1 -1
- data/spec/unit/resource/service_spec.rb +25 -5
- data/spec/unit/resource/systemd_unit_spec.rb +1 -1
- data/spec/unit/resource/template_spec.rb +2 -2
- data/spec/unit/resource/user_spec.rb +6 -6
- data/spec/unit/resource/windows_task_spec.rb +213 -0
- data/spec/unit/resource/yum_package_spec.rb +42 -1
- data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
- data/spec/unit/resource_collection_spec.rb +4 -3
- data/spec/unit/resource_reporter_spec.rb +6 -6
- data/spec/unit/resource_spec.rb +55 -71
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
- data/spec/unit/runner_spec.rb +10 -28
- data/spec/unit/search/query_spec.rb +32 -34
- data/spec/unit/server_api_versions_spec.rb +44 -0
- data/spec/unit/shell/shell_session_spec.rb +33 -2
- data/spec/unit/util/selinux_spec.rb +3 -14
- data/spec/unit/win32/error_spec.rb +67 -0
- data/spec/unit/win32/security_spec.rb +66 -0
- data/tasks/bundle.rb +36 -52
- data/tasks/changelog.rb +1 -1
- data/tasks/dependencies.rb +54 -52
- data/tasks/version.rb +41 -0
- metadata +91 -76
- data/lib/chef/deprecation/mixin/template.rb +0 -48
- data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
- data/lib/chef/deprecation/provider/file.rb +0 -198
- data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
- data/lib/chef/deprecation/provider/remote_file.rb +0 -85
- data/lib/chef/deprecation/provider/template.rb +0 -63
- data/lib/chef/dsl/method_missing.rb +0 -75
- data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
- data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
- data/lib/chef/mixin/command/unix.rb +0 -220
- data/lib/chef/mixin/command/windows.rb +0 -71
- data/lib/chef/mixin/command.rb +0 -194
- data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
- data/lib/chef/provider/package/easy_install.rb +0 -135
- data/lib/chef/rest.rb +0 -210
- data/lib/chef/shell_out.rb +0 -13
- data/lib/chef/tasks/chef_repo.rake +0 -200
- data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
- data/spec/functional/rest_spec.rb +0 -95
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
- data/spec/unit/lib_backcompat_spec.rb +0 -34
- data/spec/unit/mixin/command_spec.rb +0 -107
- data/spec/unit/platform_spec.rb +0 -242
- data/spec/unit/provider/package/easy_install_spec.rb +0 -114
- data/spec/unit/resource/easy_install_package_spec.rb +0 -39
- data/spec/unit/rest/auth_credentials_spec.rb +0 -292
- data/spec/unit/rest_spec.rb +0 -753
- data/spec/unit/shell_out_spec.rb +0 -18
- data/tasks/bin/bundle-platform +0 -20
- data/tasks/bin/bundle-platform.bat +0 -2
- data/tasks/bin/bundler_patch.rb +0 -27
- data/tasks/bin/gem-version-diff +0 -37
- data/tasks/bundle_util.rb +0 -110
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2008-2016, 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
|
-
class Chef
|
|
20
|
-
module Mixin
|
|
21
|
-
module Command
|
|
22
|
-
module Unix
|
|
23
|
-
# This is taken directly from Ara T Howard's Open4 library, and then
|
|
24
|
-
# modified to suit the needs of Chef. Any bugs here are most likely
|
|
25
|
-
# my own, and not Ara's.
|
|
26
|
-
#
|
|
27
|
-
# The original appears in external/open4.rb in its unmodified form.
|
|
28
|
-
#
|
|
29
|
-
# Thanks Ara!
|
|
30
|
-
def popen4(cmd, args = {}, &b)
|
|
31
|
-
# Ruby 1.8 suffers from intermittent segfaults believed to be due to GC while IO.select
|
|
32
|
-
# See CHEF-2916 / CHEF-1305
|
|
33
|
-
GC.disable
|
|
34
|
-
|
|
35
|
-
# Waitlast - this is magic.
|
|
36
|
-
#
|
|
37
|
-
# Do we wait for the child process to die before we yield
|
|
38
|
-
# to the block, or after? That is the magic of waitlast.
|
|
39
|
-
#
|
|
40
|
-
# By default, we are waiting before we yield the block.
|
|
41
|
-
args[:waitlast] ||= false
|
|
42
|
-
|
|
43
|
-
args[:user] ||= nil
|
|
44
|
-
unless args[:user].kind_of?(Integer)
|
|
45
|
-
args[:user] = Etc.getpwnam(args[:user]).uid if args[:user]
|
|
46
|
-
end
|
|
47
|
-
args[:group] ||= nil
|
|
48
|
-
unless args[:group].kind_of?(Integer)
|
|
49
|
-
args[:group] = Etc.getgrnam(args[:group]).gid if args[:group]
|
|
50
|
-
end
|
|
51
|
-
args[:environment] ||= {}
|
|
52
|
-
|
|
53
|
-
# Default on C locale so parsing commands output can be done
|
|
54
|
-
# independently of the node's default locale.
|
|
55
|
-
# "LC_ALL" could be set to nil, in which case we also must ignore it.
|
|
56
|
-
unless args[:environment].has_key?("LC_ALL")
|
|
57
|
-
args[:environment]["LC_ALL"] = "C"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
pw, pr, pe, ps = IO.pipe, IO.pipe, IO.pipe, IO.pipe
|
|
61
|
-
|
|
62
|
-
verbose = $VERBOSE
|
|
63
|
-
begin
|
|
64
|
-
$VERBOSE = nil
|
|
65
|
-
ps.last.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
|
66
|
-
|
|
67
|
-
cid = fork do
|
|
68
|
-
pw.last.close
|
|
69
|
-
STDIN.reopen pw.first
|
|
70
|
-
pw.first.close
|
|
71
|
-
|
|
72
|
-
pr.first.close
|
|
73
|
-
STDOUT.reopen pr.last
|
|
74
|
-
pr.last.close
|
|
75
|
-
|
|
76
|
-
pe.first.close
|
|
77
|
-
STDERR.reopen pe.last
|
|
78
|
-
pe.last.close
|
|
79
|
-
|
|
80
|
-
STDOUT.sync = STDERR.sync = true
|
|
81
|
-
|
|
82
|
-
if args[:group]
|
|
83
|
-
Process.egid = args[:group]
|
|
84
|
-
Process.gid = args[:group]
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
if args[:user]
|
|
88
|
-
Process.euid = args[:user]
|
|
89
|
-
Process.uid = args[:user]
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
args[:environment].each do |key, value|
|
|
93
|
-
ENV[key] = value
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
if args[:umask]
|
|
97
|
-
umask = ((args[:umask].respond_to?(:oct) ? args[:umask].oct : args[:umask].to_i) & 007777)
|
|
98
|
-
File.umask(umask)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
begin
|
|
102
|
-
if cmd.kind_of?(Array)
|
|
103
|
-
Kernel.exec(*cmd)
|
|
104
|
-
else
|
|
105
|
-
Kernel.exec(cmd)
|
|
106
|
-
end
|
|
107
|
-
raise "forty-two"
|
|
108
|
-
rescue Exception => e
|
|
109
|
-
Marshal.dump(e, ps.last)
|
|
110
|
-
ps.last.flush
|
|
111
|
-
end
|
|
112
|
-
ps.last.close unless ps.last.closed?
|
|
113
|
-
exit!
|
|
114
|
-
end
|
|
115
|
-
ensure
|
|
116
|
-
$VERBOSE = verbose
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
[pw.first, pr.last, pe.last, ps.last].each { |fd| fd.close }
|
|
120
|
-
|
|
121
|
-
begin
|
|
122
|
-
e = Marshal.load ps.first
|
|
123
|
-
raise(Exception === e ? e : "unknown failure!")
|
|
124
|
-
rescue EOFError # If we get an EOF error, then the exec was successful
|
|
125
|
-
42
|
|
126
|
-
ensure
|
|
127
|
-
ps.first.close
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
pw.last.sync = true
|
|
131
|
-
|
|
132
|
-
pi = [pw.last, pr.first, pe.first]
|
|
133
|
-
|
|
134
|
-
if b
|
|
135
|
-
begin
|
|
136
|
-
if args[:waitlast]
|
|
137
|
-
b[cid, *pi]
|
|
138
|
-
# send EOF so that if the child process is reading from STDIN
|
|
139
|
-
# it will actually finish up and exit
|
|
140
|
-
pi[0].close_write
|
|
141
|
-
Process.waitpid2(cid).last
|
|
142
|
-
else
|
|
143
|
-
# This took some doing.
|
|
144
|
-
# The trick here is to close STDIN
|
|
145
|
-
# Then set our end of the childs pipes to be O_NONBLOCK
|
|
146
|
-
# Then wait for the child to die, which means any IO it
|
|
147
|
-
# wants to do must be done - it's dead. If it isn't,
|
|
148
|
-
# it's because something totally skanky is happening,
|
|
149
|
-
# and we don't care.
|
|
150
|
-
o = StringIO.new
|
|
151
|
-
e = StringIO.new
|
|
152
|
-
|
|
153
|
-
pi[0].close
|
|
154
|
-
|
|
155
|
-
stdout = pi[1]
|
|
156
|
-
stderr = pi[2]
|
|
157
|
-
|
|
158
|
-
stdout.sync = true
|
|
159
|
-
stderr.sync = true
|
|
160
|
-
|
|
161
|
-
stdout.fcntl(Fcntl::F_SETFL, pi[1].fcntl(Fcntl::F_GETFL) | Fcntl::O_NONBLOCK)
|
|
162
|
-
stderr.fcntl(Fcntl::F_SETFL, pi[2].fcntl(Fcntl::F_GETFL) | Fcntl::O_NONBLOCK)
|
|
163
|
-
|
|
164
|
-
stdout_finished = false
|
|
165
|
-
stderr_finished = false
|
|
166
|
-
|
|
167
|
-
results = nil
|
|
168
|
-
|
|
169
|
-
while !stdout_finished || !stderr_finished
|
|
170
|
-
begin
|
|
171
|
-
channels_to_watch = []
|
|
172
|
-
channels_to_watch << stdout if !stdout_finished
|
|
173
|
-
channels_to_watch << stderr if !stderr_finished
|
|
174
|
-
ready = IO.select(channels_to_watch, nil, nil, 1.0)
|
|
175
|
-
rescue Errno::EAGAIN
|
|
176
|
-
ensure
|
|
177
|
-
results = Process.waitpid2(cid, Process::WNOHANG)
|
|
178
|
-
if results
|
|
179
|
-
stdout_finished = true
|
|
180
|
-
stderr_finished = true
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
if ready && ready.first.include?(stdout)
|
|
185
|
-
line = results ? stdout.gets(nil) : stdout.gets
|
|
186
|
-
if line
|
|
187
|
-
o.write(line)
|
|
188
|
-
else
|
|
189
|
-
stdout_finished = true
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
if ready && ready.first.include?(stderr)
|
|
193
|
-
line = results ? stderr.gets(nil) : stderr.gets
|
|
194
|
-
if line
|
|
195
|
-
e.write(line)
|
|
196
|
-
else
|
|
197
|
-
stderr_finished = true
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
results = Process.waitpid2(cid) unless results
|
|
202
|
-
o.rewind
|
|
203
|
-
e.rewind
|
|
204
|
-
b[cid, pi[0], o, e]
|
|
205
|
-
results.last
|
|
206
|
-
end
|
|
207
|
-
ensure
|
|
208
|
-
pi.each { |fd| fd.close unless fd.closed? }
|
|
209
|
-
end
|
|
210
|
-
else
|
|
211
|
-
[cid, pw.last, pr.first, pe.first]
|
|
212
|
-
end
|
|
213
|
-
ensure
|
|
214
|
-
GC.enable
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
end
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2008-2016, Chef Software Inc.
|
|
4
|
-
# Author:: Doug MacEachern (<dougm@vmware.com>)
|
|
5
|
-
# Copyright:: Copyright 2010-2016, VMware, Inc.
|
|
6
|
-
# License:: Apache License, Version 2.0
|
|
7
|
-
#
|
|
8
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
-
# you may not use this file except in compliance with the License.
|
|
10
|
-
# You may obtain a copy of the License at
|
|
11
|
-
#
|
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
#
|
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
-
# See the License for the specific language governing permissions and
|
|
18
|
-
# limitations under the License.
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
require "open3"
|
|
22
|
-
|
|
23
|
-
class Chef
|
|
24
|
-
module Mixin
|
|
25
|
-
module Command
|
|
26
|
-
module Windows
|
|
27
|
-
def popen4(cmd, args = {}, &b)
|
|
28
|
-
# By default, we are waiting before we yield the block.
|
|
29
|
-
args[:waitlast] ||= false
|
|
30
|
-
|
|
31
|
-
#XXX :user, :group, :environment support?
|
|
32
|
-
|
|
33
|
-
Open3.popen3(cmd) do |stdin, stdout, stderr, cid|
|
|
34
|
-
if b
|
|
35
|
-
if args[:waitlast]
|
|
36
|
-
b[cid, stdin, stdout, stderr]
|
|
37
|
-
# send EOF so that if the child process is reading from STDIN
|
|
38
|
-
# it will actually finish up and exit
|
|
39
|
-
stdin.close_write
|
|
40
|
-
else
|
|
41
|
-
o = StringIO.new
|
|
42
|
-
e = StringIO.new
|
|
43
|
-
|
|
44
|
-
stdin.close
|
|
45
|
-
|
|
46
|
-
stdout.sync = true
|
|
47
|
-
stderr.sync = true
|
|
48
|
-
|
|
49
|
-
line = stdout.gets(nil)
|
|
50
|
-
if line
|
|
51
|
-
o.write(line)
|
|
52
|
-
end
|
|
53
|
-
line = stderr.gets(nil)
|
|
54
|
-
if line
|
|
55
|
-
e.write(line)
|
|
56
|
-
end
|
|
57
|
-
o.rewind
|
|
58
|
-
e.rewind
|
|
59
|
-
b[cid, stdin, o, e]
|
|
60
|
-
end
|
|
61
|
-
else
|
|
62
|
-
[cid, stdin, stdout, stderr]
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
$?
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
data/lib/chef/mixin/command.rb
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2008-2016, 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 "chef/log"
|
|
20
|
-
require "chef/exceptions"
|
|
21
|
-
require "tmpdir"
|
|
22
|
-
require "fcntl"
|
|
23
|
-
require "etc"
|
|
24
|
-
|
|
25
|
-
class Chef
|
|
26
|
-
module Mixin
|
|
27
|
-
|
|
28
|
-
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
29
|
-
# NOTE:
|
|
30
|
-
# The popen4 method upon which all the code here is based has a race
|
|
31
|
-
# condition where it may fail to read all of the data written to stdout and
|
|
32
|
-
# stderr after the child process exits. The tests for the code here
|
|
33
|
-
# occasionally fail because of this race condition, so they have been
|
|
34
|
-
# tagged "volatile".
|
|
35
|
-
#
|
|
36
|
-
# This code is considered deprecated, so it should not need to be modified
|
|
37
|
-
# frequently, if at all. HOWEVER, if you do modify the code here, you must
|
|
38
|
-
# explicitly enable volatile tests:
|
|
39
|
-
#
|
|
40
|
-
# bundle exec rspec spec/unit/mixin/command_spec.rb -t volatile
|
|
41
|
-
#
|
|
42
|
-
# In addition, you should make a note that tests need to be run with
|
|
43
|
-
# volatile tests enabled on any pull request or bug report you submit with
|
|
44
|
-
# your patch.
|
|
45
|
-
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
46
|
-
|
|
47
|
-
module Command
|
|
48
|
-
extend self
|
|
49
|
-
|
|
50
|
-
# NOTE: run_command is deprecated in favor of using Chef::Shellout which now comes from the mixlib-shellout gem. NOTE #
|
|
51
|
-
|
|
52
|
-
if RUBY_PLATFORM =~ /mswin|mingw32|windows/
|
|
53
|
-
require "chef/mixin/command/windows"
|
|
54
|
-
include ::Chef::Mixin::Command::Windows
|
|
55
|
-
extend ::Chef::Mixin::Command::Windows
|
|
56
|
-
else
|
|
57
|
-
require "chef/mixin/command/unix"
|
|
58
|
-
include ::Chef::Mixin::Command::Unix
|
|
59
|
-
extend ::Chef::Mixin::Command::Unix
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# === Parameters
|
|
63
|
-
# args<Hash>: A number of required and optional arguments
|
|
64
|
-
# command<String>, <Array>: A complete command with options to execute or a command and options as an Array
|
|
65
|
-
# creates<String>: The absolute path to a file that prevents the command from running if it exists
|
|
66
|
-
# cwd<String>: Working directory to execute command in, defaults to Dir.tmpdir
|
|
67
|
-
# timeout<String>: How many seconds to wait for the command to execute before timing out
|
|
68
|
-
# returns<String>: The single exit value command is expected to return, otherwise causes an exception
|
|
69
|
-
# ignore_failure<Boolean>: Whether to raise an exception on failure, or just return the status
|
|
70
|
-
# output_on_failure<Boolean>: Return output in raised exception regardless of Log.level
|
|
71
|
-
#
|
|
72
|
-
# user<String>: The UID or user name of the user to execute the command as
|
|
73
|
-
# group<String>: The GID or group name of the group to execute the command as
|
|
74
|
-
# environment<Hash>: Pairs of environment variable names and their values to set before execution
|
|
75
|
-
#
|
|
76
|
-
# === Returns
|
|
77
|
-
# Returns the exit status of args[:command]
|
|
78
|
-
def run_command(args = {})
|
|
79
|
-
status, stdout, stderr = run_command_and_return_stdout_stderr(args)
|
|
80
|
-
|
|
81
|
-
status
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# works same as above, except that it returns stdout and stderr
|
|
85
|
-
# requirement => platforms like solaris 9,10 has weird issues where
|
|
86
|
-
# even in command failure the exit code is zero, so we need to lookup stderr.
|
|
87
|
-
def run_command_and_return_stdout_stderr(args = {})
|
|
88
|
-
command_output = ""
|
|
89
|
-
|
|
90
|
-
args[:ignore_failure] ||= false
|
|
91
|
-
args[:output_on_failure] ||= false
|
|
92
|
-
|
|
93
|
-
# TODO: This is the wrong place for this responsibility.
|
|
94
|
-
if args.has_key?(:creates)
|
|
95
|
-
if File.exists?(args[:creates])
|
|
96
|
-
Chef::Log.debug("Skipping #{args[:command]} - creates #{args[:creates]} exists.")
|
|
97
|
-
return false
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
status, stdout, stderr = output_of_command(args[:command], args)
|
|
102
|
-
command_output << "STDOUT: #{stdout}"
|
|
103
|
-
command_output << "STDERR: #{stderr}"
|
|
104
|
-
handle_command_failures(status, command_output, args)
|
|
105
|
-
|
|
106
|
-
return status, stdout, stderr
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def output_of_command(command, args)
|
|
110
|
-
Chef.deprecated(:run_command, "Chef::Mixin::Command.run_command is deprecated, please use shell_out")
|
|
111
|
-
Chef::Log.debug("Executing #{command}")
|
|
112
|
-
stderr_string, stdout_string, status = "", "", nil
|
|
113
|
-
|
|
114
|
-
exec_processing_block = lambda do |pid, stdin, stdout, stderr|
|
|
115
|
-
stdout_string, stderr_string = stdout.string.chomp, stderr.string.chomp
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
args[:cwd] ||= Dir.tmpdir
|
|
119
|
-
unless ::File.directory?(args[:cwd])
|
|
120
|
-
raise Chef::Exceptions::Exec, "#{args[:cwd]} does not exist or is not a directory"
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
Dir.chdir(args[:cwd]) do
|
|
124
|
-
if args[:timeout]
|
|
125
|
-
begin
|
|
126
|
-
Timeout.timeout(args[:timeout]) do
|
|
127
|
-
status = popen4(command, args, &exec_processing_block)
|
|
128
|
-
end
|
|
129
|
-
rescue Timeout::Error => e
|
|
130
|
-
Chef::Log.error("#{command} exceeded timeout #{args[:timeout]}")
|
|
131
|
-
raise(e)
|
|
132
|
-
end
|
|
133
|
-
else
|
|
134
|
-
status = popen4(command, args, &exec_processing_block)
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
Chef::Log.debug("---- Begin output of #{command} ----")
|
|
138
|
-
Chef::Log.debug("STDOUT: #{stdout_string}")
|
|
139
|
-
Chef::Log.debug("STDERR: #{stderr_string}")
|
|
140
|
-
Chef::Log.debug("---- End output of #{command} ----")
|
|
141
|
-
Chef::Log.debug("Ran #{command} returned #{status.exitstatus}")
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
return status, stdout_string, stderr_string
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
def handle_command_failures(status, command_output, opts = {})
|
|
148
|
-
return if opts[:ignore_failure]
|
|
149
|
-
opts[:returns] ||= 0
|
|
150
|
-
return if Array(opts[:returns]).include?(status.exitstatus)
|
|
151
|
-
|
|
152
|
-
# if the log level is not debug, through output of command when we fail
|
|
153
|
-
output = ""
|
|
154
|
-
if Chef::Log.level == :debug || opts[:output_on_failure]
|
|
155
|
-
output << "\n---- Begin output of #{opts[:command]} ----\n"
|
|
156
|
-
output << command_output.to_s
|
|
157
|
-
output << "\n---- End output of #{opts[:command]} ----\n"
|
|
158
|
-
end
|
|
159
|
-
raise Chef::Exceptions::Exec, "#{opts[:command]} returned #{status.exitstatus}, expected #{opts[:returns]}#{output}"
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
# Call #run_command but set LC_ALL to the system's current environment so it doesn't get changed to C.
|
|
163
|
-
#
|
|
164
|
-
# === Parameters
|
|
165
|
-
# args<Hash>: A number of required and optional arguments that will be handed out to #run_command
|
|
166
|
-
#
|
|
167
|
-
# === Returns
|
|
168
|
-
# Returns the result of #run_command
|
|
169
|
-
def run_command_with_systems_locale(args = {})
|
|
170
|
-
args[:environment] ||= {}
|
|
171
|
-
args[:environment]["LC_ALL"] = ENV["LC_ALL"]
|
|
172
|
-
run_command args
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# def popen4(cmd, args={}, &b)
|
|
176
|
-
# @@os_handler.popen4(cmd, args, &b)
|
|
177
|
-
# end
|
|
178
|
-
|
|
179
|
-
# module_function :popen4
|
|
180
|
-
|
|
181
|
-
# FIXME: yard with @yield
|
|
182
|
-
def chdir_or_tmpdir(dir)
|
|
183
|
-
dir ||= Dir.tmpdir
|
|
184
|
-
unless File.directory?(dir)
|
|
185
|
-
raise Chef::Exceptions::Exec, "#{dir} does not exist or is not a directory"
|
|
186
|
-
end
|
|
187
|
-
Dir.chdir(dir) do
|
|
188
|
-
yield
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
end
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Serdar Sutay (<serdar@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2012-2016, 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
|
-
# == net-ssh-multi gem patch for concurrency
|
|
20
|
-
# net-ssh-multi gem has 2 bugs associated with the use of
|
|
21
|
-
# :concurrent_connections option.
|
|
22
|
-
# 1-) There is a race condition while fetching the next_session when
|
|
23
|
-
# :concurrent_connections are set. @open_connections is being
|
|
24
|
-
# incremented by the connection thread and sometimes
|
|
25
|
-
# realize_pending_connections!() method can create more than required
|
|
26
|
-
# connection threads before the @open_connections is set by the
|
|
27
|
-
# previously created threads.
|
|
28
|
-
# 2-) When :concurrent_connections is set, server classes are setup
|
|
29
|
-
# with PendingConnection objects that always return true to busy?
|
|
30
|
-
# calls. If a connection fails when :concurrent_connections is set,
|
|
31
|
-
# server ends up returning true to all busy? calls since the session
|
|
32
|
-
# object is not replaced. Due to this, main event loop (process()
|
|
33
|
-
# function) never gets terminated.
|
|
34
|
-
#
|
|
35
|
-
# See: https://github.com/net-ssh/net-ssh-multi/pull/4
|
|
36
|
-
|
|
37
|
-
require "net/ssh/multi/version"
|
|
38
|
-
|
|
39
|
-
if Net::SSH::Multi::Version::STRING == "1.1.0" || Net::SSH::Multi::Version::STRING == "1.2.0"
|
|
40
|
-
|
|
41
|
-
require "net/ssh/multi"
|
|
42
|
-
|
|
43
|
-
module Net
|
|
44
|
-
module SSH
|
|
45
|
-
module Multi
|
|
46
|
-
class Server
|
|
47
|
-
|
|
48
|
-
# Make sure that server returns false if the ssh connection
|
|
49
|
-
# has failed.
|
|
50
|
-
def busy?(include_invisible = false)
|
|
51
|
-
!failed? && session && session.busy?(include_invisible)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
class Session
|
|
57
|
-
def next_session(server, force = false) #:nodoc:
|
|
58
|
-
# don't retry a failed attempt
|
|
59
|
-
return nil if server.failed?
|
|
60
|
-
|
|
61
|
-
@session_mutex.synchronize do
|
|
62
|
-
if !force && concurrent_connections && concurrent_connections <= open_connections
|
|
63
|
-
connection = PendingConnection.new(server)
|
|
64
|
-
@pending_sessions << connection
|
|
65
|
-
return connection
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# ===== PATCH START
|
|
69
|
-
# Only increment the open_connections count if the connection
|
|
70
|
-
# is not being forced. Incase of a force, it will already be
|
|
71
|
-
# incremented.
|
|
72
|
-
if !force
|
|
73
|
-
@open_connections += 1
|
|
74
|
-
end
|
|
75
|
-
# ===== PATCH END
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
begin
|
|
79
|
-
server.new_session
|
|
80
|
-
|
|
81
|
-
# I don't understand why this should be necessary--StandardError is a
|
|
82
|
-
# subclass of Exception, after all--but without explicitly rescuing
|
|
83
|
-
# StandardError, things like Errno::* and SocketError don't get caught
|
|
84
|
-
# here!
|
|
85
|
-
rescue Exception, StandardError => e
|
|
86
|
-
server.fail!
|
|
87
|
-
@session_mutex.synchronize { @open_connections -= 1 }
|
|
88
|
-
|
|
89
|
-
case on_error
|
|
90
|
-
when :ignore then
|
|
91
|
-
# do nothing
|
|
92
|
-
when :warn then
|
|
93
|
-
warn("error connecting to #{server}: #{e.class} (#{e.message})")
|
|
94
|
-
when Proc then
|
|
95
|
-
go = catch(:go) { on_error.call(server); nil }
|
|
96
|
-
case go
|
|
97
|
-
when nil, :ignore then # nothing
|
|
98
|
-
when :retry then retry
|
|
99
|
-
when :raise then raise
|
|
100
|
-
else warn "unknown 'go' command: #{go.inspect}"
|
|
101
|
-
end
|
|
102
|
-
else
|
|
103
|
-
raise
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
return nil
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def realize_pending_connections! #:nodoc:
|
|
111
|
-
return unless concurrent_connections
|
|
112
|
-
|
|
113
|
-
server_list.each do |server|
|
|
114
|
-
server.close if !server.busy?(true)
|
|
115
|
-
server.update_session!
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
@connect_threads.delete_if { |t| !t.alive? }
|
|
119
|
-
|
|
120
|
-
count = concurrent_connections ? (concurrent_connections - open_connections) : @pending_sessions.length
|
|
121
|
-
count.times do
|
|
122
|
-
session = @pending_sessions.pop
|
|
123
|
-
break unless session
|
|
124
|
-
# ===== PATCH START
|
|
125
|
-
# Increment the open_connections count here to prevent
|
|
126
|
-
# creation of connection thread again before that is
|
|
127
|
-
# incremented by the thread.
|
|
128
|
-
@session_mutex.synchronize { @open_connections += 1 }
|
|
129
|
-
# ===== PATCH END
|
|
130
|
-
@connect_threads << Thread.new do
|
|
131
|
-
session.replace_with(next_session(session.server, true))
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
end
|