File tree Expand file tree Collapse file tree 2 files changed +63
-0
lines changed
lib/puppet/parser/functions
spec/unit/puppet/parser/functions Expand file tree Collapse file tree 2 files changed +63
-0
lines changed Original file line number Diff line number Diff line change 1+ module Puppet ::Parser ::Functions
2+ newfunction ( :pick , :type => :rvalue , :doc => <<-EOS
3+
4+ This function is similar to a coalesce function in SQL in that it will return
5+ the first value in a list of values that is not undefined or an empty string
6+ (two things in Puppet that will return a boolean false value). Typically,
7+ this function is used to check for a value in the Puppet Dashboard/Enterprise
8+ Console, and failover to a default value like the following:
9+
10+ $real_jenkins_version = pick($::jenkins_version, '1.449')
11+
12+ The value of $real_jenkins_version will first look for a top-scope variable
13+ called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
14+ Enterprise Console are brought into Puppet as top-scope variables), and,
15+ failing that, will use a default value of 1.449.
16+
17+ EOS
18+ ) do |args |
19+ args = args . compact
20+ args . delete ( :undef )
21+ args . delete ( :undefined )
22+ args . delete ( "" )
23+ if args [ 0 ] . to_s . empty? then
24+ fail "Must provide non empty value."
25+ else
26+ return args [ 0 ]
27+ end
28+ end
29+ end
Original file line number Diff line number Diff line change 1+ #!/usr/bin/env ruby -S rspec
2+ require 'spec_helper'
3+
4+ describe "the pick function" do
5+ let ( :scope ) { PuppetlabsSpec ::PuppetInternals . scope }
6+
7+ it "should exist" do
8+ Puppet ::Parser ::Functions . function ( "pick" ) . should == "function_pick"
9+ end
10+
11+ it 'should return the correct value' do
12+ scope . function_pick ( [ 'first' , 'second' ] ) . should == 'first'
13+ end
14+
15+ it 'should return the correct value if the first value is empty' do
16+ scope . function_pick ( [ '' , 'second' ] ) . should == 'second'
17+ end
18+
19+ it 'should remove empty string values' do
20+ scope . function_pick ( [ '' , 'first' ] ) . should == 'first'
21+ end
22+
23+ it 'should remove :undef values' do
24+ scope . function_pick ( [ :undef , 'first' ] ) . should == 'first'
25+ end
26+
27+ it 'should remove :undefined values' do
28+ scope . function_pick ( [ :undefined , 'first' ] ) . should == 'first'
29+ end
30+
31+ it 'should error if no values are passed' do
32+ expect { scope . function_pick ( [ ] ) } . to raise_error ( Puppet ::Error , /Must provide non empty value./ )
33+ end
34+ end
You can’t perform that action at this time.
0 commit comments