rspec-puppet 0.1.6 → 1.0.0
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 +7 -0
- data/README.md +71 -6
- data/lib/rspec-puppet.rb +45 -0
- data/lib/rspec-puppet/errors.rb +83 -0
- data/lib/rspec-puppet/example/class_example_group.rb +1 -55
- data/lib/rspec-puppet/example/define_example_group.rb +1 -57
- data/lib/rspec-puppet/example/function_example_group.rb +21 -35
- data/lib/rspec-puppet/example/host_example_group.rb +1 -26
- data/lib/rspec-puppet/matchers.rb +3 -1
- data/lib/rspec-puppet/matchers/compile.rb +133 -0
- data/lib/rspec-puppet/matchers/count_generic.rb +73 -0
- data/lib/rspec-puppet/matchers/create_generic.rb +155 -52
- data/lib/rspec-puppet/matchers/dynamic_matchers.rb +17 -0
- data/lib/rspec-puppet/matchers/include_class.rb +2 -1
- data/lib/rspec-puppet/matchers/parameter_matcher.rb +110 -0
- data/lib/rspec-puppet/matchers/run.rb +49 -31
- data/lib/rspec-puppet/setup.rb +57 -34
- data/lib/rspec-puppet/support.rb +154 -7
- metadata +18 -32
- data/LICENSE +0 -20
- data/Rakefile +0 -7
- data/lib/rspec-puppet/matchers/create_resource.rb +0 -53
- data/rspec-puppet.gemspec +0 -47
- data/spec/classes/boolean_regexp_spec.rb +0 -10
- data/spec/classes/boolean_spec.rb +0 -11
- data/spec/classes/sysctl_common_spec.rb +0 -40
- data/spec/defines/sysctl_before_spec.rb +0 -26
- data/spec/defines/sysctl_spec.rb +0 -14
- data/spec/fixtures/manifests/site.pp +0 -7
- data/spec/fixtures/modules/boolean/manifests/init.pp +0 -12
- data/spec/fixtures/modules/sysctl/manifests/init.pp +0 -39
- data/spec/functions/split_spec.rb +0 -17
- data/spec/hosts/foo_spec.rb +0 -6
- data/spec/hosts/testhost_spec.rb +0 -5
- data/spec/spec_helper.rb +0 -6
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fc2b092d4a84ad47ceff22b0123d01b8171ff612
|
4
|
+
data.tar.gz: eb32c18c64ad5ae96e69f53fc8d2999665784f24
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4f6909ee0c338d72e1251590bccc3d6a5b34fcc8279158ce1a39a26f3905396e3e6a06284cb92392c7b7aecf8f4c3b7e1a5960189ab3f5d7796afe3c131f49e1
|
7
|
+
data.tar.gz: ffd7a6073b9afc2d660d061c42450381ff631c77df9f953289c62875e8f12aa5d05889f7a23eafd01a9741e931b6007da82fc17a5cb76538090adcb42ce7b541
|
data/README.md
CHANGED
@@ -96,6 +96,13 @@ the generic `with_<parameter>` chains.
|
|
96
96
|
it { should contain_package('mysql-server').with_ensure('present') }
|
97
97
|
```
|
98
98
|
|
99
|
+
If you want to specify that the given parameters should be the only ones passed
|
100
|
+
to the resource, use the `only_with_<parameter>` chains.
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
it { should contain_package('httpd').only_with_ensure('latest') }
|
104
|
+
```
|
105
|
+
|
99
106
|
You can use the `with` method to verify the value of multiple parameters.
|
100
107
|
|
101
108
|
```ruby
|
@@ -107,6 +114,16 @@ it do should contain_service('keystone').with(
|
|
107
114
|
) end
|
108
115
|
```
|
109
116
|
|
117
|
+
The same holds for the `only_with` method, which in addition verifies the exact
|
118
|
+
set of parameters and values for the resource in the catalogue.
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
it do should contain_user('luke').only_with(
|
122
|
+
'ensure' => 'present',
|
123
|
+
'uid' => '501'
|
124
|
+
) end
|
125
|
+
```
|
126
|
+
|
110
127
|
You can also test that specific parameters have been left undefined with the
|
111
128
|
generic `without_<parameter>` chains.
|
112
129
|
|
@@ -123,6 +140,41 @@ it { should contain_service('keystone').without(
|
|
123
140
|
)}
|
124
141
|
```
|
125
142
|
|
143
|
+
#### Checking the number of resources
|
144
|
+
|
145
|
+
You can test the number of resources in the catalogue with the
|
146
|
+
`have_resource_count` matcher.
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
it { should have_resource_count(2) }
|
150
|
+
```
|
151
|
+
|
152
|
+
The number of classes in the catalogue can be checked with the
|
153
|
+
`have_class_count` matcher.
|
154
|
+
|
155
|
+
```ruby
|
156
|
+
it { should have_class_count(2) }
|
157
|
+
```
|
158
|
+
|
159
|
+
You can also test the number of a specific resource type, by using the generic
|
160
|
+
`have_<resource type>_resource_count` matcher.
|
161
|
+
|
162
|
+
```ruby
|
163
|
+
it { should have_exec_resource_count(1) }
|
164
|
+
```
|
165
|
+
|
166
|
+
This last matcher also works for defined types. If the resource type contains
|
167
|
+
::, you can replace it with __ (two underscores).
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
it { should have_logrotate__rule_resource_count(3) }
|
171
|
+
```
|
172
|
+
|
173
|
+
*NOTE*: when testing a class, the catalogue generated will always contain at
|
174
|
+
least one class, the class under test. The same holds for defined types, the
|
175
|
+
catalogue generated when testing a defined type will have at least one resource
|
176
|
+
(the defined type itself).
|
177
|
+
|
126
178
|
### Writing tests
|
127
179
|
|
128
180
|
#### Basic test structure
|
@@ -180,6 +232,19 @@ You can set them with a hash
|
|
180
232
|
let(:facts) { {:operatingsystem => 'Debian', :kernel => 'Linux', ...} }
|
181
233
|
```
|
182
234
|
|
235
|
+
You can also create a set of default facts provided to all specs in your spec_helper:
|
236
|
+
|
237
|
+
``` ruby
|
238
|
+
RSpec.configure do |c|
|
239
|
+
c.default_facts = {
|
240
|
+
:operatingsystem => 'Ubuntu'
|
241
|
+
}
|
242
|
+
end
|
243
|
+
```
|
244
|
+
|
245
|
+
Any facts you provide with `let(:facts)` in a spec will automatically be merged on top
|
246
|
+
of the default facts.
|
247
|
+
|
183
248
|
#### Specifying the path to find your modules
|
184
249
|
|
185
250
|
I recommend setting a default module path by adding the following code to your
|
@@ -206,7 +271,7 @@ Puppet functions.
|
|
206
271
|
|
207
272
|
```ruby
|
208
273
|
it 'should be able to do something' do
|
209
|
-
subject.call('foo') == 'bar'
|
274
|
+
subject.call(['foo']) == 'bar'
|
210
275
|
end
|
211
276
|
```
|
212
277
|
|
@@ -250,7 +315,7 @@ Or by using the `call` method on the subject directly
|
|
250
315
|
|
251
316
|
```ruby
|
252
317
|
it 'something' do
|
253
|
-
subject.call('foo', 'bar', ['baz'])
|
318
|
+
subject.call(['foo', 'bar', ['baz']])
|
254
319
|
end
|
255
320
|
```
|
256
321
|
|
@@ -267,8 +332,8 @@ Or by using any of the existing RSpec matchers on the subject directly
|
|
267
332
|
|
268
333
|
```ruby
|
269
334
|
it 'something' do
|
270
|
-
subject.call('foo') == 'bar'
|
271
|
-
subject.call('baz').should be_an Array
|
335
|
+
subject.call(['foo']) == 'bar'
|
336
|
+
subject.call(['baz']).should be_an Array
|
272
337
|
end
|
273
338
|
```
|
274
339
|
|
@@ -286,7 +351,7 @@ Or by using the existing `raises_error` RSpec matcher
|
|
286
351
|
|
287
352
|
```ruby
|
288
353
|
it 'something' do
|
289
|
-
expect { subject.call('a', 'b') }.should raise_error(Puppet::ParseError)
|
290
|
-
expect { subject.call('a') }.should_not raise_error(Puppet::ParseError)
|
354
|
+
expect { subject.call(['a', 'b']) }.should raise_error(Puppet::ParseError)
|
355
|
+
expect { subject.call(['a']) }.should_not raise_error(Puppet::ParseError)
|
291
356
|
end
|
292
357
|
```
|
data/lib/rspec-puppet.rb
CHANGED
@@ -2,14 +2,59 @@ require 'puppet'
|
|
2
2
|
require 'rspec'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'tmpdir'
|
5
|
+
require 'rspec-puppet/errors'
|
5
6
|
require 'rspec-puppet/matchers'
|
6
7
|
require 'rspec-puppet/example'
|
7
8
|
require 'rspec-puppet/setup'
|
8
9
|
|
10
|
+
begin
|
11
|
+
require 'puppet/test/test_helper'
|
12
|
+
rescue LoadError
|
13
|
+
end
|
14
|
+
|
9
15
|
RSpec.configure do |c|
|
10
16
|
c.add_setting :module_path, :default => '/etc/puppet/modules'
|
11
17
|
c.add_setting :manifest_dir, :default => nil
|
12
18
|
c.add_setting :manifest, :default => nil
|
13
19
|
c.add_setting :template_dir, :default => nil
|
14
20
|
c.add_setting :config, :default => nil
|
21
|
+
c.add_setting :confdir, :default => '/etc/puppet'
|
22
|
+
c.add_setting :default_facts, :default => {}
|
23
|
+
c.add_setting :hiera_config, :default => '/dev/null'
|
24
|
+
|
25
|
+
if defined?(Puppet::Test::TestHelper)
|
26
|
+
begin
|
27
|
+
Puppet::Test::TestHelper.initialize
|
28
|
+
rescue NoMethodError
|
29
|
+
Puppet::Test::TestHelper.before_each_test
|
30
|
+
end
|
31
|
+
|
32
|
+
c.before :all do
|
33
|
+
begin
|
34
|
+
Puppet::Test::TestHelper.before_all_tests
|
35
|
+
rescue
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
c.after :all do
|
40
|
+
begin
|
41
|
+
Puppet::Test::TestHelper.after_all_tests
|
42
|
+
rescue
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
c.before :each do
|
47
|
+
begin
|
48
|
+
Puppet::Test::TestHelper.before_each_test
|
49
|
+
rescue
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
c.after :each do
|
54
|
+
begin
|
55
|
+
Puppet::Test::TestHelper.after_each_test
|
56
|
+
rescue
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
15
60
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module RSpec::Puppet
|
2
|
+
module Errors
|
3
|
+
class MatchError < StandardError
|
4
|
+
attr_reader :param, :expected, :actual, :negative
|
5
|
+
|
6
|
+
def initialize(param, expected, actual, negative)
|
7
|
+
@param = param
|
8
|
+
@expected = expected.inspect
|
9
|
+
@actual = actual.inspect
|
10
|
+
@negative = negative
|
11
|
+
end
|
12
|
+
|
13
|
+
def message
|
14
|
+
if negative == true
|
15
|
+
"#{param} not set to #{expected} but it is set to #{actual}"
|
16
|
+
else
|
17
|
+
"#{param} set to #{expected} but it is set to #{actual}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class RegexpMatchError < MatchError
|
27
|
+
def message
|
28
|
+
if negative == true
|
29
|
+
"#{param} not matching #{expected} but its value of #{actual} does"
|
30
|
+
else
|
31
|
+
"#{param} matching #{expected} but its value of #{actual} does not"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class ProcMatchError < MatchError
|
37
|
+
def message
|
38
|
+
if negative == true
|
39
|
+
"#{param} passed to the block would not return `#{expected}` but it did"
|
40
|
+
else
|
41
|
+
"#{param} passed to the block would return `#{expected}` but it is `#{actual}`"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class RelationshipError < StandardError
|
47
|
+
attr_reader :from, :to
|
48
|
+
|
49
|
+
def initialize(from, to)
|
50
|
+
@from = from
|
51
|
+
@to = to
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
message
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class BeforeRelationshipError < RelationshipError
|
60
|
+
def message
|
61
|
+
"#{from} to come before #{to} in the graph"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class RequireRelationshipError < RelationshipError
|
66
|
+
def message
|
67
|
+
"#{from} to require #{to} in the graph"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class NotifyRelationshipError < RelationshipError
|
72
|
+
def message
|
73
|
+
"#{from} to notify #{to}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class SubscribeRelationshipError < RelationshipError
|
78
|
+
def message
|
79
|
+
"#{from} to be subscribed to #{to}"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -4,61 +4,7 @@ module RSpec::Puppet
|
|
4
4
|
include RSpec::Puppet::Support
|
5
5
|
|
6
6
|
def subject
|
7
|
-
@catalogue ||= catalogue
|
8
|
-
end
|
9
|
-
|
10
|
-
def catalogue
|
11
|
-
vardir = Dir.mktmpdir
|
12
|
-
Puppet[:vardir] = vardir
|
13
|
-
Puppet[:hiera_config] = File.join(vardir, "hiera.yaml") if Puppet[:hiera_config] == File.expand_path("/dev/null")
|
14
|
-
Puppet[:modulepath] = self.respond_to?(:module_path) ? module_path : RSpec.configuration.module_path
|
15
|
-
Puppet[:manifestdir] = self.respond_to?(:manifest_dir) ? manifest_dir : RSpec.configuration.manifest_dir
|
16
|
-
Puppet[:manifest] = self.respond_to?(:manifest) ? manifest : RSpec.configuration.manifest
|
17
|
-
Puppet[:templatedir] = self.respond_to?(:template_dir) ? template_dir : RSpec.configuration.template_dir
|
18
|
-
Puppet[:config] = self.respond_to?(:config) ? config : RSpec.configuration.config
|
19
|
-
|
20
|
-
klass_name = self.class.top_level_description.downcase
|
21
|
-
|
22
|
-
# If we're testing a standalone module (i.e. one that's outside of a
|
23
|
-
# puppet tree), the autoloader won't work, so we need to fudge it a bit.
|
24
|
-
if File.exists?(File.join(Puppet[:modulepath], 'manifests', 'init.pp'))
|
25
|
-
path_to_manifest = File.join([Puppet[:modulepath], 'manifests', klass_name.split('::')[1..-1]].flatten)
|
26
|
-
import_str = "import '#{Puppet[:modulepath]}/manifests/init.pp'\nimport '#{path_to_manifest}.pp'\n"
|
27
|
-
elsif File.exists?(Puppet[:modulepath])
|
28
|
-
import_str = "import '#{Puppet[:manifest]}'\n"
|
29
|
-
else
|
30
|
-
import_str = ""
|
31
|
-
end
|
32
|
-
|
33
|
-
if self.respond_to? :pre_condition
|
34
|
-
if pre_condition.kind_of?(Array)
|
35
|
-
pre_cond = pre_condition.join("\n")
|
36
|
-
else
|
37
|
-
pre_cond = pre_condition
|
38
|
-
end
|
39
|
-
else
|
40
|
-
pre_cond = ''
|
41
|
-
end
|
42
|
-
|
43
|
-
if !self.respond_to?(:params) || params == {}
|
44
|
-
code = import_str + "include #{klass_name}"
|
45
|
-
else
|
46
|
-
code = import_str + 'class' + " { \"" + klass_name + "\": " + params.keys.map { |r| "#{r.to_s} => #{params[r].inspect}"
|
47
|
-
}.join(',' ) + " }"
|
48
|
-
end
|
49
|
-
code = pre_cond + "\n" + code
|
50
|
-
|
51
|
-
nodename = self.respond_to?(:node) ? node : Puppet[:certname]
|
52
|
-
facts_val = {
|
53
|
-
'hostname' => nodename.split('.').first,
|
54
|
-
'fqdn' => nodename,
|
55
|
-
'domain' => nodename.split('.').last,
|
56
|
-
}
|
57
|
-
facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts)
|
58
|
-
|
59
|
-
catalogue = build_catalog(nodename, facts_val, code)
|
60
|
-
FileUtils.rm_rf(vardir) if File.directory?(vardir)
|
61
|
-
catalogue
|
7
|
+
@catalogue ||= catalogue(:class)
|
62
8
|
end
|
63
9
|
end
|
64
10
|
end
|
@@ -4,63 +4,7 @@ module RSpec::Puppet
|
|
4
4
|
include RSpec::Puppet::Support
|
5
5
|
|
6
6
|
def subject
|
7
|
-
@catalogue ||= catalogue
|
8
|
-
end
|
9
|
-
|
10
|
-
def catalogue
|
11
|
-
define_name = self.class.top_level_description.downcase
|
12
|
-
|
13
|
-
vardir = Dir.mktmpdir
|
14
|
-
Puppet[:vardir] = vardir
|
15
|
-
Puppet[:hiera_config] = File.join(vardir, "hiera.yaml") if Puppet[:hiera_config] == File.expand_path("/dev/null")
|
16
|
-
Puppet[:modulepath] = self.respond_to?(:module_path) ? module_path : RSpec.configuration.module_path
|
17
|
-
Puppet[:manifestdir] = self.respond_to?(:manifest_dir) ? manifest_dir : RSpec.configuration.manifest_dir
|
18
|
-
Puppet[:manifest] = self.respond_to?(:manifest) ? manifest : RSpec.configuration.manifest
|
19
|
-
Puppet[:templatedir] = self.respond_to?(:template_dir) ? template_dir : RSpec.configuration.template_dir
|
20
|
-
Puppet[:config] = self.respond_to?(:config) ? config : RSpec.configuration.config
|
21
|
-
|
22
|
-
# If we're testing a standalone module (i.e. one that's outside of a
|
23
|
-
# puppet tree), the autoloader won't work, so we need to fudge it a bit.
|
24
|
-
if File.exists?(File.join(Puppet[:modulepath], 'manifests', 'init.pp'))
|
25
|
-
path_to_manifest = File.join([Puppet[:modulepath], 'manifests', define_name.split('::')[1..-1]].flatten)
|
26
|
-
import_str = "import '#{Puppet[:modulepath]}/manifests/init.pp'\nimport '#{path_to_manifest}.pp'\n"
|
27
|
-
elsif File.exists?(Puppet[:modulepath])
|
28
|
-
import_str = "import '#{Puppet[:manifest]}'\n"
|
29
|
-
else
|
30
|
-
import_str = ""
|
31
|
-
end
|
32
|
-
|
33
|
-
if self.respond_to? :params
|
34
|
-
param_str = params.keys.map { |r|
|
35
|
-
"#{r.to_s} => #{params[r].inspect}"
|
36
|
-
}.join(', ')
|
37
|
-
else
|
38
|
-
param_str = ""
|
39
|
-
end
|
40
|
-
|
41
|
-
if self.respond_to? :pre_condition
|
42
|
-
if pre_condition.kind_of?(Array)
|
43
|
-
pre_cond = pre_condition.join("\n")
|
44
|
-
else
|
45
|
-
pre_cond = pre_condition
|
46
|
-
end
|
47
|
-
else
|
48
|
-
pre_cond = ""
|
49
|
-
end
|
50
|
-
|
51
|
-
code = pre_cond + "\n" + import_str + define_name + " { \"" + title + "\": " + param_str + " }"
|
52
|
-
|
53
|
-
nodename = self.respond_to?(:node) ? node : Puppet[:certname]
|
54
|
-
facts_val = {
|
55
|
-
'hostname' => nodename.split('.').first,
|
56
|
-
'fqdn' => nodename,
|
57
|
-
'domain' => nodename.split('.', 2).last,
|
58
|
-
}
|
59
|
-
facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts)
|
60
|
-
|
61
|
-
catalogue = build_catalog(nodename, facts_val, code)
|
62
|
-
FileUtils.rm_rf(vardir) if File.directory?(vardir)
|
63
|
-
catalogue
|
7
|
+
@catalogue ||= catalogue(:define)
|
64
8
|
end
|
65
9
|
end
|
66
10
|
end
|
@@ -1,58 +1,44 @@
|
|
1
|
-
require 'puppetlabs_spec_helper/puppetlabs_spec/puppet_internals'
|
2
|
-
|
3
1
|
module RSpec::Puppet
|
4
2
|
module FunctionExampleGroup
|
5
3
|
include RSpec::Puppet::FunctionMatchers
|
6
|
-
|
4
|
+
include RSpec::Puppet::ManifestMatchers
|
5
|
+
include RSpec::Puppet::Support
|
7
6
|
|
8
7
|
def subject
|
9
8
|
function_name = self.class.top_level_description.downcase
|
10
9
|
|
11
|
-
|
12
|
-
Puppet[:libdir] = Dir["#{Puppet[:modulepath]}/*/lib"].entries.join(File::PATH_SEPARATOR)
|
10
|
+
vardir = setup_puppet
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
'fqdn' => nodename,
|
18
|
-
'domain' => nodename.split('.').last,
|
19
|
-
}
|
20
|
-
facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts)
|
21
|
-
facts_val.each { |k, v| Facter.add(k) { setcode { v } } }
|
12
|
+
node_name = nodename(:function)
|
13
|
+
|
14
|
+
facts_val = facts_hash(node_name)
|
22
15
|
|
23
16
|
# if we specify a pre_condition, we should ensure that we compile that code
|
24
17
|
# into a catalog that is accessible from the scope where the function is called
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
# we need to get a compiler, b/c we can attach that to a scope
|
32
|
-
@compiler = build_compiler(nodename, facts_val)
|
33
|
-
else
|
34
|
-
@compiler = PuppetInternals.compiler
|
35
|
-
end
|
36
|
-
|
37
|
-
scope = PuppetInternals.scope(:compiler => @compiler)
|
18
|
+
Puppet[:code] = pre_cond
|
19
|
+
|
20
|
+
compiler = build_compiler(node_name, facts_val)
|
21
|
+
|
22
|
+
function_scope = scope(compiler, node_name)
|
38
23
|
|
39
24
|
# Return the method instance for the function. This can be used with
|
40
25
|
# method.call
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
def compiler
|
45
|
-
@compiler
|
26
|
+
return nil unless Puppet::Parser::Functions.function(function_name)
|
27
|
+
FileUtils.rm_rf(vardir) if File.directory?(vardir)
|
28
|
+
function_scope.method("function_#{function_name}".intern)
|
46
29
|
end
|
47
30
|
|
48
31
|
# get a compiler with an attached compiled catalog
|
49
32
|
def build_compiler(node_name, fact_values)
|
50
33
|
node_options = {
|
51
|
-
:
|
52
|
-
:options => { :parameters => fact_values },
|
34
|
+
:parameters => fact_values,
|
53
35
|
}
|
54
|
-
|
55
|
-
|
36
|
+
|
37
|
+
stub_facts! fact_values
|
38
|
+
|
39
|
+
node = build_node(node_name, node_options)
|
40
|
+
|
41
|
+
compiler = Puppet::Parser::Compiler.new(node)
|
56
42
|
compiler.compile
|
57
43
|
compiler
|
58
44
|
end
|