r10k 3.14.1 → 5.0.1

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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +17 -0
  3. data/.github/workflows/docker.yml +9 -4
  4. data/.github/workflows/release.yml +3 -2
  5. data/.github/workflows/rspec_tests.yml +8 -10
  6. data/CHANGELOG.mkd +100 -0
  7. data/CODEOWNERS +1 -2
  8. data/Gemfile +2 -2
  9. data/README.mkd +18 -19
  10. data/doc/common-patterns.mkd +1 -2
  11. data/doc/dynamic-environments/configuration.mkd +91 -12
  12. data/doc/dynamic-environments/usage.mkd +4 -0
  13. data/doc/dynamic-environments/workflow-guide.mkd +3 -3
  14. data/doc/faq.mkd +1 -1
  15. data/doc/puppetfile.mkd +9 -3
  16. data/integration/Gemfile +3 -4
  17. data/integration/Rakefile +58 -23
  18. data/integration/files/pre-suite/git_config.pp.erb +1 -1
  19. data/integration/pre-suite/00_pe_install.rb +3 -0
  20. data/integration/pre-suite/10_git_config.rb +1 -3
  21. data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +5 -4
  22. data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +1 -1
  23. data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +2 -2
  24. data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +2 -2
  25. data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +3 -3
  26. data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +3 -3
  27. data/integration/tests/command_line/deploy_env_without_mod_update.rb +0 -3
  28. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +0 -3
  29. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +5 -10
  30. data/integration/tests/git_source/git_source_git.rb +1 -4
  31. data/integration/tests/git_source/git_source_repeated_remote.rb +2 -5
  32. data/integration/tests/git_source/git_source_submodule.rb +1 -1
  33. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +1 -1
  34. data/integration/tests/purging/content_not_purged_at_root.rb +2 -5
  35. data/integration/tests/purging/default_purging.rb +0 -3
  36. data/integration/tests/purging/{does_not_purge_files_on_white_list.rb → does_not_purge_files_on_allowlist.rb} +2 -5
  37. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -4
  38. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -4
  39. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -4
  40. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +0 -3
  41. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +1 -1
  42. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +1 -1
  43. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +1 -1
  44. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +0 -3
  45. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +3 -2
  46. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +1 -5
  47. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +1 -1
  48. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +1 -4
  49. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +0 -3
  50. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +1 -1
  51. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +0 -3
  52. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +0 -3
  53. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -4
  54. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +0 -3
  55. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +0 -3
  56. data/lib/r10k/action/deploy/environment.rb +2 -19
  57. data/lib/r10k/action/deploy/module.rb +1 -0
  58. data/lib/r10k/action/puppetfile/check.rb +7 -0
  59. data/lib/r10k/action/puppetfile/install.rb +3 -1
  60. data/lib/r10k/cli/deploy.rb +15 -1
  61. data/lib/r10k/cli/puppetfile.rb +1 -0
  62. data/lib/r10k/content_synchronizer.rb +7 -2
  63. data/lib/r10k/environment/with_modules.rb +24 -1
  64. data/lib/r10k/environment.rb +0 -1
  65. data/lib/r10k/git/rugged/bare_repository.rb +5 -4
  66. data/lib/r10k/git/rugged/thin_repository.rb +7 -0
  67. data/lib/r10k/git/rugged/working_repository.rb +13 -7
  68. data/lib/r10k/git/shellgit/thin_repository.rb +5 -1
  69. data/lib/r10k/git/shellgit/working_repository.rb +5 -4
  70. data/lib/r10k/git/stateful_repository.rb +4 -4
  71. data/lib/r10k/module/base.rb +3 -3
  72. data/lib/r10k/module/git.rb +19 -5
  73. data/lib/r10k/module_loader/puppetfile/dsl.rb +4 -0
  74. data/lib/r10k/module_loader/puppetfile.rb +22 -14
  75. data/lib/r10k/puppetfile.rb +1 -1
  76. data/lib/r10k/settings/container.rb +1 -0
  77. data/lib/r10k/settings.rb +6 -7
  78. data/lib/r10k/tarball.rb +1 -1
  79. data/lib/r10k/version.rb +1 -1
  80. data/locales/r10k.pot +34 -82
  81. data/r10k.gemspec +8 -18
  82. metadata +40 -213
  83. data/.github/workflows/stale.yml +0 -21
  84. data/.travis.yml +0 -42
  85. data/docker/.gitignore +0 -1
  86. data/docker/.rspec +0 -4
  87. data/docker/Gemfile +0 -11
  88. data/docker/Makefile +0 -92
  89. data/docker/README.md +0 -28
  90. data/docker/docker-compose.yml +0 -18
  91. data/docker/r10k/Dockerfile +0 -68
  92. data/docker/r10k/adduser.sh +0 -13
  93. data/docker/r10k/docker-entrypoint.d/10-analytics.sh +0 -30
  94. data/docker/r10k/docker-entrypoint.sh +0 -10
  95. data/docker/r10k/release.Dockerfile +0 -55
  96. data/docker/spec/dockerfile_spec.rb +0 -37
  97. data/docker/spec/fixtures/Puppetfile +0 -2
  98. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +0 -83
  99. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +0 -128
  100. data/integration/tests/purging/invalid_whitelist_types.rb +0 -63
  101. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +0 -49
  102. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +0 -68
  103. data/lib/r10k/environment/bare.rb +0 -13
  104. data/spec/fixtures/empty/.empty +0 -0
  105. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  106. data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
  107. data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
  108. data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
  109. data/spec/fixtures/tarball/tarball.tar.gz +0 -0
  110. data/spec/fixtures/unit/action/r10k.yaml +0 -5
  111. data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
  112. data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
  113. data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
  114. data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
  115. data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
  116. data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
  117. data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
  118. data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
  119. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
  120. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
  121. data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
  122. data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
  123. data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
  124. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
  125. data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
  126. data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
  127. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
  128. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
  129. data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
  130. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
  131. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
  132. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
  133. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
  134. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
  135. data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
  136. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
  137. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
  138. data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
  139. data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
  140. data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
  141. data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
  142. data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
  143. data/spec/integration/git/rugged/cache_spec.rb +0 -33
  144. data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
  145. data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
  146. data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
  147. data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
  148. data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
  149. data/spec/integration/git/stateful_repository_spec.rb +0 -159
  150. data/spec/integration/util/purageable_spec.rb +0 -41
  151. data/spec/matchers/exit_with.rb +0 -28
  152. data/spec/matchers/match_realpath.rb +0 -18
  153. data/spec/r10k-mocks/mock_config.rb +0 -33
  154. data/spec/r10k-mocks/mock_env.rb +0 -18
  155. data/spec/r10k-mocks/mock_source.rb +0 -17
  156. data/spec/r10k-mocks.rb +0 -3
  157. data/spec/shared-contexts/git-fixtures.rb +0 -55
  158. data/spec/shared-contexts/tarball.rb +0 -32
  159. data/spec/shared-examples/deploy-actions.rb +0 -69
  160. data/spec/shared-examples/git/bare_repository.rb +0 -132
  161. data/spec/shared-examples/git/thin_repository.rb +0 -26
  162. data/spec/shared-examples/git/working_repository.rb +0 -207
  163. data/spec/shared-examples/git-repository.rb +0 -38
  164. data/spec/shared-examples/puppetfile-action.rb +0 -39
  165. data/spec/shared-examples/settings/ancestry.rb +0 -44
  166. data/spec/shared-examples/subprocess-runner.rb +0 -89
  167. data/spec/spec_helper.rb +0 -41
  168. data/spec/unit/action/cri_runner_spec.rb +0 -72
  169. data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
  170. data/spec/unit/action/deploy/display_spec.rb +0 -61
  171. data/spec/unit/action/deploy/environment_spec.rb +0 -640
  172. data/spec/unit/action/deploy/module_spec.rb +0 -476
  173. data/spec/unit/action/puppetfile/check_spec.rb +0 -53
  174. data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
  175. data/spec/unit/action/puppetfile/install_spec.rb +0 -112
  176. data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
  177. data/spec/unit/action/runner_spec.rb +0 -407
  178. data/spec/unit/action/visitor_spec.rb +0 -39
  179. data/spec/unit/cli_spec.rb +0 -9
  180. data/spec/unit/deployment/config_spec.rb +0 -33
  181. data/spec/unit/deployment_spec.rb +0 -162
  182. data/spec/unit/environment/bare_spec.rb +0 -13
  183. data/spec/unit/environment/base_spec.rb +0 -122
  184. data/spec/unit/environment/git_spec.rb +0 -114
  185. data/spec/unit/environment/name_spec.rb +0 -181
  186. data/spec/unit/environment/plain_spec.rb +0 -8
  187. data/spec/unit/environment/svn_spec.rb +0 -146
  188. data/spec/unit/environment/tarball_spec.rb +0 -45
  189. data/spec/unit/environment/with_modules_spec.rb +0 -75
  190. data/spec/unit/errors/formatting_spec.rb +0 -84
  191. data/spec/unit/feature_spec.rb +0 -50
  192. data/spec/unit/forge/module_release_spec.rb +0 -213
  193. data/spec/unit/git/alternates_spec.rb +0 -116
  194. data/spec/unit/git/cache_spec.rb +0 -66
  195. data/spec/unit/git/rugged/cache_spec.rb +0 -48
  196. data/spec/unit/git/rugged/credentials_spec.rb +0 -215
  197. data/spec/unit/git/shellgit/cache_spec.rb +0 -27
  198. data/spec/unit/git/stateful_repository_spec.rb +0 -45
  199. data/spec/unit/git_spec.rb +0 -102
  200. data/spec/unit/initializers_spec.rb +0 -68
  201. data/spec/unit/instance_cache_spec.rb +0 -78
  202. data/spec/unit/keyed_factory_spec.rb +0 -51
  203. data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
  204. data/spec/unit/logging_spec.rb +0 -68
  205. data/spec/unit/module/base_spec.rb +0 -118
  206. data/spec/unit/module/forge_spec.rb +0 -271
  207. data/spec/unit/module/git_spec.rb +0 -387
  208. data/spec/unit/module/metadata_file_spec.rb +0 -68
  209. data/spec/unit/module/svn_spec.rb +0 -208
  210. data/spec/unit/module/tarball_spec.rb +0 -70
  211. data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
  212. data/spec/unit/module_spec.rb +0 -114
  213. data/spec/unit/puppetfile_spec.rb +0 -304
  214. data/spec/unit/settings/collection_spec.rb +0 -123
  215. data/spec/unit/settings/container_spec.rb +0 -92
  216. data/spec/unit/settings/definition_spec.rb +0 -79
  217. data/spec/unit/settings/enum_definition_spec.rb +0 -20
  218. data/spec/unit/settings/inheritance_spec.rb +0 -38
  219. data/spec/unit/settings/list_spec.rb +0 -88
  220. data/spec/unit/settings/loader_spec.rb +0 -110
  221. data/spec/unit/settings/uri_definition_spec.rb +0 -23
  222. data/spec/unit/settings_spec.rb +0 -303
  223. data/spec/unit/source/base_spec.rb +0 -31
  224. data/spec/unit/source/exec_spec.rb +0 -81
  225. data/spec/unit/source/git_spec.rb +0 -233
  226. data/spec/unit/source/hash_spec.rb +0 -54
  227. data/spec/unit/source/svn_spec.rb +0 -196
  228. data/spec/unit/source/yaml_spec.rb +0 -42
  229. data/spec/unit/source_spec.rb +0 -10
  230. data/spec/unit/svn/remote_spec.rb +0 -21
  231. data/spec/unit/svn/working_dir_spec.rb +0 -56
  232. data/spec/unit/tarball_spec.rb +0 -57
  233. data/spec/unit/util/attempt_spec.rb +0 -82
  234. data/spec/unit/util/cacheable_spec.rb +0 -23
  235. data/spec/unit/util/commands_spec.rb +0 -61
  236. data/spec/unit/util/downloader_spec.rb +0 -98
  237. data/spec/unit/util/exec_env_spec.rb +0 -56
  238. data/spec/unit/util/purgeable_spec.rb +0 -267
  239. data/spec/unit/util/setopts_spec.rb +0 -83
  240. data/spec/unit/util/subprocess/result_spec.rb +0 -36
  241. data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
  242. data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
  243. data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
  244. data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
  245. data/spec/unit/util/subprocess_spec.rb +0 -65
  246. data/spec/unit/util/symbolize_keys_spec.rb +0 -67
