vagrant-r10k 0.2.0 → 0.3.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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -2
  3. data/.pullreview.yml +4 -0
  4. data/.rspec +5 -0
  5. data/.ruby-version +1 -1
  6. data/.travis.yml +3 -1
  7. data/CHANGES.md +26 -0
  8. data/Gemfile +7 -2
  9. data/Gemfile.lock +181 -0
  10. data/README.md +122 -7
  11. data/Rakefile +111 -0
  12. data/lib/vagrant-r10k/action/base.rb +44 -0
  13. data/lib/vagrant-r10k/action/deploy.rb +91 -0
  14. data/lib/vagrant-r10k/action/validate.rb +46 -0
  15. data/lib/vagrant-r10k/config.rb +13 -4
  16. data/lib/vagrant-r10k/helpers.rb +174 -0
  17. data/lib/vagrant-r10k/plugin.rb +11 -5
  18. data/lib/vagrant-r10k/version.rb +2 -1
  19. data/spec/acceptance/skeletons/correct/Vagrantfile +21 -0
  20. data/spec/acceptance/skeletons/correct/gitcheck.sh +20 -0
  21. data/spec/acceptance/skeletons/correct/puppet/NOTmodules/.gitkeep +0 -0
  22. data/spec/acceptance/skeletons/correct/puppet/Puppetfile +12 -0
  23. data/spec/acceptance/skeletons/correct/puppet/manifests/default.pp +1 -0
  24. data/spec/acceptance/skeletons/correct/puppet/modules/.gitkeep +0 -0
  25. data/spec/acceptance/skeletons/could_not_resolve_host/Vagrantfile +21 -0
  26. data/spec/acceptance/skeletons/could_not_resolve_host/gitcheck.sh +20 -0
  27. data/spec/acceptance/skeletons/could_not_resolve_host/puppet/NOTmodules/.gitkeep +0 -0
  28. data/spec/acceptance/skeletons/could_not_resolve_host/puppet/Puppetfile +7 -0
  29. data/spec/acceptance/skeletons/could_not_resolve_host/puppet/manifests/default.pp +1 -0
  30. data/spec/acceptance/skeletons/could_not_resolve_host/puppet/modules/.gitkeep +0 -0
  31. data/spec/acceptance/skeletons/different_mod_path/Vagrantfile +19 -0
  32. data/spec/acceptance/skeletons/different_mod_path/gitcheck.sh +20 -0
  33. data/spec/acceptance/skeletons/different_mod_path/puppet/NOTmodules/.gitkeep +0 -0
  34. data/spec/acceptance/skeletons/different_mod_path/puppet/Puppetfile +12 -0
  35. data/spec/acceptance/skeletons/different_mod_path/puppet/manifests/default.pp +1 -0
  36. data/spec/acceptance/skeletons/different_mod_path/puppet/modules/.gitkeep +0 -0
  37. data/spec/acceptance/skeletons/no_mod_path/Vagrantfile +17 -0
  38. data/spec/acceptance/skeletons/no_mod_path/gitcheck.sh +20 -0
  39. data/spec/acceptance/skeletons/no_mod_path/puppet/NOTmodules/.gitkeep +0 -0
  40. data/spec/acceptance/skeletons/no_mod_path/puppet/Puppetfile +12 -0
  41. data/spec/acceptance/skeletons/no_mod_path/puppet/manifests/default.pp +1 -0
  42. data/spec/acceptance/skeletons/no_mod_path/puppet/modules/.gitkeep +0 -0
  43. data/spec/acceptance/skeletons/no_puppet_dir/Vagrantfile +18 -0
  44. data/spec/acceptance/skeletons/no_puppet_dir/gitcheck.sh +20 -0
  45. data/spec/acceptance/skeletons/no_vagrant_r10k/Vagrantfile +14 -0
  46. data/spec/acceptance/skeletons/no_vagrant_r10k/gitcheck.sh +20 -0
  47. data/spec/acceptance/skeletons/no_vagrant_r10k/puppet/NOTmodules/.gitkeep +0 -0
  48. data/spec/acceptance/skeletons/no_vagrant_r10k/puppet/Puppetfile +12 -0
  49. data/spec/acceptance/skeletons/no_vagrant_r10k/puppet/manifests/default.pp +1 -0
  50. data/spec/acceptance/skeletons/no_vagrant_r10k/puppet/modules/.gitkeep +0 -0
  51. data/spec/acceptance/skeletons/puppetfile_syntax_error/Vagrantfile +18 -0
  52. data/spec/acceptance/skeletons/puppetfile_syntax_error/gitcheck.sh +20 -0
  53. data/spec/acceptance/skeletons/puppetfile_syntax_error/puppet/Puppetfile +1 -0
  54. data/spec/acceptance/skeletons/puppetfile_syntax_error/puppet/manifests/default.pp +1 -0
  55. data/spec/acceptance/skeletons/puppetfile_syntax_error/puppet/modules/.gitkeep +0 -0
  56. data/spec/acceptance/vagrant-r10k/vagrant-r10k_spec.rb +255 -0
  57. data/spec/spec_helper.rb +10 -7
  58. data/spec/unit/action_base_spec.rb +57 -0
  59. data/spec/unit/action_deploy_spec.rb +550 -0
  60. data/spec/unit/action_validate_spec.rb +240 -0
  61. data/spec/unit/helpers_spec.rb +307 -0
  62. data/spec/unit/plugin_spec.rb +49 -0
  63. data/support/testrunner.py +189 -0
  64. data/vagrant-r10k.gemspec +1 -1
  65. data/vagrant-spec.config.rb +18 -0
  66. metadata +111 -19
  67. data/lib/vagrant-r10k/modulegetter.rb +0 -145
  68. data/spec/unit/modulegetter_spec.rb +0 -369
