r10k 3.9.0 → 3.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +1 -1
  3. data/.github/workflows/rspec_tests.yml +1 -1
  4. data/.github/workflows/stale.yml +19 -0
  5. data/CHANGELOG.mkd +24 -0
  6. data/doc/dynamic-environments/configuration.mkd +13 -6
  7. data/integration/Rakefile +1 -1
  8. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +3 -9
  9. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +8 -14
  10. data/lib/r10k/action/base.rb +10 -0
  11. data/lib/r10k/action/deploy/display.rb +42 -9
  12. data/lib/r10k/action/deploy/environment.rb +70 -41
  13. data/lib/r10k/action/deploy/module.rb +51 -29
  14. data/lib/r10k/action/puppetfile/check.rb +3 -1
  15. data/lib/r10k/action/puppetfile/install.rb +20 -23
  16. data/lib/r10k/action/puppetfile/purge.rb +8 -2
  17. data/lib/r10k/action/runner.rb +11 -6
  18. data/lib/r10k/content_synchronizer.rb +83 -0
  19. data/lib/r10k/deployment.rb +1 -1
  20. data/lib/r10k/environment/base.rb +21 -1
  21. data/lib/r10k/environment/git.rb +0 -3
  22. data/lib/r10k/environment/svn.rb +4 -6
  23. data/lib/r10k/environment/with_modules.rb +18 -10
  24. data/lib/r10k/git/cache.rb +1 -1
  25. data/lib/r10k/initializers.rb +7 -0
  26. data/lib/r10k/module.rb +1 -1
  27. data/lib/r10k/module/base.rb +17 -1
  28. data/lib/r10k/module/forge.rb +29 -19
  29. data/lib/r10k/module/git.rb +23 -14
  30. data/lib/r10k/module/local.rb +1 -0
  31. data/lib/r10k/module/svn.rb +12 -9
  32. data/lib/r10k/module_loader/puppetfile.rb +195 -0
  33. data/lib/r10k/module_loader/puppetfile/dsl.rb +37 -0
  34. data/lib/r10k/puppetfile.rb +111 -202
  35. data/lib/r10k/settings.rb +3 -0
  36. data/lib/r10k/source/base.rb +14 -0
  37. data/lib/r10k/source/git.rb +19 -6
  38. data/lib/r10k/source/hash.rb +1 -3
  39. data/lib/r10k/source/svn.rb +4 -2
  40. data/lib/r10k/util/cleaner.rb +21 -0
  41. data/lib/r10k/util/purgeable.rb +70 -8
  42. data/lib/r10k/version.rb +1 -1
  43. data/locales/r10k.pot +67 -71
  44. data/spec/fixtures/unit/action/r10k_forge_auth.yaml +4 -0
  45. data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +3 -0
  46. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_subdir_2/ignored_1 +0 -0
  47. data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
  48. data/spec/r10k-mocks/mock_source.rb +1 -1
  49. data/spec/shared-examples/puppetfile-action.rb +7 -7
  50. data/spec/unit/action/deploy/display_spec.rb +32 -6
  51. data/spec/unit/action/deploy/environment_spec.rb +85 -48
  52. data/spec/unit/action/deploy/module_spec.rb +163 -31
  53. data/spec/unit/action/puppetfile/check_spec.rb +2 -2
  54. data/spec/unit/action/puppetfile/install_spec.rb +31 -10
  55. data/spec/unit/action/puppetfile/purge_spec.rb +25 -5
  56. data/spec/unit/action/runner_spec.rb +49 -25
  57. data/spec/unit/git/cache_spec.rb +14 -0
  58. data/spec/unit/module/forge_spec.rb +23 -14
  59. data/spec/unit/module/git_spec.rb +8 -8
  60. data/spec/unit/module_loader/puppetfile_spec.rb +330 -0
  61. data/spec/unit/module_spec.rb +22 -5
  62. data/spec/unit/puppetfile_spec.rb +123 -203
  63. data/spec/unit/settings_spec.rb +6 -2
  64. data/spec/unit/util/purgeable_spec.rb +40 -14
  65. metadata +12 -2
@@ -250,8 +250,12 @@ describe R10K::Settings do
250
250
 
251
251
  describe "forge settings" do
252
252
  it "passes settings through to the forge settings" do
253
- output = subject.evaluate("forge" => {"baseurl" => "https://forge.tessier-ashpool.freeside", "proxy" => "https://proxy.tessier-ashpool.freesize:3128"})
254
- expect(output[:forge]).to eq(:baseurl => "https://forge.tessier-ashpool.freeside", :proxy => "https://proxy.tessier-ashpool.freesize:3128")
253
+ output = subject.evaluate("forge" => {"baseurl" => "https://forge.tessier-ashpool.freeside",
254
+ "proxy" => "https://proxy.tessier-ashpool.freesize:3128",
255
+ "authorization_token" => "faketoken"})
256
+ expect(output[:forge]).to eq(:baseurl => "https://forge.tessier-ashpool.freeside",
257
+ :proxy => "https://proxy.tessier-ashpool.freesize:3128",
258
+ :authorization_token => "faketoken")
255
259
  end
