r10k 3.5.2

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 (358) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +1 -0
  3. data/.github/pull_request_template.md +1 -0
  4. data/.github/workflows/docker.yml +56 -0
  5. data/.github/workflows/release.yml +36 -0
  6. data/.gitignore +9 -0
  7. data/.travis.yml +45 -0
  8. data/CHANGELOG.mkd +1759 -0
  9. data/CODEOWNERS +2 -0
  10. data/CONTRIBUTING.mkd +105 -0
  11. data/Gemfile +15 -0
  12. data/LICENSE +14 -0
  13. data/README.mkd +118 -0
  14. data/Rakefile +3 -0
  15. data/azure-pipelines.yml +86 -0
  16. data/bin/r10k +17 -0
  17. data/doc/common-patterns.mkd +44 -0
  18. data/doc/dynamic-environments.mkd +31 -0
  19. data/doc/dynamic-environments/configuration.mkd +669 -0
  20. data/doc/dynamic-environments/git-environments.mkd +75 -0
  21. data/doc/dynamic-environments/introduction.mkd +69 -0
  22. data/doc/dynamic-environments/master-configuration.mkd +40 -0
  23. data/doc/dynamic-environments/quickstart.mkd +201 -0
  24. data/doc/dynamic-environments/svn-environments.mkd +45 -0
  25. data/doc/dynamic-environments/usage.mkd +132 -0
  26. data/doc/dynamic-environments/workflow-guide.mkd +247 -0
  27. data/doc/faq.mkd +164 -0
  28. data/doc/git/cloning-and-mirroring.mkd +60 -0
  29. data/doc/git/providers.mkd +111 -0
  30. data/doc/puppetfile.mkd +309 -0
  31. data/doc/updating-your-puppetfile.mkd +38 -0
  32. data/docker/.gitignore +1 -0
  33. data/docker/.rspec +4 -0
  34. data/docker/Gemfile +11 -0
  35. data/docker/Makefile +89 -0
  36. data/docker/README.md +28 -0
  37. data/docker/r10k/Dockerfile +67 -0
  38. data/docker/r10k/adduser.sh +13 -0
  39. data/docker/r10k/docker-entrypoint.d/10-analytics.sh +30 -0
  40. data/docker/r10k/docker-entrypoint.sh +11 -0
  41. data/docker/r10k/release.Dockerfile +54 -0
  42. data/docker/spec/dockerfile_spec.rb +43 -0
  43. data/docker/spec/fixtures/Puppetfile +2 -0
  44. data/integration/Gemfile +19 -0
  45. data/integration/README.mkd +29 -0
  46. data/integration/Rakefile +77 -0
  47. data/integration/component/pre-suite/05_install_dev_r10k.rb +12 -0
  48. data/integration/files/README.mkd +4 -0
  49. data/integration/files/hiera.yaml +8 -0
  50. data/integration/files/modules/helloworld/manifests/init.pp +3 -0
  51. data/integration/files/modules/hieratest/manifests/init.pp +3 -0
  52. data/integration/files/modules/unicode/files/pretend_unicode +1 -0
  53. data/integration/files/modules/unicode/manifests/init.pp +6 -0
  54. data/integration/files/pre-suite/git_config.pp.erb +19 -0
  55. data/integration/files/pre-suite/prod_env.config +3 -0
  56. data/integration/files/r10k_conf.yaml.erb +9 -0
  57. data/integration/lib/README.mkd +4 -0
  58. data/integration/lib/git_utils.rb +205 -0
  59. data/integration/lib/master_manipulator.rb +205 -0
  60. data/integration/lib/r10k_utils.rb +222 -0
  61. data/integration/manifests/README.mkd +4 -0
  62. data/integration/pre-suite/00_pe_install.rb +6 -0
  63. data/integration/pre-suite/10_git_config.rb +48 -0
  64. data/integration/pre-suite/20_pe_r10k.rb +55 -0
  65. data/integration/pre-suite/README.mkd +5 -0
  66. data/integration/tests/Puppetfile/HTTP_PROXY_affects_forge_source.rb +72 -0
  67. data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +70 -0
  68. data/integration/tests/README.mkd +4 -0
  69. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +83 -0
  70. data/integration/tests/basic_functionality/negative/neg_deploy_with_invalid_r10k_yaml.rb +51 -0
  71. data/integration/tests/basic_functionality/negative/neg_deploy_with_missing_r10k_yaml.rb +28 -0
  72. data/integration/tests/basic_functionality/negative/neg_invalid_git_provider.rb +45 -0
  73. data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +34 -0
  74. data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +103 -0
  75. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +128 -0
  76. data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +61 -0
  77. data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +109 -0
  78. data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +108 -0
  79. data/integration/tests/command_line/deploy_env_without_mod_update.rb +76 -0
  80. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +77 -0
  81. data/integration/tests/command_line/negative/neg_invalid_cmd_line_arg.rb +23 -0
  82. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +70 -0
  83. data/integration/tests/git_source/git_source_git.rb +128 -0
  84. data/integration/tests/git_source/git_source_ssh.rb +87 -0
  85. data/integration/tests/git_source/git_source_submodule.rb +70 -0
  86. data/integration/tests/git_source/negative/neg_git_broken_remote.rb +38 -0
  87. data/integration/tests/git_source/negative/neg_git_unauthorized_https.rb +46 -0
  88. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +73 -0
  89. data/integration/tests/git_source/negative/neg_git_unicode_branch.rb +35 -0
  90. data/integration/tests/i18n/deploy_module_with_unicode_in_file_name.rb +64 -0
  91. data/integration/tests/purging/content_not_purged_at_root.rb +89 -0
  92. data/integration/tests/purging/default_purging.rb +125 -0
  93. data/integration/tests/purging/does_not_purge_files_on_white_list.rb +93 -0
  94. data/integration/tests/purging/invalid_whitelist_types.rb +63 -0
  95. data/integration/tests/user_scenario/basic_workflow/multi_env_1000_branches.rb +66 -0
  96. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +111 -0
  97. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +117 -0
  98. data/integration/tests/user_scenario/basic_workflow/multi_env_hiera.rb +100 -0
  99. data/integration/tests/user_scenario/basic_workflow/multi_env_multi_source.rb +133 -0
  100. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +161 -0
  101. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_basedir.rb +46 -0
  102. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +48 -0
  103. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +45 -0
  104. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +43 -0
  105. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_remote.rb +45 -0
  106. data/integration/tests/user_scenario/basic_workflow/negative/neg_branch_name_collision.rb +64 -0
  107. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +75 -0
  108. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +44 -0
  109. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +58 -0
  110. data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_env_name.rb +34 -0
  111. data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_puppet_file.rb +36 -0
  112. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +49 -0
  113. data/integration/tests/user_scenario/basic_workflow/negative/neg_read_only.rb +58 -0
  114. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +51 -0
  115. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +75 -0
  116. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +104 -0
  117. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +81 -0
  118. data/integration/tests/user_scenario/basic_workflow/single_env_custom_module.rb +49 -0
  119. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +75 -0
  120. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +82 -0
  121. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +68 -0
  122. data/integration/tests/user_scenario/basic_workflow/single_env_non-existent_base_dir.rb +94 -0
  123. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +93 -0
  124. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +117 -0
  125. data/integration/tests/user_scenario/basic_workflow/single_env_unicode_paths.rb +60 -0
  126. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +166 -0
  127. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +163 -0
  128. data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +111 -0
  129. data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +78 -0
  130. data/integration/tests/user_scenario/complex_workflow/single_env_git_module_update.rb +100 -0
  131. data/lib/r10k.rb +11 -0
  132. data/lib/r10k/action/base.rb +31 -0
  133. data/lib/r10k/action/cri_runner.rb +72 -0
  134. data/lib/r10k/action/deploy.rb +9 -0
  135. data/lib/r10k/action/deploy/deploy_helpers.rb +34 -0
  136. data/lib/r10k/action/deploy/display.rb +89 -0
  137. data/lib/r10k/action/deploy/environment.rb +196 -0
  138. data/lib/r10k/action/deploy/module.rb +84 -0
  139. data/lib/r10k/action/puppetfile.rb +10 -0
  140. data/lib/r10k/action/puppetfile/check.rb +31 -0
  141. data/lib/r10k/action/puppetfile/cri_runner.rb +26 -0
  142. data/lib/r10k/action/puppetfile/install.rb +45 -0
  143. data/lib/r10k/action/puppetfile/purge.rb +28 -0
  144. data/lib/r10k/action/runner.rb +96 -0
  145. data/lib/r10k/action/visitor.rb +31 -0
  146. data/lib/r10k/cli.rb +51 -0
  147. data/lib/r10k/cli/deploy.rb +114 -0
  148. data/lib/r10k/cli/ext/logging.rb +15 -0
  149. data/lib/r10k/cli/help.rb +7 -0
  150. data/lib/r10k/cli/puppetfile.rb +74 -0
  151. data/lib/r10k/cli/version.rb +31 -0
  152. data/lib/r10k/deployment.rb +132 -0
  153. data/lib/r10k/deployment/config.rb +56 -0
  154. data/lib/r10k/environment.rb +37 -0
  155. data/lib/r10k/environment/bare.rb +16 -0
  156. data/lib/r10k/environment/base.rb +150 -0
  157. data/lib/r10k/environment/git.rb +81 -0
  158. data/lib/r10k/environment/name.rb +86 -0
  159. data/lib/r10k/environment/svn.rb +91 -0
  160. data/lib/r10k/environment/with_modules.rb +139 -0
  161. data/lib/r10k/errors.rb +61 -0
  162. data/lib/r10k/errors/formatting.rb +28 -0
  163. data/lib/r10k/feature.rb +56 -0
  164. data/lib/r10k/feature/collection.rb +23 -0
  165. data/lib/r10k/features.rb +20 -0
  166. data/lib/r10k/forge/module_release.rb +228 -0
  167. data/lib/r10k/git.rb +196 -0
  168. data/lib/r10k/git/alternates.rb +63 -0
  169. data/lib/r10k/git/cache.rb +108 -0
  170. data/lib/r10k/git/errors.rb +34 -0
  171. data/lib/r10k/git/rugged.rb +17 -0
  172. data/lib/r10k/git/rugged/bare_repository.rb +85 -0
  173. data/lib/r10k/git/rugged/base_repository.rb +93 -0
  174. data/lib/r10k/git/rugged/cache.rb +11 -0
  175. data/lib/r10k/git/rugged/credentials.rb +91 -0
  176. data/lib/r10k/git/rugged/thin_repository.rb +89 -0
  177. data/lib/r10k/git/rugged/working_repository.rb +145 -0
  178. data/lib/r10k/git/shellgit.rb +9 -0
  179. data/lib/r10k/git/shellgit/bare_repository.rb +43 -0
  180. data/lib/r10k/git/shellgit/base_repository.rb +137 -0
  181. data/lib/r10k/git/shellgit/cache.rb +11 -0
  182. data/lib/r10k/git/shellgit/thin_repository.rb +69 -0
  183. data/lib/r10k/git/shellgit/working_repository.rb +111 -0
  184. data/lib/r10k/git/stateful_repository.rb +95 -0
  185. data/lib/r10k/initializers.rb +67 -0
  186. data/lib/r10k/instance_cache.rb +32 -0
  187. data/lib/r10k/keyed_factory.rb +39 -0
  188. data/lib/r10k/logging.rb +109 -0
  189. data/lib/r10k/logging/terminaloutputter.rb +36 -0
  190. data/lib/r10k/module.rb +38 -0
  191. data/lib/r10k/module/base.rb +113 -0
  192. data/lib/r10k/module/forge.rb +177 -0
  193. data/lib/r10k/module/git.rb +109 -0
  194. data/lib/r10k/module/local.rb +36 -0
  195. data/lib/r10k/module/metadata_file.rb +31 -0
  196. data/lib/r10k/module/svn.rb +112 -0
  197. data/lib/r10k/puppetfile.rb +286 -0
  198. data/lib/r10k/settings.rb +194 -0
  199. data/lib/r10k/settings/collection.rb +123 -0
  200. data/lib/r10k/settings/container.rb +97 -0
  201. data/lib/r10k/settings/definition.rb +124 -0
  202. data/lib/r10k/settings/enum_definition.rb +30 -0
  203. data/lib/r10k/settings/helpers.rb +38 -0
  204. data/lib/r10k/settings/list.rb +107 -0
  205. data/lib/r10k/settings/loader.rb +99 -0
  206. data/lib/r10k/settings/mixin.rb +54 -0
  207. data/lib/r10k/settings/uri_definition.rb +19 -0
  208. data/lib/r10k/source.rb +42 -0
  209. data/lib/r10k/source/base.rb +74 -0
  210. data/lib/r10k/source/exec.rb +51 -0
  211. data/lib/r10k/source/git.rb +142 -0
  212. data/lib/r10k/source/hash.rb +182 -0
  213. data/lib/r10k/source/svn.rb +136 -0
  214. data/lib/r10k/source/yaml.rb +20 -0
  215. data/lib/r10k/source/yamldir.rb +32 -0
  216. data/lib/r10k/svn.rb +6 -0
  217. data/lib/r10k/svn/remote.rb +68 -0
  218. data/lib/r10k/svn/working_dir.rb +125 -0
  219. data/lib/r10k/util/attempt.rb +84 -0
  220. data/lib/r10k/util/basedir.rb +65 -0
  221. data/lib/r10k/util/commands.rb +31 -0
  222. data/lib/r10k/util/exec_env.rb +36 -0
  223. data/lib/r10k/util/license.rb +24 -0
  224. data/lib/r10k/util/platform.rb +42 -0
  225. data/lib/r10k/util/purgeable.rb +88 -0
  226. data/lib/r10k/util/setopts.rb +55 -0
  227. data/lib/r10k/util/subprocess.rb +84 -0
  228. data/lib/r10k/util/subprocess/result.rb +56 -0
  229. data/lib/r10k/util/subprocess/runner.rb +26 -0
  230. data/lib/r10k/util/subprocess/runner/jruby.rb +23 -0
  231. data/lib/r10k/util/subprocess/runner/posix.rb +103 -0
  232. data/lib/r10k/util/subprocess/runner/pump.rb +59 -0
  233. data/lib/r10k/util/subprocess/runner/windows.rb +23 -0
  234. data/lib/r10k/util/subprocess/subprocess_error.rb +24 -0
  235. data/lib/r10k/util/symbolize_keys.rb +35 -0
  236. data/lib/r10k/version.rb +6 -0
  237. data/locales/config.yaml +21 -0
  238. data/locales/r10k.pot +545 -0
  239. data/r10k.gemspec +50 -0
  240. data/r10k.yaml.example +112 -0
  241. data/spec/fixtures/empty/.empty +0 -0
  242. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  243. data/spec/fixtures/module/forge/bad_module/metadata.json +1 -0
  244. data/spec/fixtures/module/forge/eight_hundred/Modulefile +8 -0
  245. data/spec/fixtures/module/forge/eight_hundred/metadata.json +19 -0
  246. data/spec/fixtures/unit/action/r10k.yaml +5 -0
  247. data/spec/fixtures/unit/action/r10k_cachedir.yaml +2 -0
  248. data/spec/fixtures/unit/action/r10k_generate_types.yaml +3 -0
  249. data/spec/fixtures/unit/action/r10k_puppet_path.yaml +3 -0
  250. data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +1 -0
  251. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +5 -0
  252. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +10 -0
  253. data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +1 -0
  254. data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +1 -0
  255. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +1 -0
  256. data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +1 -0
  257. data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +1 -0
  258. data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
  259. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
  260. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
  261. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
  262. data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
  263. data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
  264. data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +3 -0
  265. data/spec/integration/git/rugged/bare_repository_spec.rb +13 -0
  266. data/spec/integration/git/rugged/thin_repository_spec.rb +14 -0
  267. data/spec/integration/git/rugged/working_repository_spec.rb +48 -0
  268. data/spec/integration/git/shellgit/bare_repository_spec.rb +13 -0
  269. data/spec/integration/git/shellgit/thin_repository_spec.rb +14 -0
  270. data/spec/integration/git/shellgit/working_repository_spec.rb +13 -0
  271. data/spec/integration/git/stateful_repository_spec.rb +159 -0
  272. data/spec/matchers/exit_with.rb +28 -0
  273. data/spec/matchers/match_realpath.rb +18 -0
  274. data/spec/r10k-mocks.rb +3 -0
  275. data/spec/r10k-mocks/mock_config.rb +33 -0
  276. data/spec/r10k-mocks/mock_env.rb +15 -0
  277. data/spec/r10k-mocks/mock_source.rb +13 -0
  278. data/spec/shared-contexts/git-fixtures.rb +55 -0
  279. data/spec/shared-examples/deploy-actions.rb +69 -0
  280. data/spec/shared-examples/git-repository.rb +38 -0
  281. data/spec/shared-examples/git/bare_repository.rb +132 -0
  282. data/spec/shared-examples/git/thin_repository.rb +26 -0
  283. data/spec/shared-examples/git/working_repository.rb +207 -0
  284. data/spec/shared-examples/puppetfile-action.rb +39 -0
  285. data/spec/shared-examples/settings/ancestry.rb +44 -0
  286. data/spec/shared-examples/subprocess-runner.rb +83 -0
  287. data/spec/spec_helper.rb +40 -0
  288. data/spec/unit/action/cri_runner_spec.rb +72 -0
  289. data/spec/unit/action/deploy/deploy_helpers_spec.rb +38 -0
  290. data/spec/unit/action/deploy/display_spec.rb +31 -0
  291. data/spec/unit/action/deploy/environment_spec.rb +395 -0
  292. data/spec/unit/action/deploy/module_spec.rb +139 -0
  293. data/spec/unit/action/puppetfile/check_spec.rb +41 -0
  294. data/spec/unit/action/puppetfile/cri_runner_spec.rb +47 -0
  295. data/spec/unit/action/puppetfile/install_spec.rb +84 -0
  296. data/spec/unit/action/puppetfile/purge_spec.rb +42 -0
  297. data/spec/unit/action/runner_spec.rb +213 -0
  298. data/spec/unit/action/visitor_spec.rb +39 -0
  299. data/spec/unit/cli_spec.rb +9 -0
  300. data/spec/unit/deployment/config_spec.rb +33 -0
  301. data/spec/unit/deployment_spec.rb +162 -0
  302. data/spec/unit/environment/base_spec.rb +109 -0
  303. data/spec/unit/environment/git_spec.rb +97 -0
  304. data/spec/unit/environment/name_spec.rb +135 -0
  305. data/spec/unit/environment/svn_spec.rb +133 -0
  306. data/spec/unit/errors/formatting_spec.rb +84 -0
  307. data/spec/unit/feature_spec.rb +50 -0
  308. data/spec/unit/forge/module_release_spec.rb +213 -0
  309. data/spec/unit/git/alternates_spec.rb +116 -0
  310. data/spec/unit/git/cache_spec.rb +55 -0
  311. data/spec/unit/git/rugged/cache_spec.rb +29 -0
  312. data/spec/unit/git/rugged/credentials_spec.rb +109 -0
  313. data/spec/unit/git/shellgit/cache_spec.rb +27 -0
  314. data/spec/unit/git/stateful_repository_spec.rb +40 -0
  315. data/spec/unit/git_spec.rb +102 -0
  316. data/spec/unit/initializers_spec.rb +68 -0
  317. data/spec/unit/instance_cache_spec.rb +78 -0
  318. data/spec/unit/keyed_factory_spec.rb +51 -0
  319. data/spec/unit/logging/terminaloutputter_spec.rb +53 -0
  320. data/spec/unit/logging_spec.rb +68 -0
  321. data/spec/unit/module/base_spec.rb +72 -0
  322. data/spec/unit/module/forge_spec.rb +207 -0
  323. data/spec/unit/module/git_spec.rb +274 -0
  324. data/spec/unit/module/metadata_file_spec.rb +68 -0
  325. data/spec/unit/module/svn_spec.rb +178 -0
  326. data/spec/unit/module_spec.rb +29 -0
  327. data/spec/unit/puppetfile_spec.rb +300 -0
  328. data/spec/unit/settings/collection_spec.rb +123 -0
  329. data/spec/unit/settings/container_spec.rb +92 -0
  330. data/spec/unit/settings/definition_spec.rb +79 -0
  331. data/spec/unit/settings/enum_definition_spec.rb +20 -0
  332. data/spec/unit/settings/inheritance_spec.rb +38 -0
  333. data/spec/unit/settings/list_spec.rb +88 -0
  334. data/spec/unit/settings/loader_spec.rb +110 -0
  335. data/spec/unit/settings/uri_definition_spec.rb +23 -0
  336. data/spec/unit/settings_spec.rb +246 -0
  337. data/spec/unit/source/base_spec.rb +31 -0
  338. data/spec/unit/source/exec_spec.rb +81 -0
  339. data/spec/unit/source/git_spec.rb +185 -0
  340. data/spec/unit/source/hash_spec.rb +54 -0
  341. data/spec/unit/source/svn_spec.rb +196 -0
  342. data/spec/unit/source/yaml_spec.rb +42 -0
  343. data/spec/unit/source_spec.rb +10 -0
  344. data/spec/unit/svn/remote_spec.rb +21 -0
  345. data/spec/unit/svn/working_dir_spec.rb +56 -0
  346. data/spec/unit/util/attempt_spec.rb +82 -0
  347. data/spec/unit/util/commands_spec.rb +61 -0
  348. data/spec/unit/util/exec_env_spec.rb +56 -0
  349. data/spec/unit/util/purgeable_spec.rb +230 -0
  350. data/spec/unit/util/setopts_spec.rb +59 -0
  351. data/spec/unit/util/subprocess/result_spec.rb +36 -0
  352. data/spec/unit/util/subprocess/runner/posix_spec.rb +7 -0
  353. data/spec/unit/util/subprocess/runner/pump_spec.rb +79 -0
  354. data/spec/unit/util/subprocess/runner/windows_spec.rb +7 -0
  355. data/spec/unit/util/subprocess/subprocess_error_spec.rb +26 -0
  356. data/spec/unit/util/subprocess_spec.rb +65 -0
  357. data/spec/unit/util/symbolize_keys_spec.rb +67 -0
  358. metadata +582 -0
