diff --git a/lib/puppet/parser/functions/ensure_packages.rb b/lib/puppet/parser/functions/ensure_packages.rb index 3cd2b20..ef0ccca 100644 --- a/lib/puppet/parser/functions/ensure_packages.rb +++ b/lib/puppet/parser/functions/ensure_packages.rb @@ -1,54 +1,54 @@ # frozen_string_literal: true # # ensure_packages.rb # module Puppet::Parser::Functions newfunction(:ensure_packages, type: :statement, doc: <<-DOC @summary Takes a list of packages and only installs them if they don't already exist. It optionally takes a hash as a second parameter that will be passed as the third argument to the ensure_resource() function. @return install the passed packages DOC ) do |arguments| raise(Puppet::ParseError, "ensure_packages(): Wrong number of arguments given (#{arguments.size} for 1 or 2)") if arguments.size > 2 || arguments.empty? raise(Puppet::ParseError, 'ensure_packages(): Requires second argument to be a Hash') if arguments.size == 2 && !arguments[1].is_a?(Hash) if arguments[0].is_a?(Hash) if arguments[1] - defaults = { 'ensure' => 'present' }.merge(arguments[1]) - if defaults['ensure'] == 'installed' - defaults['ensure'] = 'present' + defaults = { 'ensure' => 'installed' }.merge(arguments[1]) + if defaults['ensure'] == 'present' + defaults['ensure'] = 'installed' end else - defaults = { 'ensure' => 'present' } + defaults = { 'ensure' => 'installed' } end Puppet::Parser::Functions.function(:ensure_resources) function_ensure_resources(['package', arguments[0].dup, defaults]) else packages = Array(arguments[0]) if arguments[1] - defaults = { 'ensure' => 'present' }.merge(arguments[1]) - if defaults['ensure'] == 'installed' - defaults['ensure'] = 'present' + defaults = { 'ensure' => 'installed' }.merge(arguments[1]) + if defaults['ensure'] == 'present' + defaults['ensure'] = 'installed' end else - defaults = { 'ensure' => 'present' } + defaults = { 'ensure' => 'installed' } end Puppet::Parser::Functions.function(:ensure_resource) packages.each do |package_name| raise(Puppet::ParseError, 'ensure_packages(): Empty String provided for package name') if package_name.empty? function_ensure_resource(['package', package_name, defaults]) end end end end # vim: set ts=2 sw=2 et : diff --git a/spec/functions/ensure_packages_spec.rb b/spec/functions/ensure_packages_spec.rb index 1f6b85d..41a8846 100644 --- a/spec/functions/ensure_packages_spec.rb +++ b/spec/functions/ensure_packages_spec.rb @@ -1,74 +1,74 @@ # frozen_string_literal: true require 'spec_helper' describe 'ensure_packages' do it { is_expected.not_to eq(nil) } it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) } it { pending('should not accept numbers as arguments') is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError) } it { pending('should not accept numbers as arguments') is_expected.to run.with_params(['packagename', 1]).and_raise_error(Puppet::ParseError) } it { is_expected.to run.with_params('packagename') } it { is_expected.to run.with_params(['packagename1', 'packagename2']) } context 'when given a catalog with "package { puppet: ensure => absent }"' do let(:pre_condition) { 'package { puppet: ensure => absent }' } describe 'after running ensure_package("facter")' do before(:each) { subject.execute('facter') } # this lambda is required due to strangeness within rspec-puppet's expectation handling it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('absent') } - it { expect(-> { catalogue }).to contain_package('facter').with_ensure('present') } + it { expect(-> { catalogue }).to contain_package('facter').with_ensure('installed') } end describe 'after running ensure_package("facter", { "provider" => "gem" })' do before(:each) { subject.execute('facter', 'provider' => 'gem') } # this lambda is required due to strangeness within rspec-puppet's expectation handling it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('absent').without_provider } - it { expect(-> { catalogue }).to contain_package('facter').with_ensure('present').with_provider('gem') } + it { expect(-> { catalogue }).to contain_package('facter').with_ensure('installed').with_provider('gem') } end end context 'when given an empty packages array' do let(:pre_condition) { 'notify { "hi": } -> Package <| |>; $somearray = ["vim",""]; ensure_packages($somearray)' } describe 'after running ensure_package(["vim", ""])' do it { expect { catalogue }.to raise_error(Puppet::ParseError, %r{Empty String provided}) } end end context 'when given hash of packages' do before(:each) do subject.execute({ 'foo' => { 'provider' => 'rpm' }, 'bar' => { 'provider' => 'gem' } }, 'ensure' => 'present') subject.execute('パッケージ' => { 'ensure' => 'absent' }) subject.execute('ρǻ¢κầģẻ' => { 'ensure' => 'absent' }) end # this lambda is required due to strangeness within rspec-puppet's expectation handling - it { expect(-> { catalogue }).to contain_package('foo').with('provider' => 'rpm', 'ensure' => 'present') } - it { expect(-> { catalogue }).to contain_package('bar').with('provider' => 'gem', 'ensure' => 'present') } + it { expect(-> { catalogue }).to contain_package('foo').with('provider' => 'rpm', 'ensure' => 'installed') } + it { expect(-> { catalogue }).to contain_package('bar').with('provider' => 'gem', 'ensure' => 'installed') } context 'with UTF8 and double byte characters' do it { expect(-> { catalogue }).to contain_package('パッケージ').with('ensure' => 'absent') } it { expect(-> { catalogue }).to contain_package('ρǻ¢κầģẻ').with('ensure' => 'absent') } end end - context 'when given a catalog with "package { puppet: ensure => present }"' do - let(:pre_condition) { 'package { puppet: ensure => present }' } + context 'when given a catalog with "package { puppet: ensure => installed }"' do + let(:pre_condition) { 'package { puppet: ensure => installed }' } - describe 'after running ensure_package("puppet", { "ensure" => "installed" })' do - before(:each) { subject.execute('puppet', 'ensure' => 'installed') } + describe 'after running ensure_package("puppet", { "ensure" => "present" })' do + before(:each) { subject.execute('puppet', 'ensure' => 'present') } # this lambda is required due to strangeness within rspec-puppet's expectation handling - it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('present') } + it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('installed') } end end end