File tree Expand file tree Collapse file tree 2 files changed +81
-0
lines changed
lib/puppet/functions/stdlib Expand file tree Collapse file tree 2 files changed +81
-0
lines changed Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ # @summary
4+ # This converts a string to a puppet resource.
5+ #
6+ # This attempts to convert a string like 'File[/foo]' into the
7+ # puppet resource `File['/foo']` as detected by the catalog.
8+ #
9+ # Things like 'File[/foo, /bar]' are not supported as a
10+ # title might contain things like ',' or ' '. There is
11+ # no clear value seperator to use.
12+ #
13+ # This function can depend on the parse order of your
14+ # manifests/modules as it inspects the catalog thus far.
15+ Puppet ::Functions . create_function ( :'stdlib::str2resource' ) do
16+ # @param res_string The string to lookup as a resource
17+ # @example
18+ # stdlib::str2resource('File[/foo]') => File[/foo]
19+ # @return Puppet::Resource
20+ dispatch :str2resource do
21+ param 'String' , :res_string
22+ #return_type 'Puppet::Resource'
23+ return_type 'Any'
24+ end
25+
26+ def str2resource ( res_string )
27+ type_name , title = Puppet ::Resource . type_and_title ( res_string , nil )
28+
29+ resource = closure_scope . findresource ( type_name , title )
30+
31+ if resource . nil?
32+ raise ( Puppet ::ParseError , "stdlib::str2resource(): could not find #{ type_name } [#{ title } ], this is parse order dependant and values should not be quoted" )
33+ end
34+
35+ return resource
36+ end
37+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ require 'spec_helper'
4+
5+ describe 'stdlib::str2resource' do
6+ context 'when default' do
7+ it { is_expected . not_to eq ( nil ) }
8+ it { is_expected . to run . with_params . and_raise_error ( ArgumentError , %r{stdlib::str2resource} ) }
9+ end
10+
11+ context 'when testing simple resource definitions exist' do
12+ let :pre_condition do
13+ <<-PRECOND
14+ file { 'foo': }
15+ file { '/foo': }
16+ file { 'foot': }
17+ user { 'foo': }
18+ PRECOND
19+ end
20+
21+ file_foo = Puppet ::Resource . new ( :file , 'foo' )
22+ user_foo = Puppet ::Resource . new ( :user , 'foo' )
23+
24+ it { is_expected . to run . with_params ( 'File[foo]' ) . and_return ( file_foo ) }
25+ it { is_expected . not_to run . with_params ( 'File[\'foo\']' ) }
26+ it { is_expected . not_to run . with_params ( 'File["foo"]' ) }
27+
28+ it { is_expected . to run . with_params ( 'User[foo]' ) . and_return ( user_foo ) }
29+ end
30+
31+ context 'when someone tries a compound definition' do
32+ let :pre_condition do
33+ 'user { "foo, bar": }'
34+ end
35+
36+ user_foo_bar = Puppet ::Resource . new ( :user , 'foo, bar' )
37+
38+ it { is_expected . to run . with_params ( 'User[foo, bar]' ) . and_return ( user_foo_bar ) }
39+ end
40+
41+ context 'when testing simple resource definitions no exist' do
42+ it { is_expected . not_to run . with_params ( 'File[foo]' ) }
43+ end
44+ end
You can’t perform that action at this time.
0 commit comments