class RuboCop::Cop::Chef::Modernize::UseMultipackageInstalls
Pass an array of packages to package resources instead of iterating over an array of packages when using multi-package capable package subsystem such as apt, yum, chocolatey, dnf, or zypper. Multi-package installs are faster and simplify logs.
@example
#### incorrect %w(bmon htop vim curl).each do |pkg| package pkg do action :install end end #### correct package %w(bmon htop vim curl)
Constants
- MSG
- MULTIPACKAGE_PLATS
Public Instance Methods
multipackage_platforms?(condition_obj)
click to toggle source
see if all platforms in the when condition are multi-package compliant
# File lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb, line 79 def multipackage_platforms?(condition_obj) condition_obj.all? do |p| # make sure it's a string (not a regex) and it's in the array p.str_type? && MULTIPACKAGE_PLATS.include?(p.value) end end
on_if(node)
click to toggle source
# File lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb, line 98 def on_if(node) platform_helper?(node) do |plats, blk, _pkgs| return unless multipackage_platforms?(plats) add_offense(blk, message: MSG, severity: :refactor) do |corrector| package_array_install(blk) do |install_block, pkgs| corrector.replace(install_block, "package #{pkgs.source}") end end end end
on_when(node)
click to toggle source
# File lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb, line 86 def on_when(node) return unless platform_or_platform_family?(node.parent.condition) && multipackage_platforms?(node.conditions) return if node.body.nil? # don't blow up on empty whens package_array_install(node.body) do |install_block, pkgs| add_offense(install_block, message: MSG, severity: :refactor) do |corrector| corrector.replace(install_block, "package #{pkgs.source}") end end end