256
260
  end
257
261
  end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'r10k/util/purgeable'
3
+ require 'r10k/util/cleaner'
3
4
 
4
5
  RSpec.describe R10K::Util::Purgeable do
5
6
  let(:managed_directories) do
@@ -18,17 +19,11 @@ RSpec.describe R10K::Util::Purgeable do
18
19
  'spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_new_1',
19
20
  'spec/fixtures/unit/util/purgeable/managed_two/expected_2',
20
21
  'spec/fixtures/unit/util/purgeable/managed_two/new_2',
22
+ 'spec/fixtures/unit/util/purgeable/managed_two/.hidden',
21
23
  ]
22
24
  end
23
25
 
24
- let(:test_class) do
25
- Struct.new(:managed_directories, :desired_contents) do
26
- include R10K::Util::Purgeable
27
- include R10K::Logging
28
- end
29
- end
30
-
31
- subject { test_class.new(managed_directories, desired_contents) }
26
+ subject { R10K::Util::Cleaner.new(managed_directories, desired_contents) }
32
27
 
33
28
  context 'without recurse option' do
34
29
  let(:recurse) { false }
@@ -104,7 +99,13 @@ RSpec.describe R10K::Util::Purgeable do
104
99
 
105
100
  describe '#current_contents' do
106
101
  it 'collects contents of all managed directories recursively' do
107
- expect(subject.current_contents(recurse)).to contain_exactly(/\/expected_1/, /\/expected_2/, /\/unmanaged_1/, /\/unmanaged_2/, /\/managed_subdir_1/, /\/subdir_expected_1/, /\/subdir_unmanaged_1/)
102
+ expect(subject.current_contents(recurse)).
103
+ to contain_exactly(/\/expected_1/, /\/expected_2/,
104
+ /\/unmanaged_1/, /\/unmanaged_2/,
105
+ /\/managed_subdir_1/,
106
+ /\/subdir_expected_1/, /\/subdir_unmanaged_1/,
107
+ /\/managed_subdir_2/, /\/ignored_1/,
108
+ /\/\.hidden/)
108
109
  end
109
110
  end
110
111
 
@@ -120,7 +121,8 @@ RSpec.describe R10K::Util::Purgeable do
120
121
  let(:whitelist) { [] }
121
122
 
122
123
  it 'collects current_contents that should not exist recursively' do
123
- expect(subject.stale_contents(recurse, exclusions, whitelist)).to contain_exactly(/\/unmanaged_1/, /\/unmanaged_2/, /\/subdir_unmanaged_1/)
124
+ expect(subject.stale_contents(recurse, exclusions, whitelist)).
125
+ to contain_exactly(/\/unmanaged_1/, /\/unmanaged_2/, /\/subdir_unmanaged_1/, /\/ignored_1/)
124
126
  end
125
127
  end
126
128
 
@@ -130,7 +132,17 @@ RSpec.describe R10K::Util::Purgeable do
130
132
 
131
133
  it 'collects current_contents that should not exist except whitelisted items' do
132
134
  expect(subject.logger).to receive(:debug).with(/unmanaged_1.*whitelist match/i)
133
- expect(subject.stale_contents(recurse, exclusions, whitelist)).to contain_exactly(/\/unmanaged_2/, /\/subdir_unmanaged_1/)
135
+
136
+ expect(subject.stale_contents(recurse, exclusions, whitelist)).
137
+ to contain_exactly(/\/unmanaged_2/, /\/subdir_unmanaged_1/, /\/ignored_1/)
138
+ end
139
+
140
+ it 'does not collect contents that match recursive globbed whitelist items as intermediate values' do
141
+ recursive_whitelist = ['**/managed_subdir_1/**/*']
142
+ expect(subject.logger).not_to receive(:debug).with(/ignored_1/)
143
+
144
+ expect(subject.stale_contents(recurse, exclusions, recursive_whitelist)).
145
+ to contain_exactly(/\/unmanaged_2/, /\/managed_one\/unmanaged_1/)
134
146
  end
135
147
  end
136
148
 
@@ -140,7 +152,17 @@ RSpec.describe R10K::Util::Purgeable do
140
152
 
141
153
  it 'collects current_contents that should not exist except excluded items' do
142
154
  expect(subject.logger).to receive(:debug2).with(/unmanaged_2.*internal exclusion match/i)
143
- expect(subject.stale_contents(recurse, exclusions, whitelist)).to contain_exactly(/\/unmanaged_1/, /\/subdir_unmanaged_1/)
155
+
156
+ expect(subject.stale_contents(recurse, exclusions, whitelist)).
157
+ to contain_exactly(/\/unmanaged_1/, /\/subdir_unmanaged_1/, /\/ignored_1/)
158
+ end
159
+
160
+ it 'does not collect contents that match recursive globbed exclusion items as intermediate values' do
161
+ recursive_exclusions = ['**/managed_subdir_1/**/*']
162
+ expect(subject.logger).not_to receive(:debug).with(/ignored_1/)
163
+
164
+ expect(subject.stale_contents(recurse, recursive_exclusions, whitelist)).
165
+ to contain_exactly(/\/unmanaged_2/, /\/managed_one\/unmanaged_1/)
144
166
  end