@@ -0,0 +1,550 @@
1
+ require 'spec_helper'
2
+ require_relative 'sharedcontext'
3
+ require_relative 'shared_expectations'
4
+ require 'vagrant-r10k/action/base'
5
+ require 'vagrant-r10k/action/deploy'
6
+ require 'r10k/task/puppetfile'
7
+ require 'r10k/git/errors'
8
+
9
+ include SharedExpectations
10
+
11
+ describe VagrantPlugins::R10k::Action::Deploy do
12
+
13
+ subject { described_class.new(app, env) }
14
+
15
+ include_context 'vagrant-unit'
16
+
17
+ describe '#call' do
18
+ describe 'r10k not enabled' do
19
+ let(:pf_dbl) { double }
20
+ before do
21
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).and_return(false)
22
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:provision_enabled?).and_return(true)
23
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_config).with(env).and_return({:puppetfile_path => 'p'})
24
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(pf_dbl)
25
+ end
26
+ include_context 'unit' do
27
+ let(:vagrantfile) { <<-EOF
28
+ Vagrant.configure('2') do |config|
29
+ config.vm.define :test
30
+ # r10k plugin to deploy puppet modules
31
+ # config.r10k.puppet_dir = 'puppet'
32
+ # config.r10k.puppetfile_path = 'puppet/Puppetfile'
33
+
34
+ # Provision the machine with the appliction
35
+ config.vm.provision "puppet" do |puppet|
36
+ puppet.manifests_path = "puppet/manifests"
37
+ puppet.manifest_file = "default.pp"
38
+ puppet.module_path = "puppet/modules"
39
+ end
40
+ end
41
+ EOF
42
+ }
43
+ end
44
+ it 'should send ui info and return' do
45
+ # positive expectations
46
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).with(env).once
47
+ expect(ui).to receive(:info).with("vagrant-r10k not configured; skipping").once
48
+ expect(app).to receive(:call).once.with(env)
49
+ # negative assetions
50
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to_not receive(:provision_enabled?)
51
+ expect(ui).to_not receive(:info).with(/Beginning r10k deploy/)
52
+ expect(subject).to receive(:deploy).exactly(0).times
53
+ # run
54
+ expect(subject.call(env)).to be_nil
55
+ end
56
+ end
57
+
58
+ describe 'provisioning not enabled' do
59
+ let(:pf_dbl) { double }
60
+ before do
61
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).and_return(true)
62
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:provision_enabled?).and_return(false)
63
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_config).with(env).and_return({:puppetfile_path => 'p'})
64
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(pf_dbl)
65
+ end
66
+ include_context 'unit' do
67
+ let(:vagrantfile) { <<-EOF
68
+ Vagrant.configure('2') do |config|
69
+ config.vm.define :test
70
+ # r10k plugin to deploy puppet modules
71
+ config.r10k.puppet_dir = 'puppet'
72
+ config.r10k.puppetfile_path = 'puppet/Puppetfile'
73
+
74
+ # Provision the machine with the appliction
75
+ config.vm.provision "puppet" do |puppet|
76
+ puppet.manifests_path = "puppet/manifests"
77
+ puppet.manifest_file = "default.pp"
78
+ puppet.module_path = "puppet/modules"
79
+ end
80
+ end
81
+ EOF
82
+ }
83
+ end
84
+ it 'should send ui info and return' do
85
+ # positive expectations
86
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).with(env).once
87
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:provision_enabled?).with(env).once
88
+ expect(ui).to receive(:info).with("provisioning disabled; skipping vagrant-r10k").once
89
+ expect(app).to receive(:call).once.with(env)
90
+ # negative assetions
91
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to_not receive(:r10k_config)
92
+ expect(ui).to_not receive(:info).with(/Beginning r10k deploy/)
93
+ expect(subject).to receive(:deploy).exactly(0).times
94
+ # run
95
+ expect(subject.call(env)).to be_nil
96
+ end
97
+ end
98
+
99
+ describe 'config is nil' do
100
+ let(:pf_dbl) { double }
101
+ before do
102
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).and_return(true)
103
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:provision_enabled?).and_return(true)
104
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_config).with(env).and_return(nil)
105
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(pf_dbl)
106
+ end
107
+ include_context 'unit' do
108
+ let(:vagrantfile) { <<-EOF
109
+ Vagrant.configure('2') do |config|
110
+ config.vm.define :test
111
+ # r10k plugin to deploy puppet modules
112
+ config.r10k.puppet_dir = 'puppet'
113
+ config.r10k.puppetfile_path = 'puppet/Puppetfile'
114
+
115
+ # Provision the machine with the appliction
116
+ config.vm.provision "puppet" do |puppet|
117
+ puppet.manifests_path = "puppet/manifests"
118
+ puppet.manifest_file = "default.pp"
119
+ puppet.module_path = "puppet/modules"
120
+ end
121
+ end
122
+ EOF
123
+ }
124
+ end
125
+ it 'should raise exception' do
126
+ # positive expectations
127
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).with(env).once
128
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:provision_enabled?).with(env).once
129
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_config).with(env).once
130
+ logger = subject.instance_variable_get(:@logger)
131
+ expect(logger).to receive(:info).once.with("vagrant::r10k::deploy got nil configuration")
132
+ expect(app).to_not receive(:call)
133
+ # negative assetions
134
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to_not receive(:r10k_config)
135
+ expect(ui).to_not receive(:info).with(/Beginning r10k deploy/)
136
+ expect(subject).to receive(:deploy).exactly(0).times
137
+ # run
138
+ expect { subject.call(env) }.to raise_error(VagrantPlugins::R10k::Helpers::ErrorWrapper, /vagrant-r10k configuration error; cannot continue/)
139
+ end
140
+ end
141
+ describe 'config properly set' do
142
+ let(:config) {{
143
+ :env_dir_path => 'env/dir/path',
144
+ :puppetfile_path => 'puppetfile/path',
145
+ :module_path => 'module/path',
146
+ :manifests => 'manifests',
147
+ :manifest_file => 'manifest/file',
148
+ :puppet_dir => 'puppet/dir',
149
+ }}
150
+ let(:pf_dbl) { double }
151
+ before do
152
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).and_return(true)
153
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:provision_enabled?).and_return(true)
154
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_config).with(env).and_return(config)
155
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(pf_dbl)
156
+ end
157
+ include_context 'unit' do
158
+ let(:vagrantfile) { <<-EOF
159
+ Vagrant.configure('2') do |config|
160
+ config.vm.define :test
161
+ # r10k plugin to deploy puppet modules
162
+ config.r10k.puppet_dir = 'puppet'
163
+ config.r10k.puppetfile_path = 'puppet/Puppetfile'
164
+
165
+ # Provision the machine with the appliction
166
+ config.vm.provision "puppet" do |puppet|
167
+ puppet.manifests_path = "puppet/manifests"
168
+ puppet.manifest_file = "default.pp"
169
+ puppet.module_path = "puppet/modules"
170
+ end
171
+ end
172
+ EOF
173
+ }
174
+ end
175
+ it 'should call deploy' do
176
+ # positive expectations
177
+ allow(subject).to receive(:deploy).with(env, config).and_return(true).once
178
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_enabled?).with(env).once
179
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:provision_enabled?).with(env).once
180
+ expect_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:r10k_config).with(env).once
181
+ logger = subject.instance_variable_get(:@logger)
182
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy called")
183
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy: env_dir_path=env/dir/path")
184
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy: puppetfile_path=puppetfile/path")
185
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy: module_path=module/path")
186
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy: manifests=manifests")
187
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy: manifest_file=manifest/file")
188
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy: puppet_dir=puppet/dir")
189
+ expect(subject).to receive(:deploy).with(env, config).once
190
+ expect(app).to receive(:call).once.with(env)
191
+ # run
192
+ expect(subject.call(env)).to be_nil
193
+ end
194
+ end
195
+ end # end #call
196
+
197
+ describe '#deploy' do
198
+ let(:config) {{
199
+ :env_dir_path => 'env/dir/path',
200
+ :puppetfile_path => 'puppetfile/path',
201
+ :module_path => 'module/path',
202
+ :manifests => 'manifests',
203
+ :manifest_file => 'manifest/file',
204
+ :puppet_dir => 'puppet/dir',
205
+ }}
206
+ describe 'successful run' do
207
+ include_context 'unit' do
208
+ let(:vagrantfile) { <<-EOF
209
+ Vagrant.configure('2') do |config|
210
+ config.vm.define :test
211
+ # r10k plugin to deploy puppet modules
212
+ # config.r10k.puppet_dir = 'puppet'
213
+ # config.r10k.puppetfile_path = 'puppet/Puppetfile'
214
+
215
+ # Provision the machine with the appliction
216
+ config.vm.provision "puppet" do |puppet|
217
+ puppet.manifests_path = "puppet/manifests"
218
+ puppet.manifest_file = "default.pp"
219
+ puppet.module_path = "puppet/modules"
220
+ end
221
+ end
222
+ EOF
223
+ }
224
+ end
225
+ let(:puppetfile_dbl) { double }
226
+ before do
227
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(puppetfile_dbl)
228
+ allow_any_instance_of(R10K::Logging).to receive(:level=)
229
+ end
230
+ it 'runs' do
231
+ # stubs and doubles
232
+ with_temp_env("VAGRANT_LOG" => "foo") do
233
+ File.stub(:file?).with('puppetfile/path').and_return(true)
234
+ runner_dbl = double
235
+ sync_dbl = double
236
+ allow(runner_dbl).to receive(:append_task).with(sync_dbl)
237
+ allow(runner_dbl).to receive(:succeeded?).and_return(true)
238
+ allow(sync_dbl).to receive(:new).with(puppetfile_dbl)
239
+ R10K::TaskRunner.stub(:new) { runner_dbl }
240
+ R10K::Task::Puppetfile::Sync.stub(:new) { sync_dbl }
241
+ # expectations
242
+ expect(R10K::Logging).to receive(:level=).with(3).twice
243
+ expect(ui).to receive(:info).with("vagrant-r10k: Beginning r10k deploy of puppet modules into module/path using puppetfile/path")
244
+ logger = subject.instance_variable_get(:@logger)
245
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy.deploy called")
246
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: creating Puppetfile::Sync task")
247
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: appending task to runner queue")
248
+ expect(runner_dbl).to receive(:append_task).with(sync_dbl).once
249
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: running sync task")
250
+ expect(runner_dbl).to receive(:run).once
251
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: sync task complete")
252
+ expect(runner_dbl).to receive(:succeeded?).once
253
+ expect(ui).to receive(:info).with("vagrant-r10k: Deploy finished")
254
+ expect(app).to receive(:call).once.with(env)
255
+ # run
256
+ expect(subject.deploy(env, config)).to be_nil
257
+ end
258
+ end
259
+ end
260
+
261
+ describe 'successful run with debug' do
262
+ include_context 'unit' do
263
+ let(:vagrantfile) { <<-EOF
264
+ Vagrant.configure('2') do |config|
265
+ config.vm.define :test
266
+ # r10k plugin to deploy puppet modules
267
+ # config.r10k.puppet_dir = 'puppet'
268
+ # config.r10k.puppetfile_path = 'puppet/Puppetfile'
269
+
270
+ # Provision the machine with the appliction
271
+ config.vm.provision "puppet" do |puppet|
272
+ puppet.manifests_path = "puppet/manifests"
273
+ puppet.manifest_file = "default.pp"
274
+ puppet.module_path = "puppet/modules"
275
+ end
276
+ end
277
+ EOF
278
+ }
279
+ end
280
+ let(:puppetfile_dbl) { double }
281
+ before do
282
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(puppetfile_dbl)
283
+ allow_any_instance_of(R10K::Logging).to receive(:level=)
284
+ end
285
+ it 'runs with r10k logging level to 0' do
286
+ # stubs and doubles
287
+ with_temp_env("VAGRANT_LOG" => "debug") do
288
+ File.stub(:file?).with('puppetfile/path').and_return(true)
289
+ runner_dbl = double
290
+ sync_dbl = double
291
+ allow(runner_dbl).to receive(:append_task).with(sync_dbl)
292
+ allow(runner_dbl).to receive(:succeeded?).and_return(true)
293
+ allow(sync_dbl).to receive(:new).with(puppetfile_dbl)
294
+ R10K::TaskRunner.stub(:new) { runner_dbl }
295
+ R10K::Task::Puppetfile::Sync.stub(:new) { sync_dbl }
296
+ # expectations
297
+ expect(R10K::Logging).to receive(:level=).with(0).twice
298
+ expect(ui).to receive(:info).with("vagrant-r10k: Beginning r10k deploy of puppet modules into module/path using puppetfile/path")
299
+ logger = subject.instance_variable_get(:@logger)
300
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy.deploy called")
301
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: creating Puppetfile::Sync task")
302
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: appending task to runner queue")
303
+ expect(runner_dbl).to receive(:append_task).with(sync_dbl).once
304
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: running sync task")
305
+ expect(runner_dbl).to receive(:run).once
306
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: sync task complete")
307
+ expect(runner_dbl).to receive(:succeeded?).once
308
+ expect(ui).to receive(:info).with("vagrant-r10k: Deploy finished")
309
+ expect(app).to receive(:call).once.with(env)
310
+ # run
311
+ expect(subject.deploy(env, config)).to be_nil
312
+ end
313
+ end
314
+ end
315
+
316
+ describe 'puppetfile doesnt exist' do
317
+ include_context 'unit' do
318
+ let(:vagrantfile) { <<-EOF
319
+ Vagrant.configure('2') do |config|
320
+ config.vm.define :test
321
+ # r10k plugin to deploy puppet modules
322
+ # config.r10k.puppet_dir = 'puppet'
323
+ # config.r10k.puppetfile_path = 'puppet/Puppetfile'
324
+
325
+ # Provision the machine with the appliction
326
+ config.vm.provision "puppet" do |puppet|
327
+ puppet.manifests_path = "puppet/manifests"
328
+ puppet.manifest_file = "default.pp"
329
+ puppet.module_path = "puppet/modules"
330
+ end
331
+ end
332
+ EOF
333
+ }
334
+ end
335
+ let(:puppetfile_dbl) { double }
336
+ before do
337
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(puppetfile_dbl)
338
+ end
339
+ it 'raises an error' do
340
+ # stubs and doubles
341
+ with_temp_env("VAGRANT_LOG" => "none") do
342
+ File.stub(:file?).with('puppetfile/path').and_return(false)
343
+ runner_dbl = double
344
+ sync_dbl = double
345
+ allow(runner_dbl).to receive(:append_task).with(sync_dbl)
346
+ allow(runner_dbl).to receive(:succeeded?).and_return(true)
347
+ allow(sync_dbl).to receive(:new).with(puppetfile_dbl)
348
+ R10K::TaskRunner.stub(:new) { runner_dbl }
349
+ R10K::Task::Puppetfile::Sync.stub(:new) { sync_dbl }
350
+ # expectations
351
+ expect(ui).to receive(:info).with("vagrant-r10k: Beginning r10k deploy of puppet modules into module/path using puppetfile/path")
352
+ logger = subject.instance_variable_get(:@logger)
353
+ # negative expectations
354
+ expect(logger).to_not receive(:debug).once.ordered.with("vagrant::r10k::deploy.deploy called")
355
+ expect(logger).to_not receive(:debug).with("vagrant-r10k: creating Puppetfile::Sync task")
356
+ expect(logger).to_not receive(:debug).with("vagrant-r10k: appending task to runner queue")
357
+ expect(runner_dbl).to_not receive(:append_task).with(sync_dbl)
358
+ expect(logger).to_not receive(:debug).with("vagrant-r10k: running sync task")
359
+ expect(runner_dbl).to_not receive(:run)
360
+ expect(logger).to_not receive(:debug).with("vagrant-r10k: sync task complete")
361
+ expect(runner_dbl).to_not receive(:succeeded?)
362
+ expect(ui).to_not receive(:info).with("vagrant-r10k: Deploy finished")
363
+ expect(app).to_not receive(:call).with(env)
364
+ # run
365
+ expect { subject.deploy(env, config) }.to raise_error(VagrantPlugins::R10k::Helpers::ErrorWrapper, /Puppetfile at puppetfile\/path does not exist/)
366
+ end
367
+ end
368
+ end
369
+
370
+ describe 'run failed' do
371
+ include_context 'unit' do
372
+ let(:vagrantfile) { <<-EOF
373
+ Vagrant.configure('2') do |config|
374
+ config.vm.define :test
375
+ # r10k plugin to deploy puppet modules
376
+ # config.r10k.puppet_dir = 'puppet'
377
+ # config.r10k.puppetfile_path = 'puppet/Puppetfile'
378
+
379
+ # Provision the machine with the appliction
380
+ config.vm.provision "puppet" do |puppet|
381
+ puppet.manifests_path = "puppet/manifests"
382
+ puppet.manifest_file = "default.pp"
383
+ puppet.module_path = "puppet/modules"
384
+ end
385
+ end
386
+ EOF
387
+ }
388
+ end
389
+ let(:puppetfile_dbl) { double }
390
+ before do
391
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(puppetfile_dbl)
392
+ allow_any_instance_of(R10K::Logging).to receive(:level=)
393
+ end
394
+ it 'raises an error' do
395
+ # stubs and doubles
396
+ with_temp_env("VAGRANT_LOG" => "foo") do
397
+ File.stub(:file?).with('puppetfile/path').and_return(true)
398
+ runner_dbl = double
399
+ sync_dbl = double
400
+ allow(runner_dbl).to receive(:append_task).with(sync_dbl)
401
+ allow(runner_dbl).to receive(:succeeded?).and_return(false)
402
+ allow(runner_dbl).to receive(:get_errors).and_return(
403
+ [[
404
+ sync_dbl,
405
+ R10K::Git::GitError.new("Couldn't update git cache for https://example.com/foobar.git: \"fatal: repository 'https://example.com/foobar.git/' not found\"")
406
+ ]])
407
+ allow(sync_dbl).to receive(:new).with(puppetfile_dbl)
408
+ R10K::TaskRunner.stub(:new) { runner_dbl }
409
+ R10K::Task::Puppetfile::Sync.stub(:new) { sync_dbl }
410
+ # expectations
411
+ expect(R10K::Logging).to receive(:level=).with(3).twice
412
+ expect(ui).to receive(:info).with("vagrant-r10k: Beginning r10k deploy of puppet modules into module/path using puppetfile/path")
413
+ logger = subject.instance_variable_get(:@logger)
414
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy.deploy called")
415
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: creating Puppetfile::Sync task")
416
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: appending task to runner queue")
417
+ expect(runner_dbl).to receive(:append_task).with(sync_dbl).once
418
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: running sync task")
419
+ expect(runner_dbl).to receive(:run).once
420
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: sync task complete")
421
+ expect(runner_dbl).to receive(:succeeded?).once
422
+ # negative expectations
423
+ expect(ui).to_not receive(:info).with("vagrant-r10k: Deploy finished")
424
+ expect(app).to_not receive(:call)
425
+ # run
426
+ expect { subject.deploy(env, config) }.to raise_error(VagrantPlugins::R10k::Helpers::ErrorWrapper, /Couldn't update git cache for https:\/\/example\.com\/foobar\.git: "fatal: repository 'https:\/\/example\.com\/foobar\.git\/' not found"/)
427
+ end
428
+ end
429
+ end
430
+
431
+ describe 'Could not resolve host' do
432
+ include_context 'unit' do
433
+ let(:vagrantfile) { <<-EOF
434
+ Vagrant.configure('2') do |config|
435
+ config.vm.define :test
436
+ # r10k plugin to deploy puppet modules
437
+ # config.r10k.puppet_dir = 'puppet'
438
+ # config.r10k.puppetfile_path = 'puppet/Puppetfile'
439
+
440
+ # Provision the machine with the appliction
441
+ config.vm.provision "puppet" do |puppet|
442
+ puppet.manifests_path = "puppet/manifests"
443
+ puppet.manifest_file = "default.pp"
444
+ puppet.module_path = "puppet/modules"
445
+ end
446
+ end
447
+ EOF
448
+ }
449
+ end
450
+ let(:puppetfile_dbl) { double }
451
+ before do
452
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(puppetfile_dbl)
453
+ allow_any_instance_of(R10K::Logging).to receive(:level=)
454
+ end
455
+ it 'raises an error' do
456
+ # stubs and doubles
457
+ with_temp_env("VAGRANT_LOG" => "foo") do
458
+ File.stub(:file?).with('puppetfile/path').and_return(true)
459
+ runner_dbl = double
460
+ sync_dbl = double
461
+ allow(runner_dbl).to receive(:append_task).with(sync_dbl)
462
+ allow(runner_dbl).to receive(:succeeded?).and_return(false)
463
+ allow(runner_dbl).to receive(:get_errors).and_return(
464
+ [[
465
+ sync_dbl,
466
+ R10K::Git::GitError.new("Couldn't update git cache for https://foo.com/jantman/bar.git: \"fatal: unable to access 'https://foo.com/jantman/bar.git/': Could not resolve host: foo.com\"")
467
+ ]])
468
+ allow(sync_dbl).to receive(:new).with(puppetfile_dbl)
469
+ R10K::TaskRunner.stub(:new) { runner_dbl }
470
+ R10K::Task::Puppetfile::Sync.stub(:new) { sync_dbl }
471
+ # expectations
472
+ expect(R10K::Logging).to receive(:level=).with(3).twice
473
+ expect(ui).to receive(:info).with("vagrant-r10k: Beginning r10k deploy of puppet modules into module/path using puppetfile/path")
474
+ logger = subject.instance_variable_get(:@logger)
475
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy.deploy called")
476
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: creating Puppetfile::Sync task")
477
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: appending task to runner queue")
478
+ expect(runner_dbl).to receive(:append_task).with(sync_dbl).once
479
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: running sync task")
480
+ expect(runner_dbl).to receive(:run).once
481
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: sync task complete")
482
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: caught 'Could not resolve host' error")
483
+ expect(runner_dbl).to receive(:succeeded?).once
484
+ # negative expectations
485
+ expect(ui).to_not receive(:info).with("vagrant-r10k: Deploy finished")
486
+ expect(app).to_not receive(:call)
487
+ # run
488
+ expect { subject.deploy(env, config) }.to raise_error(VagrantPlugins::R10k::Helpers::ErrorWrapper, /Could not resolve host: foo\.com.*If you don't have connectivity to the host, running 'vagrant up --no-provision' will skip r10k deploy and all provisioning/m)
489
+ end
490
+ end
491
+ end
492
+
493
+ describe 'puppetfile syntax error' do
494
+ include_context 'unit' do
495
+ let(:vagrantfile) { <<-EOF
496
+ Vagrant.configure('2') do |config|
497
+ config.vm.define :test
498
+ # r10k plugin to deploy puppet modules
499
+ # config.r10k.puppet_dir = 'puppet'
500
+ # config.r10k.puppetfile_path = 'puppet/Puppetfile'
501
+
502
+ # Provision the machine with the appliction
503
+ config.vm.provision "puppet" do |puppet|
504
+ puppet.manifests_path = "puppet/manifests"
505
+ puppet.manifest_file = "default.pp"
506
+ puppet.module_path = "puppet/modules"
507
+ end
508
+ end
509
+ EOF
510
+ }
511
+ end
512
+ let(:puppetfile_dbl) { double }
513
+ before do
514
+ allow_any_instance_of(VagrantPlugins::R10k::Helpers).to receive(:get_puppetfile).and_return(puppetfile_dbl)
515
+ allow_any_instance_of(R10K::Logging).to receive(:level=)
516
+ end
517
+ it 'raises an error' do
518
+ # stubs and doubles
519
+ with_temp_env("VAGRANT_LOG" => "foo") do
520
+ File.stub(:file?).with('puppetfile/path').and_return(true)
521
+ runner_dbl = double
522
+ sync_dbl = double
523
+ allow(runner_dbl).to receive(:append_task).with(sync_dbl)
524
+ allow(runner_dbl).to receive(:succeeded?).and_return(false)
525
+ allow(runner_dbl).to receive(:run).and_raise(SyntaxError.new("some syntax error"))
526
+ allow(sync_dbl).to receive(:new).with(puppetfile_dbl)
527
+ R10K::TaskRunner.stub(:new) { runner_dbl }
528
+ R10K::Task::Puppetfile::Sync.stub(:new) { sync_dbl }
529
+ # expectations
530
+ expect(R10K::Logging).to receive(:level=).with(3).twice
531
+ expect(ui).to receive(:info).with("vagrant-r10k: Beginning r10k deploy of puppet modules into module/path using puppetfile/path")
532
+ logger = subject.instance_variable_get(:@logger)
533
+ expect(logger).to receive(:debug).once.ordered.with("vagrant::r10k::deploy.deploy called")
534
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: creating Puppetfile::Sync task")
535
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: appending task to runner queue")
536
+ expect(runner_dbl).to receive(:append_task).with(sync_dbl).once
537
+ expect(logger).to receive(:debug).once.ordered.with("vagrant-r10k: running sync task")
538
+ expect(runner_dbl).to receive(:run).once
539
+ # negative expectations
540
+ expect(logger).to_not receive(:debug).with("vagrant-r10k: sync task complete")
541
+ expect(runner_dbl).to_not receive(:succeeded?)
542
+ expect(ui).to_not receive(:info).with("vagrant-r10k: Deploy finished")
543
+ expect(app).to_not receive(:call)
544
+ # run
545
+ expect { subject.deploy(env, config) }.to raise_error(VagrantPlugins::R10k::Helpers::ErrorWrapper, /SyntaxError: some syntax error/)
546
+ end
547
+ end
548
+ end
549
+ end
550
+ end