r10k 3.11.0 → 3.12.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 +4 -4
- data/CHANGELOG.mkd +9 -0
- data/doc/dynamic-environments/configuration.mkd +7 -3
- data/doc/dynamic-environments/usage.mkd +26 -0
- data/doc/puppetfile.mkd +3 -4
- data/integration/tests/basic_functionality/basic_deployment.rb +176 -0
- data/lib/r10k/action/deploy/environment.rb +8 -1
- data/lib/r10k/action/deploy/module.rb +11 -6
- data/lib/r10k/action/puppetfile/check.rb +7 -5
- data/lib/r10k/action/puppetfile/install.rb +22 -16
- data/lib/r10k/action/puppetfile/purge.rb +12 -9
- data/lib/r10k/cli/deploy.rb +1 -0
- data/lib/r10k/cli/puppetfile.rb +0 -1
- data/lib/r10k/content_synchronizer.rb +16 -4
- data/lib/r10k/environment/base.rb +64 -11
- data/lib/r10k/environment/with_modules.rb +6 -10
- data/lib/r10k/git/stateful_repository.rb +7 -0
- data/lib/r10k/initializers.rb +1 -7
- data/lib/r10k/module/base.rb +5 -1
- data/lib/r10k/module/definition.rb +64 -0
- data/lib/r10k/module/forge.rb +10 -2
- data/lib/r10k/module/git.rb +22 -1
- data/lib/r10k/module/local.rb +2 -3
- data/lib/r10k/module/svn.rb +10 -0
- data/lib/r10k/module.rb +20 -2
- data/lib/r10k/module_loader/puppetfile/dsl.rb +8 -3
- data/lib/r10k/module_loader/puppetfile.rb +95 -29
- data/lib/r10k/puppetfile.rb +1 -2
- data/lib/r10k/settings.rb +11 -0
- data/lib/r10k/version.rb +1 -1
- data/locales/r10k.pot +75 -47
- data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +8 -0
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +9 -0
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +9 -0
- data/spec/r10k-mocks/mock_env.rb +3 -0
- data/spec/r10k-mocks/mock_source.rb +7 -3
- data/spec/unit/action/deploy/environment_spec.rb +80 -30
- data/spec/unit/action/deploy/module_spec.rb +50 -62
- data/spec/unit/action/puppetfile/check_spec.rb +17 -5
- data/spec/unit/action/puppetfile/install_spec.rb +42 -36
- data/spec/unit/action/puppetfile/purge_spec.rb +15 -17
- data/spec/unit/action/runner_spec.rb +0 -8
- data/spec/unit/environment/base_spec.rb +30 -17
- data/spec/unit/environment/git_spec.rb +2 -2
- data/spec/unit/environment/svn_spec.rb +4 -3
- data/spec/unit/environment/with_modules_spec.rb +2 -1
- data/spec/unit/module/base_spec.rb +8 -8
- data/spec/unit/module/forge_spec.rb +32 -4
- data/spec/unit/module/git_spec.rb +51 -10
- data/spec/unit/module/svn_spec.rb +18 -6
- data/spec/unit/module_loader/puppetfile_spec.rb +90 -30
- data/spec/unit/puppetfile_spec.rb +2 -2
- data/spec/unit/settings_spec.rb +25 -2
- metadata +7 -2
@@ -10,15 +10,41 @@ describe R10K::Module::Git do
|
|
10
10
|
allow(R10K::Git::StatefulRepository).to receive(:new).and_return(mock_repo)
|
11
11
|
end
|
12
12
|
|
13
|
+
|
14
|
+
describe "statically determined version support" do
|
15
|
+
it 'returns a given commit' do
|
16
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { git: 'my/remote', commit: '123adf' })
|
17
|
+
expect(static_version).to eq('123adf')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns a given tag' do
|
21
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { git: 'my/remote', tag: 'v1.2.3' })
|
22
|
+
expect(static_version).to eq('v1.2.3')
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'returns a ref if it looks like a full commit sha' do
|
26
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { git: 'my/remote', ref: '1234567890abcdef1234567890abcdef12345678' })
|
27
|
+
expect(static_version).to eq('1234567890abcdef1234567890abcdef12345678')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns nil for any non-sha-like ref' do
|
31
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { git: 'my/remote', ref: 'refs/heads/main' })
|
32
|
+
expect(static_version).to eq(nil)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'returns nil for branches' do
|
36
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { git: 'my/remote', branch: 'main' })
|
37
|
+
expect(static_version).to eq(nil)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
13
41
|
describe "setting the owner and name" do
|
14
42
|
describe "with a title of 'branan/eight_hundred'" do
|
15
43
|
subject do
|
16
44
|
described_class.new(
|
17
45
|
'branan/eight_hundred',
|
18
46
|
'/moduledir',
|
19
|
-
{
|
20
|
-
:git => 'git://git-server.site/branan/puppet-eight_hundred',
|
21
|
-
}
|
47
|
+
{ :git => 'git://git-server.site/branan/puppet-eight_hundred' }
|
22
48
|
)
|
23
49
|
end
|
24
50
|
|
@@ -40,9 +66,7 @@ describe R10K::Module::Git do
|
|
40
66
|
described_class.new(
|
41
67
|
'eight_hundred',
|
42
68
|
'/moduledir',
|
43
|
-
{
|
44
|
-
:git => 'git://git-server.site/branan/puppet-eight_hundred',
|
45
|
-
}
|
69
|
+
{ :git => 'git://git-server.site/branan/puppet-eight_hundred' }
|
46
70
|
)
|
47
71
|
end
|
48
72
|
|
@@ -97,13 +121,32 @@ describe R10K::Module::Git do
|
|
97
121
|
let(:spec_path) { dirname + module_name + 'spec' }
|
98
122
|
subject { described_class.new(title, dirname, {}) }
|
99
123
|
|
124
|
+
before(:each) do
|
125
|
+
allow(mock_repo).to receive(:resolve).with('master').and_return('abc123')
|
126
|
+
end
|
127
|
+
|
100
128
|
it 'defaults to keeping the spec dir' do
|
101
129
|
FileUtils.mkdir_p(spec_path)
|
102
|
-
allow(mock_repo).to receive(:resolve).with('master').and_return('abc123')
|
103
130
|
allow(mock_repo).to receive(:sync)
|
104
131
|
subject.sync
|
105
132
|
expect(Dir.exist?(spec_path)).to eq true
|
106
133
|
end
|
134
|
+
|
135
|
+
it 'returns true if repo was updated' do
|
136
|
+
expect(mock_repo).to receive(:sync).and_return(true)
|
137
|
+
expect(subject.sync).to be true
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'returns false if repo was not updated (in-sync)' do
|
141
|
+
expect(mock_repo).to receive(:sync).and_return(false)
|
142
|
+
expect(subject.sync).to be false
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'returns false if `should_sync?` is false' do
|
146
|
+
# modules do not sync if they are not requested
|
147
|
+
mod = described_class.new(title, dirname, { overrides: { modules: { requested_modules: ['other_mod'] } } })
|
148
|
+
expect(mod.sync).to be false
|
149
|
+
end
|
107
150
|
end
|
108
151
|
|
109
152
|
describe "determining the status" do
|
@@ -111,9 +154,7 @@ describe R10K::Module::Git do
|
|
111
154
|
described_class.new(
|
112
155
|
'boolean',
|
113
156
|
'/moduledir',
|
114
|
-
{
|
115
|
-
:git => 'git://git.example.com/adrienthebo/puppet-boolean'
|
116
|
-
}
|
157
|
+
{ :git => 'git://git.example.com/adrienthebo/puppet-boolean' }
|
117
158
|
)
|
118
159
|
end
|
119
160
|
|
@@ -6,6 +6,13 @@ describe R10K::Module::SVN do
|
|
6
6
|
|
7
7
|
include_context 'fail on execution'
|
8
8
|
|
9
|
+
describe "statically determined version support" do
|
10
|
+
it 'is unsupported by svn backed modules' do
|
11
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { svn: 'my/remote', revision: '123adf' })
|
12
|
+
expect(static_version).to eq(nil)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
9
16
|
describe "determining it implements a Puppetfile mod" do
|
10
17
|
it "implements mods with the :svn hash key" do
|
11
18
|
implements = described_class.implement?('r10k-fixture-repo', :svn => 'https://github.com/adrienthebo/r10k-fixture-repo')
|
@@ -128,7 +135,6 @@ describe R10K::Module::SVN do
|
|
128
135
|
subject { described_class.new(title, dirname, {}) }
|
129
136
|
|
130
137
|
it 'is kept by default' do
|
131
|
-
|
132
138
|
FileUtils.mkdir_p(spec_path)
|
133
139
|
expect(subject).to receive(:status).and_return(:absent)
|
134
140
|
expect(subject).to receive(:install).and_return(nil)
|
@@ -150,7 +156,7 @@ describe R10K::Module::SVN do
|
|
150
156
|
|
151
157
|
it "installs the SVN module" do
|
152
158
|
expect(subject).to receive(:install)
|
153
|
-
subject.sync
|
159
|
+
expect(subject.sync).to be true
|
154
160
|
end
|
155
161
|
end
|
156
162
|
|
@@ -160,14 +166,14 @@ describe R10K::Module::SVN do
|
|
160
166
|
it "reinstalls the module" do
|
161
167
|
expect(subject).to receive(:reinstall)
|
162
168
|
|
163
|
-
subject.sync
|
169
|
+
expect(subject.sync).to be true
|
164
170
|
end
|
165
171
|
|
166
172
|
it "removes the existing directory" do
|
167
173
|
expect(subject.path).to receive(:rmtree)
|
168
174
|
allow(subject).to receive(:install)
|
169
175
|
|
170
|
-
subject.sync
|
176
|
+
expect(subject.sync).to be true
|
171
177
|
end
|
172
178
|
end
|
173
179
|
|
@@ -177,7 +183,7 @@ describe R10K::Module::SVN do
|
|
177
183
|
it "upgrades the repository" do
|
178
184
|
expect(subject).to receive(:update)
|
179
185
|
|
180
|
-
subject.sync
|
186
|
+
expect(subject.sync).to be true
|
181
187
|
end
|
182
188
|
end
|
183
189
|
|
@@ -189,8 +195,14 @@ describe R10K::Module::SVN do
|
|
189
195
|
expect(subject).to receive(:reinstall).never
|
190
196
|
expect(subject).to receive(:update).never
|
191
197
|
|
192
|
-
subject.sync
|
198
|
+
expect(subject.sync).to be false
|
193
199
|
end
|
194
200
|
end
|
201
|
+
|
202
|
+
it 'and `should_sync?` is false' do
|
203
|
+
# modules do not sync if they are not requested
|
204
|
+
mod = described_class.new('my_mod', '/path/to/mod', { overrides: { modules: { requested_modules: ['other_mod'] } } })
|
205
|
+
expect(mod.sync).to be false
|
206
|
+
end
|
195
207
|
end
|
196
208
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'r10k/module_loader/puppetfile'
|
3
|
+
require 'tmpdir'
|
3
4
|
|
4
5
|
describe R10K::ModuleLoader::Puppetfile do
|
5
6
|
describe 'initial parameters' do
|
@@ -7,7 +8,6 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
7
8
|
let(:options) do
|
8
9
|
{
|
9
10
|
basedir: '/test/basedir/env',
|
10
|
-
forge: 'localforge.internal.corp',
|
11
11
|
overrides: { modules: { deploy_modules: true } },
|
12
12
|
environment: R10K::Environment::Git.new('env',
|
13
13
|
'/test/basedir/',
|
@@ -47,10 +47,6 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
it 'the forge' do
|
51
|
-
expect(subject.instance_variable_get(:@forge)).to eq('localforge.internal.corp')
|
52
|
-
end
|
53
|
-
|
54
50
|
it 'the overrides' do
|
55
51
|
expect(subject.instance_variable_get(:@overrides)).to eq({ modules: { deploy_modules: true }})
|
56
52
|
end
|
@@ -71,10 +67,6 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
71
67
|
expect(subject.instance_variable_get(:@puppetfile_path)).to eq('/test/basedir/Puppetfile')
|
72
68
|
end
|
73
69
|
|
74
|
-
it 'uses the public forge' do
|
75
|
-
expect(subject.instance_variable_get(:@forge)).to eq('forgeapi.puppetlabs.com')
|
76
|
-
end
|
77
|
-
|
78
70
|
it 'creates an empty overrides' do
|
79
71
|
expect(subject.instance_variable_get(:@overrides)).to eq({})
|
80
72
|
end
|
@@ -91,14 +83,14 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
91
83
|
subject { R10K::ModuleLoader::Puppetfile.new(basedir: basedir) }
|
92
84
|
|
93
85
|
it 'should transform Forge modules with a string arg to have a version key' do
|
94
|
-
expect(R10K::Module).to receive(:
|
86
|
+
expect(R10K::Module).to receive(:from_metadata).with('puppet/test_module', subject.moduledir, hash_including(version: '1.2.3'), anything).and_call_original
|
95
87
|
|
96
88
|
expect { subject.add_module('puppet/test_module', '1.2.3') }.to change { subject.modules }
|
97
89
|
expect(subject.modules.collect(&:name)).to include('test_module')
|
98
90
|
end
|
99
91
|
|
100
92
|
it 'should not accept Forge modules with a version comparison' do
|
101
|
-
expect(R10K::Module).to receive(:
|
93
|
+
expect(R10K::Module).to receive(:from_metadata).with('puppet/test_module', subject.moduledir, hash_including(version: '< 1.2.0'), anything).and_call_original
|
102
94
|
|
103
95
|
expect {
|
104
96
|
subject.add_module('puppet/test_module', '< 1.2.0')
|
@@ -122,7 +114,7 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
122
114
|
it 'should accept non-Forge modules with a hash arg' do
|
123
115
|
module_opts = { git: 'git@example.com:puppet/test_module.git' }
|
124
116
|
|
125
|
-
expect(R10K::Module).to receive(:
|
117
|
+
expect(R10K::Module).to receive(:from_metadata).with('puppet/test_module', subject.moduledir, module_opts, anything).and_call_original
|
126
118
|
|
127
119
|
expect { subject.add_module('puppet/test_module', module_opts) }.to change { subject.modules }
|
128
120
|
expect(subject.modules.collect(&:name)).to include('test_module')
|
@@ -134,7 +126,7 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
134
126
|
git: 'git@example.com:puppet/test_module.git',
|
135
127
|
}
|
136
128
|
|
137
|
-
expect(R10K::Module).to receive(:
|
129
|
+
expect(R10K::Module).to receive(:from_metadata).with('puppet/test_module', File.join(basedir, 'vendor'), module_opts, anything).and_call_original
|
138
130
|
|
139
131
|
expect { subject.add_module('puppet/test_module', module_opts) }.to change { subject.modules }
|
140
132
|
expect(subject.modules.collect(&:name)).to include('test_module')
|
@@ -148,7 +140,7 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
148
140
|
git: 'git@example.com:puppet/test_module.git',
|
149
141
|
}
|
150
142
|
|
151
|
-
expect(R10K::Module).to receive(:
|
143
|
+
expect(R10K::Module).to receive(:from_metadata).with('puppet/test_module', install_path, module_opts, anything).and_call_original
|
152
144
|
|
153
145
|
expect { subject.add_module('puppet/test_module', module_opts) }.to change { subject.modules }
|
154
146
|
expect(subject.modules.collect(&:name)).to include('test_module')
|
@@ -179,7 +171,7 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
179
171
|
allow(env).to receive(:'module_conflicts?').with(mod).and_return(true)
|
180
172
|
allow(mod).to receive(:spec_deletable=)
|
181
173
|
|
182
|
-
expect(R10K::Module).to receive(:
|
174
|
+
expect(R10K::Module).to receive(:from_metadata).with('conflict', anything, anything, anything).and_return(mod)
|
183
175
|
expect { loader.add_module('conflict', {}) }.not_to change { loader.modules }
|
184
176
|
end
|
185
177
|
end
|
@@ -214,9 +206,9 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
214
206
|
end
|
215
207
|
|
216
208
|
it 'returns an array of paths that #purge! will operate within' do
|
217
|
-
expect(R10K::Module).to receive(:
|
209
|
+
expect(R10K::Module).to receive(:from_metadata).with('puppet/test_module', subject.moduledir, hash_including(version: '1.2.3'), anything).and_call_original
|
218
210
|
subject.add_module('puppet/test_module', '1.2.3')
|
219
|
-
subject.load
|
211
|
+
subject.load!
|
220
212
|
|
221
213
|
expect(subject.modules.length).to be 1
|
222
214
|
expect(subject.managed_directories).to match_array([subject.moduledir])
|
@@ -226,9 +218,9 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
226
218
|
it "basedir isn't in the list of paths to purge" do
|
227
219
|
module_opts = { install_path: '', git: 'git@example.com:puppet/test_module.git' }
|
228
220
|
|
229
|
-
expect(R10K::Module).to receive(:
|
221
|
+
expect(R10K::Module).to receive(:from_metadata).with('puppet/test_module', basedir, module_opts, anything).and_call_original
|
230
222
|
subject.add_module('puppet/test_module', module_opts)
|
231
|
-
subject.load
|
223
|
+
subject.load!
|
232
224
|
|
233
225
|
expect(subject.modules.length).to be 1
|
234
226
|
expect(subject.managed_directories).to be_empty
|
@@ -249,7 +241,7 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
249
241
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'invalid-syntax')
|
250
242
|
pf_path = File.join(@path, 'Puppetfile')
|
251
243
|
expect {
|
252
|
-
subject.load
|
244
|
+
subject.load!
|
253
245
|
}.to raise_error do |e|
|
254
246
|
expect_wrapped_error(e, pf_path, SyntaxError)
|
255
247
|
end
|
@@ -259,7 +251,7 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
259
251
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'load-error')
|
260
252
|
pf_path = File.join(@path, 'Puppetfile')
|
261
253
|
expect {
|
262
|
-
subject.load
|
254
|
+
subject.load!
|
263
255
|
}.to raise_error do |e|
|
264
256
|
expect_wrapped_error(e, pf_path, LoadError)
|
265
257
|
end
|
@@ -269,17 +261,38 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
269
261
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'argument-error')
|
270
262
|
pf_path = File.join(@path, 'Puppetfile')
|
271
263
|
expect {
|
272
|
-
subject.load
|
264
|
+
subject.load!
|
273
265
|
}.to raise_error do |e|
|
274
266
|
expect_wrapped_error(e, pf_path, ArgumentError)
|
275
267
|
end
|
276
268
|
end
|
277
269
|
|
270
|
+
describe 'forge declaration' do
|
271
|
+
before(:each) do
|
272
|
+
PuppetForge.host = ""
|
273
|
+
end
|
274
|
+
|
275
|
+
it 'is respected if `allow_puppetfile_override` is true' do
|
276
|
+
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'forge-override')
|
277
|
+
puppetfile = R10K::ModuleLoader::Puppetfile.new(basedir: @path, overrides: { forge: { allow_puppetfile_override: true } })
|
278
|
+
puppetfile.load!
|
279
|
+
expect(PuppetForge.host).to eq("my.custom.forge.com/")
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'is ignored if `allow_puppetfile_override` is false' do
|
283
|
+
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'forge-override')
|
284
|
+
puppetfile = R10K::ModuleLoader::Puppetfile.new(basedir: @path, overrides: { forge: { allow_puppetfile_override: false } })
|
285
|
+
expect(PuppetForge).not_to receive(:host=).with("my.custom.forge.com")
|
286
|
+
puppetfile.load!
|
287
|
+
expect(PuppetForge.host).to eq("/")
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
278
291
|
it 'rejects Puppetfiles with duplicate module names' do
|
279
292
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'duplicate-module-error')
|
280
293
|
pf_path = File.join(@path, 'Puppetfile')
|
281
294
|
expect {
|
282
|
-
subject.load
|
295
|
+
subject.load!
|
283
296
|
}.to raise_error(R10K::Error, /Puppetfiles cannot contain duplicate module names/i)
|
284
297
|
end
|
285
298
|
|
@@ -287,7 +300,7 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
287
300
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'name-error')
|
288
301
|
pf_path = File.join(@path, 'Puppetfile')
|
289
302
|
expect {
|
290
|
-
subject.load
|
303
|
+
subject.load!
|
291
304
|
}.to raise_error do |e|
|
292
305
|
expect_wrapped_error(e, pf_path, NameError)
|
293
306
|
end
|
@@ -296,21 +309,21 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
296
309
|
it 'accepts a forge module with a version' do
|
297
310
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'valid-forge-with-version')
|
298
311
|
pf_path = File.join(@path, 'Puppetfile')
|
299
|
-
expect { subject.load }.not_to raise_error
|
312
|
+
expect { subject.load! }.not_to raise_error
|
300
313
|
end
|
301
314
|
|
302
315
|
describe 'setting a custom moduledir' do
|
303
316
|
it 'allows setting an absolute moduledir' do
|
304
317
|
@path = '/fake/basedir'
|
305
318
|
allow(subject).to receive(:puppetfile_content).and_return('moduledir "/fake/moduledir"')
|
306
|
-
subject.load
|
319
|
+
subject.load!
|
307
320
|
expect(subject.instance_variable_get(:@moduledir)).to eq('/fake/moduledir')
|
308
321
|
end
|
309
322
|
|
310
323
|
it 'roots relative moduledirs in the basedir' do
|
311
324
|
@path = '/fake/basedir'
|
312
325
|
allow(subject).to receive(:puppetfile_content).and_return('moduledir "my/moduledir"')
|
313
|
-
subject.load
|
326
|
+
subject.load!
|
314
327
|
expect(subject.instance_variable_get(:@moduledir)).to eq(File.join(@path, 'my/moduledir'))
|
315
328
|
end
|
316
329
|
end
|
@@ -318,13 +331,13 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
318
331
|
it 'accepts a forge module without a version' do
|
319
332
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'valid-forge-without-version')
|
320
333
|
pf_path = File.join(@path, 'Puppetfile')
|
321
|
-
expect { subject.load }.not_to raise_error
|
334
|
+
expect { subject.load! }.not_to raise_error
|
322
335
|
end
|
323
336
|
|
324
337
|
it 'creates a git module and applies the default branch specified in the Puppetfile' do
|
325
338
|
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'default-branch-override')
|
326
339
|
pf_path = File.join(@path, 'Puppetfile')
|
327
|
-
expect { subject.load }.not_to raise_error
|
340
|
+
expect { subject.load! }.not_to raise_error
|
328
341
|
git_module = subject.modules[0]
|
329
342
|
expect(git_module.default_ref).to eq 'here_lies_the_default_branch'
|
330
343
|
end
|
@@ -334,10 +347,57 @@ describe R10K::ModuleLoader::Puppetfile do
|
|
334
347
|
pf_path = File.join(@path, 'Puppetfile')
|
335
348
|
default_branch_override = 'default_branch_override_name'
|
336
349
|
subject.default_branch_override = default_branch_override
|
337
|
-
expect { subject.load }.not_to raise_error
|
350
|
+
expect { subject.load! }.not_to raise_error
|
338
351
|
git_module = subject.modules[0]
|
339
352
|
expect(git_module.default_override_ref).to eq default_branch_override
|
340
353
|
expect(git_module.default_ref).to eq 'here_lies_the_default_branch'
|
341
354
|
end
|
355
|
+
|
356
|
+
describe 'using module metadata' do
|
357
|
+
it 'properly loads module metadata' do
|
358
|
+
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'various-modules')
|
359
|
+
metadata = subject.load_metadata[:modules].map { |mod| [ mod.name, mod.version ] }.to_h
|
360
|
+
expect(metadata['apt']).to eq('2.1.1')
|
361
|
+
expect(metadata['stdlib']).to eq(nil)
|
362
|
+
expect(metadata['concat']).to eq(nil)
|
363
|
+
expect(metadata['rpm']).to eq('2.1.1-pre1')
|
364
|
+
expect(metadata['foo']).to eq(nil)
|
365
|
+
expect(metadata['bar']).to eq('v1.2.3')
|
366
|
+
expect(metadata['baz']).to eq('123abc456')
|
367
|
+
expect(metadata['fizz']).to eq('1234567890abcdef1234567890abcdef12345678')
|
368
|
+
expect(metadata['buzz']).to eq(nil)
|
369
|
+
end
|
370
|
+
|
371
|
+
it 'does not load module implementations for static versioned' do
|
372
|
+
@path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'various-modules')
|
373
|
+
subject.load_metadata
|
374
|
+
modules = subject.load[:modules].map { |mod| [ mod.name, mod ] }.to_h
|
375
|
+
expect(modules['apt']).to be_a_kind_of(R10K::Module::Definition)
|
376
|
+
expect(modules['stdlib']).to be_a_kind_of(R10K::Module::Forge)
|
377
|
+
expect(modules['concat']).to be_a_kind_of(R10K::Module::Forge)
|
378
|
+
expect(modules['rpm']).to be_a_kind_of(R10K::Module::Definition)
|
379
|
+
expect(modules['foo']).to be_a_kind_of(R10K::Module::Git)
|
380
|
+
expect(modules['bar']).to be_a_kind_of(R10K::Module::Definition)
|
381
|
+
expect(modules['baz']).to be_a_kind_of(R10K::Module::Definition)
|
382
|
+
expect(modules['fizz']).to be_a_kind_of(R10K::Module::Definition)
|
383
|
+
expect(modules['buzz']).to be_a_kind_of(R10K::Module::Git)
|
384
|
+
end
|
385
|
+
|
386
|
+
it 'loads module implementations whose static versions are different' do
|
387
|
+
fixture_path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'various-modules')
|
388
|
+
@path = Dir.mktmpdir
|
389
|
+
unsynced_pf_path = File.join(fixture_path, 'Puppetfile')
|
390
|
+
FileUtils.cp(unsynced_pf_path, @path)
|
391
|
+
|
392
|
+
subject.load_metadata
|
393
|
+
|
394
|
+
synced_pf_path = File.join(fixture_path, 'Puppetfile.new')
|
395
|
+
FileUtils.cp(synced_pf_path, File.join(@path, 'Puppetfile'))
|
396
|
+
|
397
|
+
modules = subject.load[:modules].map { |mod| [ mod.name, mod ] }.to_h
|
398
|
+
|
399
|
+
expect(modules['apt']).to be_a_kind_of(R10K::Module::Forge)
|
400
|
+
end
|
401
|
+
end
|
342
402
|
end
|
343
403
|
end
|
@@ -114,7 +114,7 @@ describe R10K::Puppetfile do
|
|
114
114
|
path = File.join(PROJECT_ROOT, 'spec', 'fixtures', 'unit', 'puppetfile', 'valid-forge-with-version')
|
115
115
|
subject = described_class.new(path, {})
|
116
116
|
|
117
|
-
expect(subject.loader).to receive(:load).and_call_original.once
|
117
|
+
expect(subject.loader).to receive(:load!).and_call_original.once
|
118
118
|
|
119
119
|
loaded_content1 = subject.load
|
120
120
|
expect(subject.loaded?).to be true
|
@@ -273,7 +273,7 @@ describe R10K::Puppetfile do
|
|
273
273
|
expect(subject).to receive(:modules).and_return([mod1, mod2])
|
274
274
|
|
275
275
|
expect(Thread).to receive(:new).exactly(pool_size).and_call_original
|
276
|
-
expect(Queue).to receive(:new).and_call_original
|
276
|
+
expect(Queue).to receive(:new).and_call_original.twice
|
277
277
|
|
278
278
|
subject.accept(visitor)
|
279
279
|
end
|