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
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
#
|
|
18
18
|
#
|
|
19
19
|
require "chef/provider/package"
|
|
20
|
-
require "chef/mixin/command"
|
|
21
20
|
require "chef/resource/package"
|
|
22
21
|
require "chef/mixin/get_source_from_package"
|
|
23
22
|
|
|
@@ -34,48 +33,45 @@ class Chef
|
|
|
34
33
|
def define_resource_requirements
|
|
35
34
|
super
|
|
36
35
|
requirements.assert(:install) do |a|
|
|
37
|
-
a.assertion {
|
|
38
|
-
a.failure_message Chef::Exceptions::Package, "Source for package #{
|
|
36
|
+
a.assertion { new_resource.source }
|
|
37
|
+
a.failure_message Chef::Exceptions::Package, "Source for package #{new_resource.name} required for action install"
|
|
39
38
|
end
|
|
40
39
|
requirements.assert(:all_actions) do |a|
|
|
41
|
-
a.assertion {
|
|
42
|
-
a.failure_message Chef::Exceptions::Package, "Package #{
|
|
43
|
-
a.whyrun "would assume #{
|
|
40
|
+
a.assertion { !new_resource.source || package_source_found? }
|
|
41
|
+
a.failure_message Chef::Exceptions::Package, "Package #{new_resource.name} not found: #{new_resource.source}"
|
|
42
|
+
a.whyrun "would assume #{new_resource.source} would be have previously been made available"
|
|
44
43
|
end
|
|
45
44
|
end
|
|
46
45
|
|
|
47
46
|
def load_current_resource
|
|
48
|
-
@current_resource = Chef::Resource::Package.new(
|
|
49
|
-
|
|
47
|
+
@current_resource = Chef::Resource::Package.new(new_resource.name)
|
|
48
|
+
current_resource.package_name(new_resource.package_name)
|
|
50
49
|
|
|
51
|
-
if
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
fields = line.split(":")
|
|
64
|
-
@new_resource.version(fields[2])
|
|
65
|
-
end
|
|
50
|
+
if package_source_found?
|
|
51
|
+
Chef::Log.debug("#{new_resource} checking pkg status")
|
|
52
|
+
ret = shell_out_compact_timeout("installp", "-L", "-d", new_resource.source)
|
|
53
|
+
ret.stdout.each_line do |line|
|
|
54
|
+
case line
|
|
55
|
+
when /:#{new_resource.package_name}:/
|
|
56
|
+
fields = line.split(":")
|
|
57
|
+
new_resource.version(fields[2])
|
|
58
|
+
when /^#{new_resource.package_name}:/
|
|
59
|
+
Chef::Log.warn("You are installing a bff package by product name. For idempotent installs, please install individual filesets")
|
|
60
|
+
fields = line.split(":")
|
|
61
|
+
new_resource.version(fields[2])
|
|
66
62
|
end
|
|
67
|
-
raise Chef::Exceptions::Package, "package source #{@new_resource.source} does not provide package #{@new_resource.package_name}" unless @new_resource.version
|
|
68
63
|
end
|
|
64
|
+
raise Chef::Exceptions::Package, "package source #{new_resource.source} does not provide package #{new_resource.package_name}" unless new_resource.version
|
|
69
65
|
end
|
|
70
66
|
|
|
71
|
-
Chef::Log.debug("#{
|
|
72
|
-
ret =
|
|
67
|
+
Chef::Log.debug("#{new_resource} checking install state")
|
|
68
|
+
ret = shell_out_compact_timeout("lslpp", "-lcq", current_resource.package_name)
|
|
73
69
|
ret.stdout.each_line do |line|
|
|
74
70
|
case line
|
|
75
|
-
when /#{
|
|
71
|
+
when /#{current_resource.package_name}/
|
|
76
72
|
fields = line.split(":")
|
|
77
|
-
Chef::Log.debug("#{
|
|
78
|
-
|
|
73
|
+
Chef::Log.debug("#{new_resource} version #{fields[2]} is already installed")
|
|
74
|
+
current_resource.version(fields[2])
|
|
79
75
|
end
|
|
80
76
|
end
|
|
81
77
|
|
|
@@ -83,23 +79,25 @@ class Chef
|
|
|
83
79
|
raise Chef::Exceptions::Package, "lslpp failed - #{ret.format_for_exception}!"
|
|
84
80
|
end
|
|
85
81
|
|
|
86
|
-
|
|
82
|
+
current_resource
|
|
87
83
|
end
|
|
88
84
|
|
|
89
85
|
def candidate_version
|
|
90
86
|
return @candidate_version if @candidate_version
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
87
|
+
if package_source_found?
|
|
88
|
+
ret = shell_out_compact_timeout("installp", "-L", "-d", new_resource.source)
|
|
89
|
+
ret.stdout.each_line do |line|
|
|
90
|
+
case line
|
|
91
|
+
when /\w:#{Regexp.escape(new_resource.package_name)}:(.*)/
|
|
92
|
+
fields = line.split(":")
|
|
93
|
+
@candidate_version = fields[2]
|
|
94
|
+
new_resource.version(fields[2])
|
|
95
|
+
Chef::Log.debug("#{new_resource} setting install candidate version to #{@candidate_version}")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
unless ret.exitstatus == 0
|
|
99
|
+
raise Chef::Exceptions::Package, "installp -L -d #{new_resource.source} - #{ret.format_for_exception}!"
|
|
99
100
|
end
|
|
100
|
-
end
|
|
101
|
-
unless ret.exitstatus == 0
|
|
102
|
-
raise Chef::Exceptions::Package, "installp -L -d #{@new_resource.source} - #{ret.format_for_exception}!"
|
|
103
101
|
end
|
|
104
102
|
@candidate_version
|
|
105
103
|
end
|
|
@@ -112,28 +110,32 @@ class Chef
|
|
|
112
110
|
# So far, the code has been tested only with standalone packages.
|
|
113
111
|
#
|
|
114
112
|
def install_package(name, version)
|
|
115
|
-
Chef::Log.debug("#{
|
|
116
|
-
if
|
|
117
|
-
|
|
118
|
-
Chef::Log.debug("#{
|
|
113
|
+
Chef::Log.debug("#{new_resource} package install options: #{options}")
|
|
114
|
+
if options.nil?
|
|
115
|
+
shell_out_compact_timeout!("installp", "-aYF", "-d", new_resource.source, new_resource.package_name)
|
|
116
|
+
Chef::Log.debug("#{new_resource} installed version #{new_resource.version} from: #{new_resource.source}")
|
|
119
117
|
else
|
|
120
|
-
|
|
121
|
-
Chef::Log.debug("#{
|
|
118
|
+
shell_out_compact_timeout!("installp", "-aYF", options, "-d", new_resource.source, new_resource.package_name)
|
|
119
|
+
Chef::Log.debug("#{new_resource} installed version #{new_resource.version} from: #{new_resource.source}")
|
|
122
120
|
end
|
|
123
121
|
end
|
|
124
122
|
|
|
125
|
-
|
|
123
|
+
alias upgrade_package install_package
|
|
126
124
|
|
|
127
125
|
def remove_package(name, version)
|
|
128
|
-
if
|
|
129
|
-
|
|
130
|
-
Chef::Log.debug("#{
|
|
126
|
+
if options.nil?
|
|
127
|
+
shell_out_compact_timeout!("installp", "-u", name)
|
|
128
|
+
Chef::Log.debug("#{new_resource} removed version #{new_resource.version}")
|
|
131
129
|
else
|
|
132
|
-
|
|
133
|
-
Chef::Log.debug("#{
|
|
130
|
+
shell_out_compact_timeout!("installp", "-u", options, name)
|
|
131
|
+
Chef::Log.debug("#{new_resource} removed version #{new_resource.version}")
|
|
134
132
|
end
|
|
135
133
|
end
|
|
136
134
|
|
|
135
|
+
def package_source_found?
|
|
136
|
+
@package_source_found ||= new_resource.source && ::File.exist?(new_resource.source)
|
|
137
|
+
end
|
|
138
|
+
|
|
137
139
|
end
|
|
138
140
|
end
|
|
139
141
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2008-
|
|
3
|
+
# Copyright:: Copyright 2008-2017, Chef Software Inc.
|
|
4
4
|
# License:: Apache License, Version 2.0
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -72,21 +72,21 @@ class Chef
|
|
|
72
72
|
|
|
73
73
|
def package_locked(name, version)
|
|
74
74
|
islocked = false
|
|
75
|
-
locked =
|
|
75
|
+
locked = shell_out_compact_timeout!("apt-mark", "showhold")
|
|
76
76
|
locked.stdout.each_line do |line|
|
|
77
77
|
line_package = line.strip
|
|
78
78
|
if line_package == name
|
|
79
79
|
islocked = true
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
|
-
|
|
82
|
+
islocked
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def install_package(name, version)
|
|
86
86
|
package_name = name.zip(version).map do |n, v|
|
|
87
87
|
package_data[n][:virtual] ? n : "#{n}=#{v}"
|
|
88
88
|
end
|
|
89
|
-
run_noninteractive("apt-get -q -y", default_release_options,
|
|
89
|
+
run_noninteractive("apt-get", "-q", "-y", default_release_options, options, "install", package_name)
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
def upgrade_package(name, version)
|
|
@@ -97,14 +97,14 @@ class Chef
|
|
|
97
97
|
package_name = name.map do |n|
|
|
98
98
|
package_data[n][:virtual] ? resolve_virtual_package_name(n) : n
|
|
99
99
|
end
|
|
100
|
-
run_noninteractive("apt-get -q -y",
|
|
100
|
+
run_noninteractive("apt-get", "-q", "-y", options, "remove", package_name)
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
def purge_package(name, version)
|
|
104
104
|
package_name = name.map do |n|
|
|
105
105
|
package_data[n][:virtual] ? resolve_virtual_package_name(n) : n
|
|
106
106
|
end
|
|
107
|
-
run_noninteractive("apt-get -q -y",
|
|
107
|
+
run_noninteractive("apt-get", "-q", "-y", options, "purge", package_name)
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
def preseed_package(preseed_file)
|
|
@@ -118,11 +118,11 @@ class Chef
|
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
def lock_package(name, version)
|
|
121
|
-
run_noninteractive("apt-mark",
|
|
121
|
+
run_noninteractive("apt-mark", options, "hold", name)
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
def unlock_package(name, version)
|
|
125
|
-
run_noninteractive("apt-mark",
|
|
125
|
+
run_noninteractive("apt-mark", options, "unhold", name)
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
private
|
|
@@ -131,12 +131,14 @@ class Chef
|
|
|
131
131
|
# interactive prompts. Command is run with default localization rather
|
|
132
132
|
# than forcing locale to "C", so command output may not be stable.
|
|
133
133
|
def run_noninteractive(*args)
|
|
134
|
-
|
|
134
|
+
shell_out_compact_timeout!(*args, env: { "DEBIAN_FRONTEND" => "noninteractive" })
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
def default_release_options
|
|
138
138
|
# Use apt::Default-Release option only if provider supports it
|
|
139
|
-
|
|
139
|
+
if new_resource.respond_to?(:default_release) && new_resource.default_release
|
|
140
|
+
[ "-o", "APT::Default-Release=#{new_resource.default_release}" ]
|
|
141
|
+
end
|
|
140
142
|
end
|
|
141
143
|
|
|
142
144
|
def resolve_package_versions(pkg)
|
|
@@ -156,7 +158,7 @@ class Chef
|
|
|
156
158
|
end
|
|
157
159
|
|
|
158
160
|
def resolve_virtual_package_name(pkg)
|
|
159
|
-
showpkg = run_noninteractive("apt-cache showpkg", pkg).stdout
|
|
161
|
+
showpkg = run_noninteractive("apt-cache", "showpkg", pkg).stdout
|
|
160
162
|
partitions = showpkg.rpartition(/Reverse Provides: ?#{$/}/)
|
|
161
163
|
return nil if partitions[0] == "" && partitions[1] == "" # not found in output
|
|
162
164
|
set = partitions[2].lines.each_with_object(Set.new) do |line, acc|
|
|
@@ -166,7 +168,7 @@ class Chef
|
|
|
166
168
|
if set.size > 1
|
|
167
169
|
raise Chef::Exceptions::Package, "#{new_resource.package_name} is a virtual package provided by multiple packages, you must explicitly select one"
|
|
168
170
|
end
|
|
169
|
-
|
|
171
|
+
set.to_a.first
|
|
170
172
|
end
|
|
171
173
|
|
|
172
174
|
def package_data_for(pkg)
|
|
@@ -186,7 +188,7 @@ class Chef
|
|
|
186
188
|
end
|
|
187
189
|
end
|
|
188
190
|
|
|
189
|
-
|
|
191
|
+
{
|
|
190
192
|
current_version: current_version,
|
|
191
193
|
candidate_version: candidate_version,
|
|
192
194
|
virtual: virtual,
|
|
@@ -19,50 +19,79 @@
|
|
|
19
19
|
require "chef/provider/package"
|
|
20
20
|
require "chef/resource/cab_package"
|
|
21
21
|
require "chef/mixin/shell_out"
|
|
22
|
+
require "chef/mixin/uris"
|
|
23
|
+
require "chef/mixin/checksum"
|
|
22
24
|
|
|
23
25
|
class Chef
|
|
24
26
|
class Provider
|
|
25
27
|
class Package
|
|
26
28
|
class Cab < Chef::Provider::Package
|
|
27
29
|
include Chef::Mixin::ShellOut
|
|
30
|
+
include Chef::Mixin::Uris
|
|
31
|
+
include Chef::Mixin::Checksum
|
|
28
32
|
|
|
29
33
|
provides :cab_package, os: "windows"
|
|
30
34
|
|
|
31
35
|
def load_current_resource
|
|
32
36
|
@current_resource = Chef::Resource::CabPackage.new(new_resource.name)
|
|
33
|
-
current_resource.source(
|
|
37
|
+
current_resource.source(cab_file_source)
|
|
34
38
|
new_resource.version(package_version)
|
|
35
39
|
current_resource.version(installed_version)
|
|
36
40
|
current_resource
|
|
37
41
|
end
|
|
38
42
|
|
|
43
|
+
def cab_file_source
|
|
44
|
+
@cab_file_source ||= uri_scheme?(new_resource.source) ? download_source_file : new_resource.source
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def download_source_file
|
|
48
|
+
source_resource.run_action(:create)
|
|
49
|
+
Chef::Log.debug("#{new_resource} fetched source file to #{source_resource.path}")
|
|
50
|
+
source_resource.path
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def source_resource
|
|
54
|
+
@source_resource ||= declare_resource(:remote_file, new_resource.name) do
|
|
55
|
+
path default_download_cache_path
|
|
56
|
+
source new_resource.source
|
|
57
|
+
backup false
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def default_download_cache_path
|
|
62
|
+
uri = ::URI.parse(new_resource.source)
|
|
63
|
+
filename = ::File.basename(::URI.unescape(uri.path))
|
|
64
|
+
file_cache_dir = Chef::FileCache.create_cache_path("package/")
|
|
65
|
+
Chef::Util::PathHelper.cleanpath("#{file_cache_dir}/#{filename}")
|
|
66
|
+
end
|
|
67
|
+
|
|
39
68
|
def install_package(name, version)
|
|
40
|
-
dism_command("/Add-Package /PackagePath:\"#{
|
|
69
|
+
dism_command("/Add-Package /PackagePath:\"#{cab_file_source}\"")
|
|
41
70
|
end
|
|
42
71
|
|
|
43
72
|
def remove_package(name, version)
|
|
44
|
-
dism_command("/Remove-Package /PackagePath:\"#{
|
|
73
|
+
dism_command("/Remove-Package /PackagePath:\"#{cab_file_source}\"")
|
|
45
74
|
end
|
|
46
75
|
|
|
47
76
|
def dism_command(command)
|
|
48
|
-
shellout = Mixlib::ShellOut.new("dism.exe /Online /English #{command} /NoRestart",
|
|
77
|
+
shellout = Mixlib::ShellOut.new("dism.exe /Online /English #{command} /NoRestart", timeout: new_resource.timeout)
|
|
49
78
|
with_os_architecture(nil) do
|
|
50
79
|
shellout.run_command
|
|
51
80
|
end
|
|
52
81
|
end
|
|
53
82
|
|
|
54
83
|
def installed_version
|
|
55
|
-
stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{
|
|
84
|
+
stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{cab_file_source}\"").stdout
|
|
56
85
|
package_info = parse_dism_get_package_info(stdout)
|
|
57
86
|
# e.g. Package_for_KB2975719~31bf3856ad364e35~amd64~~6.3.1.8
|
|
58
87
|
package = split_package_identity(package_info["package_information"]["package_identity"])
|
|
59
88
|
# Search for just the package name to catch a different version being installed
|
|
60
|
-
Chef::Log.debug("#{
|
|
89
|
+
Chef::Log.debug("#{new_resource} searching for installed package #{package['name']}")
|
|
61
90
|
found_packages = installed_packages.select { |p| p["package_identity"] =~ /^#{package['name']}~/ }
|
|
62
|
-
if found_packages.
|
|
91
|
+
if found_packages.empty?
|
|
63
92
|
nil
|
|
64
93
|
elsif found_packages.length == 1
|
|
65
|
-
stdout = dism_command("/Get-PackageInfo /PackageName:\"#{found_packages.first[
|
|
94
|
+
stdout = dism_command("/Get-PackageInfo /PackageName:\"#{found_packages.first['package_identity']}\"").stdout
|
|
66
95
|
find_version(stdout)
|
|
67
96
|
else
|
|
68
97
|
# Presuming this won't happen, otherwise we need to handle it
|
|
@@ -71,8 +100,8 @@ class Chef
|
|
|
71
100
|
end
|
|
72
101
|
|
|
73
102
|
def package_version
|
|
74
|
-
Chef::Log.debug("#{
|
|
75
|
-
stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{
|
|
103
|
+
Chef::Log.debug("#{new_resource} getting product version for package at #{cab_file_source}")
|
|
104
|
+
stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{cab_file_source}\"").stdout
|
|
76
105
|
find_version(stdout)
|
|
77
106
|
end
|
|
78
107
|
|
|
@@ -85,22 +114,21 @@ class Chef
|
|
|
85
114
|
# returns a hash of package state information given the output of dism /get-packages
|
|
86
115
|
# expected keys: package_identity
|
|
87
116
|
def parse_dism_get_packages(text)
|
|
88
|
-
packages =
|
|
117
|
+
packages = []
|
|
89
118
|
text.each_line do |line|
|
|
90
119
|
key, value = line.split(":") if line.start_with?("Package Identity")
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
end
|
|
120
|
+
next if key.nil? || value.nil?
|
|
121
|
+
package = {}
|
|
122
|
+
package[key.downcase.strip.tr(" ", "_")] = value.strip.chomp
|
|
123
|
+
packages << package
|
|
96
124
|
end
|
|
97
125
|
packages
|
|
98
126
|
end
|
|
99
127
|
|
|
100
128
|
# returns a hash of package information given the output of dism /get-packageinfo
|
|
101
129
|
def parse_dism_get_package_info(text)
|
|
102
|
-
package_data =
|
|
103
|
-
errors =
|
|
130
|
+
package_data = {}
|
|
131
|
+
errors = []
|
|
104
132
|
in_section = false
|
|
105
133
|
section_headers = [ "Package information", "Custom Properties", "Features" ]
|
|
106
134
|
text.each_line do |line|
|
|
@@ -112,7 +140,7 @@ class Chef
|
|
|
112
140
|
v = $2 # has to be first or the gsub below replaces this variable
|
|
113
141
|
k = $1.downcase.strip.tr(" ", "_")
|
|
114
142
|
if in_section
|
|
115
|
-
package_data[in_section] =
|
|
143
|
+
package_data[in_section] = {} unless package_data[in_section]
|
|
116
144
|
package_data[in_section][k] = v
|
|
117
145
|
else
|
|
118
146
|
package_data[k] = v
|
|
@@ -132,7 +160,7 @@ class Chef
|
|
|
132
160
|
end
|
|
133
161
|
|
|
134
162
|
def split_package_identity(identity)
|
|
135
|
-
data =
|
|
163
|
+
data = {}
|
|
136
164
|
data["name"], data["publisher"], data["arch"], data["resource_id"], data["version"] = identity.split("~")
|
|
137
165
|
data
|
|
138
166
|
end
|
|
@@ -30,8 +30,8 @@ class Chef
|
|
|
30
30
|
# Declare that our arguments should be arrays
|
|
31
31
|
use_multipackage_api
|
|
32
32
|
|
|
33
|
-
PATHFINDING_POWERSHELL_COMMAND = "[System.Environment]::GetEnvironmentVariable('ChocolateyInstall', 'MACHINE')"
|
|
34
|
-
CHOCO_MISSING_MSG = <<-EOS
|
|
33
|
+
PATHFINDING_POWERSHELL_COMMAND = "[System.Environment]::GetEnvironmentVariable('ChocolateyInstall', 'MACHINE')".freeze
|
|
34
|
+
CHOCO_MISSING_MSG = <<-EOS.freeze
|
|
35
35
|
Could not locate your Chocolatey install. To install chocolatey, we recommend
|
|
36
36
|
the 'chocolatey' cookbook (https://github.com/chocolatey/chocolatey-cookbook).
|
|
37
37
|
If Chocolatey is installed, ensure that the 'ChocolateyInstall' environment
|
|
@@ -59,8 +59,8 @@ EOS
|
|
|
59
59
|
# so we want to assert candidates exist for the alternate source
|
|
60
60
|
requirements.assert(:upgrade, :install) do |a|
|
|
61
61
|
a.assertion { candidates_exist_for_all_uninstalled? }
|
|
62
|
-
a.failure_message(Chef::Exceptions::Package, "No candidate version available for #{packages_missing_candidates.join(
|
|
63
|
-
a.whyrun("Assuming a repository that offers #{packages_missing_candidates.join(
|
|
62
|
+
a.failure_message(Chef::Exceptions::Package, "No candidate version available for #{packages_missing_candidates.join(', ')}")
|
|
63
|
+
a.whyrun("Assuming a repository that offers #{packages_missing_candidates.join(', ')} would have been configured")
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
|
@@ -133,12 +133,11 @@ EOS
|
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
# Choco does not have dpkg's distinction between purge and remove
|
|
136
|
-
|
|
136
|
+
alias purge_package remove_package
|
|
137
137
|
|
|
138
138
|
# Override the superclass check. The semantics for our new_resource.source is not files to
|
|
139
139
|
# install from, but like the rubygem provider's sources which are more like repos.
|
|
140
|
-
def check_resource_semantics
|
|
141
|
-
end
|
|
140
|
+
def check_resource_semantics!; end
|
|
142
141
|
|
|
143
142
|
private
|
|
144
143
|
|
|
@@ -160,7 +159,7 @@ EOS
|
|
|
160
159
|
def choco_install_path
|
|
161
160
|
@choco_install_path ||= powershell_out!(
|
|
162
161
|
PATHFINDING_POWERSHELL_COMMAND
|
|
163
|
-
|
|
162
|
+
).stdout.chomp
|
|
164
163
|
end
|
|
165
164
|
|
|
166
165
|
# Helper to dispatch a choco command through shell_out using the timeout
|
|
@@ -169,7 +168,7 @@ EOS
|
|
|
169
168
|
# @param args [String] variable number of string arguments
|
|
170
169
|
# @return [Mixlib::ShellOut] object returned from shell_out!
|
|
171
170
|
def choco_command(*args)
|
|
172
|
-
shell_out_with_timeout!(args_to_string(choco_exe, *args),
|
|
171
|
+
shell_out_with_timeout!(args_to_string(choco_exe, *args), returns: new_resource.returns)
|
|
173
172
|
end
|
|
174
173
|
|
|
175
174
|
# Use the available_packages Hash helper to create an array suitable for
|
|
@@ -268,7 +267,7 @@ EOS
|
|
|
268
267
|
# @param names [Array] original mixed case names
|
|
269
268
|
# @return [Array] same names in lower case
|
|
270
269
|
def lowercase_names(names)
|
|
271
|
-
names.map
|
|
270
|
+
names.map(&:downcase)
|
|
272
271
|
end
|
|
273
272
|
end
|
|
274
273
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Copyright:: Copyright 2016, Chef Software
|
|
2
|
+
# Copyright:: Copyright 2016-2017, Chef Software Inc.
|
|
3
3
|
# License:: Apache License, Version 2.0
|
|
4
4
|
#
|
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
# limitations under the License.
|
|
16
16
|
#
|
|
17
17
|
|
|
18
|
+
require "chef/mixin/which"
|
|
19
|
+
require "chef/mixin/shell_out"
|
|
18
20
|
require "chef/provider/package/dnf/version"
|
|
19
21
|
require "timeout"
|
|
20
22
|
|
|
@@ -24,7 +26,8 @@ class Chef
|
|
|
24
26
|
class Dnf < Chef::Provider::Package
|
|
25
27
|
class PythonHelper
|
|
26
28
|
include Singleton
|
|
27
|
-
|
|
29
|
+
include Chef::Mixin::Which
|
|
30
|
+
include Chef::Mixin::ShellOut
|
|
28
31
|
|
|
29
32
|
attr_accessor :stdin
|
|
30
33
|
attr_accessor :stdout
|
|
@@ -32,11 +35,16 @@ class Chef
|
|
|
32
35
|
attr_accessor :wait_thr
|
|
33
36
|
|
|
34
37
|
DNF_HELPER = ::File.expand_path(::File.join(::File.dirname(__FILE__), "dnf_helper.py")).freeze
|
|
35
|
-
|
|
38
|
+
|
|
39
|
+
def dnf_command
|
|
40
|
+
@dnf_command ||= which("python", "python3", "python2", "python2.7") do |f|
|
|
41
|
+
shell_out("#{f} -c 'import dnf'").exitstatus == 0
|
|
42
|
+
end + " #{DNF_HELPER}"
|
|
43
|
+
end
|
|
36
44
|
|
|
37
45
|
def start
|
|
38
46
|
ENV["PYTHONUNBUFFERED"] = "1"
|
|
39
|
-
@stdin, @stdout, @stderr, @wait_thr = Open3.popen3(
|
|
47
|
+
@stdin, @stdout, @stderr, @wait_thr = Open3.popen3(dnf_command)
|
|
40
48
|
end
|
|
41
49
|
|
|
42
50
|
def reap
|
|
@@ -53,6 +61,27 @@ class Chef
|
|
|
53
61
|
start if stdin.nil?
|
|
54
62
|
end
|
|
55
63
|
|
|
64
|
+
# @returns Array<Version>
|
|
65
|
+
def query(action, provides, version = nil, arch = nil)
|
|
66
|
+
with_helper do
|
|
67
|
+
json = build_query(action, provides, version, arch)
|
|
68
|
+
Chef::Log.debug "sending '#{json}' to python helper"
|
|
69
|
+
stdin.syswrite json + "\n"
|
|
70
|
+
output = stdout.sysread(4096).chomp
|
|
71
|
+
Chef::Log.debug "got '#{output}' from python helper"
|
|
72
|
+
version = parse_response(output)
|
|
73
|
+
Chef::Log.debug "parsed #{version} from python helper"
|
|
74
|
+
version
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def restart
|
|
79
|
+
reap
|
|
80
|
+
start
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
56
85
|
# i couldn't figure out how to decompose an evr on the python side, it seems reasonably
|
|
57
86
|
# painless to do it in ruby (generally massaging nevras in the ruby side is HIGHLY
|
|
58
87
|
# discouraged -- this is an "every rule has an exception" exception -- any additional
|
|
@@ -60,10 +89,12 @@ class Chef
|
|
|
60
89
|
def add_version(hash, version)
|
|
61
90
|
epoch = nil
|
|
62
91
|
if version =~ /(\S+):(\S+)/
|
|
63
|
-
epoch
|
|
92
|
+
epoch = $1
|
|
93
|
+
version = $2
|
|
64
94
|
end
|
|
65
95
|
if version =~ /(\S+)-(\S+)/
|
|
66
|
-
version
|
|
96
|
+
version = $1
|
|
97
|
+
release = $2
|
|
67
98
|
end
|
|
68
99
|
hash["epoch"] = epoch unless epoch.nil?
|
|
69
100
|
hash["release"] = release unless release.nil?
|
|
@@ -83,35 +114,41 @@ class Chef
|
|
|
83
114
|
array.each_slice(3).map { |x| Version.new(*x) }.first
|
|
84
115
|
end
|
|
85
116
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Chef::Log.debug "sending '#{json}' to python helper"
|
|
91
|
-
stdin.syswrite json + "\n"
|
|
92
|
-
output = stdout.sysread(4096).chomp
|
|
93
|
-
Chef::Log.debug "got '#{output}' from python helper"
|
|
94
|
-
version = parse_response(output)
|
|
95
|
-
Chef::Log.debug "parsed #{version} from python helper"
|
|
96
|
-
version
|
|
117
|
+
def drain_stderr
|
|
118
|
+
output = ""
|
|
119
|
+
until IO.select([stderr], nil, nil, 0).nil?
|
|
120
|
+
output += stderr.sysread(4096).chomp
|
|
97
121
|
end
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
start
|
|
122
|
+
output
|
|
123
|
+
rescue
|
|
124
|
+
# we must rescue EOFError, and we don't much care about errors on stderr anyway
|
|
125
|
+
output
|
|
103
126
|
end
|
|
104
127
|
|
|
105
128
|
def with_helper
|
|
106
129
|
max_retries ||= 5
|
|
130
|
+
ret = nil
|
|
107
131
|
Timeout.timeout(600) do
|
|
108
132
|
check
|
|
109
|
-
yield
|
|
133
|
+
ret = yield
|
|
110
134
|
end
|
|
135
|
+
output = drain_stderr
|
|
136
|
+
unless output.empty?
|
|
137
|
+
Chef::Log.debug "discarding output on stderr from python helper: #{output}"
|
|
138
|
+
end
|
|
139
|
+
ret
|
|
111
140
|
rescue EOFError, Errno::EPIPE, Timeout::Error, Errno::ESRCH => e
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
141
|
+
output = drain_stderr
|
|
142
|
+
if ( max_retries -= 1 ) > 0
|
|
143
|
+
unless output.empty?
|
|
144
|
+
Chef::Log.debug "discarding output on stderr from python helper: #{output}"
|
|
145
|
+
end
|
|
146
|
+
restart
|
|
147
|
+
retry
|
|
148
|
+
else
|
|
149
|
+
raise e if output.empty?
|
|
150
|
+
raise "dnf-helper.py had stderr output:\n\n#{output}"
|
|
151
|
+
end
|
|
115
152
|
end
|
|
116
153
|
end
|
|
117
154
|
end
|