chef 15.17.4-universal-mingw32 → 16.0.257-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +14 -20
- data/README.md +6 -6
- data/Rakefile +18 -23
- data/chef-universal-mingw32.gemspec +4 -4
- data/chef.gemspec +10 -26
- data/distro/powershell/chef/chef.psm1 +3 -3
- data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
- data/lib/chef/action_collection.rb +16 -5
- data/lib/chef/api_client/registration.rb +2 -2
- data/lib/chef/application.rb +33 -54
- data/lib/chef/application/apply.rb +20 -3
- data/lib/chef/application/base.rb +8 -3
- data/lib/chef/application/exit_code.rb +2 -2
- data/lib/chef/application/knife.rb +1 -1
- data/lib/chef/chef_class.rb +4 -4
- data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +0 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +5 -5
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +3 -3
- data/lib/chef/client.rb +16 -14
- data/lib/chef/config.rb +1 -1
- data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
- data/lib/chef/cookbook/gem_installer.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +45 -22
- data/lib/chef/cookbook_version.rb +40 -5
- data/lib/chef/data_bag.rb +2 -2
- data/lib/chef/data_collector/error_handlers.rb +1 -1
- data/lib/chef/data_collector/run_end_message.rb +7 -1
- data/lib/chef/deprecated.rb +1 -9
- data/lib/chef/dist.rb +8 -0
- data/lib/chef/dsl/chef_vault.rb +84 -0
- data/lib/chef/dsl/declare_resource.rb +7 -5
- data/lib/chef/dsl/platform_introspection.rb +2 -3
- data/lib/chef/dsl/recipe.rb +7 -12
- data/lib/chef/dsl/universal.rb +3 -7
- data/lib/chef/environment.rb +2 -2
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +0 -3
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
- data/lib/chef/formatters/indentable_output_stream.rb +7 -16
- data/lib/chef/http.rb +1 -2
- data/lib/chef/http/http_request.rb +3 -2
- data/lib/chef/knife.rb +1 -3
- data/lib/chef/knife/acl_add.rb +57 -0
- data/lib/chef/knife/acl_base.rb +183 -0
- data/lib/chef/knife/acl_bulk_add.rb +78 -0
- data/lib/chef/knife/acl_bulk_remove.rb +83 -0
- data/lib/chef/knife/acl_remove.rb +62 -0
- data/lib/chef/knife/acl_show.rb +56 -0
- data/lib/chef/knife/bootstrap.rb +93 -97
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +20 -20
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +13 -15
- data/lib/chef/knife/bootstrap/train_connector.rb +0 -1
- data/lib/chef/knife/cookbook_download.rb +1 -1
- data/lib/chef/knife/cookbook_metadata.rb +1 -1
- data/lib/chef/knife/core/bootstrap_context.rb +63 -60
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/generic_presenter.rb +4 -3
- data/lib/chef/knife/core/hashed_command_loader.rb +2 -3
- data/lib/chef/knife/core/node_presenter.rb +2 -2
- data/lib/chef/knife/core/status_presenter.rb +5 -5
- data/lib/chef/knife/core/subcommand_loader.rb +1 -1
- data/lib/chef/knife/core/ui.rb +17 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +45 -58
- data/lib/chef/knife/data_bag_secret_options.rb +18 -45
- data/lib/chef/knife/environment_compare.rb +1 -1
- data/lib/chef/knife/exec.rb +2 -2
- data/lib/chef/knife/group_add.rb +55 -0
- data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
- data/lib/chef/knife/group_destroy.rb +53 -0
- data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
- data/lib/chef/knife/group_remove.rb +56 -0
- data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
- data/lib/chef/knife/list.rb +1 -1
- data/lib/chef/knife/ssh.rb +12 -50
- data/lib/chef/knife/status.rb +3 -3
- data/lib/chef/knife/supermarket_download.rb +1 -2
- data/lib/chef/knife/supermarket_install.rb +1 -2
- data/lib/chef/knife/supermarket_list.rb +1 -2
- data/lib/chef/knife/supermarket_search.rb +1 -2
- data/lib/chef/knife/supermarket_share.rb +1 -2
- data/lib/chef/knife/supermarket_show.rb +1 -2
- data/lib/chef/knife/supermarket_unshare.rb +1 -2
- data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
- data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
- data/lib/chef/knife/user_invite_list.rb +34 -0
- data/lib/chef/knife/user_invite_recind.rb +63 -0
- data/lib/chef/knife/yaml_convert.rb +91 -0
- data/lib/chef/log.rb +1 -1
- data/lib/chef/mixin/create_path.rb +8 -8
- data/lib/chef/mixin/openssl_helper.rb +3 -26
- data/lib/chef/mixin/powershell_exec.rb +10 -1
- data/lib/chef/mixin/powershell_out.rb +1 -1
- data/lib/chef/mixin/properties.rb +13 -1
- data/lib/chef/mixin/shell_out.rb +0 -4
- data/lib/chef/mixin/template.rb +0 -1
- data/lib/chef/monkey_patches/net_http.rb +0 -4
- data/lib/chef/node.rb +18 -6
- data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
- data/lib/chef/node/mixin/immutablize_array.rb +4 -0
- data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
- data/lib/chef/node_map.rb +7 -36
- data/lib/chef/platform/priority_map.rb +4 -4
- data/lib/chef/platform/query_helpers.rb +6 -34
- data/lib/chef/powershell.rb +14 -0
- data/lib/chef/property.rb +22 -4
- data/lib/chef/provider.rb +40 -6
- data/lib/chef/provider/cron.rb +2 -2
- data/lib/chef/provider/directory.rb +2 -2
- data/lib/chef/provider/dsc_resource.rb +1 -1
- data/lib/chef/provider/dsc_script.rb +1 -1
- data/lib/chef/provider/execute.rb +2 -8
- data/lib/chef/provider/file.rb +5 -5
- data/lib/chef/provider/git.rb +84 -27
- data/lib/chef/provider/group.rb +4 -4
- data/lib/chef/provider/http_request.rb +6 -6
- data/lib/chef/provider/ifconfig.rb +4 -4
- data/lib/chef/provider/launchd.rb +36 -51
- data/lib/chef/provider/link.rb +2 -2
- data/lib/chef/provider/mount.rb +5 -5
- data/lib/chef/provider/mount/solaris.rb +1 -0
- data/lib/chef/provider/osx_profile.rb +7 -3
- data/lib/chef/provider/package.rb +2 -2
- data/lib/chef/provider/package/cab.rb +3 -4
- data/lib/chef/provider/package/chocolatey.rb +1 -3
- data/lib/chef/provider/package/dnf.rb +66 -10
- data/lib/chef/provider/package/dnf/dnf_helper.py +84 -30
- data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
- data/lib/chef/provider/package/dnf/version.rb +5 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -3
- data/lib/chef/provider/package/homebrew.rb +106 -42
- data/lib/chef/provider/package/msu.rb +3 -1
- data/lib/chef/provider/package/pacman.rb +25 -34
- data/lib/chef/provider/package/powershell.rb +2 -6
- data/lib/chef/provider/package/rubygems.rb +29 -2
- data/lib/chef/provider/package/snap.rb +27 -96
- data/lib/chef/provider/package/windows.rb +3 -2
- data/lib/chef/provider/package/windows/msi.rb +2 -2
- data/lib/chef/provider/package/yum.rb +0 -8
- data/lib/chef/provider/package/yum/yum_helper.py +0 -4
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/powershell_script.rb +4 -10
- data/lib/chef/provider/registry_key.rb +4 -4
- data/lib/chef/provider/remote_directory.rb +3 -3
- data/lib/chef/provider/remote_file/ftp.rb +3 -2
- data/lib/chef/provider/remote_file/local_file.rb +2 -1
- data/lib/chef/provider/remote_file/sftp.rb +3 -2
- data/lib/chef/provider/route.rb +5 -3
- data/lib/chef/provider/ruby_block.rb +1 -1
- data/lib/chef/provider/script.rb +2 -2
- data/lib/chef/provider/service.rb +8 -8
- data/lib/chef/provider/service/aixinit.rb +1 -1
- data/lib/chef/provider/service/arch.rb +2 -2
- data/lib/chef/provider/service/debian.rb +31 -29
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +7 -12
- data/lib/chef/provider/service/openbsd.rb +1 -1
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/service/simple.rb +3 -3
- data/lib/chef/provider/service/systemd.rb +12 -12
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +5 -11
- data/lib/chef/provider/subversion.rb +25 -5
- data/lib/chef/provider/systemd_unit.rb +26 -25
- data/lib/chef/provider/user.rb +6 -6
- data/lib/chef/provider/user/dscl.rb +3 -3
- data/lib/chef/provider/user/mac.rb +10 -9
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
- data/lib/chef/provider/windows_env.rb +3 -3
- data/lib/chef/provider/windows_script.rb +2 -2
- data/lib/chef/provider/windows_task.rb +7 -9
- data/lib/chef/provider/yum_repository.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +11 -31
- data/lib/chef/providers.rb +0 -6
- data/lib/chef/recipe.rb +36 -0
- data/lib/chef/resource.rb +41 -56
- data/lib/chef/resource/action_class.rb +24 -22
- data/lib/chef/resource/alternatives.rb +149 -0
- data/lib/chef/resource/apt_package.rb +2 -1
- data/lib/chef/resource/apt_preference.rb +69 -2
- data/lib/chef/resource/apt_repository.rb +337 -5
- data/lib/chef/resource/apt_update.rb +52 -1
- data/lib/chef/resource/archive_file.rb +9 -29
- data/lib/chef/resource/bash.rb +2 -0
- data/lib/chef/resource/bff_package.rb +9 -1
- data/lib/chef/resource/breakpoint.rb +0 -1
- data/lib/chef/resource/build_essential.rb +42 -48
- data/lib/chef/resource/cab_package.rb +8 -1
- data/lib/chef/resource/chef_client_cron.rb +225 -0
- data/lib/chef/resource/chef_client_scheduled_task.rb +198 -0
- data/lib/chef/resource/chef_client_systemd_timer.rb +177 -0
- data/lib/chef/resource/chef_gem.rb +9 -16
- data/lib/chef/resource/chef_handler.rb +2 -1
- data/lib/chef/resource/chef_sleep.rb +0 -1
- data/lib/chef/resource/chef_vault_secret.rb +135 -0
- data/lib/chef/resource/chocolatey_config.rb +3 -1
- data/lib/chef/resource/chocolatey_feature.rb +2 -1
- data/lib/chef/resource/chocolatey_package.rb +2 -1
- data/lib/chef/resource/chocolatey_source.rb +2 -1
- data/lib/chef/resource/cookbook_file.rb +1 -1
- data/lib/chef/resource/cron.rb +22 -68
- data/lib/chef/resource/cron_access.rb +8 -15
- data/lib/chef/resource/cron_d.rb +9 -75
- data/lib/chef/resource/csh.rb +2 -0
- data/lib/chef/resource/directory.rb +2 -2
- data/lib/chef/resource/dmg_package.rb +4 -4
- data/lib/chef/resource/dnf_package.rb +2 -3
- data/lib/chef/resource/dpkg_package.rb +2 -1
- data/lib/chef/resource/dsc_resource.rb +6 -4
- data/lib/chef/resource/dsc_script.rb +3 -2
- data/lib/chef/resource/execute.rb +13 -12
- data/lib/chef/resource/file.rb +3 -1
- data/lib/chef/resource/freebsd_package.rb +2 -1
- data/lib/chef/resource/gem_package.rb +14 -6
- data/lib/chef/resource/group.rb +4 -1
- data/lib/chef/resource/helpers/cron_validations.rb +98 -0
- data/lib/chef/resource/homebrew_cask.rb +5 -4
- data/lib/chef/resource/homebrew_package.rb +4 -2
- data/lib/chef/resource/homebrew_tap.rb +2 -1
- data/lib/chef/resource/hostname.rb +41 -36
- data/lib/chef/resource/http_request.rb +0 -1
- data/lib/chef/resource/ifconfig.rb +1 -1
- data/lib/chef/resource/ips_package.rb +10 -2
- data/lib/chef/resource/kernel_module.rb +29 -29
- data/lib/chef/resource/ksh.rb +2 -0
- data/lib/chef/resource/launchd.rb +6 -6
- data/lib/chef/resource/link.rb +1 -23
- data/lib/chef/resource/locale.rb +58 -24
- data/lib/chef/resource/log.rb +12 -1
- data/lib/chef/resource/lwrp_base.rb +1 -8
- data/lib/chef/resource/macos_userdefaults.rb +9 -6
- data/lib/chef/resource/macosx_service.rb +2 -1
- data/lib/chef/resource/macports_package.rb +10 -2
- data/lib/chef/resource/mdadm.rb +62 -2
- data/lib/chef/resource/mount.rb +3 -0
- data/lib/chef/resource/msu_package.rb +13 -1
- data/lib/chef/resource/notify_group.rb +8 -3
- data/lib/chef/resource/ohai.rb +19 -3
- data/lib/chef/resource/ohai_hint.rb +3 -12
- data/lib/chef/resource/openbsd_package.rb +9 -1
- data/lib/chef/resource/openssl_dhparam.rb +10 -1
- data/lib/chef/resource/openssl_ec_private_key.rb +23 -1
- data/lib/chef/resource/openssl_ec_public_key.rb +21 -1
- data/lib/chef/resource/openssl_rsa_private_key.rb +20 -1
- data/lib/chef/resource/openssl_rsa_public_key.rb +22 -1
- data/lib/chef/resource/openssl_x509_certificate.rb +37 -1
- data/lib/chef/resource/openssl_x509_crl.rb +12 -1
- data/lib/chef/resource/openssl_x509_request.rb +37 -1
- data/lib/chef/resource/osx_profile.rb +3 -2
- data/lib/chef/resource/package.rb +2 -1
- data/lib/chef/resource/pacman_package.rb +2 -1
- data/lib/chef/resource/paludis_package.rb +12 -3
- data/lib/chef/resource/perl.rb +2 -0
- data/lib/chef/resource/plist.rb +207 -0
- data/lib/chef/resource/portage_package.rb +13 -3
- data/lib/chef/resource/powershell_package.rb +1 -3
- data/lib/chef/resource/powershell_package_source.rb +3 -1
- data/lib/chef/resource/powershell_script.rb +7 -17
- data/lib/chef/resource/python.rb +2 -0
- data/lib/chef/resource/reboot.rb +0 -1
- data/lib/chef/resource/registry_key.rb +1 -2
- data/lib/chef/resource/remote_directory.rb +2 -0
- data/lib/chef/resource/remote_file.rb +2 -0
- data/lib/chef/resource/rhsm_errata.rb +0 -1
- data/lib/chef/resource/rhsm_errata_level.rb +0 -1
- data/lib/chef/resource/rhsm_register.rb +2 -1
- data/lib/chef/resource/rhsm_repo.rb +3 -1
- data/lib/chef/resource/rhsm_subscription.rb +4 -1
- data/lib/chef/resource/route.rb +5 -1
- data/lib/chef/resource/rpm_package.rb +9 -2
- data/lib/chef/resource/ruby.rb +2 -0
- data/lib/chef/resource/ruby_block.rb +1 -1
- data/lib/chef/resource/scm/_scm.rb +48 -0
- data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
- data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +8 -5
- data/lib/chef/resource/script.rb +6 -3
- data/lib/chef/resource/service.rb +6 -7
- data/lib/chef/resource/smartos_package.rb +9 -1
- data/lib/chef/resource/snap_package.rb +3 -1
- data/lib/chef/resource/solaris_package.rb +9 -1
- data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
- data/lib/chef/resource/sudo.rb +9 -9
- data/lib/chef/resource/support/cron.d.erb +1 -1
- data/lib/chef/resource/support/cron_access.erb +1 -1
- data/lib/chef/resource/support/sudoer.erb +1 -2
- data/lib/chef/resource/support/ulimit.erb +41 -0
- data/lib/chef/resource/swap_file.rb +5 -3
- data/lib/chef/resource/sysctl.rb +2 -2
- data/lib/chef/resource/systemd_unit.rb +4 -2
- data/lib/chef/resource/template.rb +0 -1
- data/lib/chef/resource/timezone.rb +7 -18
- data/lib/chef/resource/user.rb +1 -3
- data/lib/chef/resource/user/aix_user.rb +0 -2
- data/lib/chef/resource/user/dscl_user.rb +1 -1
- data/lib/chef/resource/user/linux_user.rb +0 -2
- data/lib/chef/resource/user/mac_user.rb +1 -1
- data/lib/chef/resource/user/pw_user.rb +0 -2
- data/lib/chef/resource/user/solaris_user.rb +0 -2
- data/lib/chef/resource/user/windows_user.rb +0 -2
- data/lib/chef/resource/user_ulimit.rb +114 -0
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
- data/lib/chef/resource/windows_ad_join.rb +19 -6
- data/lib/chef/resource/windows_auto_run.rb +0 -1
- data/lib/chef/resource/windows_certificate.rb +1 -1
- data/lib/chef/resource/windows_dfs_folder.rb +0 -1
- data/lib/chef/resource/windows_dfs_namespace.rb +0 -1
- data/lib/chef/resource/windows_dfs_server.rb +0 -1
- data/lib/chef/resource/windows_dns_record.rb +0 -1
- data/lib/chef/resource/windows_dns_zone.rb +0 -1
- data/lib/chef/resource/windows_env.rb +2 -3
- data/lib/chef/resource/windows_feature.rb +2 -2
- data/lib/chef/resource/windows_feature_dism.rb +9 -22
- data/lib/chef/resource/windows_feature_powershell.rb +17 -82
- data/lib/chef/resource/windows_firewall_rule.rb +119 -10
- data/lib/chef/resource/windows_font.rb +1 -3
- data/lib/chef/resource/windows_package.rb +13 -4
- data/lib/chef/resource/windows_pagefile.rb +0 -1
- data/lib/chef/resource/windows_path.rb +0 -1
- data/lib/chef/resource/windows_printer.rb +0 -1
- data/lib/chef/resource/windows_printer_port.rb +0 -1
- data/lib/chef/resource/windows_script.rb +3 -4
- data/lib/chef/resource/windows_security_policy.rb +90 -0
- data/lib/chef/resource/windows_service.rb +45 -31
- data/lib/chef/resource/windows_share.rb +3 -7
- data/lib/chef/resource/windows_shortcut.rb +0 -1
- data/lib/chef/resource/windows_task.rb +14 -15
- data/lib/chef/resource/windows_uac.rb +0 -1
- data/lib/chef/resource/windows_user_privilege.rb +157 -0
- data/lib/chef/resource/windows_workgroup.rb +0 -1
- data/lib/chef/resource/yum_package.rb +3 -1
- data/lib/chef/resource/yum_repository.rb +2 -1
- data/lib/chef/resource/zypper_package.rb +3 -2
- data/lib/chef/resource/zypper_repository.rb +2 -1
- data/lib/chef/resource_builder.rb +8 -0
- data/lib/chef/resource_inspector.rb +6 -6
- data/lib/chef/resource_resolver.rb +7 -14
- data/lib/chef/resources.rb +11 -3
- data/lib/chef/role.rb +2 -2
- data/lib/chef/run_context/cookbook_compiler.rb +29 -5
- data/lib/chef/shell.rb +23 -32
- data/lib/chef/shell/shell_session.rb +0 -2
- data/lib/chef/util/diff.rb +1 -1
- data/lib/chef/util/dsc/configuration_generator.rb +1 -1
- data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
- data/lib/chef/util/powershell/cmdlet.rb +1 -1
- data/lib/chef/version.rb +2 -2
- data/lib/chef/version_string.rb +1 -1
- data/lib/chef/win32/api/file.rb +18 -18
- data/lib/chef/win32/api/security.rb +6 -0
- data/lib/chef/win32/file.rb +3 -11
- data/lib/chef/win32/process.rb +2 -2
- data/lib/chef/win32/security.rb +40 -2
- data/spec/functional/assets/inittest +8 -7
- data/spec/functional/knife/ssh_spec.rb +27 -23
- data/spec/functional/resource/aix_service_spec.rb +1 -0
- data/spec/functional/resource/aixinit_service_spec.rb +8 -7
- data/spec/functional/resource/apt_package_spec.rb +1 -0
- data/spec/functional/resource/bff_spec.rb +2 -2
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +11 -29
- data/spec/functional/resource/dnf_package_spec.rb +441 -156
- data/spec/functional/resource/dsc_resource_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +184 -134
- data/spec/functional/resource/insserv_spec.rb +6 -5
- data/spec/functional/resource/link_spec.rb +17 -17
- data/spec/functional/resource/locale_spec.rb +13 -2
- data/spec/functional/resource/powershell_script_spec.rb +7 -68
- data/spec/functional/resource/rpm_spec.rb +2 -2
- data/spec/functional/resource/user/dscl_spec.rb +2 -2
- data/spec/functional/resource/user/mac_user_spec.rb +2 -2
- data/spec/functional/resource/windows_certificate_spec.rb +3 -3
- data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
- data/spec/functional/resource/windows_task_spec.rb +8 -8
- data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
- data/spec/functional/run_lock_spec.rb +1 -2
- data/spec/functional/shell_spec.rb +6 -6
- data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/registry_spec.rb +0 -6
- data/spec/functional/win32/security_spec.rb +22 -0
- data/spec/functional/win32/service_manager_spec.rb +1 -1
- data/spec/integration/client/client_spec.rb +123 -2
- data/spec/integration/knife/cookbook_show_spec.rb +28 -26
- data/spec/integration/knife/data_bag_show_spec.rb +1 -1
- data/spec/integration/knife/raw_spec.rb +30 -2
- data/spec/integration/knife/show_spec.rb +32 -3
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -5
- data/spec/integration/recipes/lwrp_spec.rb +1 -1
- data/spec/integration/recipes/noop_resource_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +50 -21
- data/spec/integration/recipes/notifying_block_spec.rb +9 -6
- data/spec/integration/recipes/provider_choice.rb +2 -0
- data/spec/integration/recipes/recipe_dsl_spec.rb +46 -144
- data/spec/integration/recipes/resource_action_spec.rb +16 -11
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -3
- data/spec/integration/recipes/resource_load_spec.rb +133 -13
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +112 -0
- data/spec/integration/solo/solo_spec.rb +3 -3
- data/spec/scripts/ssl-serve.rb +1 -1
- data/spec/spec_helper.rb +11 -14
- data/spec/support/chef_helpers.rb +2 -2
- data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
- data/spec/support/platform_helpers.rb +44 -19
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/recipe_dsl_helper.rb +83 -0
- data/spec/support/shared/functional/directory_resource.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/functional/file_resource.rb +3 -3
- data/spec/support/shared/functional/win32_service.rb +1 -1
- data/spec/support/shared/functional/windows_script.rb +5 -18
- data/spec/support/shared/integration/knife_support.rb +14 -8
- data/spec/unit/application/apply_spec.rb +3 -0
- data/spec/unit/application/client_spec.rb +5 -1
- data/spec/unit/application_spec.rb +1 -9
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +4 -2
- data/spec/unit/client_spec.rb +7 -5
- data/spec/unit/cookbook/gem_installer_spec.rb +3 -4
- data/spec/unit/cookbook/metadata_spec.rb +38 -19
- data/spec/unit/data_bag_spec.rb +1 -1
- data/spec/unit/data_collector_spec.rb +38 -17
- data/spec/unit/dsl/platform_introspection_spec.rb +0 -1
- data/spec/unit/environment_spec.rb +7 -7
- data/spec/unit/event_dispatch/dispatcher_spec.rb +0 -3
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
- data/spec/unit/knife/bootstrap_spec.rb +36 -54
- data/spec/unit/knife/cookbook_download_spec.rb +4 -4
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
- data/spec/unit/knife/cookbook_show_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +6 -5
- data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
- data/spec/unit/knife/core/ui_spec.rb +16 -0
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +8 -68
- data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
- data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
- data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
- data/spec/unit/knife/ssh_spec.rb +10 -113
- data/spec/unit/knife/status_spec.rb +1 -1
- data/spec/unit/knife/supermarket_share_spec.rb +3 -5
- data/spec/unit/knife_spec.rb +18 -0
- data/spec/unit/lwrp_spec.rb +4 -4
- data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
- data/spec/unit/mixin/securable_spec.rb +1 -0
- data/spec/unit/mixin/user_context_spec.rb +9 -1
- data/spec/unit/node/attribute_spec.rb +2 -2
- data/spec/unit/node_spec.rb +24 -0
- data/spec/unit/platform/query_helpers_spec.rb +0 -143
- data/spec/unit/property/state_spec.rb +12 -7
- data/spec/unit/property/validation_spec.rb +25 -1
- data/spec/unit/property_spec.rb +18 -15
- data/spec/unit/provider/apt_preference_spec.rb +14 -10
- data/spec/unit/provider/apt_repository_spec.rb +9 -11
- data/spec/unit/provider/apt_update_spec.rb +12 -11
- data/spec/unit/provider/cookbook_file_spec.rb +4 -4
- data/spec/unit/provider/cron_spec.rb +2 -2
- data/spec/unit/provider/directory_spec.rb +4 -15
- data/spec/unit/provider/file_spec.rb +4 -4
- data/spec/unit/provider/git_spec.rb +44 -4
- data/spec/unit/provider/link_spec.rb +0 -1
- data/spec/unit/provider/log_spec.rb +3 -3
- data/spec/unit/provider/mdadm_spec.rb +3 -3
- data/spec/unit/provider/osx_profile_spec.rb +2 -2
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +2 -2
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
- data/spec/unit/provider/package/homebrew_spec.rb +280 -174
- data/spec/unit/provider/package/msu_spec.rb +3 -3
- data/spec/unit/provider/package/pacman_spec.rb +65 -147
- data/spec/unit/provider/package/powershell_spec.rb +88 -96
- data/spec/unit/provider/package/rubygems_spec.rb +221 -31
- data/spec/unit/provider/package/snap_spec.rb +1 -1
- data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
- data/spec/unit/provider/package/windows_spec.rb +53 -30
- data/spec/unit/provider/powershell_script_spec.rb +21 -61
- data/spec/unit/provider/remote_file_spec.rb +3 -4
- data/spec/unit/provider/service/arch_service_spec.rb +2 -3
- data/spec/unit/provider/service/debian_service_spec.rb +35 -14
- data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
- data/spec/unit/provider/service/macosx_spec.rb +210 -214
- data/spec/unit/provider/service/redhat_spec.rb +2 -2
- data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
- data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
- data/spec/unit/provider/service/windows_spec.rb +6 -2
- data/spec/unit/provider/subversion_spec.rb +4 -2
- data/spec/unit/provider/systemd_unit_spec.rb +24 -28
- data/spec/unit/provider/template_spec.rb +3 -4
- data/spec/unit/provider/zypper_repository_spec.rb +25 -75
- data/spec/unit/provider_resolver_spec.rb +11 -11
- data/spec/unit/provider_spec.rb +0 -1
- data/spec/unit/recipe_spec.rb +68 -0
- data/spec/unit/resource/alternatives_spec.rb +120 -0
- data/spec/unit/resource/apt_preference_spec.rb +0 -18
- data/spec/unit/resource/apt_repository_spec.rb +0 -18
- data/spec/unit/resource/apt_update_spec.rb +0 -18
- data/spec/unit/resource/archive_file_spec.rb +2 -11
- data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
- data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
- data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
- data/spec/unit/resource/cron_d_spec.rb +6 -48
- data/spec/unit/resource/cron_spec.rb +4 -10
- data/spec/unit/resource/gem_package_spec.rb +3 -3
- data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
- data/spec/unit/resource/link_spec.rb +0 -4
- data/spec/unit/resource/locale_spec.rb +0 -34
- data/spec/unit/resource/ohai_spec.rb +56 -2
- data/spec/unit/resource/plist_spec.rb +130 -0
- data/spec/unit/resource/powershell_script_spec.rb +0 -5
- data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
- data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
- data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
- data/spec/unit/resource/service_spec.rb +4 -0
- data/spec/unit/resource/user_spec.rb +2 -2
- data/spec/unit/resource/user_ulimit_spec.rb +53 -0
- data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
- data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
- data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
- data/spec/unit/resource/windows_feature_powershell_spec.rb +6 -47
- data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
- data/spec/unit/resource/windows_package_spec.rb +4 -1
- data/spec/unit/resource/windows_service_spec.rb +9 -0
- data/spec/unit/resource/windows_task_spec.rb +1 -1
- data/spec/unit/resource/windows_uac_spec.rb +2 -2
- data/spec/unit/resource/yum_repository_spec.rb +21 -21
- data/spec/unit/resource_reporter_spec.rb +1 -5
- data/spec/unit/resource_spec.rb +11 -4
- data/spec/unit/role_spec.rb +11 -11
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
- data/spec/unit/run_context_spec.rb +1 -1
- data/spec/unit/search/query_spec.rb +1 -1
- data/spec/unit/util/threaded_job_queue_spec.rb +0 -9
- data/spec/unit/win32/security_spec.rb +3 -4
- data/tasks/rspec.rb +1 -1
- metadata +116 -87
- data/lib/chef/dsl/core.rb +0 -52
- data/lib/chef/knife/cookbook_site_share.rb +0 -41
- data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
- data/lib/chef/provider/apt_preference.rb +0 -93
- data/lib/chef/provider/apt_repository.rb +0 -358
- data/lib/chef/provider/apt_update.rb +0 -79
- data/lib/chef/provider/log.rb +0 -43
- data/lib/chef/provider/mdadm.rb +0 -85
- data/lib/chef/provider/ohai.rb +0 -45
- data/lib/chef/resource/git.rb +0 -37
- data/spec/functional/resource/windows_font_spec.rb +0 -49
- data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -42,9 +42,7 @@ class Chef
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def current_installed_version
|
45
|
-
|
46
|
-
# later versions return 1
|
47
|
-
pkg_info = shell_out!("pkg", "info", new_resource.package_name, env: nil, returns: [0, 1, 70])
|
45
|
+
pkg_info = shell_out!("pkg", "info", new_resource.package_name, env: nil, returns: [0, 70])
|
48
46
|
pkg_info.stdout[/^Version +: (.+)$/, 1]
|
49
47
|
end
|
50
48
|
|
@@ -24,6 +24,8 @@ class Chef
|
|
24
24
|
class Provider
|
25
25
|
class Package
|
26
26
|
class Homebrew < Chef::Provider::Package
|
27
|
+
allow_nils
|
28
|
+
use_multipackage_api
|
27
29
|
|
28
30
|
provides :package, os: "darwin", override: true
|
29
31
|
provides :homebrew_package
|
@@ -31,49 +33,51 @@ class Chef
|
|
31
33
|
include Chef::Mixin::HomebrewUser
|
32
34
|
|
33
35
|
def load_current_resource
|
34
|
-
|
36
|
+
@current_resource = Chef::Resource::HomebrewPackage.new(new_resource.name)
|
35
37
|
current_resource.package_name(new_resource.package_name)
|
36
|
-
current_resource.version(
|
37
|
-
logger.trace("#{new_resource} current version
|
38
|
-
|
39
|
-
@candidate_version = candidate_version
|
40
|
-
|
41
|
-
logger.trace("#{new_resource} candidate version is #{@candidate_version}") if @candidate_version
|
38
|
+
current_resource.version(get_current_versions)
|
39
|
+
logger.trace("#{new_resource} current package version(s): #{current_resource.version}") if current_resource.version
|
42
40
|
|
43
41
|
current_resource
|
44
42
|
end
|
45
43
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
44
|
+
def candidate_version
|
45
|
+
package_name_array.map do |package_name|
|
46
|
+
available_version(package_name)
|
49
47
|
end
|
50
48
|
end
|
51
49
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
if current_version.nil? || current_version.empty?
|
56
|
-
install_package(name, version)
|
57
|
-
elsif current_version != version
|
58
|
-
brew("upgrade", options, name)
|
50
|
+
def get_current_versions
|
51
|
+
package_name_array.map do |package_name|
|
52
|
+
installed_version(package_name)
|
59
53
|
end
|
60
54
|
end
|
61
55
|
|
62
|
-
def
|
63
|
-
|
64
|
-
brew("uninstall", options, name)
|
65
|
-
end
|
56
|
+
def install_package(names, versions)
|
57
|
+
brew_cmd_output("install", options, names.compact)
|
66
58
|
end
|
67
59
|
|
68
|
-
#
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
60
|
+
# upgrades are a bit harder in homebrew than other package formats. If you try to
|
61
|
+
# brew upgrade a package that isn't installed it will fail so if a user specifies
|
62
|
+
# the action of upgrade we need to figure out which packages need to be installed
|
63
|
+
# and which packages can be upgrades. We do this by checking if brew_info has an entry
|
64
|
+
# via the installed_version helper.
|
65
|
+
def upgrade_package(names, versions)
|
66
|
+
# @todo when we no longer support Ruby 2.6 this can be simplified to be a .filter_map
|
67
|
+
upgrade_pkgs = names.select { |x| x if installed_version(x) }.compact
|
68
|
+
install_pkgs = names.select { |x| x unless installed_version(x) }.compact
|
69
|
+
|
70
|
+
brew_cmd_output("upgrade", options, upgrade_pkgs) unless upgrade_pkgs.empty?
|
71
|
+
brew_cmd_output("install", options, install_pkgs) unless install_pkgs.empty?
|
73
72
|
end
|
74
73
|
|
75
|
-
def
|
76
|
-
|
74
|
+
def remove_package(names, versions)
|
75
|
+
brew_cmd_output("uninstall", options, names.compact)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Homebrew doesn't really have a notion of purging, do a "force remove"
|
79
|
+
def purge_package(names, versions)
|
80
|
+
brew_cmd_output("uninstall", "--force", options, names.compact)
|
77
81
|
end
|
78
82
|
|
79
83
|
# We implement a querying method that returns the JSON-as-Hash
|
@@ -83,9 +87,50 @@ class Chef
|
|
83
87
|
# information, but that is not any more robust than using the
|
84
88
|
# command-line interface that returns the same thing.
|
85
89
|
#
|
86
|
-
# https://
|
90
|
+
# https://docs.brew.sh/Querying-Brew
|
91
|
+
#
|
92
|
+
# @returns [Hash] a hash of package information where the key is the package name
|
87
93
|
def brew_info
|
88
|
-
@brew_info ||=
|
94
|
+
@brew_info ||= begin
|
95
|
+
command_array = ["info", "--json=v1"].concat package_name_array
|
96
|
+
# convert the array of hashes into a hash where the key is the package name
|
97
|
+
|
98
|
+
cmd_output = brew_cmd_output(command_array, allow_failure: true)
|
99
|
+
|
100
|
+
if cmd_output.empty?
|
101
|
+
# we had some kind of failure so we need to iterate through each package to find them
|
102
|
+
package_name_array.each_with_object({}) do |package_name, hsh|
|
103
|
+
cmd_output = brew_cmd_output("info", "--json=v1", package_name, allow_failure: true)
|
104
|
+
if cmd_output.empty?
|
105
|
+
hsh[package_name] = {}
|
106
|
+
else
|
107
|
+
json = Chef::JSONCompat.from_json(cmd_output).first
|
108
|
+
hsh[json["name"]] = json
|
109
|
+
end
|
110
|
+
end
|
111
|
+
else
|
112
|
+
Hash[Chef::JSONCompat.from_json(cmd_output).collect { |pkg| [pkg["name"], pkg] }]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
#
|
118
|
+
# Return the package information given a package name or package alias
|
119
|
+
#
|
120
|
+
# @param [String] name_or_alias The name of the package or its alias
|
121
|
+
#
|
122
|
+
# @return [Hash] Package information
|
123
|
+
#
|
124
|
+
def package_info(package_name)
|
125
|
+
# return the package hash if it's in the brew info hash
|
126
|
+
return brew_info[package_name] if brew_info[package_name]
|
127
|
+
|
128
|
+
# check each item in the hash to see if we were passed an alias
|
129
|
+
brew_info.each_value do |p|
|
130
|
+
return p if p["aliases"].include?(package_name)
|
131
|
+
end
|
132
|
+
|
133
|
+
{}
|
89
134
|
end
|
90
135
|
|
91
136
|
# Some packages (formula) are "keg only" and aren't linked,
|
@@ -94,15 +139,20 @@ class Chef
|
|
94
139
|
# "current" (as in latest). Otherwise, we will use the version
|
95
140
|
# that brew thinks is linked as the current version.
|
96
141
|
#
|
97
|
-
|
98
|
-
|
99
|
-
|
142
|
+
# @param [String] package name
|
143
|
+
#
|
144
|
+
# @returns [String] package version
|
145
|
+
def installed_version(i)
|
146
|
+
p_data = package_info(i)
|
147
|
+
|
148
|
+
if p_data["keg_only"]
|
149
|
+
if p_data["installed"].empty?
|
100
150
|
nil
|
101
151
|
else
|
102
|
-
|
152
|
+
p_data["installed"].last["version"]
|
103
153
|
end
|
104
154
|
else
|
105
|
-
|
155
|
+
p_data["linked_keg"]
|
106
156
|
end
|
107
157
|
end
|
108
158
|
|
@@ -115,19 +165,33 @@ class Chef
|
|
115
165
|
# forward project.
|
116
166
|
#
|
117
167
|
# https://github.com/Homebrew/homebrew/wiki/Acceptable-Formulae#stable-versions
|
118
|
-
|
119
|
-
|
120
|
-
|
168
|
+
#
|
169
|
+
# @param [String] package name
|
170
|
+
#
|
171
|
+
# @returns [String] package version
|
172
|
+
def available_version(i)
|
173
|
+
p_data = package_info(i)
|
121
174
|
|
122
|
-
|
175
|
+
# nothing is available
|
176
|
+
return nil if p_data.empty?
|
123
177
|
|
124
|
-
|
178
|
+
p_data["versions"]["stable"]
|
179
|
+
end
|
180
|
+
|
181
|
+
def brew_cmd_output(*command, **options)
|
125
182
|
homebrew_uid = find_homebrew_uid(new_resource.respond_to?(:homebrew_user) && new_resource.homebrew_user)
|
126
183
|
homebrew_user = Etc.getpwuid(homebrew_uid)
|
127
184
|
|
128
|
-
logger.trace "Executing '#{command.join(" ")}' as user '#{homebrew_user.name}'"
|
185
|
+
logger.trace "Executing 'brew #{command.join(" ")}' as user '#{homebrew_user.name}'"
|
186
|
+
|
187
|
+
# allow the calling method to decide if the cmd should raise or not
|
188
|
+
# brew_info uses this when querying out available package info since a bad
|
189
|
+
# package name will raise and we want to surface a nil available package so that
|
190
|
+
# the package provider can magically handle that
|
191
|
+
shell_out_cmd = options[:allow_failure] ? :shell_out : :shell_out!
|
192
|
+
|
129
193
|
# FIXME: this 1800 second default timeout should be deprecated
|
130
|
-
output =
|
194
|
+
output = send(shell_out_cmd, "brew", *command, timeout: 1800, user: homebrew_uid, environment: { "HOME" => homebrew_user.dir, "RUBYOPT" => nil, "TMPDIR" => nil })
|
131
195
|
output.stdout.chomp
|
132
196
|
end
|
133
197
|
|
@@ -27,6 +27,7 @@ require_relative "cab"
|
|
27
27
|
require_relative "../../util/path_helper"
|
28
28
|
require_relative "../../mixin/uris"
|
29
29
|
require_relative "../../mixin/checksum"
|
30
|
+
require "cgi" unless defined?(CGI)
|
30
31
|
|
31
32
|
class Chef
|
32
33
|
class Provider
|
@@ -99,7 +100,7 @@ class Chef
|
|
99
100
|
|
100
101
|
def default_download_cache_path
|
101
102
|
uri = ::URI.parse(new_resource.source)
|
102
|
-
filename = ::File.basename(::
|
103
|
+
filename = ::File.basename(::CGI.unescape(uri.path))
|
103
104
|
file_cache_dir = Chef::FileCache.create_cache_path("package/")
|
104
105
|
Chef::Util::PathHelper.cleanpath("#{file_cache_dir}/#{filename}")
|
105
106
|
end
|
@@ -120,6 +121,7 @@ class Chef
|
|
120
121
|
@cab_files.each do |cab_file|
|
121
122
|
declare_resource(:cab_package, new_resource.name) do
|
122
123
|
source cab_file
|
124
|
+
timeout new_resource.timeout
|
123
125
|
action :remove
|
124
126
|
end
|
125
127
|
end
|
@@ -27,29 +27,13 @@ class Chef
|
|
27
27
|
provides :package, platform: "arch"
|
28
28
|
provides :pacman_package
|
29
29
|
|
30
|
+
use_multipackage_api
|
31
|
+
allow_nils
|
32
|
+
|
30
33
|
def load_current_resource
|
31
34
|
@current_resource = Chef::Resource::Package.new(new_resource.name)
|
32
35
|
current_resource.package_name(new_resource.package_name)
|
33
|
-
|
34
|
-
logger.trace("#{new_resource} checking pacman for #{new_resource.package_name}")
|
35
|
-
status = shell_out("pacman", "-Qi", new_resource.package_name)
|
36
|
-
status.stdout.each_line do |line|
|
37
|
-
case line
|
38
|
-
when /^Version(\s?)*: (.+)$/
|
39
|
-
logger.trace("#{new_resource} current version is #{$2}")
|
40
|
-
current_resource.version($2)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
unless status.exitstatus == 0 || status.exitstatus == 1
|
45
|
-
raise Chef::Exceptions::Package, "pacman failed - #{status.inspect}!"
|
46
|
-
end
|
47
|
-
|
48
|
-
current_resource
|
49
|
-
end
|
50
|
-
|
51
|
-
def candidate_version
|
52
|
-
return @candidate_version if @candidate_version
|
36
|
+
current_resource.version = []
|
53
37
|
|
54
38
|
repos = %w{extra core community}
|
55
39
|
|
@@ -58,31 +42,38 @@ class Chef
|
|
58
42
|
repos = pacman.scan(/\[(.+)\]/).flatten
|
59
43
|
end
|
60
44
|
|
61
|
-
|
62
|
-
|
45
|
+
repos = Regexp.union(repos)
|
63
46
|
status = shell_out("pacman", "-Sl")
|
64
|
-
status.stdout.each_line do |line|
|
65
|
-
case line
|
66
|
-
when /^(#{package_repos}) #{Regexp.escape(new_resource.package_name)} (.+)$/
|
67
|
-
# $2 contains a string like "4.4.0-1" or "3.10-4 [installed]"
|
68
|
-
# simply split by space and use first token
|
69
|
-
@candidate_version = $2.split(" ").first
|
70
|
-
end
|
71
|
-
end
|
72
47
|
|
73
48
|
unless status.exitstatus == 0 || status.exitstatus == 1
|
74
49
|
raise Chef::Exceptions::Package, "pacman failed - #{status.inspect}!"
|
75
50
|
end
|
76
51
|
|
77
|
-
|
78
|
-
|
52
|
+
pkg_db_data = status.stdout
|
53
|
+
@candidate_version = []
|
54
|
+
package_name_array.each do |pkg|
|
55
|
+
pkg_data = pkg_db_data.match(/(#{repos}) #{pkg} (?<candidate>.*?-[0-9]+)(?<installed> \[.*?( (?<current>.*?-[0-9]+))?\])?\n/m)
|
56
|
+
unless pkg_data
|
57
|
+
raise Chef::Exceptions::Package, "pacman does not have a version of package #{pkg}"
|
58
|
+
end
|
59
|
+
|
60
|
+
@candidate_version << pkg_data[:candidate]
|
61
|
+
if pkg_data[:installed]
|
62
|
+
current_resource.version << (pkg_data[:current] || pkg_data[:candidate])
|
63
|
+
else
|
64
|
+
current_resource.version << nil
|
65
|
+
end
|
79
66
|
end
|
80
67
|
|
68
|
+
current_resource
|
69
|
+
end
|
70
|
+
|
71
|
+
def candidate_version
|
81
72
|
@candidate_version
|
82
73
|
end
|
83
74
|
|
84
75
|
def install_package(name, version)
|
85
|
-
shell_out!(
|
76
|
+
shell_out!("pacman", "--sync", "--noconfirm", "--noprogressbar", options, *name)
|
86
77
|
end
|
87
78
|
|
88
79
|
def upgrade_package(name, version)
|
@@ -90,7 +81,7 @@ class Chef
|
|
90
81
|
end
|
91
82
|
|
92
83
|
def remove_package(name, version)
|
93
|
-
shell_out!(
|
84
|
+
shell_out!("pacman", "--remove", "--noconfirm", "--noprogressbar", options, *name)
|
94
85
|
end
|
95
86
|
|
96
87
|
def purge_package(name, version)
|
@@ -36,7 +36,7 @@ class Chef
|
|
36
36
|
|
37
37
|
def define_resource_requirements
|
38
38
|
super
|
39
|
-
if
|
39
|
+
if powershell_version < 5
|
40
40
|
raise "Minimum installed PowerShell Version required is 5"
|
41
41
|
end
|
42
42
|
|
@@ -53,9 +53,6 @@ class Chef
|
|
53
53
|
|
54
54
|
# Installs the package specified with the version passed else latest version will be installed
|
55
55
|
def install_package(names, versions)
|
56
|
-
# To enable tls 1.2, which is disabled by default in some OS
|
57
|
-
powershell_out("[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12")
|
58
|
-
|
59
56
|
names.each_with_index do |name, index|
|
60
57
|
cmd = powershell_out(build_powershell_package_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
|
61
58
|
next if cmd.nil?
|
@@ -118,8 +115,7 @@ class Chef
|
|
118
115
|
command = [command] unless command.is_a?(Array)
|
119
116
|
cmdlet_name = command.first
|
120
117
|
command.unshift("(")
|
121
|
-
|
122
|
-
%w{-Force -ForceBootstrap -WarningAction SilentlyContinue}.each do |arg|
|
118
|
+
%w{-Force -ForceBootstrap}.each do |arg|
|
123
119
|
command.push(arg)
|
124
120
|
end
|
125
121
|
command.push("-RequiredVersion #{version}") if version
|
@@ -483,9 +483,23 @@ class Chef
|
|
483
483
|
end
|
484
484
|
end
|
485
485
|
|
486
|
+
##
|
487
|
+
# If `include_default_source` is nil, return true if the global
|
488
|
+
# `rubygems_url` was set or if `clear_sources` and `source` on the
|
489
|
+
# resource are not set.
|
490
|
+
# If `include_default_source` is not nil, it has been set explicitly on
|
491
|
+
# the resource and that value should be used.
|
492
|
+
def include_default_source?
|
493
|
+
if new_resource.include_default_source.nil?
|
494
|
+
!!Chef::Config[:rubygems_url] || !(new_resource.source || new_resource.clear_sources)
|
495
|
+
else
|
496
|
+
new_resource.include_default_source
|
497
|
+
end
|
498
|
+
end
|
499
|
+
|
486
500
|
def gem_sources
|
487
501
|
srcs = [ new_resource.source ]
|
488
|
-
srcs << Chef::Config[:rubygems_url] if
|
502
|
+
srcs << (Chef::Config[:rubygems_url] || "https://rubygems.org") if include_default_source?
|
489
503
|
srcs.flatten.compact
|
490
504
|
end
|
491
505
|
|
@@ -550,12 +564,25 @@ class Chef
|
|
550
564
|
new_resource.gem_binary || "gem"
|
551
565
|
end
|
552
566
|
|
567
|
+
##
|
568
|
+
# If `clear_sources` is nil, clearing sources is implied if a `source`
|
569
|
+
# was added or if the global rubygems URL is set. If `clear_sources`
|
570
|
+
# is not nil, it has been set explicitly on the resource and its value
|
571
|
+
# should be used.
|
572
|
+
def clear_sources?
|
573
|
+
if new_resource.clear_sources.nil?
|
574
|
+
!!(new_resource.source || Chef::Config[:rubygems_url])
|
575
|
+
else
|
576
|
+
new_resource.clear_sources
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
553
580
|
def install_via_gem_command(name, version)
|
554
581
|
src = []
|
555
582
|
if new_resource.source.is_a?(String) && new_resource.source =~ /\.gem$/i
|
556
583
|
name = new_resource.source
|
557
584
|
else
|
558
|
-
src << "--clear-sources" if
|
585
|
+
src << "--clear-sources" if clear_sources?
|
559
586
|
src += gem_sources.map { |s| "--source=#{s}" }
|
560
587
|
end
|
561
588
|
src_str = src.empty? ? "" : " #{src.join(" ")}"
|
@@ -59,14 +59,15 @@ class Chef
|
|
59
59
|
def get_current_versions
|
60
60
|
package_name_array.each_with_index.map do |pkg, i|
|
61
61
|
installed_version(i)
|
62
|
-
end
|
62
|
+
end
|
63
63
|
end
|
64
64
|
|
65
65
|
def install_package(names, versions)
|
66
66
|
if new_resource.source
|
67
67
|
install_snap_from_source(names, new_resource.source)
|
68
68
|
else
|
69
|
-
|
69
|
+
resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? }
|
70
|
+
install_snaps(resolved_names)
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
@@ -74,16 +75,14 @@ class Chef
|
|
74
75
|
if new_resource.source
|
75
76
|
install_snap_from_source(names, new_resource.source)
|
76
77
|
else
|
77
|
-
|
78
|
-
|
79
|
-
else
|
80
|
-
update_snaps(names)
|
81
|
-
end
|
78
|
+
resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? }
|
79
|
+
update_snaps(resolved_names)
|
82
80
|
end
|
83
81
|
end
|
84
82
|
|
85
83
|
def remove_package(names, versions)
|
86
|
-
|
84
|
+
resolved_names = names.each_with_index.map { |name, i| installed_version(i).to_s unless name.nil? }
|
85
|
+
uninstall_snaps(resolved_names)
|
87
86
|
end
|
88
87
|
|
89
88
|
alias purge_package remove_package
|
@@ -130,73 +129,19 @@ class Chef
|
|
130
129
|
"Accept: application/json\r\n" +
|
131
130
|
"Content-Type: application/json\r\n"
|
132
131
|
if method == "POST"
|
133
|
-
|
134
|
-
request.concat("Content-Length: #{pdata.bytesize}\r\n\r\n#{pdata}")
|
132
|
+
request.concat("Content-Length: #{post_data.bytesize}\r\n\r\n#{post_data}")
|
135
133
|
end
|
136
134
|
request.concat("\r\n")
|
137
|
-
|
138
|
-
#
|
139
|
-
#
|
140
|
-
# socket is /run/snapd.socket note - unixsocket is not defined on
|
141
|
-
# windows systems
|
135
|
+
# While it is expected to allow clients to connect using HTTPS over a TCP socket,
|
136
|
+
# at this point only a UNIX socket is supported. The socket is /run/snapd.socket
|
137
|
+
# Note - UNIXSocket is not defined on windows systems
|
142
138
|
if defined?(::UNIXSocket)
|
143
139
|
UNIXSocket.open("/run/snapd.socket") do |socket|
|
144
|
-
#
|
145
|
-
|
146
|
-
socket.
|
147
|
-
|
148
|
-
|
149
|
-
#
|
150
|
-
# So snapd doesn't return an EOF at the end of its body, so
|
151
|
-
# doing a normal read will just hang forever.
|
152
|
-
#
|
153
|
-
# Well, sort of. if, after it writes everything, you then send
|
154
|
-
# yet-another newline, it'll then send its EOF and promptly
|
155
|
-
# disconnect closing the pipe and preventing reading. so, you
|
156
|
-
# have to read first, and therein lies the EOF problem.
|
157
|
-
#
|
158
|
-
# So you can do non-blocking reads with selects, but it
|
159
|
-
# makes every read take about 5 seconds. If, instead, we
|
160
|
-
# read the last line char-by-char, it's about half a second.
|
161
|
-
#
|
162
|
-
# Reading a character at a time isn't efficient, and since we
|
163
|
-
# know that http headers always have a blank line after them,
|
164
|
-
# we can read lines until we find a blank line and *then* read
|
165
|
-
# a character at a time. snap returns all the json on a single
|
166
|
-
# line, so once you pass headers you must read a character a
|
167
|
-
# time.
|
168
|
-
#
|
169
|
-
# - jaymzh
|
170
|
-
|
171
|
-
Chef::Log.trace(
|
172
|
-
"snap_package[#{new_resource.package_name}]: reading headers"
|
173
|
-
)
|
174
|
-
loop do
|
175
|
-
response = socket.readline
|
176
|
-
break if response.strip.empty? # finished headers
|
177
|
-
end
|
178
|
-
Chef::Log.trace(
|
179
|
-
"snap_package[#{new_resource.package_name}]: past headers, " +
|
180
|
-
"onto the body..."
|
181
|
-
)
|
182
|
-
result = nil
|
183
|
-
body = ""
|
184
|
-
socket.each_char do |c|
|
185
|
-
body << c
|
186
|
-
# we know we're not done if we don't have a char that
|
187
|
-
# can end JSON
|
188
|
-
next unless ["}", "]"].include?(c)
|
189
|
-
|
190
|
-
begin
|
191
|
-
result = JSON.parse(body)
|
192
|
-
# if we get here, we were able to parse the json so we
|
193
|
-
# are done reading
|
194
|
-
break
|
195
|
-
rescue JSON::ParserError
|
196
|
-
next
|
197
|
-
end
|
198
|
-
end
|
199
|
-
result
|
140
|
+
# Send request, read the response, split the response and parse the body
|
141
|
+
socket.print(request)
|
142
|
+
response = socket.read
|
143
|
+
headers, body = response.split("\r\n\r\n", 2)
|
144
|
+
JSON.parse(body)
|
200
145
|
end
|
201
146
|
end
|
202
147
|
end
|
@@ -266,22 +211,20 @@ class Chef
|
|
266
211
|
response.error!
|
267
212
|
end
|
268
213
|
|
269
|
-
def install_snaps(snap_names
|
270
|
-
snap_names.
|
271
|
-
|
272
|
-
|
273
|
-
wait_for_completion(id)
|
274
|
-
end
|
214
|
+
def install_snaps(snap_names)
|
215
|
+
response = post_snaps(snap_names, "install", new_resource.channel, new_resource.options)
|
216
|
+
id = get_id_from_async_response(response)
|
217
|
+
wait_for_completion(id)
|
275
218
|
end
|
276
219
|
|
277
220
|
def update_snaps(snap_names)
|
278
|
-
response = post_snaps(snap_names, "refresh",
|
221
|
+
response = post_snaps(snap_names, "refresh", new_resource.channel, new_resource.options)
|
279
222
|
id = get_id_from_async_response(response)
|
280
223
|
wait_for_completion(id)
|
281
224
|
end
|
282
225
|
|
283
226
|
def uninstall_snaps(snap_names)
|
284
|
-
response = post_snaps(snap_names, "remove",
|
227
|
+
response = post_snaps(snap_names, "remove", new_resource.channel, new_resource.options)
|
285
228
|
id = get_id_from_async_response(response)
|
286
229
|
wait_for_completion(id)
|
287
230
|
end
|
@@ -335,20 +278,18 @@ class Chef
|
|
335
278
|
"action" => action,
|
336
279
|
"snaps" => snap_names,
|
337
280
|
}
|
338
|
-
if %w{install refresh switch}.include?(action)
|
281
|
+
if %w{install refresh switch}.include?(action)
|
339
282
|
request["channel"] = channel
|
340
283
|
end
|
341
284
|
|
342
285
|
# No defensive handling of params
|
343
286
|
# Snap will throw the proper exception if called improperly
|
344
287
|
# And we can provide that exception to the end user
|
345
|
-
if options
|
346
|
-
|
347
|
-
|
348
|
-
request["jailmode"] = true if options.include?("jailmode")
|
349
|
-
request["ignore_validation"] = true if options.include?("ignore-validation")
|
350
|
-
end
|
288
|
+
request["classic"] = true if options["classic"]
|
289
|
+
request["devmode"] = true if options["devmode"]
|
290
|
+
request["jailmode"] = true if options["jailmode"]
|
351
291
|
request["revision"] = revision unless revision.nil?
|
292
|
+
request["ignore_validation"] = true if options["ignore-validation"]
|
352
293
|
request
|
353
294
|
end
|
354
295
|
|
@@ -364,22 +305,12 @@ class Chef
|
|
364
305
|
call_snap_api("POST", "/v2/snaps", json)
|
365
306
|
end
|
366
307
|
|
367
|
-
def post_snap(snap_name, action, channel, options, revision = nil)
|
368
|
-
json = generate_snap_json(snap_name, action, channel, options, revision = nil)
|
369
|
-
json.delete("snaps")
|
370
|
-
call_snap_api("POST", "/v2/snaps/#{snap_name}", json)
|
371
|
-
end
|
372
|
-
|
373
308
|
def get_latest_package_version(name, channel)
|
374
309
|
json = call_snap_api("GET", "/v2/find?name=#{name}")
|
375
310
|
if json["status-code"] != 200
|
376
311
|
raise Chef::Exceptions::Package, json["result"], caller
|
377
312
|
end
|
378
313
|
|
379
|
-
unless json["result"][0]["channels"]["latest/#{channel}"]
|
380
|
-
raise Chef::Exceptions::Package, "No version of #{name} in channel #{channel}", caller
|
381
|
-
end
|
382
|
-
|
383
314
|
# Return the version matching the channel
|
384
315
|
json["result"][0]["channels"]["latest/#{channel}"]["version"]
|
385
316
|
end
|