r10k 3.15.0 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (240) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +17 -0
  3. data/.github/workflows/docker.yml +4 -4
  4. data/.github/workflows/release.yml +2 -2
  5. data/.github/workflows/rspec_tests.yml +10 -11
  6. data/.github/workflows/stale.yml +1 -1
  7. data/CHANGELOG.mkd +66 -0
  8. data/CODEOWNERS +1 -2
  9. data/Gemfile +2 -2
  10. data/README.mkd +16 -17
  11. data/doc/common-patterns.mkd +1 -2
  12. data/doc/dynamic-environments/configuration.mkd +78 -2
  13. data/doc/puppetfile.mkd +9 -3
  14. data/integration/Gemfile +1 -1
  15. data/integration/Rakefile +1 -1
  16. data/integration/files/pre-suite/git_config.pp.erb +1 -1
  17. data/integration/pre-suite/00_pe_install.rb +3 -0
  18. data/integration/pre-suite/10_git_config.rb +0 -3
  19. data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +5 -4
  20. data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +1 -1
  21. data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +2 -2
  22. data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +2 -2
  23. data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +3 -3
  24. data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +3 -3
  25. data/integration/tests/command_line/deploy_env_without_mod_update.rb +0 -3
  26. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +0 -3
  27. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +5 -10
  28. data/integration/tests/git_source/git_source_git.rb +1 -4
  29. data/integration/tests/git_source/git_source_repeated_remote.rb +0 -3
  30. data/integration/tests/git_source/git_source_submodule.rb +1 -1
  31. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +1 -1
  32. data/integration/tests/purging/content_not_purged_at_root.rb +0 -3
  33. data/integration/tests/purging/default_purging.rb +0 -3
  34. data/integration/tests/purging/{does_not_purge_files_on_white_list.rb → does_not_purge_files_on_allowlist.rb} +2 -5
  35. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +0 -3
  36. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +0 -3
  37. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +0 -3
  38. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +0 -3
  39. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +1 -1
  40. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +0 -3
  41. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +3 -2
  42. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +1 -5
  43. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +1 -1
  44. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +0 -3
  45. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +0 -3
  46. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +1 -1
  47. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +0 -3
  48. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +0 -3
  49. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +0 -3
  50. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +0 -3
  51. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +0 -3
  52. data/lib/r10k/action/deploy/environment.rb +2 -19
  53. data/lib/r10k/action/deploy/module.rb +1 -0
  54. data/lib/r10k/action/puppetfile/check.rb +7 -0
  55. data/lib/r10k/action/puppetfile/install.rb +3 -1
  56. data/lib/r10k/cli/deploy.rb +15 -1
  57. data/lib/r10k/cli/puppetfile.rb +1 -0
  58. data/lib/r10k/content_synchronizer.rb +7 -2
  59. data/lib/r10k/environment.rb +0 -1
  60. data/lib/r10k/git/rugged/bare_repository.rb +4 -3
  61. data/lib/r10k/git/rugged/working_repository.rb +7 -5
  62. data/lib/r10k/git/shellgit/working_repository.rb +3 -3
  63. data/lib/r10k/git/stateful_repository.rb +2 -2
  64. data/lib/r10k/module/base.rb +3 -3
  65. data/lib/r10k/module/git.rb +18 -4
  66. data/lib/r10k/module_loader/puppetfile.rb +14 -9
  67. data/lib/r10k/puppetfile.rb +1 -1
  68. data/lib/r10k/settings.rb +6 -7
  69. data/lib/r10k/version.rb +1 -1
  70. data/locales/r10k.pot +34 -82
  71. data/r10k.gemspec +5 -7
  72. metadata +22 -211
  73. data/docker/.gitignore +0 -1
  74. data/docker/.rspec +0 -4
  75. data/docker/Gemfile +0 -11
  76. data/docker/Makefile +0 -99
  77. data/docker/README.md +0 -28
  78. data/docker/docker-compose.yml +0 -18
  79. data/docker/r10k/Dockerfile +0 -68
  80. data/docker/r10k/adduser.sh +0 -13
  81. data/docker/r10k/docker-entrypoint.d/10-analytics.sh +0 -30
  82. data/docker/r10k/docker-entrypoint.sh +0 -10
  83. data/docker/r10k/release.Dockerfile +0 -55
  84. data/docker/spec/dockerfile_spec.rb +0 -37
  85. data/docker/spec/fixtures/Puppetfile +0 -2
  86. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +0 -83
  87. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +0 -128
  88. data/integration/tests/purging/invalid_whitelist_types.rb +0 -63
  89. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +0 -49
  90. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +0 -68
  91. data/lib/r10k/environment/bare.rb +0 -13
  92. data/spec/fixtures/empty/.empty +0 -0
  93. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  94. data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
  95. data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
  96. data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
  97. data/spec/fixtures/tarball/tarball.tar.gz +0 -0
  98. data/spec/fixtures/unit/action/r10k.yaml +0 -5
  99. data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
  100. data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
  101. data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
  102. data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
  103. data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
  104. data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
  105. data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
  106. data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
  107. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
  108. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
  109. data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
  110. data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
  111. data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
  112. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
  113. data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
  114. data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
  115. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
  116. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
  117. data/spec/fixtures/unit/puppetfile/various-modules/modules/apt/.gitkeep +0 -1
  118. data/spec/fixtures/unit/puppetfile/various-modules/modules/baz/.gitkeep +0 -1
  119. data/spec/fixtures/unit/puppetfile/various-modules/modules/buzz/.gitkeep +0 -1
  120. data/spec/fixtures/unit/puppetfile/various-modules/modules/canary/.gitkeep +0 -1
  121. data/spec/fixtures/unit/puppetfile/various-modules/modules/fizz/.gitkeep +0 -1
  122. data/spec/fixtures/unit/puppetfile/various-modules/modules/rpm/.gitkeep +0 -1
  123. data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
  124. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
  125. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
  126. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
  127. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
  128. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
  129. data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
  130. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
  131. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
  132. data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
  133. data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
  134. data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
  135. data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
  136. data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
  137. data/spec/integration/git/rugged/cache_spec.rb +0 -33
  138. data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
  139. data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
  140. data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
  141. data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
  142. data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
  143. data/spec/integration/git/stateful_repository_spec.rb +0 -175
  144. data/spec/integration/util/purageable_spec.rb +0 -41
  145. data/spec/matchers/exit_with.rb +0 -28
  146. data/spec/matchers/match_realpath.rb +0 -18
  147. data/spec/r10k-mocks/mock_config.rb +0 -33
  148. data/spec/r10k-mocks/mock_env.rb +0 -18
  149. data/spec/r10k-mocks/mock_source.rb +0 -17
  150. data/spec/r10k-mocks.rb +0 -3
  151. data/spec/shared-contexts/git-fixtures.rb +0 -55
  152. data/spec/shared-contexts/tarball.rb +0 -32
  153. data/spec/shared-examples/deploy-actions.rb +0 -69
  154. data/spec/shared-examples/git/bare_repository.rb +0 -132
  155. data/spec/shared-examples/git/thin_repository.rb +0 -26
  156. data/spec/shared-examples/git/working_repository.rb +0 -207
  157. data/spec/shared-examples/git-repository.rb +0 -38
  158. data/spec/shared-examples/puppetfile-action.rb +0 -39
  159. data/spec/shared-examples/settings/ancestry.rb +0 -44
  160. data/spec/shared-examples/subprocess-runner.rb +0 -89
  161. data/spec/spec_helper.rb +0 -41
  162. data/spec/unit/action/cri_runner_spec.rb +0 -72
  163. data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
  164. data/spec/unit/action/deploy/display_spec.rb +0 -61
  165. data/spec/unit/action/deploy/environment_spec.rb +0 -640
  166. data/spec/unit/action/deploy/module_spec.rb +0 -476
  167. data/spec/unit/action/puppetfile/check_spec.rb +0 -53
  168. data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
  169. data/spec/unit/action/puppetfile/install_spec.rb +0 -112
  170. data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
  171. data/spec/unit/action/runner_spec.rb +0 -407
  172. data/spec/unit/action/visitor_spec.rb +0 -39
  173. data/spec/unit/cli_spec.rb +0 -9
  174. data/spec/unit/deployment/config_spec.rb +0 -33
  175. data/spec/unit/deployment_spec.rb +0 -162
  176. data/spec/unit/environment/bare_spec.rb +0 -13
  177. data/spec/unit/environment/base_spec.rb +0 -122
  178. data/spec/unit/environment/git_spec.rb +0 -114
  179. data/spec/unit/environment/name_spec.rb +0 -181
  180. data/spec/unit/environment/plain_spec.rb +0 -8
  181. data/spec/unit/environment/svn_spec.rb +0 -146
  182. data/spec/unit/environment/tarball_spec.rb +0 -45
  183. data/spec/unit/environment/with_modules_spec.rb +0 -122
  184. data/spec/unit/errors/formatting_spec.rb +0 -84
  185. data/spec/unit/feature_spec.rb +0 -50
  186. data/spec/unit/forge/module_release_spec.rb +0 -213
  187. data/spec/unit/git/alternates_spec.rb +0 -116
  188. data/spec/unit/git/cache_spec.rb +0 -66
  189. data/spec/unit/git/rugged/cache_spec.rb +0 -48
  190. data/spec/unit/git/rugged/credentials_spec.rb +0 -215
  191. data/spec/unit/git/shellgit/cache_spec.rb +0 -27
  192. data/spec/unit/git/stateful_repository_spec.rb +0 -45
  193. data/spec/unit/git_spec.rb +0 -102
  194. data/spec/unit/initializers_spec.rb +0 -68
  195. data/spec/unit/instance_cache_spec.rb +0 -78
  196. data/spec/unit/keyed_factory_spec.rb +0 -51
  197. data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
  198. data/spec/unit/logging_spec.rb +0 -68
  199. data/spec/unit/module/base_spec.rb +0 -118
  200. data/spec/unit/module/forge_spec.rb +0 -271
  201. data/spec/unit/module/git_spec.rb +0 -387
  202. data/spec/unit/module/metadata_file_spec.rb +0 -68
  203. data/spec/unit/module/svn_spec.rb +0 -208
  204. data/spec/unit/module/tarball_spec.rb +0 -70
  205. data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
  206. data/spec/unit/module_spec.rb +0 -114
  207. data/spec/unit/puppetfile_spec.rb +0 -304
  208. data/spec/unit/settings/collection_spec.rb +0 -123
  209. data/spec/unit/settings/container_spec.rb +0 -92
  210. data/spec/unit/settings/definition_spec.rb +0 -79
  211. data/spec/unit/settings/enum_definition_spec.rb +0 -20
  212. data/spec/unit/settings/inheritance_spec.rb +0 -38
  213. data/spec/unit/settings/list_spec.rb +0 -88
  214. data/spec/unit/settings/loader_spec.rb +0 -110
  215. data/spec/unit/settings/uri_definition_spec.rb +0 -23
  216. data/spec/unit/settings_spec.rb +0 -303
  217. data/spec/unit/source/base_spec.rb +0 -31
  218. data/spec/unit/source/exec_spec.rb +0 -81
  219. data/spec/unit/source/git_spec.rb +0 -233
  220. data/spec/unit/source/hash_spec.rb +0 -54
  221. data/spec/unit/source/svn_spec.rb +0 -196
  222. data/spec/unit/source/yaml_spec.rb +0 -42
  223. data/spec/unit/source_spec.rb +0 -10
  224. data/spec/unit/svn/remote_spec.rb +0 -21
  225. data/spec/unit/svn/working_dir_spec.rb +0 -56
  226. data/spec/unit/tarball_spec.rb +0 -57
  227. data/spec/unit/util/attempt_spec.rb +0 -82
  228. data/spec/unit/util/cacheable_spec.rb +0 -23
  229. data/spec/unit/util/commands_spec.rb +0 -61
  230. data/spec/unit/util/downloader_spec.rb +0 -98
  231. data/spec/unit/util/exec_env_spec.rb +0 -56
  232. data/spec/unit/util/purgeable_spec.rb +0 -267
  233. data/spec/unit/util/setopts_spec.rb +0 -83
  234. data/spec/unit/util/subprocess/result_spec.rb +0 -36
  235. data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
  236. data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
  237. data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
  238. data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
  239. data/spec/unit/util/subprocess_spec.rb +0 -65
  240. 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 => 'https://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 'https://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