@@ -0,0 +1,75 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ test_name 'CODEMGMT-86 - C59265 - Attempt to Deploy Environment to Disk with Insufficient Free Space'
4
+
5
+ if fact_on(master, 'osfamily') == 'RedHat' and fact_on(master, "operatingsystemmajrelease").to_i < 6
6
+ skip_test('This version of EL is not supported by this test case!')
7
+ end
8
+
9
+ #Init
10
+ git_repo_path = '/git_repos'
11
+ git_repo_name = 'environments'
12
+ git_control_remote = File.join(git_repo_path, "#{git_repo_name}.git")
13
+ git_environments_path = '/root/environments'
14
+ last_commit = git_last_commit(master, git_environments_path)
15
+ git_provider = ENV['GIT_PROVIDER'] || 'shellgit'
16
+ r10k_fqp = get_r10k_fqp(master)
17
+
18
+ r10k_config_path = get_r10k_config_file_path(master)
19
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
20
+
21
+ tmpfs_path = '/mnt/tmpfs'
22
+
23
+ test_files_path = File.join(git_environments_path, 'test_files')
24
+
25
+ #In-line files
26
+ r10k_conf = <<-CONF
27
+ cachedir: '/var/cache/r10k'
28
+ git:
29
+ provider: '#{git_provider}'
30
+ sources:
31
+ broken:
32
+ basedir: "#{tmpfs_path}"
33
+ remote: "#{git_control_remote}"
34
+ CONF
35
+
36
+ #Verification
37
+ error_message_regex = /ERROR.*No space left on device/m
38
+
39
+ #Teardown
40
+ teardown do
41
+ step 'Restore Original "r10k" Config'
42
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
43
+
44
+ step 'Unmount and Destroy TMP File System'
45
+ on(master, "umount #{tmpfs_path}")
46
+ on(master, "rm -rf #{tmpfs_path}")
47
+
48
+ clean_up_r10k(master, last_commit, git_environments_path)
49
+ end
50
+
51
+ #Setup
52
+ step 'Backup Current "r10k" Config'
53
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
54
+
55
+ step 'Update the "r10k" Config'
56
+ create_remote_file(master, r10k_config_path, r10k_conf)
57
+
58
+ step 'Create TMP File System and Mount'
59
+ on(master, "mkdir -p #{tmpfs_path}")
60
+ on(master, "mount -osize=10m tmpfs #{tmpfs_path} -t tmpfs")
61
+
62
+ step 'Create Large Binary File'
63
+ create_remote_file(master, File.join(git_environments_path, '.gitattributes'), '*.file binary')
64
+ on(master, "mkdir -p #{test_files_path}")
65
+ # create a 11 mb file to fill the mount
66
+ on(master, "dd if=/dev/urandom of=#{test_files_path}.test.file bs=1048576 count=11")
67
+
68
+ step 'Push Changes'
69
+ git_add_commit_push(master, 'production', 'Add large file.', git_environments_path)
70
+
71
+ #Tests
72
+ step 'Attempt to Deploy via r10k'
73
+ on(master, "#{r10k_fqp} deploy environment", :acceptable_exit_codes => 1) do |result|
74
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
75
+ end
@@ -0,0 +1,44 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-63 - C59258 - Attempt to Deploy Environment with Duplicate Module Names'
5
+
6
+ #Init
7
+ git_environments_path = '/root/environments'
8
+ last_commit = git_last_commit(master, git_environments_path)
9
+ r10k_fqp = get_r10k_fqp(master)
10
+
11
+ #Verification
12
+ deploy_str = %r[Deploying module /etc/puppetlabs/code/environments/production/modules/motd]
13
+
14
+ #File
15
+ puppet_file = <<-PUPPETFILE
16
+ mod "puppetlabs/motd"
17
+ mod "jeffmccune/motd"
18
+ PUPPETFILE
19
+
20
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
21
+
22
+ #Teardown
23
+ teardown do
24
+ clean_up_r10k(master, last_commit, git_environments_path)
25
+ end
26
+
27
+ #Setup
28
+ step 'Stub Forge on Master'
29
+ stub_forge_on(master)
30
+
31
+ step 'Checkout "production" Branch'
32
+ git_on(master, 'checkout production', git_environments_path)
33
+
34
+ step 'Create "Puppetfile" for the "production" Environment'
35
+ create_remote_file(master, puppet_file_path, puppet_file)
36
+
37
+ step 'Push Changes'
38
+ git_add_commit_push(master, 'production', 'Add modules.', git_environments_path)
39
+
40
+ #Tests
41
+ step 'Attempt to Deploy via r10k'
42
+ on(master, "#{r10k_fqp} deploy environment -v -p", :acceptable_exit_codes => [0, 1]) do |result|
43
+ assert_equal(1, result.exit_code, "Expected command to indicate error with exit code")
44
+ end
@@ -0,0 +1,58 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-42 - C59256 - Attempt to Deploy Environment with Inaccessible Forge'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ git_environments_path = '/root/environments'
9
+ last_commit = git_last_commit(master, git_environments_path)
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ hosts_file_path = '/etc/hosts'
13
+
14
+ #File
15
+ puppet_file = <<-PUPPETFILE
16
+ mod "puppetlabs/motd"
17
+ PUPPETFILE
18
+
19
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
20
+
21
+ #Verification
22
+ error_message_regex = /Error: Could not connect via HTTPS to https:\/\/forgeapi.puppetlabs.com/
23
+
24
+ #Teardown
25
+ teardown do
26
+ clean_up_r10k(master, last_commit, git_environments_path)
27
+
28
+ step 'Restore Original Hosts File'
29
+ on(master, "mv #{hosts_file_path}.bak #{hosts_file_path}")
30
+ end
31
+
32
+ #Setup
33
+ step 'Backup "/etc/hosts" File on Master'
34
+ on(master, "mv #{hosts_file_path} #{hosts_file_path}.bak")
35
+
36
+ step 'Point Forge Hostname to Localhost'
37
+ on(master, "echo '127.0.0.1 forgeapi.puppetlabs.com' > #{hosts_file_path}")
38
+
39
+ step 'Checkout "production" Branch'
40
+ git_on(master, 'checkout production', git_environments_path)
41
+
42
+ step 'Create "Puppetfile" for the "production" Environment'
43
+ create_remote_file(master, puppet_file_path, puppet_file)
44
+
45
+ step 'Push Changes'
46
+ git_add_commit_push(master, 'production', 'Update Puppetfile.', git_environments_path)
47
+
48
+ #Tests
49
+ step 'Attempt to Deploy via r10k'
50
+ on(master, "#{r10k_fqp} deploy environment -v -p", :acceptable_exit_codes => 1) do |result|
51
+ if get_puppet_version(master) > 4.0
52
+ expect_failure('expected to fail due to RK-134') do
53
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
54
+ end
55
+ else
56
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
57
+ end
58
+ end
@@ -0,0 +1,34 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-63 - C62511 - Attempt to Deploy Environment Containing Invalid Character in Name'
5
+
6
+ #Init
7
+ git_environments_path = '/root/environments'
8
+ last_commit = git_last_commit(master, git_environments_path)
9
+ invalid_env_name = 'should-not-contain-dashes'
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ #Verification
13
+ error_message_regex = /ERROR\]/
14
+
15
+ #Teardown
16
+ teardown do
17
+ clean_up_r10k(master, last_commit, git_environments_path)
18
+ end
19
+
20
+ #Setup
21
+ step "Create \"#{invalid_env_name}\" Branch from \"production\""
22
+ git_on(master, 'checkout production', git_environments_path)
23
+ git_on(master, "checkout -b #{invalid_env_name}", git_environments_path)
24
+
25
+ step "Push Changes to \"#{invalid_env_name}\" Environment"
26
+ git_push(master, invalid_env_name, git_environments_path)
27
+
28
+ #Tests
29
+ step 'Attempt to Deploy via r10k'
30
+ on(master, "#{r10k_fqp} deploy environment -v") do |result|
31
+ expect_failure('Expected to fail due to CODEMGMT-65') do
32
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ test_name 'CODEMGMT-86 - C63185 - Attempt to Deploy Environment with Invalid Puppetfile'
4
+
5
+ #Init
6
+ git_environments_path = '/root/environments'
7
+ last_commit = git_last_commit(master, git_environments_path)
8
+ r10k_fqp = get_r10k_fqp(master)
9
+
10
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
11
+
12
+ #In-line files
13
+ puppet_file = <<-PUPPETFILE
14
+ - modulo 'puppetlabs/motd",,
15
+ PUPPETFILE
16
+
17
+ #Verification
18
+ error_message_regex = /ERROR.*Failed to evaluate/m
19
+
20
+ #Teardown
21
+ teardown do
22
+ clean_up_r10k(master, last_commit, git_environments_path)
23
+ end
24
+
25
+ #Setup
26
+ step 'Create "Puppetfile" for the "production" Environment'
27
+ create_remote_file(master, puppet_file_path, puppet_file)
28
+
29
+ step 'Push Changes'
30
+ git_add_commit_push(master, 'production', 'Update Puppetfile.', git_environments_path)
31
+
32
+ #Tests
33
+ step 'Attempt to Deploy via r10k'
34
+ on(master, "#{r10k_fqp} deploy environment -v -p", :acceptable_exit_codes => 1) do |result|
35
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
36
+ end
@@ -0,0 +1,49 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ test_name 'CODEMGMT-127 - C64121 - Attempt to Deploy Environment with Forge Module Specified at Deleted Release'
4
+
5
+ #This test uses the spotty module at https://forge-aio01-petest.puppetlabs.com//puppetlabs/spotty, with valid released 0.1.0 and 0.3.0 versions, and deleted 0.2.0 and 0.4.0 versions.
6
+
7
+ #Init
8
+ git_environments_path = '/root/environments'
9
+ last_commit = git_last_commit(master, git_environments_path)
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ #Verification
13
+ if get_puppet_version(master) < 4.0
14
+ error_notification_regex = /No releases matching '0.2.0'/
15
+ else
16
+ error_notification_regex = /error.* -> The module release puppetlabs-spotty-0.2.0 does not exist on/i
17
+ end
18
+
19
+ #File
20
+ puppet_file = <<-PUPPETFILE
21
+ mod "puppetlabs/spotty", '0.2.0'
22
+ PUPPETFILE
23
+
24
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
25
+
26
+ #Teardown
27
+ teardown do
28
+ clean_up_r10k(master, last_commit, git_environments_path)
29
+ end
30
+
31
+ #Setup
32
+ step 'Stub Forge on Master'
33
+ stub_forge_on(master)
34
+
35
+ #Tests
36
+ step 'Checkout "production" Branch'
37
+ git_on(master, 'checkout production', git_environments_path)
38
+
39
+ step 'Create "Puppetfile" for the "production" Environment'
40
+ create_remote_file(master, puppet_file_path, puppet_file)
41
+
42
+ step 'Push Changes'
43
+ git_add_commit_push(master, 'production', 'Add module.', git_environments_path)
44
+
45
+ #Tests
46
+ step "Deploy production environment via r10k with module specified at deleted version"
47
+ on(master, "#{r10k_fqp} deploy environment -p -v", :acceptable_exit_codes => 1) do |result|
48
+ assert_match(error_notification_regex, result.stderr, 'Unexpected error was detected!')
49
+ end
@@ -0,0 +1,58 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ test_name 'CODEMGMT-86 - C59266 - Attempt to Deploy Environment to Read Only Directory'
4
+
5
+ #Init
6
+ git_repo_path = '/git_repos'
7
+ git_repo_name = 'environments'
8
+ git_control_remote = File.join(git_repo_path, "#{git_repo_name}.git")
9
+ git_environments_path = '/root/environments'
10
+ last_commit = git_last_commit(master, git_environments_path)
11
+ git_provider = ENV['GIT_PROVIDER'] || 'shellgit'
12
+ r10k_fqp = get_r10k_fqp(master)
13
+
14
+ r10k_config_path = get_r10k_config_file_path(master)
15
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
16
+
17
+ tmpfs_path = '/mnt/tmpfs'
18
+
19
+ #In-line files
20
+ r10k_conf = <<-CONF
21
+ cachedir: '/var/cache/r10k'
22
+ git:
23
+ provider: '#{git_provider}'
24
+ sources:
25
+ broken:
26
+ basedir: "#{tmpfs_path}"
27
+ remote: "#{git_control_remote}"
28
+ CONF
29
+
30
+ #Verification
31
+ error_message_regex = /ERROR.*Read-only file system/m
32
+
33
+ #Teardown
34
+ teardown do
35
+ step 'Restore Original "r10k" Config'
36
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
37
+
38
+ step 'Unmount and Destroy TMP File System'
39
+ on(master, "umount #{tmpfs_path}")
40
+ on(master, "rm -rf #{tmpfs_path}")
41
+ end
42
+
43
+ #Setup
44
+ step 'Backup Current "r10k" Config'
45
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
46
+
47
+ step 'Update the "r10k" Config'
48
+ create_remote_file(master, r10k_config_path, r10k_conf)
49
+
50
+ step 'Create Read Only TMP File System and Mount'
51
+ on(master, "mkdir -p #{tmpfs_path}")
52
+ on(master, "mount -osize=10m,ro tmpfs #{tmpfs_path} -t tmpfs")
53
+
54
+ #Tests
55
+ step 'Attempt to Deploy via r10k'
56
+ on(master, "#{r10k_fqp} deploy environment", :acceptable_exit_codes => 1) do |result|
57
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
58
+ end
@@ -0,0 +1,51 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ test_name 'CODEMGMT-127 - C64288 - Attempt to Deploy Environment Specify Deleted Forge Module'
4
+
5
+ #This test uses the regret module deleted from the acceptance forge (history at https://github.com/justinstoller/puppetlabs-regret/commits/master), with versions 0.1.0 - 0.4.0 deleted, effectively deleting the module.
6
+
7
+ #Init
8
+ git_environments_path = '/root/environments'
9
+ last_commit = git_last_commit(master, git_environments_path)
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ #Verification
13
+ error_notification_regex = /Does 'puppetlabs-regret' have at least one published release?/
14
+
15
+ #File
16
+ puppet_file = <<-PUPPETFILE
17
+ mod "puppetlabs/regret"
18
+ PUPPETFILE
19
+
20
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
21
+
22
+ #Teardown
23
+ teardown do
24
+ clean_up_r10k(master, last_commit, git_environments_path)
25
+ end
26
+
27
+ #Setup
28
+ step 'Stub Forge on Master'
29
+ stub_forge_on(master)
30
+
31
+ #Tests
32
+ step 'Checkout "production" Branch'
33
+ git_on(master, 'checkout production', git_environments_path)
34
+
35
+ step 'Create "Puppetfile" for the "production" Environment'
36
+ create_remote_file(master, puppet_file_path, puppet_file)
37
+
38
+ step 'Push Changes'
39
+ git_add_commit_push(master, 'production', 'Add module.', git_environments_path)
40
+
41
+ #Tests
42
+ step "Deploy production environment via r10k with specified module deleted"
43
+ on(master, "#{r10k_fqp} deploy environment -p -v", :acceptable_exit_codes => 1) do |result|
44
+ if get_puppet_version(master) < 4.0
45
+ assert_match(error_notification_regex, result.stderr, 'Unexpected error was detected!')
46
+ else
47
+ expect_failure('expected to fail due to RK-135') do
48
+ assert_match(error_notification_regex, result.stderr, 'Unexpected error was detected!')
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,75 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-62 - C59239 - Single Environment with 10,000 Files'
5
+
6
+ if fact_on(master, 'osfamily') == 'RedHat' and fact_on(master, "operatingsystemmajrelease").to_i < 6
7
+ skip_test('This version of EL is not supported by this test case!')
8
+ end
9
+
10
+ #Init
11
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
12
+ environment_path = on(master, puppet('config', 'print', 'environmentpath')).stdout.rstrip
13
+ prod_env_path = File.join(environment_path, 'production')
14
+ r10k_fqp = get_r10k_fqp(master)
15
+
16
+ git_environments_path = '/root/environments'
17
+ last_commit = git_last_commit(master, git_environments_path)
18
+ local_files_root_path = ENV['FILES'] || 'files'
19
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
20
+
21
+ test_files = 'test_files'
22
+ test_files_path = File.join(git_environments_path, test_files)
23
+
24
+ #Manifest
25
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
26
+ site_pp = create_site_pp(master_certname, ' include helloworld')
27
+
28
+ #Verification
29
+ notify_message_regex = /I am in the production environment/
30
+
31
+ checksum_file_name = 'files.md5'
32
+ prod_env_test_files_path = File.join(prod_env_path, test_files)
33
+ prod_env_checksum_file_path = File.join(prod_env_test_files_path, checksum_file_name)
34
+
35
+ #Teardown
36
+ teardown do
37
+ clean_up_r10k(master, last_commit, git_environments_path)
38
+ end
39
+
40
+ #Setup
41
+ step 'Checkout "production" Branch'
42
+ git_on(master, 'checkout production', git_environments_path)
43
+
44
+ step 'Copy "helloworld" Module to "production" Environment Git Repo'
45
+ scp_to(master, helloworld_module_path, File.join(git_environments_path, "site", 'helloworld'))
46
+
47
+ step 'Inject New "site.pp" to the "production" Environment'
48
+ inject_site_pp(master, site_pp_path, site_pp)
49
+
50
+ step 'Create 10,000 Files'
51
+ create_remote_file(master, File.join(git_environments_path, '.gitattributes'), '*.file binary')
52
+ on(master, "mkdir -p #{test_files_path}")
53
+ # create 10000 1k files with random text
54
+ on(master, "for n in {1..10000}; do dd if=/dev/urandom of=#{test_files_path}/test$( printf %03d \"$n\" ).file bs=1024 count=1; done")
55
+
56
+ step 'Create MD5 Checksum of Files'
57
+ on(master, "cd #{test_files_path};md5sum *.file > #{checksum_file_name}")
58
+
59
+ step 'Push Changes'
60
+ git_add_commit_push(master, 'production', 'Update site.pp and add module.', git_environments_path)
61
+
62
+ #Tests
63
+ step 'Deploy "production" Environment via r10k'
64
+ on(master, "#{r10k_fqp} deploy environment -v")
65
+
66
+ step 'Verify Files in "production" Environment'
67
+ on(master, "cd #{prod_env_test_files_path};md5sum -c #{prod_env_checksum_file_path}")
68
+
69
+ agents.each do |agent|
70
+ step "Run Puppet Agent"
71
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
72
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
73
+ assert_match(notify_message_regex, result.stdout, 'Expected message not found!')
74
+ end
75
+ end