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,163 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-48 - C59262 - Multiple Environments with Additions, Changes and Removal of Branches'
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
+ local_files_root_path = ENV['FILES'] || 'files'
11
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
12
+ r10k_fqp = get_r10k_fqp(master)
13
+
14
+ initial_env_names = ['production', 'stage', 'test']
15
+
16
+ #Verification for "production" Environment
17
+ motd_path = '/etc/motd'
18
+ motd_contents = 'Hello!'
19
+ motd_contents_regex = /\A#{motd_contents}\z/
20
+ prod_env_notify_message_regex = /I am in the production environment/
21
+
22
+ #Verification for "stage" Environment
23
+ stage_env_notify_message = 'This is a different message'
24
+ stage_env_notify_message_regex = /#{stage_env_notify_message}/
25
+
26
+ #Verification for "test" Environment
27
+ test_env_error_message_regex = /Error:.*Could not find environment 'test'/
28
+
29
+ #Verification for "temp" Environment
30
+ test_env_notify_message_regex = /I am in the temp environment/
31
+
32
+ #Manifest
33
+ prod_env_motd_manifest = <<-MANIFEST
34
+ class { 'helloworld': }
35
+ class { 'motd':
36
+ content => '#{motd_contents}',
37
+ }
38
+ MANIFEST
39
+
40
+ stage_env_custom_mod_manifest = <<-MANIFEST
41
+ class helloworld {
42
+ notify { "Hello world!":
43
+ message => "#{stage_env_notify_message}"
44
+ }
45
+ }
46
+ MANIFEST
47
+
48
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
49
+ original_site_pp = create_site_pp(master_certname, ' include helloworld')
50
+ prod_env_motd_site_pp = create_site_pp(master_certname, prod_env_motd_manifest)
51
+
52
+ #File
53
+ puppet_file = <<-PUPPETFILE
54
+ mod "puppetlabs/motd"
55
+ PUPPETFILE
56
+
57
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
58
+
59
+ #Teardown
60
+ teardown do
61
+ clean_up_r10k(master, last_commit, git_environments_path)
62
+
63
+ step 'Remove "/etc/motd" File'
64
+ on(agents, "rm -rf #{motd_path}")
65
+ end
66
+
67
+ #Setup
68
+ step 'Stub Forge on Master'
69
+ stub_forge_on(master)
70
+
71
+ initial_env_names.each do |env|
72
+ if env == 'production'
73
+ step "Checkout \"#{env}\" Branch"
74
+ git_on(master, "checkout #{env}", git_environments_path)
75
+
76
+ step "Copy \"helloworld\" Module to \"#{env}\" Environment Git Repo"
77
+ scp_to(master, helloworld_module_path, File.join(git_environments_path, "site", 'helloworld'))
78
+
79
+ step "Inject New \"site.pp\" to the \"#{env}\" Environment"
80
+ inject_site_pp(master, site_pp_path, original_site_pp)
81
+
82
+ step "Push Changes to \"#{env}\" Environment"
83
+ git_add_commit_push(master, env, 'Update site.pp and add module.', git_environments_path)
84
+ else
85
+ step "Create \"#{env}\" Branch from \"production\""
86
+ git_on(master, 'checkout production', git_environments_path)
87
+ git_on(master, "checkout -b #{env}", git_environments_path)
88
+
89
+ step "Push Changes to \"#{env}\" Environment"
90
+ git_push(master, env, git_environments_path)
91
+ end
92
+ end
93
+
94
+ #Tests
95
+ step 'Deploy Environments via r10k'
96
+ on(master, "#{r10k_fqp} deploy environment -v")
97
+
98
+ #Initial Verification
99
+ initial_env_names.each do |env|
100
+ agents.each do |agent|
101
+ step "Run Puppet Agent Against \"#{env}\" Environment"
102
+ on(agent, puppet('agent', '--test', "--environment #{env}"), :acceptable_exit_codes => 2) do |result|
103
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
104
+ assert_match(/I am in the #{env} environment/, result.stdout, 'Expected message not found!')
105
+ end
106
+ end
107
+ end
108
+
109
+ #Add, Change, Remove Environments
110
+ step 'Create "temp" Branch from "production"'
111
+ git_on(master, 'checkout production', git_environments_path)
112
+ git_on(master, 'checkout -b temp', git_environments_path)
113
+ git_push(master, 'temp', git_environments_path)
114
+
115
+ step 'Add "puppetlabs-motd" Module to the "production" Environment'
116
+ git_on(master, 'checkout production', git_environments_path)
117
+ inject_site_pp(master, site_pp_path, prod_env_motd_site_pp)
118
+ create_remote_file(master, puppet_file_path, puppet_file)
119
+ git_add_commit_push(master, 'production', 'Add motd module.', git_environments_path)
120
+
121
+ step 'Update Custom Module in the "stage" Environment'
122
+ hw_init_pp_path = File.join(git_environments_path, 'site', 'helloworld', 'manifests', 'init.pp')
123
+ git_on(master, 'checkout stage', git_environments_path)
124
+ create_remote_file(master, hw_init_pp_path, stage_env_custom_mod_manifest)
125
+ git_add_commit_push(master, 'stage', 'Update custom module.', git_environments_path)
126
+
127
+ step 'Delete the "test" Environment'
128
+ git_on(master, 'branch -D test', git_environments_path)
129
+ git_on(master, 'push origin --delete test', git_environments_path)
130
+
131
+ step 'Re-deploy Environments via r10k'
132
+ on(master, "#{r10k_fqp} deploy environment -v -p")
133
+
134
+ #Second Pass Verification
135
+ agents.each do |agent|
136
+ step 'Run Puppet Agent Against "production" Environment'
137
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
138
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
139
+ assert_match(prod_env_notify_message_regex, result.stdout, 'Expected message not found!')
140
+ end
141
+
142
+ step 'Run Puppet Agent Against "temp" Environment'
143
+ on(agent, puppet('agent', '--test', '--environment temp'), :acceptable_exit_codes => 2) do |result|
144
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
145
+ assert_match(test_env_notify_message_regex, result.stdout, 'Expected message not found!')
146
+ end
147
+
148
+ step "Verify MOTD Contents"
149
+ on(agent, "cat #{motd_path}") do |result|
150
+ assert_match(motd_contents_regex, result.stdout, 'File content is invalid!')
151
+ end
152
+
153
+ step 'Run Puppet Agent Against "stage" Environment'
154
+ on(agent, puppet('agent', '--test', '--environment stage'), :acceptable_exit_codes => 2) do |result|
155
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
156
+ assert_match(stage_env_notify_message_regex, result.stdout, 'Expected message not found!')
157
+ end
158
+
159
+ step 'Attempt to Run Puppet Agent Against "test" Environment'
160
+ on(agent, puppet('agent', '--test', '--environment test'), :acceptable_exit_codes => 1) do |result|
161
+ assert_match(test_env_error_message_regex, result.stderr, 'Expected error was not detected!')
162
+ end
163
+ end
@@ -0,0 +1,111 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-48 - C59263 - Multiple Environments with Adding, Removing and Re-adding Same Branch Name'
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
+ local_files_root_path = ENV['FILES'] || 'files'
11
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
12
+ r10k_fqp = get_r10k_fqp(master)
13
+
14
+ initial_env_names = ['production', 'stage']
15
+
16
+ #Verification
17
+ notify_message_regex = /I am in the production environment/
18
+ stage_env_error_message_regex = /Error:.*Could not find environment 'stage'/
19
+
20
+ #Manifest
21
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
22
+ site_pp = create_site_pp(master_certname, ' include helloworld')
23
+
24
+ #Teardown
25
+ teardown do
26
+ clean_up_r10k(master, last_commit, git_environments_path)
27
+ end
28
+
29
+ #Setup
30
+ initial_env_names.each do |env|
31
+ if env == 'production'
32
+ step "Checkout \"#{env}\" Branch"
33
+ git_on(master, "checkout #{env}", git_environments_path)
34
+
35
+ step "Copy \"helloworld\" Module to \"#{env}\" Environment Git Repo"
36
+ scp_to(master, helloworld_module_path, File.join(git_environments_path, "site", 'helloworld'))
37
+
38
+ step "Inject New \"site.pp\" to the \"#{env}\" Environment"
39
+ inject_site_pp(master, site_pp_path, site_pp)
40
+
41
+ step "Push Changes to \"#{env}\" Environment"
42
+ git_add_commit_push(master, env, 'Update site.pp and add module.', git_environments_path)
43
+ else
44
+ step "Create \"#{env}\" Branch from \"production\""
45
+ git_on(master, 'checkout production', git_environments_path)
46
+ git_on(master, "checkout -b #{env}", git_environments_path)
47
+
48
+ step "Push Changes to \"#{env}\" Environment"
49
+ git_push(master, env, git_environments_path)
50
+ end
51
+ end
52
+
53
+ #Tests
54
+ step 'Deploy Environments via r10k'
55
+ on(master, "#{r10k_fqp} deploy environment -v")
56
+
57
+ #Initial Verification
58
+ initial_env_names.each do |env|
59
+ agents.each do |agent|
60
+ step "Run Puppet Agent Against \"#{env}\" Environment"
61
+ on(agent, puppet('agent', '--test', "--environment #{env}"), :acceptable_exit_codes => 2) do |result|
62
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
63
+ assert_match(/I am in the #{env} environment/, result.stdout, 'Expected message not found!')
64
+ end
65
+ end
66
+ end
67
+
68
+ #Remove "stage" Environment
69
+ step 'Delete the "stage" Environment'
70
+ git_on(master, 'checkout production', git_environments_path)
71
+ git_on(master, 'branch -D stage', git_environments_path)
72
+ git_on(master, 'push origin --delete stage', git_environments_path)
73
+
74
+ step 'Re-deploy Environments via r10k'
75
+ on(master, "#{r10k_fqp} deploy environment -v")
76
+
77
+ #Second Pass Verification
78
+ agents.each do |agent|
79
+ step 'Run Puppet Agent Against "production" Environment'
80
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
81
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
82
+ assert_match(notify_message_regex, result.stdout, 'Expected message not found!')
83
+ end
84
+
85
+ step 'Attempt to Run Puppet Agent Against "stage" Environment'
86
+ on(agent, puppet('agent', '--test', '--environment stage'), :acceptable_exit_codes => 1) do |result|
87
+ assert_match(stage_env_error_message_regex, result.stderr, 'Expected error was not detected!')
88
+ end
89
+ end
90
+
91
+ #Create the "stage" Environment Again
92
+ step 'Create "stage" Branch from "production"'
93
+ git_on(master, 'checkout production', git_environments_path)
94
+ git_on(master, 'checkout -b stage', git_environments_path)
95
+
96
+ step 'Push Changes to "stage" Environment'
97
+ git_push(master, 'stage', git_environments_path)
98
+
99
+ step 'Re-deploy Environments via r10k'
100
+ on(master, "#{r10k_fqp} deploy environment -v")
101
+
102
+ #Final Verification
103
+ initial_env_names.each do |env|
104
+ agents.each do |agent|
105
+ step "Run Puppet Agent Against \"#{env}\" Environment"
106
+ on(agent, puppet('agent', '--test', "--environment #{env}"), :acceptable_exit_codes => 2) do |result|
107
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
108
+ assert_match(/I am in the #{env} environment/, result.stdout, 'Expected message not found!')
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,78 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-155 - C62421 - Multiple Environments with Existing Unmanaged Environments'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ environment_path = on(master, puppet('config', 'print', 'environmentpath')).stdout.rstrip
9
+ r10k_fqp = get_r10k_fqp(master)
10
+
11
+ git_environments_path = '/root/environments'
12
+ last_commit = git_last_commit(master, git_environments_path)
13
+
14
+ local_files_root_path = ENV['FILES'] || 'files'
15
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
16
+
17
+ #Manifest
18
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
19
+ site_pp = create_site_pp(master_certname, ' include helloworld')
20
+
21
+ #Verification
22
+ notify_message_prod_env_regex = /I am in the production environment/
23
+ notify_message_test_env_regex = /I am in the test environment/
24
+ removal_message_test_env_regex = /Removing unmanaged path.*test/
25
+ error_message_regex = /Could not retrieve catalog from remote server/
26
+
27
+ #Teardown
28
+ teardown do
29
+ clean_up_r10k(master, last_commit, git_environments_path)
30
+ end
31
+
32
+ #Setup
33
+ step 'Checkout "production" Branch'
34
+ git_on(master, 'checkout production', git_environments_path)
35
+
36
+ step 'Copy "helloworld" Module to "production" Environment Git Repo'
37
+ scp_to(master, helloworld_module_path, File.join(git_environments_path, "site", 'helloworld'))
38
+
39
+ step 'Inject New "site.pp" to the "production" Environment'
40
+ inject_site_pp(master, site_pp_path, site_pp)
41
+
42
+ step 'Push Changes'
43
+ git_add_commit_push(master, 'production', 'Update site.pp and add module.', git_environments_path)
44
+
45
+ #Tests
46
+ step 'Deploy "production" Environment via r10k'
47
+ on(master, "#{r10k_fqp} deploy environment -v")
48
+
49
+ agents.each do |agent|
50
+ step 'Run Puppet Agent'
51
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
52
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
53
+ assert_match(notify_message_prod_env_regex, result.stdout, 'Expected message not found!')
54
+ end
55
+ end
56
+
57
+ step 'Create Unmanaged "test" Environment'
58
+ on(master, "cp -r #{environment_path}/production #{environment_path}/test")
59
+
60
+ agents.each do |agent|
61
+ step 'Run Puppet Agent Against "test" Environment'
62
+ on(agent, puppet('agent', '--test', '--environment test'), :acceptable_exit_codes => 2) do |result|
63
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
64
+ assert_match(notify_message_test_env_regex, result.stdout, 'Expected message not found!')
65
+ end
66
+ end
67
+
68
+ step 'Re-deploy Environments via r10k'
69
+ on(master, "#{r10k_fqp} deploy environment -v") do |result|
70
+ assert_match(removal_message_test_env_regex, result.output, 'Unexpected error was detected!')
71
+ end
72
+
73
+ agents.each do |agent|
74
+ step 'Run Puppet Agent Against "test" Environment'
75
+ on(agent, puppet('agent', '--test', '--environment test'), :acceptable_exit_codes => 1) do |result|
76
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
77
+ end
78
+ end
@@ -0,0 +1,100 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-155 - C64588 - Single Environment with Git Module Using a Branch Reference where Updates Occur After Initial Deploy'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ environment_path = on(master, puppet('config', 'print', 'environmentpath')).stdout.rstrip
9
+ r10k_fqp = get_r10k_fqp(master)
10
+
11
+ git_repo_parent_path = '/git_repos'
12
+ git_repo_module_name = 'helloworld_module'
13
+ git_remote_module_path = File.join(git_repo_parent_path, "#{git_repo_module_name}.git")
14
+ git_module_clone_path = '/root/helloworld'
15
+
16
+ git_environments_path = '/root/environments'
17
+ last_commit = git_last_commit(master, git_environments_path)
18
+
19
+ local_files_root_path = ENV['FILES'] || 'files'
20
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
21
+
22
+ #Verification
23
+ notify_original_message_regex = /I am in the production environment/
24
+ notify_updated_message = 'A totally different message'
25
+ notify_updated_message_regex = /#{notify_updated_message}/
26
+
27
+ #File
28
+ puppet_file = <<-PUPPETFILE
29
+ mod 'test/helloworld',
30
+ :git => '#{git_remote_module_path}',
31
+ :ref => 'master'
32
+ PUPPETFILE
33
+
34
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
35
+
36
+ updated_helloworld_manifest = <<-MANIFEST
37
+ class helloworld {
38
+ notify { "Hello world!": message => "#{notify_updated_message}"}
39
+ }
40
+ MANIFEST
41
+
42
+ #Manifest
43
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
44
+ site_pp = create_site_pp(master_certname, ' include helloworld')
45
+
46
+ #Teardown
47
+ teardown do
48
+ step 'Remove Git Repo and Clone for Module'
49
+ on(master, "rm -rf #{git_remote_module_path} #{git_module_clone_path}")
50
+
51
+ clean_up_r10k(master, last_commit, git_environments_path)
52
+ end
53
+
54
+ #Setup
55
+ step 'Create Bare Git Repo and Clone'
56
+ on(master, "mkdir -p #{git_remote_module_path} #{git_module_clone_path}")
57
+ git_init_bare_repo_and_clone(master, git_repo_parent_path, git_repo_module_name, git_module_clone_path)
58
+
59
+ step 'Copy "helloworld" Module to Git Repo'
60
+ scp_to(master, "#{helloworld_module_path}/manifests", git_module_clone_path)
61
+
62
+ step 'Push Changes for Module Git Repo to Remote'
63
+ git_add_commit_push(master, 'master', 'Add module.', git_module_clone_path)
64
+
65
+ step 'Inject New "site.pp" to the "production" Environment'
66
+ inject_site_pp(master, site_pp_path, site_pp)
67
+
68
+ step 'Create "Puppetfile" for the "production" Environment'
69
+ create_remote_file(master, puppet_file_path, puppet_file)
70
+
71
+ step 'Push Changes to Environments Git Repo Remote'
72
+ git_add_commit_push(master, 'production', 'Update site.pp and add module.', git_environments_path)
73
+
74
+ #Tests
75
+ step 'Deploy "production" Environment via r10k'
76
+ on(master, "#{r10k_fqp} deploy environment -v -p")
77
+
78
+ agents.each do |agent|
79
+ step 'Run Puppet Agent'
80
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
81
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
82
+ assert_match(notify_original_message_regex, result.stdout, 'Expected message not found!')
83
+ end
84
+ end
85
+
86
+ step 'Update "helloworld" Module and Push Changes'
87
+ create_remote_file(master, "#{git_module_clone_path}/manifests/init.pp", updated_helloworld_manifest)
88
+ on(master, "chmod -R 644 #{git_module_clone_path}")
89
+ git_add_commit_push(master, 'master', 'Update module.', git_module_clone_path)
90
+
91
+ step 'Deploy "production" Environment Again via r10k'
92
+ on(master, "#{r10k_fqp} deploy environment -v -p")
93
+
94
+ agents.each do |agent|
95
+ step 'Run Puppet Agent'
96
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
97
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
98
+ assert_match(notify_updated_message_regex, result.stdout, 'Expected message not found!')
99
+ end
100
+ end