145
167
  end
146
168
  end
@@ -185,7 +207,11 @@ RSpec.describe R10K::Util::Purgeable do
185
207
  end
186
208
 
187
209
  context "recursive whitelist glob" do
188
- let(:whitelist) { managed_directories.collect { |dir| File.join(dir, "**", "*unmanaged*") } }
210
+ let(:whitelist) do
211
+ managed_directories.flat_map do |dir|
212
+ [File.join(dir, "**", "*unmanaged*"), File.join(dir, "**", "managed_subdir_2")]
213
+ end
214
+ end
189
215
  let(:purge_opts) { { recurse: true, whitelist: whitelist } }
190
216
 
191
217
  describe '#purge!' do
@@ -220,7 +246,7 @@ RSpec.describe R10K::Util::Purgeable do
220
246
  context "when class does not implement #purge_exclusions" do
221
247
  describe '#purge!' do
222
248
  it 'purges normally' do
223
- expect(FileUtils).to receive(:rm_r).at_least(3).times
249
+ expect(FileUtils).to receive(:rm_r).at_least(4).times
224
250
 
225
251
  subject.purge!(purge_opts)
226
252
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r10k
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.0
4
+ version: 3.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Thebo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-23 00:00:00.000000000 Z
11
+ date: 2021-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored2
@@ -199,6 +199,7 @@ files:
199
199
  - ".github/workflows/docker.yml"
200
200
  - ".github/workflows/release.yml"
201
201
  - ".github/workflows/rspec_tests.yml"
202
+ - ".github/workflows/stale.yml"
202
203
  - ".gitignore"
203
204
  - ".travis.yml"
204
205
  - CHANGELOG.mkd
@@ -346,6 +347,7 @@ files:
346
347
  - lib/r10k/cli/help.rb
347
348
  - lib/r10k/cli/puppetfile.rb
348
349
  - lib/r10k/cli/version.rb
350
+ - lib/r10k/content_synchronizer.rb
349
351
  - lib/r10k/deployment.rb
350
352
  - lib/r10k/deployment/config.rb
351
353
  - lib/r10k/environment.rb
@@ -391,6 +393,8 @@ files:
391
393
  - lib/r10k/module/local.rb
392
394
  - lib/r10k/module/metadata_file.rb
393
395
  - lib/r10k/module/svn.rb
396
+ - lib/r10k/module_loader/puppetfile.rb
397
+ - lib/r10k/module_loader/puppetfile/dsl.rb
394
398
  - lib/r10k/puppetfile.rb
395
399
  - lib/r10k/settings.rb
396
400
  - lib/r10k/settings/collection.rb
@@ -415,6 +419,7 @@ files:
415
419
  - lib/r10k/svn/working_dir.rb
416
420
  - lib/r10k/util/attempt.rb
417
421
  - lib/r10k/util/basedir.rb
422
+ - lib/r10k/util/cleaner.rb
418
423
  - lib/r10k/util/commands.rb
419
424
  - lib/r10k/util/exec_env.rb
420
425
  - lib/r10k/util/license.rb
@@ -443,6 +448,8 @@ files:
443
448
  - spec/fixtures/unit/action/r10k.yaml
444
449
  - spec/fixtures/unit/action/r10k_cachedir.yaml
445
450
  - spec/fixtures/unit/action/r10k_creds.yaml
451
+ - spec/fixtures/unit/action/r10k_forge_auth.yaml
452
+ - spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml
446
453
  - spec/fixtures/unit/action/r10k_generate_types.yaml
447
454
  - spec/fixtures/unit/action/r10k_puppet_path.yaml
448
455
  - spec/fixtures/unit/puppetfile/argument-error/Puppetfile
@@ -454,9 +461,11 @@ files:
454
461
  - spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile
455
462
  - spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile
456
463
  - spec/fixtures/unit/util/purgeable/managed_one/expected_1
464
+ - spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_subdir_2/ignored_1
457
465
  - spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1
458
466
  - spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1
459
467
  - spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1
468
+ - spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3
460
469
  - spec/fixtures/unit/util/purgeable/managed_two/expected_2
461
470
  - spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2
462
471
  - spec/fixtures/unit/util/subprocess/runner/no-execute.sh
@@ -522,6 +531,7 @@ files:
522
531
  - spec/unit/module/git_spec.rb
523
532
  - spec/unit/module/metadata_file_spec.rb
524
533
  - spec/unit/module/svn_spec.rb
534
+ - spec/unit/module_loader/puppetfile_spec.rb
525
535
  - spec/unit/module_spec.rb
526
536
  - spec/unit/puppetfile_spec.rb
527
537
  - spec/unit/settings/collection_spec.rb