chef 13.12.14-universal-mingw32 → 14.0.190-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +151 -0
- data/Gemfile +12 -9
- data/README.md +34 -32
- data/Rakefile +22 -18
- data/VERSION +1 -0
- data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +33 -0
- data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +272 -0
- data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +57 -0
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +68 -0
- data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -0
- data/acceptance/Gemfile +19 -0
- data/acceptance/Gemfile.lock +266 -0
- data/acceptance/README.md +137 -0
- data/acceptance/basics/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/basics/.acceptance/acceptance-cookbook/metadata.rb +3 -0
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
- data/acceptance/basics/.kitchen.yml +4 -0
- data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +19 -0
- data/acceptance/basics/test/integration/chef-current-install/serverspec/spec_helper.rb +6 -0
- data/acceptance/basics/test/integration/helpers/serverspec/Gemfile +8 -0
- data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -0
- data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -0
- data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -0
- data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +101 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -0
- data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +44 -0
- data/acceptance/data-collector/.kitchen.yml +9 -0
- data/acceptance/data-collector/Berksfile +3 -0
- data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +208 -0
- data/acceptance/data-collector/test/integration/helpers/serverspec/Gemfile +8 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/metadata.rb +1 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/verify.rb +61 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +41 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
- data/acceptance/top-cookbooks/.gitignore +1 -0
- data/acceptance/top-cookbooks/.kitchen.chocolatey.yml +6 -0
- data/acceptance/top-cookbooks/.kitchen.iis.yml +4 -0
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -0
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -0
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -0
- data/acceptance/top-cookbooks/.kitchen.powershell.yml +4 -0
- data/acceptance/top-cookbooks/.kitchen.sql_server.yml +5 -0
- data/acceptance/top-cookbooks/.kitchen.winbox.yml +8 -0
- data/acceptance/top-cookbooks/.kitchen.windows.yml +38 -0
- data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -0
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
- data/acceptance/trivial/.kitchen.yml +7 -0
- data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -0
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -0
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
- data/acceptance/windows-service/.kitchen.yml +7 -0
- data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -0
- data/chef-universal-mingw32.gemspec +2 -2
- data/chef.gemspec +10 -10
- data/distro/powershell/chef/Chef.PowerShell.dll +0 -0
- data/distro/powershell/chef/Newtonsoft.Json.dll +0 -0
- data/lib/chef/api_client.rb +1 -1
- data/lib/chef/api_client/registration.rb +10 -2
- data/lib/chef/api_client_v1.rb +7 -6
- data/lib/chef/application.rb +75 -46
- data/lib/chef/application/client.rb +17 -19
- data/lib/chef/application/solo.rb +13 -16
- data/lib/chef/application/windows_service.rb +5 -5
- data/lib/chef/audit/audit_event_proxy.rb +1 -1
- data/lib/chef/audit/audit_reporter.rb +12 -12
- data/lib/chef/audit/runner.rb +2 -2
- data/lib/chef/chef_fs/chef_fs_data_store.rb +17 -31
- data/lib/chef/chef_fs/command_line.rb +9 -9
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +2 -2
- data/lib/chef/chef_fs/file_system_cache.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +2 -2
- data/lib/chef/client.rb +61 -41
- data/lib/chef/config.rb +1 -2
- data/lib/chef/config_fetcher.rb +1 -1
- data/lib/chef/cookbook/chefignore.rb +2 -2
- data/lib/chef/cookbook/cookbook_collection.rb +2 -2
- data/lib/chef/cookbook/cookbook_version_loader.rb +0 -1
- data/lib/chef/cookbook/gem_installer.rb +4 -4
- data/lib/chef/cookbook/manifest_v2.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +2 -3
- data/lib/chef/cookbook/remote_file_vendor.rb +4 -4
- data/lib/chef/cookbook/synchronizer.rb +2 -2
- data/lib/chef/cookbook/syntax_check.rb +4 -4
- data/lib/chef/cookbook_loader.rb +10 -2
- data/lib/chef/cookbook_site_streaming_uploader.rb +4 -4
- data/lib/chef/cookbook_uploader.rb +2 -3
- data/lib/chef/cookbook_version.rb +5 -11
- data/lib/chef/data_bag.rb +1 -3
- data/lib/chef/data_bag_item.rb +1 -7
- data/lib/chef/data_collector.rb +111 -35
- data/lib/chef/data_collector/messages.rb +2 -2
- data/lib/chef/data_collector/messages/helpers.rb +2 -4
- data/lib/chef/deprecated.rb +0 -4
- data/lib/chef/dsl/data_query.rb +1 -5
- data/lib/chef/dsl/include_attribute.rb +3 -7
- data/lib/chef/dsl/include_recipe.rb +1 -5
- data/lib/chef/dsl/platform_introspection.rb +9 -13
- data/lib/chef/dsl/reboot_pending.rb +1 -8
- data/lib/chef/dsl/recipe.rb +2 -12
- data/lib/chef/dsl/universal.rb +3 -3
- data/lib/chef/environment.rb +2 -4
- data/lib/chef/event_dispatch/dsl.rb +2 -2
- data/lib/chef/exceptions.rb +1 -1
- data/lib/chef/file_access_control/unix.rb +14 -14
- data/lib/chef/file_content_management/content_base.rb +3 -1
- data/lib/chef/file_content_management/deploy/cp.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +4 -4
- data/lib/chef/file_content_management/deploy/mv_windows.rb +1 -1
- data/lib/chef/file_content_management/tempfile.rb +1 -1
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +3 -3
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +3 -1
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +2 -2
- data/lib/chef/handler.rb +1 -3
- data/lib/chef/handler/json_file.rb +1 -2
- data/lib/chef/http.rb +23 -11
- data/lib/chef/http/auth_credentials.rb +1 -1
- data/lib/chef/http/basic_client.rb +16 -17
- data/lib/chef/http/decompressor.rb +6 -6
- data/lib/chef/http/http_request.rb +5 -5
- data/lib/chef/http/json_output.rb +2 -2
- data/lib/chef/http/socketless_chef_zero_client.rb +2 -2
- data/lib/chef/http/validate_content_length.rb +5 -5
- data/lib/chef/knife.rb +1 -1
- data/lib/chef/knife/bootstrap.rb +12 -37
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +7 -1
- data/lib/chef/knife/client_reregister.rb +1 -1
- data/lib/chef/knife/configure.rb +1 -3
- data/lib/chef/knife/cookbook_download.rb +2 -2
- data/lib/chef/knife/cookbook_metadata.rb +3 -3
- data/lib/chef/knife/cookbook_site_install.rb +2 -2
- data/lib/chef/knife/cookbook_site_share.rb +5 -5
- data/lib/chef/knife/cookbook_test.rb +2 -2
- data/lib/chef/knife/cookbook_upload.rb +2 -2
- data/lib/chef/knife/core/status_presenter.rb +22 -17
- data/lib/chef/knife/core/subcommand_loader.rb +1 -1
- data/lib/chef/knife/deps.rb +1 -1
- data/lib/chef/knife/environment_compare.rb +4 -4
- data/lib/chef/knife/exec.rb +3 -3
- data/lib/chef/knife/list.rb +1 -1
- data/lib/chef/knife/node_policy_set.rb +79 -0
- data/lib/chef/knife/osc_user_reregister.rb +1 -1
- data/lib/chef/knife/ssh.rb +35 -22
- data/lib/chef/knife/ssl_check.rb +3 -3
- data/lib/chef/knife/ssl_fetch.rb +1 -1
- data/lib/chef/knife/user_reregister.rb +1 -1
- data/lib/chef/knife/xargs.rb +1 -1
- data/lib/chef/mixin/api_version_request_handling.rb +2 -4
- data/lib/chef/mixin/create_path.rb +1 -1
- data/lib/chef/mixin/deprecation.rb +14 -14
- data/lib/chef/mixin/from_file.rb +5 -0
- data/lib/chef/mixin/get_source_from_package.rb +2 -2
- data/lib/chef/mixin/homebrew_user.rb +13 -2
- data/lib/chef/mixin/openssl_helper.rb +119 -0
- data/lib/chef/mixin/params_validate.rb +2 -8
- data/lib/chef/mixin/powershell_exec.rb +105 -0
- data/lib/chef/mixin/provides.rb +3 -2
- data/lib/chef/mixin/securable.rb +1 -5
- data/lib/chef/mixin/shell_out.rb +2 -2
- data/lib/chef/mixin/template.rb +1 -3
- data/lib/chef/mixin/user_context.rb +6 -3
- data/lib/chef/mixin/why_run.rb +6 -11
- data/lib/chef/monkey_patches/net_http.rb +7 -7
- data/lib/chef/monologger.rb +2 -86
- data/lib/chef/node.rb +30 -20
- data/lib/chef/node/attribute.rb +1 -6
- data/lib/chef/node/attribute_collections.rb +2 -2
- data/lib/chef/node/immutable_collections.rb +1 -1
- data/lib/chef/node/mixin/immutablize_array.rb +110 -3
- data/lib/chef/node/mixin/immutablize_hash.rb +111 -5
- data/lib/chef/node_map.rb +5 -23
- data/lib/chef/platform/query_helpers.rb +0 -12
- data/lib/chef/policy_builder/dynamic.rb +1 -1
- data/lib/chef/policy_builder/expand_node_object.rb +1 -1
- data/lib/chef/policy_builder/policyfile.rb +17 -1
- data/lib/chef/powershell.rb +55 -0
- data/lib/chef/property.rb +12 -34
- data/lib/chef/provider.rb +16 -39
- data/lib/chef/provider/apt_preference.rb +3 -3
- data/lib/chef/provider/apt_repository.rb +116 -34
- data/lib/chef/provider/batch.rb +1 -1
- data/lib/chef/provider/cookbook_file/content.rb +1 -1
- data/lib/chef/provider/cron.rb +10 -10
- data/lib/chef/provider/cron/unix.rb +3 -3
- data/lib/chef/provider/directory.rb +3 -3
- data/lib/chef/provider/dsc_resource.rb +4 -4
- data/lib/chef/provider/dsc_script.rb +4 -4
- data/lib/chef/provider/execute.rb +9 -5
- data/lib/chef/provider/file.rb +12 -12
- data/lib/chef/provider/git.rb +14 -14
- data/lib/chef/provider/group.rb +6 -6
- data/lib/chef/provider/group/aix.rb +1 -1
- data/lib/chef/provider/group/dscl.rb +4 -4
- data/lib/chef/provider/group/groupadd.rb +4 -4
- data/lib/chef/provider/group/groupmod.rb +3 -3
- data/lib/chef/provider/group/pw.rb +4 -4
- data/lib/chef/provider/group/windows.rb +2 -2
- data/lib/chef/provider/http_request.rb +12 -12
- data/lib/chef/provider/ifconfig.rb +6 -6
- data/lib/chef/provider/ifconfig/aix.rb +1 -1
- data/lib/chef/provider/ifconfig/debian.rb +3 -5
- data/lib/chef/provider/launchd.rb +1 -1
- data/lib/chef/provider/link.rb +6 -6
- data/lib/chef/provider/log.rb +1 -1
- data/lib/chef/provider/lwrp_base.rb +2 -2
- data/lib/chef/provider/mdadm.rb +10 -10
- data/lib/chef/provider/mount.rb +12 -12
- data/lib/chef/provider/mount/aix.rb +20 -21
- data/lib/chef/provider/mount/mount.rb +20 -15
- data/lib/chef/provider/mount/solaris.rb +6 -6
- data/lib/chef/provider/mount/windows.rb +7 -7
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/ohai.rb +1 -1
- data/lib/chef/provider/osx_profile.rb +8 -8
- data/lib/chef/provider/package.rb +56 -42
- data/lib/chef/provider/package/apt.rb +24 -14
- data/lib/chef/provider/package/{aix.rb → bff.rb} +12 -12
- data/lib/chef/provider/package/cab.rb +3 -3
- data/lib/chef/provider/package/chocolatey.rb +1 -9
- data/lib/chef/provider/package/dnf/python_helper.rb +6 -6
- data/lib/chef/provider/package/dpkg.rb +9 -9
- data/lib/chef/provider/package/freebsd/base.rb +2 -2
- data/lib/chef/provider/package/freebsd/pkg.rb +2 -2
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/homebrew.rb +3 -3
- data/lib/chef/provider/package/ips.rb +2 -2
- data/lib/chef/provider/package/macports.rb +3 -3
- data/lib/chef/provider/package/msu.rb +2 -2
- data/lib/chef/provider/package/openbsd.rb +3 -3
- data/lib/chef/provider/package/pacman.rb +3 -3
- data/lib/chef/provider/package/paludis.rb +2 -2
- data/lib/chef/provider/package/portage.rb +27 -33
- data/lib/chef/provider/package/powershell.rb +24 -9
- data/lib/chef/provider/package/rpm.rb +5 -6
- data/lib/chef/provider/package/rubygems.rb +32 -28
- data/lib/chef/provider/package/smartos.rb +6 -6
- data/lib/chef/provider/package/solaris.rb +10 -10
- data/lib/chef/provider/package/windows.rb +6 -15
- data/lib/chef/provider/package/windows/exe.rb +6 -4
- data/lib/chef/provider/package/windows/msi.rb +8 -6
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -6
- data/lib/chef/provider/package/yum.rb +167 -398
- data/lib/chef/provider/package/yum/python_helper.rb +221 -0
- data/lib/chef/provider/package/yum/rpm_utils.rb +10 -1
- data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +79 -0
- data/lib/chef/provider/package/yum/simplejson/__init__.py +318 -0
- data/lib/chef/provider/package/yum/simplejson/__init__.pyc +0 -0
- data/lib/chef/provider/package/yum/simplejson/decoder.py +354 -0
- data/lib/chef/provider/package/yum/simplejson/decoder.pyc +0 -0
- data/lib/chef/provider/package/yum/simplejson/encoder.py +440 -0
- data/lib/chef/provider/package/yum/simplejson/encoder.pyc +0 -0
- data/lib/chef/provider/package/yum/simplejson/scanner.py +65 -0
- data/lib/chef/provider/package/yum/simplejson/scanner.pyc +0 -0
- data/lib/chef/provider/package/yum/simplejson/tool.py +37 -0
- data/lib/chef/provider/package/yum/version.rb +56 -0
- data/lib/chef/provider/package/yum/yum_cache.rb +33 -316
- data/lib/chef/provider/package/yum/yum_helper.py +198 -0
- data/lib/chef/provider/package/zypper.rb +9 -13
- data/lib/chef/provider/powershell_script.rb +3 -3
- data/lib/chef/provider/reboot.rb +3 -3
- data/lib/chef/provider/registry_key.rb +16 -4
- data/lib/chef/provider/remote_directory.rb +1 -3
- data/lib/chef/provider/remote_file/cache_control_data.rb +1 -1
- data/lib/chef/provider/remote_file/content.rb +4 -4
- data/lib/chef/provider/remote_file/http.rb +5 -3
- data/lib/chef/provider/remote_file/local_file.rb +1 -1
- data/lib/chef/provider/remote_file/network_file.rb +2 -2
- data/lib/chef/provider/route.rb +12 -11
- data/lib/chef/provider/ruby_block.rb +1 -1
- data/lib/chef/provider/script.rb +2 -2
- data/lib/chef/provider/service.rb +14 -14
- data/lib/chef/provider/service/aix.rb +3 -3
- data/lib/chef/provider/service/aixinit.rb +2 -2
- data/lib/chef/provider/service/debian.rb +5 -5
- data/lib/chef/provider/service/freebsd.rb +3 -3
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +8 -8
- data/lib/chef/provider/service/openbsd.rb +1 -1
- data/lib/chef/provider/service/simple.rb +7 -7
- data/lib/chef/provider/service/systemd.rb +4 -4
- data/lib/chef/provider/service/upstart.rb +10 -9
- data/lib/chef/provider/service/windows.rb +245 -70
- data/lib/chef/provider/subversion.rb +8 -8
- data/lib/chef/provider/systemd_unit.rb +25 -6
- data/lib/chef/provider/user.rb +10 -10
- data/lib/chef/provider/user/aix.rb +3 -3
- data/lib/chef/provider/user/dscl.rb +2 -2
- data/lib/chef/provider/user/pw.rb +4 -4
- data/lib/chef/provider/user/solaris.rb +1 -1
- data/lib/chef/provider/user/useradd.rb +3 -3
- data/lib/chef/provider/user/windows.rb +4 -4
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
- data/lib/chef/provider/{env.rb → windows_env.rb} +55 -19
- data/lib/chef/provider/windows_task.rb +27 -27
- data/lib/chef/provider/zypper_repository.rb +7 -7
- data/lib/chef/provider_resolver.rb +4 -4
- data/lib/chef/providers.rb +2 -9
- data/lib/chef/resource.rb +19 -13
- data/lib/chef/resource/action_class.rb +2 -2
- data/lib/chef/resource/apt_package.rb +10 -4
- data/lib/chef/resource/apt_preference.rb +20 -7
- data/lib/chef/resource/apt_repository.rb +21 -12
- data/lib/chef/resource/apt_update.rb +3 -3
- data/lib/chef/resource/bash.rb +6 -4
- data/lib/chef/resource/batch.rb +8 -6
- data/lib/chef/resource/bff_package.rb +8 -5
- data/lib/chef/resource/breakpoint.rb +9 -6
- data/lib/chef/resource/build_essential.rb +139 -0
- data/lib/chef/resource/cab_package.rb +5 -4
- data/lib/chef/resource/chef_gem.rb +1 -1
- data/lib/chef/resource/chef_handler.rb +130 -0
- data/lib/chef/resource/chocolatey_package.rb +6 -6
- data/lib/chef/resource/cookbook_file.rb +12 -9
- data/lib/chef/resource/cron.rb +14 -75
- data/lib/chef/resource/csh.rb +6 -4
- data/lib/chef/resource/directory.rb +7 -4
- data/lib/chef/resource/dmg_package.rb +161 -0
- data/lib/chef/resource/dnf_package.rb +10 -7
- data/lib/chef/resource/dpkg_package.rb +5 -3
- data/lib/chef/resource/dsc_resource.rb +11 -28
- data/lib/chef/resource/dsc_script.rb +14 -37
- data/lib/chef/resource/execute.rb +15 -78
- data/lib/chef/resource/file.rb +6 -5
- data/lib/chef/resource/file/verification.rb +5 -1
- data/lib/chef/resource/freebsd_package.rb +2 -1
- data/lib/chef/resource/gem_package.rb +6 -3
- data/lib/chef/resource/git.rb +4 -15
- data/lib/chef/resource/group.rb +7 -46
- data/lib/chef/resource/homebrew_cask.rb +98 -0
- data/lib/chef/resource/homebrew_package.rb +3 -3
- data/lib/chef/resource/homebrew_tap.rb +86 -0
- data/lib/chef/resource/hostname.rb +249 -0
- data/lib/chef/resource/http_request.rb +8 -22
- data/lib/chef/resource/ifconfig.rb +3 -2
- data/lib/chef/resource/ips_package.rb +4 -3
- data/lib/chef/resource/ksh.rb +7 -6
- data/lib/chef/resource/launchd.rb +4 -4
- data/lib/chef/resource/link.rb +18 -56
- data/lib/chef/resource/log.rb +6 -8
- data/lib/chef/resource/lwrp_base.rb +4 -5
- data/lib/chef/resource/macos_userdefaults.rb +133 -0
- data/lib/chef/resource/macosx_service.rb +7 -23
- data/lib/chef/resource/macports_package.rb +2 -1
- data/lib/chef/resource/mdadm.rb +13 -84
- data/lib/chef/resource/mount.rb +21 -127
- data/lib/chef/resource/msu_package.rb +4 -4
- data/lib/chef/resource/ohai.rb +5 -3
- data/lib/chef/resource/ohai_hint.rb +93 -0
- data/lib/chef/resource/openbsd_package.rb +3 -3
- data/lib/chef/resource/openssl_dhparam.rb +80 -0
- data/lib/chef/resource/openssl_rsa_private_key.rb +93 -0
- data/lib/chef/resource/openssl_rsa_public_key.rb +73 -0
- data/lib/chef/resource/osx_profile.rb +9 -10
- data/lib/chef/resource/package.rb +8 -6
- data/lib/chef/resource/pacman_package.rb +3 -2
- data/lib/chef/resource/paludis_package.rb +4 -4
- data/lib/chef/resource/perl.rb +6 -4
- data/lib/chef/resource/portage_package.rb +3 -6
- data/lib/chef/resource/powershell_package.rb +9 -13
- data/lib/chef/resource/powershell_script.rb +9 -8
- data/lib/chef/resource/python.rb +5 -4
- data/lib/chef/resource/reboot.rb +8 -9
- data/lib/chef/resource/registry_key.rb +9 -19
- data/lib/chef/resource/remote_directory.rb +5 -3
- data/lib/chef/resource/remote_file.rb +11 -50
- data/lib/chef/resource/resource_notification.rb +2 -2
- data/lib/chef/resource/rhsm_errata.rb +44 -0
- data/lib/chef/resource/rhsm_errata_level.rb +51 -0
- data/lib/chef/resource/rhsm_register.rb +162 -0
- data/lib/chef/resource/rhsm_repo.rb +62 -0
- data/lib/chef/resource/rhsm_subscription.rb +95 -0
- data/lib/chef/resource/route.rb +3 -1
- data/lib/chef/resource/rpm_package.rb +3 -3
- data/lib/chef/resource/ruby.rb +6 -4
- data/lib/chef/resource/ruby_block.rb +6 -17
- data/lib/chef/resource/scm.rb +14 -146
- data/lib/chef/resource/script.rb +7 -5
- data/lib/chef/resource/service.rb +2 -1
- data/lib/chef/resource/smartos_package.rb +4 -3
- data/lib/chef/resource/solaris_package.rb +3 -2
- data/lib/chef/resource/subversion.rb +20 -4
- data/lib/chef/resource/sudo.rb +231 -0
- data/lib/chef/resource/support/sudoer.erb +18 -0
- data/lib/chef/resource/swap_file.rb +209 -0
- data/lib/chef/resource/sysctl.rb +111 -0
- data/lib/chef/resource/systemd_unit.rb +6 -5
- data/lib/chef/resource/template.rb +6 -27
- data/lib/chef/resource/windows_ad_join.rb +92 -0
- data/lib/chef/resource/windows_auto_run.rb +87 -0
- data/lib/chef/resource/{env.rb → windows_env.rb} +11 -5
- data/lib/chef/resource/windows_feature.rb +95 -0
- data/lib/chef/resource/windows_feature_dism.rb +226 -0
- data/lib/chef/resource/windows_feature_powershell.rb +256 -0
- data/lib/chef/resource/windows_font.rb +127 -0
- data/lib/chef/resource/windows_package.rb +5 -3
- data/lib/chef/resource/windows_pagefile.rb +206 -0
- data/lib/chef/resource/windows_path.rb +3 -3
- data/lib/chef/resource/windows_printer.rb +148 -0
- data/lib/chef/resource/windows_printer_port.rb +136 -0
- data/lib/chef/resource/windows_service.rb +79 -38
- data/lib/chef/resource/windows_shortcut.rb +79 -0
- data/lib/chef/resource/windows_task.rb +5 -5
- data/lib/chef/resource/yum_package.rb +8 -2
- data/lib/chef/resource/yum_repository.rb +12 -5
- data/lib/chef/resource/zypper_package.rb +5 -3
- data/lib/chef/resource/zypper_repository.rb +17 -12
- data/lib/chef/resource_inspector.rb +89 -0
- data/lib/chef/resource_reporter.rb +5 -6
- data/lib/chef/resource_resolver.rb +4 -4
- data/lib/chef/resources.rb +31 -6
- data/lib/chef/role.rb +1 -3
- data/lib/chef/run_context.rb +21 -12
- data/lib/chef/run_context/cookbook_compiler.rb +18 -9
- data/lib/chef/search/query.rb +1 -2
- data/lib/chef/shell.rb +0 -1
- data/lib/chef/shell/model_wrapper.rb +1 -1
- data/lib/chef/shell/shell_session.rb +4 -3
- data/lib/chef/util/diff.rb +2 -2
- data/lib/chef/util/dsc/configuration_generator.rb +1 -1
- data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
- data/lib/chef/util/dsc/local_configuration_manager.rb +4 -4
- data/lib/chef/util/selinux.rb +1 -1
- data/lib/chef/util/windows/logon_session.rb +5 -2
- data/lib/chef/util/windows/net_user.rb +2 -2
- data/lib/chef/util/windows/volume.rb +0 -4
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/error.rb +2 -2
- data/lib/chef/win32/api/net.rb +1 -1
- data/lib/chef/win32/api/security.rb +11 -0
- data/lib/chef/win32/eventlog.rb +2 -2
- data/lib/chef/win32/mutex.rb +1 -1
- data/lib/chef/win32/registry.rb +17 -17
- data/lib/chef/win32/security.rb +34 -12
- data/lib/chef/win32/security/sid.rb +1 -2
- data/lib/chef/win32/version.rb +2 -15
- data/lib/chef/win32_service_constants.rb +143 -0
- data/spec/data/mixin/invalid_data.rb +3 -0
- data/spec/data/mixin/real_data.rb +2 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.s390x.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.s390x.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/repomd.xml +19 -53
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +2 -2
- data/spec/functional/http/simple_spec.rb +6 -6
- data/spec/functional/mixin/from_file_spec.rb +82 -0
- data/spec/functional/notifications_spec.rb +1 -1
- data/spec/functional/resource/{package_spec.rb → apt_package_spec.rb} +4 -4
- data/spec/functional/resource/dnf_package_spec.rb +115 -115
- data/spec/functional/resource/ifconfig_spec.rb +1 -2
- data/spec/functional/resource/link_spec.rb +9 -13
- data/spec/functional/resource/powershell_script_spec.rb +0 -2
- data/spec/functional/resource/registry_spec.rb +3 -3
- data/spec/functional/resource/remote_file_spec.rb +4 -4
- data/spec/functional/resource/user/windows_spec.rb +3 -1
- data/spec/functional/resource/windows_env_spec.rb +285 -0
- data/spec/functional/resource/windows_task_spec.rb +303 -2
- data/spec/functional/resource/yum_package_spec.rb +949 -0
- data/spec/functional/root_alias_spec.rb +1 -1
- data/spec/functional/win32/security_spec.rb +60 -7
- data/spec/functional/win32/versions_spec.rb +7 -9
- data/spec/integration/client/client_spec.rb +99 -7
- data/spec/integration/knife/chef_fs_data_store_spec.rb +23 -4
- data/spec/integration/recipes/recipe_dsl_spec.rb +26 -26
- data/spec/integration/recipes/resource_action_spec.rb +25 -120
- data/spec/spec_helper.rb +10 -2
- data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -2
- data/spec/support/lib/chef/resource/zen_master.rb +1 -3
- data/spec/support/mock/constant.rb +1 -1
- data/spec/support/platform_helpers.rb +24 -7
- data/spec/support/shared/context/client.rb +13 -10
- data/spec/support/shared/examples/client.rb +50 -0
- data/spec/support/shared/functional/file_resource.rb +1 -1
- data/spec/support/shared/functional/securable_resource.rb +2 -2
- data/spec/support/shared/integration/knife_support.rb +5 -0
- data/spec/unit/application/client_spec.rb +39 -13
- data/spec/unit/application/solo_spec.rb +1 -8
- data/spec/unit/application_spec.rb +66 -2
- data/spec/unit/audit/audit_event_proxy_spec.rb +1 -1
- data/spec/unit/audit/audit_reporter_spec.rb +16 -16
- data/spec/unit/chef_fs/file_system_spec.rb +1 -1
- data/spec/unit/client_spec.rb +3 -4
- data/spec/unit/cookbook/metadata_spec.rb +1 -1
- data/spec/unit/cookbook_loader_spec.rb +6 -6
- data/spec/unit/cookbook_manifest_spec.rb +2 -2
- data/spec/unit/cookbook_version_file_specificity_spec.rb +5 -25
- data/spec/unit/data_collector/messages/helpers_spec.rb +9 -0
- data/spec/unit/data_collector/resource_report_spec.rb +3 -3
- data/spec/unit/data_collector_spec.rb +135 -1
- data/spec/unit/dsl/reboot_pending_spec.rb +0 -13
- data/spec/unit/dsl/recipe_spec.rb +0 -13
- data/spec/unit/environment_spec.rb +2 -2
- data/spec/unit/exceptions_spec.rb +1 -1
- data/spec/unit/http/validate_content_length_spec.rb +5 -5
- data/spec/unit/knife/bootstrap_spec.rb +11 -15
- data/spec/unit/knife/configure_spec.rb +1 -2
- data/spec/unit/knife/cookbook_test_spec.rb +2 -2
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +2 -2
- data/spec/unit/knife/core/node_editor_spec.rb +6 -6
- data/spec/unit/knife/environment_compare_spec.rb +3 -3
- data/spec/unit/knife/node_edit_spec.rb +3 -1
- data/spec/unit/knife/node_policy_set_spec.rb +122 -0
- data/spec/unit/knife/osc_user_reregister_spec.rb +1 -1
- data/spec/unit/knife/osc_user_show_spec.rb +1 -1
- data/spec/unit/knife/ssh_spec.rb +18 -0
- data/spec/unit/log/syslog_spec.rb +2 -4
- data/spec/unit/log/winevt_spec.rb +2 -3
- data/spec/unit/lwrp_spec.rb +4 -4
- data/spec/unit/mixin/homebrew_user_spec.rb +1 -5
- data/spec/unit/mixin/openssl_helper_spec.rb +252 -0
- data/spec/unit/mixin/powershell_exec_spec.rb +43 -0
- data/spec/unit/node/attribute_spec.rb +3 -3
- data/spec/unit/node/immutable_collections_spec.rb +11 -1
- data/spec/unit/node_map_spec.rb +2 -2
- data/spec/unit/node_spec.rb +11 -16
- data/spec/unit/platform/query_helpers_spec.rb +0 -13
- data/spec/unit/policy_builder/policyfile_spec.rb +79 -2
- data/spec/unit/property/validation_spec.rb +51 -4
- data/spec/unit/provider/apt_repository_spec.rb +97 -32
- data/spec/unit/provider/cookbook_file_spec.rb +2 -1
- data/spec/unit/provider/cron/unix_spec.rb +8 -3
- data/spec/unit/provider/cron_spec.rb +27 -32
- data/spec/unit/provider/file_spec.rb +2 -1
- data/spec/unit/provider/group/dscl_spec.rb +7 -8
- data/spec/unit/provider/group/gpasswd_spec.rb +5 -2
- data/spec/unit/provider/group/groupmod_spec.rb +6 -3
- data/spec/unit/provider/group/pw_spec.rb +5 -2
- data/spec/unit/provider/link_spec.rb +6 -4
- data/spec/unit/provider/log_spec.rb +18 -13
- data/spec/unit/provider/mount/aix_spec.rb +1 -9
- data/spec/unit/provider/mount/mount_spec.rb +22 -0
- data/spec/unit/provider/osx_profile_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +431 -411
- data/spec/unit/provider/package/{aix_spec.rb → bff_spec.rb} +7 -5
- data/spec/unit/provider/package/chocolatey_spec.rb +0 -13
- data/spec/unit/provider/package/homebrew_spec.rb +2 -1
- data/spec/unit/provider/package/portage_spec.rb +11 -147
- data/spec/unit/provider/package/powershell_spec.rb +208 -57
- data/spec/unit/provider/package/rubygems_spec.rb +11 -2
- data/spec/unit/provider/package/windows_spec.rb +0 -19
- data/spec/unit/provider/package/yum/python_helper_spec.rb +29 -0
- data/spec/unit/provider/package/yum/yum_cache_spec.rb +86 -4
- data/spec/unit/provider/package/zypper_spec.rb +8 -0
- data/spec/unit/provider/package_spec.rb +47 -20
- data/spec/unit/provider/registry_key_spec.rb +7 -1
- data/spec/unit/provider/remote_directory_spec.rb +1 -1
- data/spec/unit/provider/remote_file_spec.rb +2 -1
- data/spec/unit/provider/service/macosx_spec.rb +4 -2
- data/spec/unit/provider/service/systemd_service_spec.rb +2 -10
- data/spec/unit/provider/service/windows_spec.rb +447 -30
- data/spec/unit/provider/systemd_unit_spec.rb +50 -13
- data/spec/unit/provider/template_spec.rb +2 -4
- data/spec/unit/provider/user/windows_spec.rb +3 -0
- data/spec/unit/provider/{env_spec.rb → windows_env_spec.rb} +102 -12
- data/spec/unit/provider/zypper_repository_spec.rb +4 -2
- data/spec/unit/provider_resolver_spec.rb +23 -38
- data/spec/unit/recipe_spec.rb +4 -4
- data/spec/unit/resource/apt_package_spec.rb +4 -0
- data/spec/unit/resource/apt_preference_spec.rb +0 -5
- data/spec/unit/resource/apt_repository_spec.rb +35 -10
- data/spec/unit/resource/apt_update_spec.rb +0 -5
- data/spec/unit/resource/bash_spec.rb +2 -3
- data/spec/unit/resource/batch_spec.rb +1 -4
- data/spec/unit/resource/{timestamped_deploy_spec.rb → build_essential_spec.rb} +10 -11
- data/spec/unit/resource/cab_package_spec.rb +1 -3
- data/{lib/chef/mixin/language_include_attribute.rb → spec/unit/resource/chef_handler_spec.rb} +13 -12
- data/spec/unit/resource/chocolatey_package_spec.rb +1 -3
- data/spec/unit/resource/cron_spec.rb +0 -5
- data/spec/unit/resource/csh_spec.rb +2 -3
- data/spec/unit/resource/directory_spec.rb +1 -6
- data/{lib/chef/resource/deploy_revision.rb → spec/unit/resource/dmg_package_spec.rb} +14 -10
- data/spec/unit/resource/dnf_package_spec.rb +20 -26
- data/spec/unit/resource/file_spec.rb +1 -1
- data/spec/unit/resource/freebsd_package_spec.rb +22 -23
- data/spec/unit/resource/gem_package_spec.rb +3 -5
- data/spec/unit/resource/git_spec.rb +1 -2
- data/spec/unit/resource/group_spec.rb +0 -5
- data/spec/unit/resource/homebrew_cask_spec.rb +35 -0
- data/spec/unit/resource/homebrew_package_spec.rb +4 -0
- data/spec/unit/resource/homebrew_tap_spec.rb +39 -0
- data/spec/unit/resource/hostname_spec.rb +43 -0
- data/spec/unit/resource/http_request_spec.rb +0 -5
- data/spec/unit/resource/ips_package_spec.rb +4 -0
- data/spec/unit/resource/ksh_spec.rb +2 -3
- data/spec/unit/resource/launchd_spec.rb +0 -5
- data/spec/unit/resource/link_spec.rb +1 -6
- data/spec/unit/resource/log_spec.rb +0 -5
- data/spec/unit/resource/macos_user_defaults_spec.rb +45 -0
- data/spec/unit/resource/mdadm_spec.rb +0 -5
- data/spec/unit/resource/mount_spec.rb +1 -6
- data/spec/unit/resource/msu_package_spec.rb +1 -3
- data/spec/unit/resource/ohai_hint_spec.rb +43 -0
- data/spec/unit/resource/ohai_spec.rb +0 -5
- data/spec/unit/resource/openbsd_package_spec.rb +8 -12
- data/spec/unit/resource/openssl_dhparam.rb +51 -0
- data/spec/unit/resource/openssl_rsa_private_key_spec.rb +59 -0
- data/spec/unit/resource/openssl_rsa_public_key_spec.rb +39 -0
- data/spec/unit/resource/osx_profile_spec.rb +0 -5
- data/spec/unit/resource/package_spec.rb +0 -5
- data/spec/unit/resource/perl_spec.rb +2 -3
- data/spec/unit/resource/portage_package_spec.rb +3 -7
- data/spec/unit/resource/powershell_package_spec.rb +11 -4
- data/spec/unit/resource/python_spec.rb +0 -5
- data/spec/unit/resource/reboot_spec.rb +0 -5
- data/spec/unit/resource/registry_key_spec.rb +5 -6
- data/spec/unit/resource/remote_directory_spec.rb +0 -5
- data/spec/unit/resource/remote_file_spec.rb +1 -5
- data/spec/unit/resource/rhsm_errata_level_spec.rb +46 -0
- data/{lib/chef/mixin/language_include_recipe.rb → spec/unit/resource/rhsm_errata_spec.rb} +14 -10
- data/spec/unit/resource/rhsm_register_spec.rb +199 -0
- data/spec/unit/resource/rhsm_repo_spec.rb +59 -0
- data/spec/unit/resource/rhsm_subscription_spec.rb +93 -0
- data/spec/unit/resource/route_spec.rb +1 -6
- data/spec/unit/resource/rpm_package_spec.rb +4 -0
- data/spec/unit/resource/ruby_block_spec.rb +0 -5
- data/spec/unit/resource/ruby_spec.rb +0 -5
- data/spec/unit/resource/scm_spec.rb +0 -15
- data/spec/unit/resource/service_spec.rb +0 -5
- data/spec/unit/resource/subversion_spec.rb +12 -0
- data/spec/unit/resource/sudo_spec.rb +92 -0
- data/spec/unit/resource/swap_file_spec.rb +40 -0
- data/spec/unit/resource/sysctl_spec.rb +56 -0
- data/spec/unit/resource/systemd_unit_spec.rb +5 -7
- data/spec/unit/resource/template_spec.rb +1 -3
- data/spec/unit/resource/user_spec.rb +0 -5
- data/spec/unit/resource/windows_ad_join.rb +45 -0
- data/spec/unit/resource/windows_auto_run_spec.rb +50 -0
- data/spec/unit/resource/{env_spec.rb → windows_env_spec.rb} +19 -21
- data/spec/unit/resource/windows_feature.rb +41 -0
- data/spec/unit/resource/windows_feature_dism.rb +51 -0
- data/spec/unit/resource/windows_feature_powershell.rb +51 -0
- data/spec/unit/resource/windows_font_spec.rb +44 -0
- data/spec/unit/resource/windows_package_spec.rb +2 -2
- data/spec/unit/resource/windows_pagefile_spec.rb +45 -0
- data/spec/unit/resource/windows_printer_port_spec.rb +45 -0
- data/spec/unit/resource/windows_printer_spec.rb +45 -0
- data/spec/unit/resource/windows_service_spec.rb +25 -4
- data/spec/unit/resource/windows_shortcut_spec.rb +39 -0
- data/spec/unit/resource/windows_task_spec.rb +0 -5
- data/spec/unit/resource/yum_repository_spec.rb +4 -0
- data/spec/unit/resource/zypper_repository_spec.rb +4 -0
- data/spec/unit/resource_inspector_spec.rb +60 -0
- data/spec/unit/resource_reporter_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +0 -5
- data/spec/unit/shell/shell_session_spec.rb +0 -1
- data/spec/unit/user_spec.rb +1 -1
- data/spec/unit/util/windows/logon_session_spec.rb +2 -1
- data/spec/unit/win32/security_spec.rb +44 -1
- data/spec/unit/windows_service_spec.rb +4 -2
- data/tasks/announce.rb +1 -1
- data/tasks/cbgb.rb +84 -0
- data/tasks/dependencies.rb +38 -2
- data/tasks/maintainers.rb +7 -7
- data/tasks/rspec.rb +2 -2
- data/tasks/templates/prerelease.md.erb +2 -11
- data/tasks/templates/release.md.erb +1 -9
- metadata +225 -96
- data/lib/chef/knife/help.rb +0 -101
- data/lib/chef/knife/help_topics.rb +0 -4
- data/lib/chef/knife/index_rebuild.rb +0 -133
- data/lib/chef/mixin/language.rb +0 -48
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +0 -35
- data/lib/chef/provider/deploy.rb +0 -470
- data/lib/chef/provider/deploy/revision.rb +0 -107
- data/lib/chef/provider/deploy/timestamped.rb +0 -34
- data/lib/chef/provider/env/windows.rb +0 -76
- data/lib/chef/provider/erl_call.rb +0 -76
- data/lib/chef/provider/package/yum/yum-dump.py +0 -307
- data/lib/chef/resource/deploy.rb +0 -449
- data/lib/chef/resource/erl_call.rb +0 -90
- data/lib/chef/resource/timestamped_deploy.rb +0 -26
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2 +0 -0
- data/spec/functional/resource/deploy_revision_spec.rb +0 -881
- data/spec/functional/resource/env_spec.rb +0 -192
- data/spec/unit/knife/index_rebuild_spec.rb +0 -125
- data/spec/unit/knife/knife_help.rb +0 -92
- data/spec/unit/provider/deploy/revision_spec.rb +0 -110
- data/spec/unit/provider/deploy/timestamped_spec.rb +0 -40
- data/spec/unit/provider/deploy_spec.rb +0 -641
- data/spec/unit/provider/env/windows_spec.rb +0 -103
- data/spec/unit/provider/erl_call_spec.rb +0 -77
- data/spec/unit/provider/package/yum_spec.rb +0 -2294
- data/spec/unit/resource/deploy_revision_spec.rb +0 -42
- data/spec/unit/resource/deploy_spec.rb +0 -283
- data/spec/unit/resource/erl_call_spec.rb +0 -81
@@ -31,7 +31,6 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
31
31
|
|
32
32
|
describe "action :create" do
|
33
33
|
after { delete_task }
|
34
|
-
|
35
34
|
context "when frequency and frequency_modifier are not passed" do
|
36
35
|
subject do
|
37
36
|
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
@@ -51,6 +50,12 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
51
50
|
# This test will not work across locales
|
52
51
|
expect(task_details[:StartDate]).to eq("9/20/2017")
|
53
52
|
end
|
53
|
+
|
54
|
+
it "does not converge the resource if it is already converged" do
|
55
|
+
subject.run_action(:create)
|
56
|
+
subject.run_action(:create)
|
57
|
+
expect(subject).not_to be_updated_by_last_action
|
58
|
+
end
|
54
59
|
end
|
55
60
|
|
56
61
|
context "frequency :minute" do
|
@@ -71,6 +76,12 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
71
76
|
expect(task_details[:"Repeat:Every"]).to eq("0 Hour(s), 15 Minute(s)")
|
72
77
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
73
78
|
end
|
79
|
+
|
80
|
+
it "does not converge the resource if it is already converged" do
|
81
|
+
subject.run_action(:create)
|
82
|
+
subject.run_action(:create)
|
83
|
+
expect(subject).not_to be_updated_by_last_action
|
84
|
+
end
|
74
85
|
end
|
75
86
|
|
76
87
|
context "frequency :hourly" do
|
@@ -91,6 +102,12 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
91
102
|
expect(task_details[:"Repeat:Every"]).to eq("3 Hour(s), 0 Minute(s)")
|
92
103
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
93
104
|
end
|
105
|
+
|
106
|
+
it "does not converge the resource if it is already converged" do
|
107
|
+
subject.run_action(:create)
|
108
|
+
subject.run_action(:create)
|
109
|
+
expect(subject).not_to be_updated_by_last_action
|
110
|
+
end
|
94
111
|
end
|
95
112
|
|
96
113
|
context "frequency :daily" do
|
@@ -111,6 +128,12 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
111
128
|
expect(task_details[:Days]).to eq("Every 1 day(s)")
|
112
129
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
113
130
|
end
|
131
|
+
|
132
|
+
it "does not converge the resource if it is already converged" do
|
133
|
+
subject.run_action(:create)
|
134
|
+
subject.run_action(:create)
|
135
|
+
expect(subject).not_to be_updated_by_last_action
|
136
|
+
end
|
114
137
|
end
|
115
138
|
|
116
139
|
context "frequency :monthly" do
|
@@ -132,6 +155,13 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
132
155
|
expect(task_details[:Months]).to eq("FEB, APR, JUN, AUG, OCT, DEC")
|
133
156
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
134
157
|
end
|
158
|
+
|
159
|
+
it "does not converge the resource if it is already converged" do
|
160
|
+
skip "This functionality needs to be handle"
|
161
|
+
subject.run_action(:create)
|
162
|
+
subject.run_action(:create)
|
163
|
+
expect(subject).not_to be_updated_by_last_action
|
164
|
+
end
|
135
165
|
end
|
136
166
|
|
137
167
|
context "frequency :once" do
|
@@ -160,6 +190,13 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
160
190
|
expect(task_details[:StartTime]).to eq("5:00:00 PM")
|
161
191
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
162
192
|
end
|
193
|
+
|
194
|
+
it "does not converge the resource if it is already converged" do
|
195
|
+
subject.start_time "17:00"
|
196
|
+
subject.run_action(:create)
|
197
|
+
subject.run_action(:create)
|
198
|
+
expect(subject).not_to be_updated_by_last_action
|
199
|
+
end
|
163
200
|
end
|
164
201
|
end
|
165
202
|
|
@@ -169,7 +206,6 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
169
206
|
new_resource.command task_name
|
170
207
|
new_resource.run_level :highest
|
171
208
|
new_resource.frequency :none
|
172
|
-
new_resource.random_delay ""
|
173
209
|
new_resource
|
174
210
|
end
|
175
211
|
|
@@ -186,6 +222,42 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
186
222
|
expect(task_details[:none]).to eq(true)
|
187
223
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
188
224
|
end
|
225
|
+
|
226
|
+
it "does not converge the resource if it is already converged" do
|
227
|
+
subject.run_action(:create)
|
228
|
+
subject.run_action(:create)
|
229
|
+
expect(subject).not_to be_updated_by_last_action
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
context "frequency :onstart" do
|
234
|
+
subject do
|
235
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
236
|
+
new_resource.command task_name
|
237
|
+
new_resource.run_level :highest
|
238
|
+
new_resource.frequency :onstart
|
239
|
+
new_resource
|
240
|
+
end
|
241
|
+
|
242
|
+
it "creates the scheduled task to run at system start up" do
|
243
|
+
subject.run_action(:create)
|
244
|
+
task_details = windows_task_provider.send(:load_task_hash, task_name)
|
245
|
+
|
246
|
+
expect(task_details[:TaskName]).to eq("\\chef-client")
|
247
|
+
expect(task_details[:TaskToRun]).to eq("chef-client")
|
248
|
+
expect(task_details[:ScheduleType]).to eq("At system start up")
|
249
|
+
expect(task_details[:StartTime]).to eq("N/A")
|
250
|
+
expect(task_details[:StartDate]).to eq("N/A")
|
251
|
+
expect(task_details[:NextRunTime]).to eq("N/A")
|
252
|
+
expect(task_details[:onstart]).to eq(true)
|
253
|
+
expect(task_details[:run_level]).to eq("HighestAvailable")
|
254
|
+
end
|
255
|
+
|
256
|
+
it "does not converge the resource if it is already converged" do
|
257
|
+
subject.run_action(:create)
|
258
|
+
subject.run_action(:create)
|
259
|
+
expect(subject).not_to be_updated_by_last_action
|
260
|
+
end
|
189
261
|
end
|
190
262
|
|
191
263
|
context "frequency :weekly" do
|
@@ -207,6 +279,13 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
207
279
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
208
280
|
end
|
209
281
|
|
282
|
+
it "does not converge the resource if it is already converged" do
|
283
|
+
skip "This functionality needs to be handle"
|
284
|
+
subject.run_action(:create)
|
285
|
+
subject.run_action(:create)
|
286
|
+
expect(subject).not_to be_updated_by_last_action
|
287
|
+
end
|
288
|
+
|
210
289
|
context "when days are provided" do
|
211
290
|
it "creates the scheduled task to run on particular days" do
|
212
291
|
subject.day "Mon, Fri"
|
@@ -220,6 +299,14 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
220
299
|
expect(task_details[:Months]).to eq("Every 2 week(s)")
|
221
300
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
222
301
|
end
|
302
|
+
|
303
|
+
it "does not converge the resource if it is already converged" do
|
304
|
+
subject.day "Mon, Fri"
|
305
|
+
subject.frequency_modifier 2
|
306
|
+
subject.run_action(:create)
|
307
|
+
subject.run_action(:create)
|
308
|
+
expect(subject).not_to be_updated_by_last_action
|
309
|
+
end
|
223
310
|
end
|
224
311
|
|
225
312
|
context "when invalid day is passed" do
|
@@ -254,6 +341,12 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
254
341
|
expect(task_details[:ScheduleType]).to eq("At logon time")
|
255
342
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
256
343
|
end
|
344
|
+
|
345
|
+
it "does not converge the resource if it is already converged" do
|
346
|
+
subject.run_action(:create)
|
347
|
+
subject.run_action(:create)
|
348
|
+
expect(subject).not_to be_updated_by_last_action
|
349
|
+
end
|
257
350
|
end
|
258
351
|
|
259
352
|
context "frequency :on_idle" do
|
@@ -282,6 +375,13 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
282
375
|
expect(task_details[:run_level]).to eq("HighestAvailable")
|
283
376
|
expect(task_details[:idle_time]).to eq("PT20M")
|
284
377
|
end
|
378
|
+
|
379
|
+
it "does not converge the resource if it is already converged" do
|
380
|
+
subject.idle_time 20
|
381
|
+
subject.run_action(:create)
|
382
|
+
subject.run_action(:create)
|
383
|
+
expect(subject).not_to be_updated_by_last_action
|
384
|
+
end
|
285
385
|
end
|
286
386
|
end
|
287
387
|
|
@@ -305,6 +405,14 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
305
405
|
expect(task_details[:random_delay]).to eq("PT20M")
|
306
406
|
end
|
307
407
|
|
408
|
+
it "does not converge the resource if it is already converged" do
|
409
|
+
subject.frequency :minute
|
410
|
+
subject.random_delay "PT20M"
|
411
|
+
subject.run_action(:create)
|
412
|
+
subject.run_action(:create)
|
413
|
+
expect(subject).not_to be_updated_by_last_action
|
414
|
+
end
|
415
|
+
|
308
416
|
it "raises error if invalid random_delay is passed" do
|
309
417
|
subject.frequency :minute
|
310
418
|
subject.random_delay "abc"
|
@@ -319,6 +427,192 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
319
427
|
end
|
320
428
|
end
|
321
429
|
|
430
|
+
describe "Examples of idempotent checks for each frequency" do
|
431
|
+
after { delete_task }
|
432
|
+
context "For frequency :once" do
|
433
|
+
subject do
|
434
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
435
|
+
new_resource.command task_name
|
436
|
+
new_resource.run_level :highest
|
437
|
+
new_resource.frequency :once
|
438
|
+
new_resource.start_time "17:00"
|
439
|
+
new_resource
|
440
|
+
end
|
441
|
+
|
442
|
+
it "create task by adding frequency_modifier as 1" do
|
443
|
+
subject.frequency_modifier 1
|
444
|
+
subject.run_action(:create)
|
445
|
+
subject.run_action(:create)
|
446
|
+
expect(subject).not_to be_updated_by_last_action
|
447
|
+
end
|
448
|
+
|
449
|
+
it "create task by adding frequency_modifier as 5" do
|
450
|
+
skip "This functionality needs to be handle"
|
451
|
+
subject.frequency_modifier 5
|
452
|
+
subject.run_action(:create)
|
453
|
+
subject.run_action(:create)
|
454
|
+
expect(subject).not_to be_updated_by_last_action
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
context "For frequency :none" do
|
459
|
+
subject do
|
460
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
461
|
+
new_resource.command task_name
|
462
|
+
new_resource.run_level :highest
|
463
|
+
new_resource.frequency :none
|
464
|
+
new_resource
|
465
|
+
end
|
466
|
+
|
467
|
+
it "create task by adding frequency_modifier as 1" do
|
468
|
+
subject.frequency_modifier 1
|
469
|
+
subject.run_action(:create)
|
470
|
+
subject.run_action(:create)
|
471
|
+
expect(subject).not_to be_updated_by_last_action
|
472
|
+
end
|
473
|
+
|
474
|
+
it "create task by adding frequency_modifier as 5" do
|
475
|
+
skip "This functionality needs to be handle"
|
476
|
+
subject.frequency_modifier 5
|
477
|
+
subject.run_action(:create)
|
478
|
+
subject.run_action(:create)
|
479
|
+
expect(subject).not_to be_updated_by_last_action
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
483
|
+
context "For frequency :weekly" do
|
484
|
+
subject do
|
485
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
486
|
+
new_resource.command task_name
|
487
|
+
new_resource.run_level :highest
|
488
|
+
new_resource.frequency :weekly
|
489
|
+
new_resource
|
490
|
+
end
|
491
|
+
|
492
|
+
it "create task by adding start_day" do
|
493
|
+
skip "This functionality needs to be handle"
|
494
|
+
subject.start_day "12/28/2018"
|
495
|
+
subject.run_action(:create)
|
496
|
+
subject.run_action(:create)
|
497
|
+
expect(subject).not_to be_updated_by_last_action
|
498
|
+
end
|
499
|
+
|
500
|
+
it "create task by adding frequency_modifier and random_delay" do
|
501
|
+
skip "This functionality needs to be handle"
|
502
|
+
subject.frequency_modifier 3
|
503
|
+
subject.random_delay "60"
|
504
|
+
subject.run_action(:create)
|
505
|
+
subject.run_action(:create)
|
506
|
+
expect(subject).not_to be_updated_by_last_action
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
context "For frequency :monthly" do
|
511
|
+
subject do
|
512
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
513
|
+
new_resource.command task_name
|
514
|
+
new_resource.run_level :highest
|
515
|
+
new_resource.frequency :once
|
516
|
+
new_resource.start_time "17:00"
|
517
|
+
new_resource
|
518
|
+
end
|
519
|
+
|
520
|
+
it "create task by adding frequency_modifier as 1" do
|
521
|
+
subject.frequency_modifier 1
|
522
|
+
subject.run_action(:create)
|
523
|
+
subject.run_action(:create)
|
524
|
+
expect(subject).not_to be_updated_by_last_action
|
525
|
+
end
|
526
|
+
|
527
|
+
it "create task by adding frequency_modifier as 5" do
|
528
|
+
skip "This functionality needs to be handle"
|
529
|
+
subject.frequency_modifier 5
|
530
|
+
subject.run_action(:create)
|
531
|
+
subject.run_action(:create)
|
532
|
+
expect(subject).not_to be_updated_by_last_action
|
533
|
+
end
|
534
|
+
end
|
535
|
+
|
536
|
+
context "For frequency :hourly" do
|
537
|
+
subject do
|
538
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
539
|
+
new_resource.command task_name
|
540
|
+
new_resource.run_level :highest
|
541
|
+
new_resource.frequency :hourly
|
542
|
+
new_resource.frequency_modifier 5
|
543
|
+
new_resource.random_delay "2400"
|
544
|
+
new_resource
|
545
|
+
end
|
546
|
+
|
547
|
+
it "create task by adding frequency_modifier and random_delay" do
|
548
|
+
skip "This functionality needs to be handle"
|
549
|
+
subject.run_action(:create)
|
550
|
+
subject.run_action(:create)
|
551
|
+
expect(subject).not_to be_updated_by_last_action
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
context "For frequency :daily" do
|
556
|
+
subject do
|
557
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
558
|
+
new_resource.command task_name
|
559
|
+
new_resource.run_level :highest
|
560
|
+
new_resource.frequency :daily
|
561
|
+
new_resource.frequency_modifier 2
|
562
|
+
new_resource.random_delay "2400"
|
563
|
+
new_resource
|
564
|
+
end
|
565
|
+
|
566
|
+
it "create task by adding frequency_modifier and random_delay" do
|
567
|
+
skip "This functionality needs to be handle"
|
568
|
+
subject.run_action(:create)
|
569
|
+
subject.run_action(:create)
|
570
|
+
expect(subject).not_to be_updated_by_last_action
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
574
|
+
context "For frequency :on_logon" do
|
575
|
+
subject do
|
576
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
577
|
+
new_resource.command task_name
|
578
|
+
new_resource.frequency :on_logon
|
579
|
+
new_resource
|
580
|
+
end
|
581
|
+
|
582
|
+
it "create task by adding frequency_modifier and random_delay" do
|
583
|
+
subject.run_action(:create)
|
584
|
+
subject.run_action(:create)
|
585
|
+
expect(subject).not_to be_updated_by_last_action
|
586
|
+
end
|
587
|
+
|
588
|
+
it "create task by adding frequency_modifier as 5" do
|
589
|
+
skip "This functionality needs to be handle"
|
590
|
+
subject.frequency_modifier 5
|
591
|
+
subject.run_action(:create)
|
592
|
+
subject.run_action(:create)
|
593
|
+
expect(subject).not_to be_updated_by_last_action
|
594
|
+
end
|
595
|
+
end
|
596
|
+
|
597
|
+
context "For frequency :onstart" do
|
598
|
+
subject do
|
599
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
600
|
+
new_resource.command task_name
|
601
|
+
new_resource.run_level :highest
|
602
|
+
new_resource.frequency :onstart
|
603
|
+
new_resource.frequency_modifier 20
|
604
|
+
new_resource
|
605
|
+
end
|
606
|
+
|
607
|
+
it "create task by adding frequency_modifier as 20" do
|
608
|
+
skip "This functionality needs to be handle"
|
609
|
+
subject.run_action(:create)
|
610
|
+
subject.run_action(:create)
|
611
|
+
expect(subject).not_to be_updated_by_last_action
|
612
|
+
end
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
322
616
|
describe "#after_created" do
|
323
617
|
subject do
|
324
618
|
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
@@ -397,6 +691,13 @@ describe Chef::Resource::WindowsTask, :windows_only do
|
|
397
691
|
task_details = windows_task_provider.send(:load_task_hash, task_name)
|
398
692
|
expect(task_details).to eq(false)
|
399
693
|
end
|
694
|
+
|
695
|
+
it "does not converge the resource if it is already converged" do
|
696
|
+
subject.run_action(:create)
|
697
|
+
subject.run_action(:delete)
|
698
|
+
subject.run_action(:delete)
|
699
|
+
expect(subject).not_to be_updated_by_last_action
|
700
|
+
end
|
400
701
|
end
|
401
702
|
|
402
703
|
describe "action :run" do
|
@@ -0,0 +1,949 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2016-2018, Chef Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "spec_helper"
|
19
|
+
require "functional/resource/base"
|
20
|
+
require "chef/mixin/shell_out"
|
21
|
+
|
22
|
+
# run this test only for following platforms.
|
23
|
+
exclude_test = !(%w{rhel fedora}.include?(ohai[:platform_family]) && !File.exist?("/usr/bin/dnf"))
|
24
|
+
describe Chef::Resource::YumPackage, :requires_root, :external => exclude_test do
|
25
|
+
include Chef::Mixin::ShellOut
|
26
|
+
|
27
|
+
# NOTE: every single test here either needs to explicitly call flush_cache or needs to explicitly
|
28
|
+
# call preinstall (which explicitly calls flush_cache). It is your responsibility to do one or the
|
29
|
+
# other in order to minimize calling flush_cache a half dozen times per test.
|
30
|
+
|
31
|
+
def flush_cache
|
32
|
+
Chef::Resource::YumPackage.new("shouldnt-matter", run_context).run_action(:flush_cache)
|
33
|
+
end
|
34
|
+
|
35
|
+
def preinstall(*rpms)
|
36
|
+
rpms.each do |rpm|
|
37
|
+
shell_out!("rpm -ivh #{CHEF_SPEC_ASSETS}/yumrepo/#{rpm}")
|
38
|
+
end
|
39
|
+
flush_cache
|
40
|
+
end
|
41
|
+
|
42
|
+
before(:all) do
|
43
|
+
shell_out!("yum -y install yum-utils")
|
44
|
+
end
|
45
|
+
|
46
|
+
before(:each) do
|
47
|
+
File.open("/etc/yum.repos.d/chef-yum-localtesting.repo", "w+") do |f|
|
48
|
+
f.write <<-EOF
|
49
|
+
[chef-yum-localtesting]
|
50
|
+
name=Chef DNF spec testing repo
|
51
|
+
baseurl=file://#{CHEF_SPEC_ASSETS}/yumrepo
|
52
|
+
enable=1
|
53
|
+
gpgcheck=0
|
54
|
+
EOF
|
55
|
+
end
|
56
|
+
shell_out!("rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | grep chef_rpm | xargs -r rpm -e")
|
57
|
+
# next line is useful cleanup if you happen to have been testing both yum + dnf func tests on the same box and
|
58
|
+
# have some dnf garbage left around
|
59
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-dnf-localtesting.repo"
|
60
|
+
end
|
61
|
+
|
62
|
+
after(:all) do
|
63
|
+
shell_out!("rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | grep chef_rpm | xargs -r rpm -e")
|
64
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-yum-localtesting.repo"
|
65
|
+
end
|
66
|
+
|
67
|
+
let(:package_name) { "chef_rpm" }
|
68
|
+
let(:yum_package) do
|
69
|
+
r = Chef::Resource::YumPackage.new(package_name, run_context)
|
70
|
+
r.options("--nogpgcheck")
|
71
|
+
r
|
72
|
+
end
|
73
|
+
|
74
|
+
def pkg_arch
|
75
|
+
ohai[:kernel][:machine]
|
76
|
+
end
|
77
|
+
|
78
|
+
describe ":install" do
|
79
|
+
context "vanilla use case" do
|
80
|
+
let(:package_name) { "chef_rpm" }
|
81
|
+
|
82
|
+
it "installs if the package is not installed" do
|
83
|
+
flush_cache
|
84
|
+
yum_package.run_action(:install)
|
85
|
+
expect(yum_package.updated_by_last_action?).to be true
|
86
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
87
|
+
end
|
88
|
+
|
89
|
+
it "does not install if the package is installed" do
|
90
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
91
|
+
yum_package.run_action(:install)
|
92
|
+
expect(yum_package.updated_by_last_action?).to be false
|
93
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
94
|
+
end
|
95
|
+
|
96
|
+
it "does not install twice" do
|
97
|
+
flush_cache
|
98
|
+
yum_package.run_action(:install)
|
99
|
+
expect(yum_package.updated_by_last_action?).to be true
|
100
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
101
|
+
yum_package.run_action(:install)
|
102
|
+
expect(yum_package.updated_by_last_action?).to be false
|
103
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
104
|
+
end
|
105
|
+
|
106
|
+
it "does not install if the prior version package is installed" do
|
107
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
108
|
+
yum_package.run_action(:install)
|
109
|
+
expect(yum_package.updated_by_last_action?).to be false
|
110
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
111
|
+
end
|
112
|
+
|
113
|
+
it "does not install if the i686 package is installed", :intel_64bit do
|
114
|
+
skip "FIXME: do nothing, or install the #{pkg_arch} version?"
|
115
|
+
preinstall("chef_rpm-1.10-1.i686.rpm")
|
116
|
+
yum_package.run_action(:install)
|
117
|
+
expect(yum_package.updated_by_last_action?).to be false
|
118
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.i686$")
|
119
|
+
end
|
120
|
+
|
121
|
+
it "does not install if the prior version i686 package is installed", :intel_64bit do
|
122
|
+
skip "FIXME: do nothing, or install the #{pkg_arch} version?"
|
123
|
+
preinstall("chef_rpm-1.2-1.i686.rpm")
|
124
|
+
yum_package.run_action(:install)
|
125
|
+
expect(yum_package.updated_by_last_action?).to be false
|
126
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.i686$")
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "with versions or globs in the name" do
|
131
|
+
it "works with a version" do
|
132
|
+
flush_cache
|
133
|
+
yum_package.package_name("chef_rpm-1.10")
|
134
|
+
yum_package.run_action(:install)
|
135
|
+
expect(yum_package.updated_by_last_action?).to be true
|
136
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
137
|
+
end
|
138
|
+
|
139
|
+
it "works with an older version" do
|
140
|
+
flush_cache
|
141
|
+
yum_package.package_name("chef_rpm-1.2")
|
142
|
+
yum_package.run_action(:install)
|
143
|
+
expect(yum_package.updated_by_last_action?).to be true
|
144
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
145
|
+
end
|
146
|
+
|
147
|
+
it "works with an evra" do
|
148
|
+
flush_cache
|
149
|
+
yum_package.package_name("chef_rpm-0:1.2-1.#{pkg_arch}")
|
150
|
+
yum_package.run_action(:install)
|
151
|
+
expect(yum_package.updated_by_last_action?).to be true
|
152
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
153
|
+
end
|
154
|
+
|
155
|
+
it "works with version and release" do
|
156
|
+
flush_cache
|
157
|
+
yum_package.package_name("chef_rpm-1.2-1")
|
158
|
+
yum_package.run_action(:install)
|
159
|
+
expect(yum_package.updated_by_last_action?).to be true
|
160
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
161
|
+
end
|
162
|
+
|
163
|
+
it "works with a version glob" do
|
164
|
+
flush_cache
|
165
|
+
yum_package.package_name("chef_rpm-1*")
|
166
|
+
yum_package.run_action(:install)
|
167
|
+
expect(yum_package.updated_by_last_action?).to be true
|
168
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
169
|
+
end
|
170
|
+
|
171
|
+
it "works with a name glob + version glob" do
|
172
|
+
flush_cache
|
173
|
+
yum_package.package_name("chef_rp*-1*")
|
174
|
+
yum_package.run_action(:install)
|
175
|
+
expect(yum_package.updated_by_last_action?).to be true
|
176
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
177
|
+
end
|
178
|
+
|
179
|
+
it "upgrades when the installed version does not match the version string" do
|
180
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
181
|
+
yum_package.package_name("chef_rpm-1.10")
|
182
|
+
yum_package.run_action(:install)
|
183
|
+
expect(yum_package.updated_by_last_action?).to be true
|
184
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}")
|
185
|
+
end
|
186
|
+
|
187
|
+
it "downgrades when the installed version is higher than the package_name version" do
|
188
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
189
|
+
yum_package.allow_downgrade true
|
190
|
+
yum_package.package_name("chef_rpm-1.2")
|
191
|
+
yum_package.run_action(:install)
|
192
|
+
expect(yum_package.updated_by_last_action?).to be true
|
193
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
# version only matches the actual yum version, does not work with epoch or release or combined evr
|
198
|
+
context "with version property" do
|
199
|
+
it "matches the full version" do
|
200
|
+
flush_cache
|
201
|
+
yum_package.package_name("chef_rpm")
|
202
|
+
yum_package.version("1.10")
|
203
|
+
yum_package.run_action(:install)
|
204
|
+
expect(yum_package.updated_by_last_action?).to be true
|
205
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
206
|
+
end
|
207
|
+
|
208
|
+
it "matches with a glob" do
|
209
|
+
# we are unlikely to ever fix this. if you've found this comment you should use e.g. "tcpdump-4*" in
|
210
|
+
# the name field rather than trying to use a name of "tcpdump" and a version of "4*".
|
211
|
+
pending "this does not work, is not easily supported by the underlying yum libraries, but does work in the new dnf_package provider"
|
212
|
+
flush_cache
|
213
|
+
yum_package.package_name("chef_rpm")
|
214
|
+
yum_package.version("1*")
|
215
|
+
yum_package.run_action(:install)
|
216
|
+
expect(yum_package.updated_by_last_action?).to be true
|
217
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
218
|
+
end
|
219
|
+
|
220
|
+
it "matches the vr" do
|
221
|
+
flush_cache
|
222
|
+
yum_package.package_name("chef_rpm")
|
223
|
+
yum_package.version("1.10-1")
|
224
|
+
yum_package.run_action(:install)
|
225
|
+
expect(yum_package.updated_by_last_action?).to be true
|
226
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
227
|
+
end
|
228
|
+
|
229
|
+
it "matches the evr" do
|
230
|
+
flush_cache
|
231
|
+
yum_package.package_name("chef_rpm")
|
232
|
+
yum_package.version("0:1.10-1")
|
233
|
+
yum_package.run_action(:install)
|
234
|
+
expect(yum_package.updated_by_last_action?).to be true
|
235
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
236
|
+
end
|
237
|
+
|
238
|
+
it "matches with a vr glob" do
|
239
|
+
pending "doesn't work on command line either"
|
240
|
+
flush_cache
|
241
|
+
yum_package.package_name("chef_rpm")
|
242
|
+
yum_package.version("1.10-1*")
|
243
|
+
yum_package.run_action(:install)
|
244
|
+
expect(yum_package.updated_by_last_action?).to be true
|
245
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
246
|
+
end
|
247
|
+
|
248
|
+
it "matches with an evr glob" do
|
249
|
+
pending "doesn't work on command line either"
|
250
|
+
flush_cache
|
251
|
+
yum_package.package_name("chef_rpm")
|
252
|
+
yum_package.version("0:1.10-1*")
|
253
|
+
yum_package.run_action(:install)
|
254
|
+
expect(yum_package.updated_by_last_action?).to be true
|
255
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context "downgrades" do
|
260
|
+
it "downgrades the package when allow_downgrade" do
|
261
|
+
flush_cache
|
262
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
263
|
+
yum_package.package_name("chef_rpm")
|
264
|
+
yum_package.allow_downgrade true
|
265
|
+
yum_package.version("1.2-1")
|
266
|
+
yum_package.run_action(:install)
|
267
|
+
expect(yum_package.updated_by_last_action?).to be true
|
268
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
context "with arches", :intel_64bit do
|
273
|
+
it "installs with 64-bit arch in the name" do
|
274
|
+
flush_cache
|
275
|
+
yum_package.package_name("chef_rpm.#{pkg_arch}")
|
276
|
+
yum_package.run_action(:install)
|
277
|
+
expect(yum_package.updated_by_last_action?).to be true
|
278
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
279
|
+
end
|
280
|
+
|
281
|
+
it "installs with 32-bit arch in the name" do
|
282
|
+
flush_cache
|
283
|
+
yum_package.package_name("chef_rpm.i686")
|
284
|
+
yum_package.run_action(:install)
|
285
|
+
expect(yum_package.updated_by_last_action?).to be true
|
286
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.i686$")
|
287
|
+
end
|
288
|
+
|
289
|
+
it "installs with 64-bit arch in the property" do
|
290
|
+
flush_cache
|
291
|
+
yum_package.package_name("chef_rpm")
|
292
|
+
yum_package.arch("#{pkg_arch}")
|
293
|
+
yum_package.run_action(:install)
|
294
|
+
expect(yum_package.updated_by_last_action?).to be true
|
295
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
296
|
+
end
|
297
|
+
|
298
|
+
it "installs with 32-bit arch in the property" do
|
299
|
+
flush_cache
|
300
|
+
yum_package.package_name("chef_rpm")
|
301
|
+
yum_package.arch("i686")
|
302
|
+
yum_package.run_action(:install)
|
303
|
+
expect(yum_package.updated_by_last_action?).to be true
|
304
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.i686$")
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
context "with constraints" do
|
309
|
+
it "with nothing installed, it installs the latest version", not_rhel5: true do
|
310
|
+
flush_cache
|
311
|
+
yum_package.package_name("chef_rpm >= 1.2")
|
312
|
+
yum_package.run_action(:install)
|
313
|
+
expect(yum_package.updated_by_last_action?).to be true
|
314
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
315
|
+
end
|
316
|
+
|
317
|
+
it "when it is met, it does nothing", not_rhel5: true do
|
318
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
319
|
+
yum_package.package_name("chef_rpm >= 1.2")
|
320
|
+
yum_package.run_action(:install)
|
321
|
+
expect(yum_package.updated_by_last_action?).to be false
|
322
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
323
|
+
end
|
324
|
+
|
325
|
+
it "when it is met, it does nothing", not_rhel5: true do
|
326
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
327
|
+
yum_package.package_name("chef_rpm >= 1.2")
|
328
|
+
yum_package.run_action(:install)
|
329
|
+
expect(yum_package.updated_by_last_action?).to be false
|
330
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
331
|
+
end
|
332
|
+
|
333
|
+
it "with nothing intalled, it installs the latest version", not_rhel5: true do
|
334
|
+
flush_cache
|
335
|
+
yum_package.package_name("chef_rpm > 1.2")
|
336
|
+
yum_package.run_action(:install)
|
337
|
+
expect(yum_package.updated_by_last_action?).to be true
|
338
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
339
|
+
end
|
340
|
+
|
341
|
+
it "when it is not met by an installed rpm, it upgrades", not_rhel5: true do
|
342
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
343
|
+
yum_package.package_name("chef_rpm > 1.2")
|
344
|
+
yum_package.run_action(:install)
|
345
|
+
expect(yum_package.updated_by_last_action?).to be true
|
346
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
347
|
+
end
|
348
|
+
|
349
|
+
it "with an equality constraint, when it is not met by an installed rpm, it upgrades", not_rhel5: true do
|
350
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
351
|
+
yum_package.package_name("chef_rpm = 1.10")
|
352
|
+
yum_package.run_action(:install)
|
353
|
+
expect(yum_package.updated_by_last_action?).to be true
|
354
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
355
|
+
end
|
356
|
+
|
357
|
+
it "with an equality constraint, when it is met by an installed rpm, it does nothing", not_rhel5: true do
|
358
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
359
|
+
yum_package.package_name("chef_rpm = 1.2")
|
360
|
+
yum_package.run_action(:install)
|
361
|
+
expect(yum_package.updated_by_last_action?).to be false
|
362
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
363
|
+
end
|
364
|
+
|
365
|
+
it "when it is met by an installed rpm, it does nothing", not_rhel5: true do
|
366
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
367
|
+
yum_package.package_name("chef_rpm > 1.2")
|
368
|
+
yum_package.run_action(:install)
|
369
|
+
expect(yum_package.updated_by_last_action?).to be false
|
370
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
371
|
+
end
|
372
|
+
|
373
|
+
it "when there is no solution to the contraint", not_rhel5: true do
|
374
|
+
flush_cache
|
375
|
+
yum_package.package_name("chef_rpm > 2.0")
|
376
|
+
expect { yum_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
377
|
+
end
|
378
|
+
|
379
|
+
it "when there is no solution to the contraint but an rpm is preinstalled", not_rhel5: true do
|
380
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
381
|
+
yum_package.package_name("chef_rpm > 2.0")
|
382
|
+
expect { yum_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
383
|
+
end
|
384
|
+
|
385
|
+
it "with a less than constraint, when nothing is installed, it installs", not_rhel5: true do
|
386
|
+
flush_cache
|
387
|
+
yum_package.allow_downgrade true
|
388
|
+
yum_package.package_name("chef_rpm < 1.10")
|
389
|
+
yum_package.run_action(:install)
|
390
|
+
expect(yum_package.updated_by_last_action?).to be true
|
391
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
392
|
+
end
|
393
|
+
|
394
|
+
it "with a less than constraint, when the install version matches, it does nothing", not_rhel5: true do
|
395
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
396
|
+
yum_package.allow_downgrade true
|
397
|
+
yum_package.package_name("chef_rpm < 1.10")
|
398
|
+
yum_package.run_action(:install)
|
399
|
+
expect(yum_package.updated_by_last_action?).to be false
|
400
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
401
|
+
end
|
402
|
+
|
403
|
+
it "with a less than constraint, when the install version fails, it should downgrade", not_rhel5: true do
|
404
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
405
|
+
yum_package.allow_downgrade true
|
406
|
+
yum_package.package_name("chef_rpm < 1.10")
|
407
|
+
yum_package.run_action(:install)
|
408
|
+
expect(yum_package.updated_by_last_action?).to be true
|
409
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
context "with source arguments" do
|
414
|
+
it "raises an exception when the package does not exist" do
|
415
|
+
flush_cache
|
416
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/this-file-better-not-exist.rpm")
|
417
|
+
expect { yum_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
418
|
+
end
|
419
|
+
|
420
|
+
it "does not raise a hard exception in why-run mode when the package does not exist" do
|
421
|
+
Chef::Config[:why_run] = true
|
422
|
+
flush_cache
|
423
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/this-file-better-not-exist.rpm")
|
424
|
+
yum_package.run_action(:install)
|
425
|
+
expect { yum_package.run_action(:install) }.not_to raise_error
|
426
|
+
end
|
427
|
+
|
428
|
+
it "installs the package when using the source argument" do
|
429
|
+
flush_cache
|
430
|
+
yum_package.name "something"
|
431
|
+
yum_package.package_name "somethingelse"
|
432
|
+
yum_package.source("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
433
|
+
yum_package.run_action(:install)
|
434
|
+
expect(yum_package.updated_by_last_action?).to be true
|
435
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
436
|
+
end
|
437
|
+
|
438
|
+
it "installs the package when the name is a path to a file" do
|
439
|
+
flush_cache
|
440
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
441
|
+
yum_package.run_action(:install)
|
442
|
+
expect(yum_package.updated_by_last_action?).to be true
|
443
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
444
|
+
end
|
445
|
+
|
446
|
+
it "downgrade on a local file raises an error", not_rhel5: true do
|
447
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
448
|
+
yum_package.version "1.2-1"
|
449
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
450
|
+
expect { yum_package.run_action(:install) }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
|
451
|
+
end
|
452
|
+
|
453
|
+
it "downgrade on a local file with allow_downgrade true works" do
|
454
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
455
|
+
yum_package.version "1.2-1"
|
456
|
+
yum_package.allow_downgrade true
|
457
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
458
|
+
yum_package.run_action(:install)
|
459
|
+
expect(yum_package.updated_by_last_action?).to be true
|
460
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
461
|
+
end
|
462
|
+
|
463
|
+
it "does not downgrade the package with :install" do
|
464
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
465
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
466
|
+
yum_package.run_action(:install)
|
467
|
+
expect(yum_package.updated_by_last_action?).to be false
|
468
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
469
|
+
end
|
470
|
+
|
471
|
+
it "does not upgrade the package with :install" do
|
472
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
473
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
474
|
+
yum_package.run_action(:install)
|
475
|
+
expect(yum_package.updated_by_last_action?).to be false
|
476
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
477
|
+
end
|
478
|
+
|
479
|
+
it "is idempotent when the package is already installed" do
|
480
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
481
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
482
|
+
yum_package.run_action(:install)
|
483
|
+
expect(yum_package.updated_by_last_action?).to be false
|
484
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
context "with no available version" do
|
489
|
+
it "works when a package is installed" do
|
490
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-yum-localtesting.repo"
|
491
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
492
|
+
yum_package.run_action(:install)
|
493
|
+
expect(yum_package.updated_by_last_action?).to be false
|
494
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
495
|
+
end
|
496
|
+
|
497
|
+
it "works with a local source" do
|
498
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-yum-localtesting.repo"
|
499
|
+
flush_cache
|
500
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
501
|
+
yum_package.run_action(:install)
|
502
|
+
expect(yum_package.updated_by_last_action?).to be true
|
503
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
context "multipackage with arches", :intel_64bit do
|
508
|
+
it "installs two rpms" do
|
509
|
+
flush_cache
|
510
|
+
yum_package.package_name([ "chef_rpm.#{pkg_arch}", "chef_rpm.i686" ] )
|
511
|
+
yum_package.run_action(:install)
|
512
|
+
expect(yum_package.updated_by_last_action?).to be true
|
513
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
|
514
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
|
515
|
+
end
|
516
|
+
|
517
|
+
it "does nothing if both are installed" do
|
518
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm", "chef_rpm-1.10-1.i686.rpm")
|
519
|
+
flush_cache
|
520
|
+
yum_package.package_name([ "chef_rpm.#{pkg_arch}", "chef_rpm.i686" ] )
|
521
|
+
yum_package.run_action(:install)
|
522
|
+
expect(yum_package.updated_by_last_action?).to be false
|
523
|
+
end
|
524
|
+
|
525
|
+
it "installs the second rpm if the first is installed" do
|
526
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
527
|
+
yum_package.package_name([ "chef_rpm.#{pkg_arch}", "chef_rpm.i686" ] )
|
528
|
+
yum_package.run_action(:install)
|
529
|
+
expect(yum_package.updated_by_last_action?).to be true
|
530
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
|
531
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
|
532
|
+
end
|
533
|
+
|
534
|
+
it "installs the first rpm if the second is installed" do
|
535
|
+
preinstall("chef_rpm-1.10-1.i686.rpm")
|
536
|
+
yum_package.package_name([ "chef_rpm.#{pkg_arch}", "chef_rpm.i686" ] )
|
537
|
+
yum_package.run_action(:install)
|
538
|
+
expect(yum_package.updated_by_last_action?).to be true
|
539
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
|
540
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
|
541
|
+
end
|
542
|
+
|
543
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
544
|
+
it "installs two rpms with multi-arch" do
|
545
|
+
flush_cache
|
546
|
+
yum_package.package_name(%w{chef_rpm chef_rpm} )
|
547
|
+
yum_package.arch([pkg_arch, "i686"])
|
548
|
+
yum_package.run_action(:install)
|
549
|
+
expect(yum_package.updated_by_last_action?).to be true
|
550
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
|
551
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
|
552
|
+
end
|
553
|
+
|
554
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
555
|
+
it "installs the second rpm if the first is installed (muti-arch)" do
|
556
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
557
|
+
yum_package.package_name(%w{chef_rpm chef_rpm} )
|
558
|
+
yum_package.arch([pkg_arch, "i686"])
|
559
|
+
yum_package.run_action(:install)
|
560
|
+
expect(yum_package.updated_by_last_action?).to be true
|
561
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
|
562
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
|
563
|
+
end
|
564
|
+
|
565
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
566
|
+
it "installs the first rpm if the second is installed (muti-arch)" do
|
567
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
568
|
+
yum_package.package_name(%w{chef_rpm chef_rpm} )
|
569
|
+
yum_package.arch([pkg_arch, "i686"])
|
570
|
+
yum_package.run_action(:install)
|
571
|
+
expect(yum_package.updated_by_last_action?).to be true
|
572
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
|
573
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
|
574
|
+
end
|
575
|
+
|
576
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
577
|
+
it "does nothing if both are installed (muti-arch)" do
|
578
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm", "chef_rpm-1.10-1.i686.rpm")
|
579
|
+
yum_package.package_name(%w{chef_rpm chef_rpm} )
|
580
|
+
yum_package.arch([pkg_arch, "i686"])
|
581
|
+
yum_package.run_action(:install)
|
582
|
+
expect(yum_package.updated_by_last_action?).to be false
|
583
|
+
end
|
584
|
+
end
|
585
|
+
|
586
|
+
context "repo controls" do
|
587
|
+
it "should fail with the repo disabled" do
|
588
|
+
flush_cache
|
589
|
+
yum_package.options("--disablerepo=chef-yum-localtesting")
|
590
|
+
expect { yum_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
591
|
+
end
|
592
|
+
|
593
|
+
it "should work to enable a disabled repo", not_rhel5: true do
|
594
|
+
shell_out!("yum-config-manager --disable chef-yum-localtesting")
|
595
|
+
flush_cache
|
596
|
+
expect { yum_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
597
|
+
flush_cache
|
598
|
+
yum_package.options("--enablerepo=chef-yum-localtesting")
|
599
|
+
yum_package.run_action(:install)
|
600
|
+
expect(yum_package.updated_by_last_action?).to be true
|
601
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
602
|
+
end
|
603
|
+
|
604
|
+
it "when an idempotent install action is run, does not leave repos disabled" do
|
605
|
+
flush_cache
|
606
|
+
# this is a bit tricky -- we need this action to be idempotent, so that it doesn't recycle any
|
607
|
+
# caches, but need it to hit whatavailable with the repo disabled. using :upgrade like this
|
608
|
+
# accomplishes both those goals (it would be easier if we had other rpms in this repo, but with
|
609
|
+
# one rpm we neeed to do this).
|
610
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
611
|
+
yum_package.options("--disablerepo=chef-yum-localtesting")
|
612
|
+
yum_package.run_action(:upgrade)
|
613
|
+
expect(yum_package.updated_by_last_action?).to be false
|
614
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
615
|
+
# now we're still using the same cache in the yum_helper.py cache and we test to see if the
|
616
|
+
# repo that we temporarily disabled is enabled on this pass.
|
617
|
+
yum_package.package_name("chef_rpm-1.10-1.#{pkg_arch}")
|
618
|
+
yum_package.options(nil)
|
619
|
+
yum_package.run_action(:install)
|
620
|
+
expect(yum_package.updated_by_last_action?).to be true
|
621
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
622
|
+
end
|
623
|
+
end
|
624
|
+
end
|
625
|
+
|
626
|
+
describe ":upgrade" do
|
627
|
+
|
628
|
+
context "with source arguments" do
|
629
|
+
it "installs the package when using the source argument" do
|
630
|
+
flush_cache
|
631
|
+
yum_package.name "something"
|
632
|
+
yum_package.package_name "somethingelse"
|
633
|
+
yum_package.source("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
634
|
+
yum_package.run_action(:upgrade)
|
635
|
+
expect(yum_package.updated_by_last_action?).to be true
|
636
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
637
|
+
end
|
638
|
+
|
639
|
+
it "installs the package when the name is a path to a file" do
|
640
|
+
flush_cache
|
641
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
642
|
+
yum_package.run_action(:upgrade)
|
643
|
+
expect(yum_package.updated_by_last_action?).to be true
|
644
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
645
|
+
end
|
646
|
+
|
647
|
+
it "downgrades the package when allow_downgrade is true" do
|
648
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
649
|
+
yum_package.allow_downgrade true
|
650
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
651
|
+
yum_package.run_action(:upgrade)
|
652
|
+
expect(yum_package.updated_by_last_action?).to be true
|
653
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
654
|
+
end
|
655
|
+
|
656
|
+
it "upgrades the package" do
|
657
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
658
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
659
|
+
yum_package.run_action(:upgrade)
|
660
|
+
expect(yum_package.updated_by_last_action?).to be true
|
661
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
662
|
+
end
|
663
|
+
|
664
|
+
it "is idempotent when the package is already installed" do
|
665
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
666
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
667
|
+
yum_package.run_action(:upgrade)
|
668
|
+
expect(yum_package.updated_by_last_action?).to be false
|
669
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
670
|
+
end
|
671
|
+
end
|
672
|
+
|
673
|
+
context "with no available version" do
|
674
|
+
it "works when a package is installed" do
|
675
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-yum-localtesting.repo"
|
676
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
677
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
678
|
+
yum_package.run_action(:upgrade)
|
679
|
+
expect(yum_package.updated_by_last_action?).to be false
|
680
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
681
|
+
end
|
682
|
+
|
683
|
+
it "works with a local source" do
|
684
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-yum-localtesting.repo"
|
685
|
+
flush_cache
|
686
|
+
yum_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
687
|
+
yum_package.run_action(:upgrade)
|
688
|
+
expect(yum_package.updated_by_last_action?).to be true
|
689
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
690
|
+
end
|
691
|
+
end
|
692
|
+
|
693
|
+
context "version pinning" do
|
694
|
+
it "with an equality pin in the name it upgrades a prior package" do
|
695
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
696
|
+
yum_package.package_name("chef_rpm-1.10")
|
697
|
+
yum_package.run_action(:upgrade)
|
698
|
+
expect(yum_package.updated_by_last_action?).to be true
|
699
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
700
|
+
end
|
701
|
+
|
702
|
+
it "with a prco equality pin in the name it upgrades a prior package", not_rhel5: true do
|
703
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
704
|
+
yum_package.package_name("chef_rpm == 1.10")
|
705
|
+
yum_package.run_action(:upgrade)
|
706
|
+
expect(yum_package.updated_by_last_action?).to be true
|
707
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
708
|
+
end
|
709
|
+
|
710
|
+
it "with an equality pin in the name it downgrades a later package" do
|
711
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
712
|
+
yum_package.allow_downgrade true
|
713
|
+
yum_package.package_name("chef_rpm-1.2")
|
714
|
+
yum_package.run_action(:upgrade)
|
715
|
+
expect(yum_package.updated_by_last_action?).to be true
|
716
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
717
|
+
end
|
718
|
+
|
719
|
+
it "with a prco equality pin in the name it downgrades a later package", not_rhel5: true do
|
720
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
721
|
+
yum_package.allow_downgrade true
|
722
|
+
yum_package.package_name("chef_rpm == 1.2")
|
723
|
+
yum_package.run_action(:upgrade)
|
724
|
+
expect(yum_package.updated_by_last_action?).to be true
|
725
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
726
|
+
end
|
727
|
+
|
728
|
+
it "with a > pin in the name and no rpm installed it installs", not_rhel5: true do
|
729
|
+
flush_cache
|
730
|
+
yum_package.package_name("chef_rpm > 1.2")
|
731
|
+
yum_package.run_action(:upgrade)
|
732
|
+
expect(yum_package.updated_by_last_action?).to be true
|
733
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
734
|
+
end
|
735
|
+
|
736
|
+
it "with a < pin in the name and no rpm installed it installs", not_rhel5: true do
|
737
|
+
flush_cache
|
738
|
+
yum_package.package_name("chef_rpm < 1.10")
|
739
|
+
yum_package.run_action(:upgrade)
|
740
|
+
expect(yum_package.updated_by_last_action?).to be true
|
741
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
742
|
+
end
|
743
|
+
|
744
|
+
it "with a > pin in the name and matching rpm installed it does nothing", not_rhel5: true do
|
745
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
746
|
+
yum_package.package_name("chef_rpm > 1.2")
|
747
|
+
yum_package.run_action(:upgrade)
|
748
|
+
expect(yum_package.updated_by_last_action?).to be false
|
749
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
750
|
+
end
|
751
|
+
|
752
|
+
it "with a < pin in the name and no rpm installed it installs", not_rhel5: true do
|
753
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
754
|
+
yum_package.package_name("chef_rpm < 1.10")
|
755
|
+
yum_package.run_action(:upgrade)
|
756
|
+
expect(yum_package.updated_by_last_action?).to be false
|
757
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
758
|
+
end
|
759
|
+
|
760
|
+
it "with a > pin in the name and non-matching rpm installed it upgrades", not_rhel5: true do
|
761
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
762
|
+
yum_package.package_name("chef_rpm > 1.2")
|
763
|
+
yum_package.run_action(:upgrade)
|
764
|
+
expect(yum_package.updated_by_last_action?).to be true
|
765
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
766
|
+
end
|
767
|
+
|
768
|
+
it "with a < pin in the name and non-matching rpm installed it downgrades", not_rhel5: true do
|
769
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
770
|
+
yum_package.allow_downgrade true
|
771
|
+
yum_package.package_name("chef_rpm < 1.10")
|
772
|
+
yum_package.run_action(:upgrade)
|
773
|
+
expect(yum_package.updated_by_last_action?).to be true
|
774
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
775
|
+
end
|
776
|
+
end
|
777
|
+
end
|
778
|
+
|
779
|
+
describe ":remove" do
|
780
|
+
context "vanilla use case" do
|
781
|
+
let(:package_name) { "chef_rpm" }
|
782
|
+
it "does nothing if the package is not installed" do
|
783
|
+
flush_cache
|
784
|
+
yum_package.run_action(:remove)
|
785
|
+
expect(yum_package.updated_by_last_action?).to be false
|
786
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
787
|
+
end
|
788
|
+
|
789
|
+
it "removes the package if the package is installed" do
|
790
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
791
|
+
yum_package.run_action(:remove)
|
792
|
+
expect(yum_package.updated_by_last_action?).to be true
|
793
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
794
|
+
end
|
795
|
+
|
796
|
+
it "does not remove the package twice" do
|
797
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
798
|
+
yum_package.run_action(:remove)
|
799
|
+
expect(yum_package.updated_by_last_action?).to be true
|
800
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
801
|
+
yum_package.run_action(:remove)
|
802
|
+
expect(yum_package.updated_by_last_action?).to be false
|
803
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
804
|
+
end
|
805
|
+
|
806
|
+
it "removes the package if the prior version package is installed" do
|
807
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
808
|
+
yum_package.run_action(:remove)
|
809
|
+
expect(yum_package.updated_by_last_action?).to be true
|
810
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
811
|
+
end
|
812
|
+
|
813
|
+
it "removes the package if the i686 package is installed", :intel_64bit do
|
814
|
+
skip "FIXME: should this be fixed or is the current behavior correct?"
|
815
|
+
preinstall("chef_rpm-1.10-1.i686.rpm")
|
816
|
+
yum_package.run_action(:remove)
|
817
|
+
expect(yum_package.updated_by_last_action?).to be true
|
818
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
819
|
+
end
|
820
|
+
|
821
|
+
it "removes the package if the prior version i686 package is installed", :intel_64bit do
|
822
|
+
skip "FIXME: should this be fixed or is the current behavior correct?"
|
823
|
+
preinstall("chef_rpm-1.2-1.i686.rpm")
|
824
|
+
yum_package.run_action(:remove)
|
825
|
+
expect(yum_package.updated_by_last_action?).to be true
|
826
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
827
|
+
end
|
828
|
+
end
|
829
|
+
|
830
|
+
context "with 64-bit arch", :intel_64bit do
|
831
|
+
let(:package_name) { "chef_rpm.#{pkg_arch}" }
|
832
|
+
it "does nothing if the package is not installed" do
|
833
|
+
flush_cache
|
834
|
+
yum_package.run_action(:remove)
|
835
|
+
expect(yum_package.updated_by_last_action?).to be false
|
836
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
837
|
+
end
|
838
|
+
|
839
|
+
it "removes the package if the package is installed" do
|
840
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
|
841
|
+
yum_package.run_action(:remove)
|
842
|
+
expect(yum_package.updated_by_last_action?).to be true
|
843
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
844
|
+
end
|
845
|
+
|
846
|
+
it "removes the package if the prior version package is installed" do
|
847
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
848
|
+
yum_package.run_action(:remove)
|
849
|
+
expect(yum_package.updated_by_last_action?).to be true
|
850
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
851
|
+
end
|
852
|
+
|
853
|
+
it "does nothing if the i686 package is installed" do
|
854
|
+
preinstall("chef_rpm-1.10-1.i686.rpm")
|
855
|
+
yum_package.run_action(:remove)
|
856
|
+
expect(yum_package.updated_by_last_action?).to be false
|
857
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.i686$")
|
858
|
+
end
|
859
|
+
|
860
|
+
it "does nothing if the prior version i686 package is installed" do
|
861
|
+
preinstall("chef_rpm-1.2-1.i686.rpm")
|
862
|
+
yum_package.run_action(:remove)
|
863
|
+
expect(yum_package.updated_by_last_action?).to be false
|
864
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.i686$")
|
865
|
+
end
|
866
|
+
end
|
867
|
+
|
868
|
+
context "with 32-bit arch", :intel_64bit do
|
869
|
+
let(:package_name) { "chef_rpm.i686" }
|
870
|
+
it "removes only the 32-bit arch if both are installed" do
|
871
|
+
preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm", "chef_rpm-1.10-1.i686.rpm")
|
872
|
+
yum_package.run_action(:remove)
|
873
|
+
expect(yum_package.updated_by_last_action?).to be true
|
874
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
875
|
+
end
|
876
|
+
end
|
877
|
+
|
878
|
+
context "with no available version" do
|
879
|
+
it "works when a package is installed" do
|
880
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-yum-localtesting.repo"
|
881
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
882
|
+
yum_package.run_action(:remove)
|
883
|
+
expect(yum_package.updated_by_last_action?).to be true
|
884
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
|
885
|
+
end
|
886
|
+
end
|
887
|
+
end
|
888
|
+
|
889
|
+
describe ":lock and :unlock" do
|
890
|
+
before(:all) do
|
891
|
+
shell_out!("yum -y install yum-versionlock")
|
892
|
+
end
|
893
|
+
|
894
|
+
before(:each) do
|
895
|
+
shell_out("yum versionlock delete '*:chef_rpm-*'") # will exit with error when nothing is locked, we don't care
|
896
|
+
end
|
897
|
+
|
898
|
+
it "locks an rpm" do
|
899
|
+
flush_cache
|
900
|
+
yum_package.package_name("chef_rpm")
|
901
|
+
yum_package.run_action(:lock)
|
902
|
+
expect(yum_package.updated_by_last_action?).to be true
|
903
|
+
expect(shell_out("yum versionlock list").stdout.chomp).to match("^0:chef_rpm-")
|
904
|
+
end
|
905
|
+
|
906
|
+
it "does not lock if its already locked" do
|
907
|
+
flush_cache
|
908
|
+
shell_out!("yum versionlock add chef_rpm")
|
909
|
+
yum_package.package_name("chef_rpm")
|
910
|
+
yum_package.run_action(:lock)
|
911
|
+
expect(yum_package.updated_by_last_action?).to be false
|
912
|
+
expect(shell_out("yum versionlock list").stdout.chomp).to match("^0:chef_rpm-")
|
913
|
+
end
|
914
|
+
|
915
|
+
it "unlocks an rpm" do
|
916
|
+
flush_cache
|
917
|
+
shell_out!("yum versionlock add chef_rpm")
|
918
|
+
yum_package.package_name("chef_rpm")
|
919
|
+
yum_package.run_action(:unlock)
|
920
|
+
expect(yum_package.updated_by_last_action?).to be true
|
921
|
+
expect(shell_out("yum versionlock list").stdout.chomp).not_to match("^0:chef_rpm-")
|
922
|
+
end
|
923
|
+
|
924
|
+
it "does not unlock an already locked rpm" do
|
925
|
+
flush_cache
|
926
|
+
yum_package.package_name("chef_rpm")
|
927
|
+
yum_package.run_action(:unlock)
|
928
|
+
expect(yum_package.updated_by_last_action?).to be false
|
929
|
+
expect(shell_out("yum versionlock list").stdout.chomp).not_to match("^0:chef_rpm-")
|
930
|
+
end
|
931
|
+
|
932
|
+
it "check that we can lock based on provides" do
|
933
|
+
flush_cache
|
934
|
+
yum_package.package_name("chef_rpm_provides")
|
935
|
+
yum_package.run_action(:lock)
|
936
|
+
expect(yum_package.updated_by_last_action?).to be true
|
937
|
+
expect(shell_out("yum versionlock list").stdout.chomp).to match("^0:chef_rpm-")
|
938
|
+
end
|
939
|
+
|
940
|
+
it "check that we can unlock based on provides" do
|
941
|
+
flush_cache
|
942
|
+
shell_out!("yum versionlock add chef_rpm")
|
943
|
+
yum_package.package_name("chef_rpm_provides")
|
944
|
+
yum_package.run_action(:unlock)
|
945
|
+
expect(yum_package.updated_by_last_action?).to be true
|
946
|
+
expect(shell_out("yum versionlock list").stdout.chomp).not_to match("^0:chef_rpm-")
|
947
|
+
end
|
948
|
+
end
|
949
|
+
end
|