@@ -1,162 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/deployment'
3
- require 'tmpdir'
4
-
5
- describe R10K::Deployment do
6
-
7
- let(:confdir) { Dir.mktmpdir }
8
-
9
- let(:config) do
10
- R10K::Deployment::MockConfig.new(
11
- :sources => {
12
- :control => {
13
- :type => :mock,
14
- :basedir => File.join(confdir, 'environments'),
15
- :environments => %w[first second third],
16
- },
17
- :hiera => {
18
- :type => :mock,
19
- :basedir => File.join(confdir, 'hiera'),
20
- :environments => %w[fourth fifth sixth],
21
- }
22
- }
23
- )
24
- end
25
-
26
- subject(:deployment) { described_class.new(config) }
27
-
28
- let(:control) { deployment.sources.find { |source| source.name == :control } }
29
- let(:hiera) { deployment.sources.find { |source| source.name == :hiera } }
30
-
31
- describe "loading" do
32
- describe "sources" do
33
- it "creates a source for each key in the ':sources' config entry" do
34
- expect(control.basedir).to eq(File.join(confdir, 'environments'))
35
- expect(hiera.basedir).to eq(File.join(confdir, 'hiera'))
36
- end
37
- end
38
-
39
- describe "loading environments" do
40
- it "loads environments from each source" do
41
- %w[first second third fourth fifth sixth].each do |env|
42
- expect(deployment.environments.map(&:name)).to include(env)
43
- end
44
- end
45
- end
46
- end
47
-
48
- describe "preloading" do
49
- it "invokes #preload! on each source" do
50
- deployment.sources.each do |source|
51
- expect(source).to receive(:preload!)
52
- end
53
- deployment.preload!
54
- end
55
- end
56
-
57
- describe "paths" do
58
- it "retrieves the path for each source" do
59
- expect(deployment.paths).to include(File.join(confdir, 'environments'))
60
- expect(deployment.paths).to include(File.join(confdir, 'hiera'))
61
- end
62
- end
63
-
64
- describe "paths and sources" do
65
- it "retrieves the path for each source" do
66
- p_a_s = deployment.paths_and_sources
67
-
68
- expect(p_a_s[File.join(confdir, 'environments')]).to eq([control])
69
- expect(p_a_s[File.join(confdir, 'hiera')]).to eq([hiera])
70
- end
71
- end
72
-
73
- describe "purging" do
74
- it "purges each managed directory" do
75
- env_basedir = double("basedir environments")
76
- hiera_basedir = double("basedir hiera")
77
-
78
- expect(env_basedir).to receive(:purge!)
79
- expect(hiera_basedir).to receive(:purge!)
80
-
81
- expect(R10K::Util::Basedir).to receive(:new).with(File.join(confdir, 'environments'), [control]).and_return(env_basedir)
82
- expect(R10K::Util::Basedir).to receive(:new).with(File.join(confdir, 'hiera'), [hiera]).and_return(hiera_basedir)
83
-
84
- deployment.purge!
85
- end
86
- end
87
-
88
- describe "accepting a visitor" do
89
- it "passes itself to the visitor" do
90
- visitor = spy('visitor')
91
- expect(visitor).to receive(:visit).with(:deployment, subject)
92
- subject.accept(visitor)
93
- end
94
-
95
- it "passes the visitor to each environment if the visitor yields" do
96
- visitor = spy('visitor')
97
- expect(visitor).to receive(:visit) do |type, other, &block|
98
- expect(type).to eq :deployment
99
- expect(other).to eq subject
100
- block.call
101
- end
102
-
103
- source1 = spy('source')
104
- expect(source1).to receive(:accept).with(visitor)
105
- source2 = spy('source')
106
- expect(source2).to receive(:accept).with(visitor)
107
-
108
- expect(subject).to receive(:sources).and_return([source1, source2])
109
- subject.accept(visitor)
110
- end
111
- end
112
- end
113
-
114
- describe R10K::Deployment, "with environment collisions" do
115
-
116
- let(:confdir) { Dir.mktmpdir }
117
-
118
- let(:config) do
119
- R10K::Deployment::MockConfig.new(
120
- :sources => {
121
- :s1 => {
122
- :type => :mock,
123
- :basedir => File.join(confdir, 'environments'),
124
- :environments => %w[first second third],
125
- },
126
- :s2 => {
127
- :type => :mock,
128
- :basedir => File.join(confdir, 'environments'),
129
- :environments => %w[third fourth fifth],
130
- }
131
- }
132
- )
133
- end
134
-
135
- subject(:deployment) { described_class.new(config) }
136
-
137
- it "raises an error when validating" do
138
- expect {
139
- deployment.validate!
140
- }.to raise_error(R10K::Error, /Environment collision at .* between s\d:third and s\d:third/)
141
- end
142
- end
143
-
144
- describe R10K::Deployment, "checking the 'sources' key" do
145
-
146
- {
147
- "when missing" => {},
148
- "when empty" => {:sources => []},
149
- }.each_pair do |desc, config_hash|
150
- describe desc do
151
-
152
- let(:config) { R10K::Deployment::MockConfig.new(config_hash) }
153
- subject(:deployment) { described_class.new(config) }
154
-
155
- it "raises an error when enumerating sources" do
156
- expect {
157
- deployment.sources
158
- }.to raise_error(R10K::Error, "Unable to load sources; the supplied configuration does not define the 'sources' key")
159
- end
160
- end
161
- end
162
- end
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/environment'
3
-
4
- describe R10K::Environment::Bare do
5
- it "warns on initialization" do
6
- logger_spy = spy('logger')
7
- allow_any_instance_of(described_class).to receive(:logger).and_return(logger_spy)
8
-
9
- described_class.new('envname', '/basedir', 'dirname', {})
10
-
11
- expect(logger_spy).to have_received(:warn).with(%r{deprecated.*envname})
12
- end
13
- end
@@ -1,122 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/environment'
3
-
4
- describe R10K::Environment::Base do
5
-
6
- let(:basepath) { '/some/imaginary/path' }
7
- let(:envname) { 'env_name' }
8
- let(:path) { File.join(basepath, envname) }
9
- subject(:environment) { described_class.new('envname', basepath, envname, {}) }
10
-
11
- it "can return the fully qualified path" do
12
- expect(environment.path).to eq(Pathname.new(path))
13
- end
14
-
15
- it "raises an exception when #sync is called" do
16
- expect { environment.sync }.to raise_error(NotImplementedError)
17
- end
18
-
19
- describe "accepting a visitor" do
20
- it "passes itself to the visitor" do
21
- visitor = spy('visitor')
22
- expect(visitor).to receive(:visit).with(:environment, subject)
23
- subject.accept(visitor)
24
- end
25
-
26
- it "passes the visitor to the puppetfile if the visitor yields" do
27
- visitor = spy('visitor')
28
- expect(visitor).to receive(:visit) do |type, other, &block|
29
- expect(type).to eq :environment
30
- expect(other).to eq subject
31
- block.call
32
- end
33
-
34
- pf = spy('puppetfile')
35
- expect(pf).to receive(:accept).with(visitor)
36
-
37
- expect(subject).to receive(:puppetfile).and_return(pf)
38
- subject.accept(visitor)
39
- end
40
- end
41
-
42
- describe "#whitelist" do
43
- let(:whitelist) do
44
- ['**/*.xpp', 'custom', '*.tmp']
45
- end
46
-
47
- it "combines given patterns with full_path to env" do
48
- expect(subject.whitelist(whitelist)).to all(start_with(subject.path.to_s))
49
- end
50
- end
51
-
52
- describe "#purge_exclusions" do
53
- let(:mock_env) { instance_double("R10K::Environment::Base") }
54
- let(:mock_puppetfile) { instance_double("R10K::Puppetfile", :environment= => true, :environment => mock_env) }
55
- let(:loader) do
56
- instance_double("R10K::ModuleLoader::Puppetfile",
57
- :environment= => nil,
58
- :load => { :modules => @modules,
59
- :managed_directories => @managed_dirs,
60
- :desired_contents => @desired_contents,
61
- :purge_exclusions => @purge_ex })
62
- end
63
-
64
- before(:each) do
65
- @modules = []
66
- @managed_dirs = []
67
- @desired_contents = []
68
- @purge_exclusions = []
69
- end
70
-
71
- it "excludes .r10k-deploy.json" do
72
- allow(R10K::ModuleLoader::Puppetfile).to receive(:new).and_return(loader)
73
- subject.deploy
74
-
75
- expect(subject.purge_exclusions).to include(/r10k-deploy\.json/)
76
- end
77
-
78
- it "excludes puppetfile managed directories" do
79
- @managed_dirs = [
80
- '/some/imaginary/path/env_name/modules',
81
- '/some/imaginary/path/env_name/data',
82
- ]
83
-
84
- allow(R10K::ModuleLoader::Puppetfile).to receive(:new).and_return(loader)
85
- subject.deploy
86
-
87
- exclusions = subject.purge_exclusions
88
-
89
- @managed_dirs.each do |dir|
90
- expect(exclusions).to include(dir)
91
- end
92
- end
93
-
94
- describe "puppetfile desired contents" do
95
-
96
- before(:each) do
97
- @desired_contents = [ 'modules/apache', 'data/local/site' ].collect do |c|
98
- File.join(path, c)
99
- end
100
-
101
- allow(File).to receive(:directory?).and_return true
102
- allow(R10K::ModuleLoader::Puppetfile).to receive(:new).and_return(loader)
103
- subject.deploy
104
- end
105
-
106
- it "excludes desired directory contents with glob" do
107
- exclusions = subject.purge_exclusions
108
-
109
- expect(exclusions).to include(/#{Regexp.escape(File.join('apache', '**', '*'))}$/)
110
- expect(exclusions).to include(/#{Regexp.escape(File.join('site', '**', '*'))}$/)
111
- end
112
-
113
- it "excludes ancestors of desired directories" do
114
- exclusions = subject.purge_exclusions
115
-
116
- expect(exclusions).to include(/modules$/)
117
- expect(exclusions).to include(/data\/local$/)
118
- expect(exclusions).to include(/data$/)
119
- end
120
- end
121
- end
122
- end
@@ -1,114 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/environment'
3
-
4
- describe R10K::Environment::Git do
5
-
6
- subject do
7
- described_class.new(
8
- 'myenv',
9
- '/some/nonexistent/environmentdir',
10
- 'gitref',
11
- {
12
- :remote => 'git://git-server.site/my-repo.git',
13
- :ref => 'd026ea677116424d2968edb9cee8cbc24d09322b',
14
- }
15
- )
16
- end
17
-
18
- describe "initializing" do
19
- subject do
20
- described_class.new('name', '/dir', 'ref', {
21
- :remote => 'url',
22
- :ref => 'value',
23
- :puppetfile_name => 'Puppetfile',
24
- :moduledir => 'modules',
25
- :modules => { },
26
- })
27
- end
28
-
29
- it "accepts valid base class initialization arguments" do
30
- expect(subject.name).to eq 'name'
31
- end
32
- end
33
-
34
- describe "storing attributes" do
35
- it "can return the environment name" do
36
- expect(subject.name).to eq 'myenv'
37
- end
38
-
39
- it "can return the environment basedir" do
40
- expect(subject.basedir).to eq '/some/nonexistent/environmentdir'
41
- end
42
-
43
- it "can return the environment dirname" do
44
- expect(subject.dirname).to eq 'gitref'
45
- end
46
-
47
- it "can return the environment remote" do
48
- expect(subject.remote).to eq 'git://git-server.site/my-repo.git'
49
- end
50
-
51
- it "can return the environment ref" do
52
- expect(subject.ref).to eq 'd026ea677116424d2968edb9cee8cbc24d09322b'
53
- end
54
- end
55
-
56
- describe "synchronizing the environment" do
57
- it "syncs the git repository" do
58
- expect(subject.repo).to receive(:sync)
59
- subject.sync
60
- end
61
- end
62
-
63
- describe "generating a puppetfile for the environment" do
64
- let(:puppetfile) { subject.puppetfile }
65
-
66
- it "creates a puppetfile at the full path to the environment" do
67
- expect(puppetfile.basedir).to eq '/some/nonexistent/environmentdir/gitref'
68
- end
69
-
70
- it "sets the moduledir to 'modules' relative to the environment path" do
71
- expect(puppetfile.moduledir).to eq '/some/nonexistent/environmentdir/gitref/modules'
72
- end
73
-
74
- it "sets the puppetfile path to 'Puppetfile' relative to the environment path" do
75
- expect(puppetfile.puppetfile_path).to eq '/some/nonexistent/environmentdir/gitref/Puppetfile'
76
- end
77
- end
78
-
79
- describe "enumerating modules" do
80
- it "loads the Puppetfile and returns modules in that puppetfile" do
81
- loaded = { desired_contents: [], managed_directories: [], purge_exclusions: [] }
82
- mod = double('A module', :name => 'dbl')
83
- expect(subject.loader).to receive(:load).and_return(loaded.merge(modules: [mod]))
84
- expect(subject.modules).to eq([mod])
85
- end
86
- end
87
-
88
- describe "determining the status" do
89
- it "delegates to the repo" do
90
- expect(subject.repo).to receive(:status).and_return :some_status
91
- expect(subject.status).to eq :some_status
92
- end
93
- end
94
-
95
- describe "environment signature" do
96
- it "returns the git sha of HEAD" do
97
- expect(subject.repo).to receive(:head).and_return 'f00b00'
98
- expect(subject.signature).to eq 'f00b00'
99
- end
100
- end
101
-
102
- describe "info hash" do
103
- let(:info_hash) { subject.info }
104
-
105
- before(:each) do
106
- allow(subject.repo).to receive(:head).and_return 'f00b00'
107
- end
108
-
109
- it "includes name and signature" do
110
- expect(info_hash.keys).to include :name, :signature
111
- expect(info_hash).not_to have_value(nil)
112
- end
113
- end
114
- end
@@ -1,181 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/environment/name'
3
-
4
- describe R10K::Environment::Name do
5
- describe "strip_component" do
6
- it "does not modify the given name when no strip_component is given" do
7
- bn = described_class.new('myenv', source: 'source', prefix: false)
8
- expect(bn.dirname).to eq 'myenv'
9
- expect(bn.name).to eq 'myenv'
10
- expect(bn.original_name).to eq 'myenv'
11
- end
12
-
13
- it "removes the first occurance of a regex match when a regex is given" do
14
- bn = described_class.new('myenv', source: 'source', prefix: false, strip_component: '/env/')
15
- expect(bn.dirname).to eq 'my'
16
- expect(bn.name).to eq 'my'
17
- expect(bn.original_name).to eq 'myenv'
18
- end
19
-
20
- it "does not modify the given name when there is no regex match" do
21
- bn = described_class.new('myenv', source: 'source', prefix: false, strip_component: '/bar/')
22
- expect(bn.dirname).to eq 'myenv'
23
- expect(bn.name).to eq 'myenv'
24
- expect(bn.original_name).to eq 'myenv'
25
- end
26
-
27
- it "removes the given name's prefix when it matches strip_component" do
28
- bn = described_class.new('env/prod', source: 'source', prefix: false, strip_component: 'env/')
29
- expect(bn.dirname).to eq 'prod'
30
- expect(bn.name).to eq 'prod'
31
- expect(bn.original_name).to eq 'env/prod'
32
- end
33
-
34
- it "raises an error when given an integer" do
35
- expect {
36
- described_class.new('env/prod', source: 'source', prefix: false, strip_component: 4)
37
- }.to raise_error(%r{Improper.*"4"})
38
- end
39
- end
40
-
41
- describe "prefixing" do
42
- it "uses the branch name as the dirname when prefixing is off" do
43
- bn = described_class.new('mybranch', :source => 'source', :prefix => false)
44
- expect(bn.dirname).to eq 'mybranch'
45
- expect(bn.name).to eq 'mybranch'
46
- expect(bn.original_name).to eq 'mybranch'
47
- end
48
-
49
- it "prepends the source name when prefixing is on" do
50
- bn = described_class.new('mybranch', :source => 'source', :prefix => true)
51
- expect(bn.dirname).to eq 'source_mybranch'
52
- expect(bn.name).to eq 'mybranch'
53
- expect(bn.original_name).to eq 'mybranch'
54
- end
55
-
56
- it "prepends the prefix name when prefixing is overridden" do
57
- bn = described_class.new('mybranch', {:prefix => "bar", :sourcename => 'foo'})
58
- expect(bn.dirname).to eq 'bar_mybranch'
59
- expect(bn.name).to eq 'mybranch'
60
- expect(bn.original_name).to eq 'mybranch'
61
- end
62
-
63
- it "uses the branch name as the dirname when prefixing is nil" do
64
- bn = described_class.new('mybranch', {:prefix => nil, :sourcename => 'foo'})
65
- expect(bn.dirname).to eq 'mybranch'
66
- expect(bn.name).to eq 'mybranch'
67
- expect(bn.original_name).to eq 'mybranch'
68
- end
69
- end
70
-
71
- describe "determining the validate behavior with :invalid" do
72
- [
73
- ['correct_and_warn', {:validate => true, :correct => true}],
74
- ['correct', {:validate => false, :correct => true}],
75
- ['error', {:validate => true, :correct => false}],
76
- ].each do |(setting, outcome)|
77
- it "treats #{setting} as #{outcome.inspect}" do
78
- bn = described_class.new('mybranch', :source => 'source', :invalid => setting)
79
- expect(bn.validate?).to eq outcome[:validate]
80
- expect(bn.correct?).to eq outcome[:correct]
81
- end
82
- end
83
- end
84
-
85
- describe "determining if a branch is a valid environment name" do
86
- invalid_cases = [
87
- 'hyphenated-branch',
88
- 'dotted.branch',
89
- 'slashed/branch',
90
- 'at@branch',
91
- 'http://branch'
92
- ]
93
-
94
- valid_cases = [
95
- 'my_branchname',
96
- 'my_issue_346',
97
- ]
98
-
99
- describe "and validate is false" do
100
- invalid_cases.each do |branch|
101
- it "is valid if the branch is #{branch}" do
102
- bn = described_class.new(branch, {:validate => false})
103
- expect(bn).to be_valid
104
- end
105
- end
106
-
107
- valid_cases.each do |branch|
108
- it "is valid if the branch is #{branch}" do
109
- bn = described_class.new(branch, {:validate => false})
110
- expect(bn).to be_valid
111
- end
112
- end
113
- end
114
-
115
- describe "and validate is true" do
116
- invalid_cases.each do |branch|
117
- it "is invalid if the branch is #{branch}" do
118
- bn = described_class.new(branch, {:validate => true})
119
- expect(bn).to_not be_valid
120
- end
121
- end
122
-
123
- valid_cases.each do |branch|
124
- it "is valid if the branch is #{branch}" do
125
- bn = described_class.new(branch, {:validate => true})
126
- expect(bn).to be_valid
127
- end
128
- end
129
-
130
- end
131
- end
132
-
133
- describe "correcting branch names" do
134
- invalid_cases = [
135
- 'hyphenated-branch',
136
- 'dotted.branch',
137
- 'slashed/branch',
138
- 'at@branch',
139
- 'http://branch'
140
- ]
141
-
142
- valid_cases = [
143
- 'my_branchname',
144
- 'my_issue_346',
145
- ]
146
-
147
- describe "and correct is false" do
148
- invalid_cases.each do |branch|
149
- it "doesn't modify #{branch}" do
150
- bn = described_class.new(branch.dup, {:correct => false})
151
- expect(bn.dirname).to eq branch
152
- end
153
- end
154
-
155
- valid_cases.each do |branch|
156
- it "doesn't modify #{branch}" do
157
- bn = described_class.new(branch.dup, {:correct => false})
158
- expect(bn.dirname).to eq branch
159
- end
160
- end
161
- end
162
-
163
- describe "and correct is true" do
164
- invalid_cases.each do |branch|
165
- it "replaces invalid characters in #{branch} with underscores" do
166
- bn = described_class.new(branch.dup, {:correct => true})
167
- expect(bn.dirname).to eq branch.gsub(/\W/, '_')
168
- expect(bn.name).to eq branch
169
- expect(bn.original_name).to eq branch
170
- end
171
- end
172
-
173
- valid_cases.each do |branch|
174
- it "doesn't modify #{branch}" do
175
- bn = described_class.new(branch.dup, {:correct => true})
176
- expect(bn.dirname).to eq branch
177
- end
178
- end
179
- end
180
- end
181
- end
@@ -1,8 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/environment'
3
-
4
- describe R10K::Environment::Plain do
5
- it "initializes successfully" do
6
- expect(described_class.new('envname', '/basedir', 'dirname', {})).to be_a_kind_of(described_class)
7
- end
8
- end