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,35 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-101 - C59231 - Attempt to Deploy Environment from Git Source with Branches Containing Unicode'
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
+ unicode_env = "\uAD62\uCC63\uC0C3\uBEE7\uBE23\uB7E9\uC715\uCEFE\uBF90\uAE69"
12
+
13
+ #Verification
14
+ error_message_regex = /ERROR\].*Blah/m
15
+
16
+ #Teardown
17
+ teardown do
18
+ clean_up_r10k(master, last_commit, git_environments_path)
19
+ end
20
+
21
+ #Setup
22
+ step "Create \"#{unicode_env}\" Branch from \"production\""
23
+ git_on(master, 'checkout production', git_environments_path)
24
+ git_on(master, "checkout -b #{unicode_env}".force_encoding('BINARY'), git_environments_path)
25
+
26
+ step "Push Changes to \"#{unicode_env}\" Environment"
27
+ git_push(master, unicode_env, git_environments_path)
28
+
29
+ #Tests
30
+ step 'Attempt to Deploy via r10k'
31
+ on(master, "#{r10k_fqp} deploy environment -v -t", :acceptable_exit_codes => [0,1]) do |result|
32
+ expect_failure('Expected to fail due to RK-29') do
33
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
34
+ end
35
+ end
@@ -0,0 +1,64 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ require 'beaker-qa-i18n'
5
+
6
+ test_name 'Deploy module with unicode file name'
7
+
8
+ #Init
9
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
10
+ git_environments_path = '/root/environments'
11
+ last_commit = git_last_commit(master, git_environments_path)
12
+ local_files_root_path = ENV['FILES'] || 'files'
13
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
14
+ r10k_fqp = get_r10k_fqp(master)
15
+
16
+ #Manifest
17
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
18
+ site_pp = create_site_pp(master_certname, ' include helloworld')
19
+
20
+ #Verification
21
+ notify_message_regex = /I am in the production environment/
22
+
23
+ #Teardown
24
+ teardown do
25
+ clean_up_r10k(master, last_commit, git_environments_path)
26
+ end
27
+
28
+ test_i18n_strings(10, [:syntax, :white_space]) do |test_string|
29
+ #Setup
30
+ test_file_path = File.join(git_environments_path, "site", 'helloworld', 'manifests', test_string)
31
+
32
+ step 'Checkout "production" Branch'
33
+ git_on(master, 'checkout production', git_environments_path)
34
+
35
+ step 'Copy "helloworld" Module to "production" Environment Git Repo'
36
+ scp_to(master, helloworld_module_path, File.join(git_environments_path, "site", 'helloworld'))
37
+
38
+ step 'Add unicode file to helloworld Module'
39
+ create_remote_file(master, test_file_path, 'test file contents')
40
+
41
+ step 'Inject New "site.pp" to the "production" Environment'
42
+ inject_site_pp(master, site_pp_path, site_pp)
43
+
44
+ step 'Push Changes'
45
+ git_add_commit_push(master, 'production', 'Update site.pp and add module.', git_environments_path)
46
+
47
+ #Tests
48
+ step 'Deploy "production" Environment via r10k'
49
+ on(master, "#{r10k_fqp} deploy environment -v")
50
+
51
+ step 'test deployment of Unicode file'
52
+ deployed_test_file_path = "/etc/puppetlabs/code/environments/production/site/helloworld/manifests/#{test_string}"
53
+ on(master, "test -f #{deployed_test_file_path}", :accept_all_exit_codes => true) do |result|
54
+ assert(result.exit_code == 0, "The unicode test file #{test_string} was not deployed by r10k")
55
+ end
56
+
57
+ agents.each do |agent|
58
+ step "Run Puppet Agent"
59
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
60
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
61
+ assert_match(notify_message_regex, result.stdout, 'Expected message not found!')
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,89 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'RK-256 - C98049 - verify if non-module content is at root of dir, does not cause erroneous purging'
5
+
6
+ #Init
7
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
8
+ r10k_fqp = get_r10k_fqp(master)
9
+ git_environments_path = '/root/environments'
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
+ code_dir = '/etc/puppetlabs/code/environments/production'
14
+
15
+ last_commit = git_last_commit(master, git_environments_path)
16
+ git_provider = ENV['GIT_PROVIDER']
17
+ r10k_config_path = get_r10k_config_file_path(master)
18
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
19
+ #In-line files
20
+ r10k_conf = <<-CONF
21
+ cachedir: '/var/cache/r10k'
22
+ git:
23
+ provider: '#{git_provider}'
24
+ sources:
25
+ control:
26
+ basedir: "#{env_path}"
27
+ remote: "#{git_control_remote}"
28
+ CONF
29
+
30
+ puppetfile = <<-EOS
31
+ mod 'non_module_object_1',
32
+ :install_path => './',
33
+ :git => 'git://github.com/puppetlabs/control-repo.git',
34
+ :branch => 'production'
35
+
36
+ mod 'non_module_object_2',
37
+ :install_path => '',
38
+ :git => 'git://github.com/puppetlabs/control-repo.git',
39
+ :branch => 'production'
40
+ EOS
41
+
42
+ puppetfile_2 = <<-EOS
43
+ mod 'puppetlabs-motd'
44
+ EOS
45
+
46
+ teardown do
47
+ step 'Restore Original "r10k" Config'
48
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
49
+
50
+ clean_up_r10k(master, last_commit, git_environments_path)
51
+ end
52
+
53
+ step 'Stub the forge'
54
+ stub_forge_on(master)
55
+
56
+ step 'Backup Current "r10k" Config'
57
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
58
+
59
+ step 'Update the "r10k" Config'
60
+ create_remote_file(master, r10k_config_path, r10k_conf)
61
+
62
+ step 'Ask r10k to deploy'
63
+ on(master, "#{r10k_fqp} deploy environment -p")
64
+
65
+ step 'Add puppetfile with non-module content at top of directory'
66
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", puppetfile)
67
+ git_add_commit_push(master, 'production', 'add Puppetfile', git_environments_path)
68
+
69
+ step 'Deploy r10k'
70
+ on(master, "#{r10k_fqp} deploy environment -p")
71
+
72
+ step 'Add puppetfile #2'
73
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", puppetfile_2)
74
+ git_add_commit_push(master, 'production', 'add Puppetfile to production', git_environments_path)
75
+
76
+ step 'Deploy r10k after adding puppetfile #2'
77
+ on(master, "#{r10k_fqp} deploy environment -p")
78
+
79
+ step 'Verify that non-module object 1 has not been purged'
80
+ on(master, "test -d #{code_dir}/non_module_object_1", :accept_all_exit_codes => true) do |result|
81
+ non_module_error = 'Non-module object was purged; should have been left alone'
82
+ assert(result.exit_code == 0, non_module_error)
83
+ end
84
+
85
+ step 'Verify that non-module object 2 has not been purged'
86
+ on(master, "test -d #{code_dir}/non_module_object_2", :accept_all_exit_codes => true) do |result|
87
+ non_module_error = 'Non-module object was purged; should have been left alone'
88
+ assert(result.exit_code == 0, non_module_error)
89
+ end
@@ -0,0 +1,125 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'RK-256 - C98013 - verify default purging behavior'
5
+
6
+ #Init
7
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
8
+ r10k_fqp = get_r10k_fqp(master)
9
+ git_environments_path = '/root/environments'
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
+
14
+ last_commit = git_last_commit(master, git_environments_path)
15
+ git_provider = ENV['GIT_PROVIDER']
16
+ r10k_config_path = get_r10k_config_file_path(master)
17
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
18
+ #In-line files
19
+ r10k_conf = <<-CONF
20
+ cachedir: '/var/cache/r10k'
21
+ git:
22
+ provider: '#{git_provider}'
23
+ sources:
24
+ control:
25
+ basedir: "#{env_path}"
26
+ remote: "#{git_control_remote}"
27
+ CONF
28
+
29
+ teardown do
30
+ step 'Restore Original "r10k" Config'
31
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
32
+
33
+ clean_up_r10k(master, last_commit, git_environments_path)
34
+ end
35
+
36
+ # initialize path name a....d (where it is)
37
+ code_dir_path = '/etc/puppetlabs/code'
38
+ fake_environment_path_a = [code_dir_path, 'environments'].join('/')
39
+ fake_environment_path_b = [code_dir_path,'environments', 'production'].join('/')
40
+ fake_environment_path_c = [code_dir_path, 'environments', 'production', 'modules'].join('/')
41
+ fake_environment_path_d = [code_dir_path, 'environments', 'production', 'modules', 'motd'].join('/') #not sure if need
42
+
43
+ # initalize directory name a...c (where it is, what it is called)
44
+ fake_dir_a_to_be_purged = "#{fake_environment_path_a}/fakedir1"
45
+ fake_dir_b_to_be_left_alone = "#{fake_environment_path_b}/fakedir2"
46
+ fake_dir_c_to_be_purged = "#{fake_environment_path_c}/fakedir3"
47
+
48
+ # initalize file name a...c (where it is, what it is called)
49
+ fake_file_a_to_be_purged = "#{fake_environment_path_a}/fakefile1.txt"
50
+ fake_file_b_to_be_left_alone = "#{fake_environment_path_b}/fakefile2.txt"
51
+ fake_file_c_to_be_purged = "#{fake_environment_path_c}/fakefile3.txt"
52
+
53
+ # initalize file content
54
+ step 'Stub the forge'
55
+ stub_forge_on(master)
56
+
57
+ step 'Backup Current "r10k" Config'
58
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
59
+
60
+ step 'Update the "r10k" Config'
61
+ create_remote_file(master, r10k_config_path, r10k_conf)
62
+
63
+ step 'Create content to be managed by r10k'
64
+ git_on(master, 'checkout production', git_environments_path)
65
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", 'mod "puppetlabs-motd"')
66
+ git_add_commit_push(master, 'production', 'add Puppetfile to production', git_environments_path)
67
+
68
+ git_on(master, 'checkout production', git_environments_path)
69
+ git_on(master, 'checkout -b cats', git_environments_path)
70
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", 'mod "puppetlabs-inifile"')
71
+ git_add_commit_push(master, 'cats', 'add Puppetfile to cats', git_environments_path)
72
+
73
+ step 'Ask r10k to deploy'
74
+ on(master, "#{r10k_fqp} deploy environment -p")
75
+
76
+ step 'Create fake file and directory at deployment level to be purged'
77
+ create_remote_file(master, fake_file_a_to_be_purged, "foobar nonsense")
78
+ on(master, "mkdir #{fake_dir_a_to_be_purged}")
79
+
80
+ step 'Create fake file and directory at environment level to be left alone'
81
+ create_remote_file(master, fake_file_b_to_be_left_alone, "foobar nonsense")
82
+ on(master, "mkdir #{fake_dir_b_to_be_left_alone}")
83
+
84
+ step 'Create fake file and directory at puppetfile level to be purged '
85
+ create_remote_file(master, fake_file_c_to_be_purged, "foobar nonsense")
86
+ on(master, "mkdir #{fake_dir_c_to_be_purged}")
87
+
88
+ step('Deploy r10k')
89
+ on(master, "#{r10k_fqp} deploy environment -p")
90
+
91
+ step('Assert to see if deployment level file is not there')
92
+ on(master, "test -f #{fake_file_a_to_be_purged}", :accept_all_exit_codes => true) do |result|
93
+ file_a_error = 'Puppet file purging was not observed'
94
+ assert(result.exit_code == 1, file_a_error)
95
+ end
96
+
97
+ step('Assert to see if deployment level directory is not there')
98
+ on(master, "test -d #{fake_dir_a_to_be_purged}", :accept_all_exit_codes => true) do |result|
99
+ dir_a_error = 'Puppet directory purging was not observed'
100
+ assert(result.exit_code == 1, dir_a_error)
101
+ end
102
+
103
+ step('Assert to see if environment level file is still there after second deployment')
104
+ on(master, "test -f #{fake_file_b_to_be_left_alone}", :accept_all_exit_codes => true) do |result|
105
+ file_b_error = 'Puppet file purging deleted this file when it should have left it alone :('
106
+ assert(result.exit_code == 0, file_b_error)
107
+ end
108
+
109
+ step('Assert to see if environment level directory is still there after second deployment')
110
+ on(master, "test -d #{fake_dir_b_to_be_left_alone}", :accept_all_exit_codes => true) do |result|
111
+ dir_b_error = 'Puppet directory purging deleted this directory when it should have left it alone :('
112
+ assert(result.exit_code == 0, dir_b_error)
113
+ end
114
+
115
+ step('Assert to see if puppetfile level file is not there')
116
+ on(master, "test -f #{fake_file_c_to_be_purged}", :accept_all_exit_codes => true) do |result|
117
+ file_c_error = 'Puppet file purging was not observed'
118
+ assert(result.exit_code == 1, file_c_error)
119
+ end
120
+
121
+ step('Assert to see if puppetfile level directory is not there')
122
+ on(master, "test -d #{fake_dir_c_to_be_purged}", :accept_all_exit_codes => true) do |result|
123
+ dir_c_error = 'Puppet directory purging was not observed'
124
+ assert(result.exit_code == 1, dir_c_error)
125
+ end
@@ -0,0 +1,93 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'RK-257 - C98046 - r10k does not purge files on whitelist'
5
+
6
+ #Init
7
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
8
+ r10k_fqp = get_r10k_fqp(master)
9
+ git_environments_path = '/root/environments'
10
+
11
+ git_repo_path = '/git_repos'
12
+ git_repo_name = 'environments'
13
+ git_control_remote = File.join(git_repo_path, "#{git_repo_name}.git")
14
+
15
+ last_commit = git_last_commit(master, git_environments_path)
16
+ git_provider = ENV['GIT_PROVIDER']
17
+
18
+ r10k_config_path = get_r10k_config_file_path(master)
19
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
20
+
21
+ teardown do
22
+ step 'Restore Original "r10k" Config'
23
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
24
+
25
+ clean_up_r10k(master, last_commit, git_environments_path)
26
+ end
27
+
28
+ # initalize file content
29
+ step 'Stub the forge'
30
+ stub_forge_on(master)
31
+
32
+ step 'Backup Current "r10k" Config'
33
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
34
+
35
+ r10k_conf = <<-CONF
36
+ cachedir: '/var/cache/r10k'
37
+ git:
38
+ provider: '#{git_provider}'
39
+ sources:
40
+ control:
41
+ basedir: "#{env_path}"
42
+ remote: "#{git_control_remote}"
43
+ deploy:
44
+ purge_levels: ['deployment', 'environment', 'puppetfile']
45
+ purge_whitelist: ['**/*.pp']
46
+ CONF
47
+
48
+ step 'Update the "r10k" Config'
49
+ create_remote_file(master, r10k_config_path, r10k_conf)
50
+
51
+ step 'Copy Puppetfile to "production" Environment Git Repo'
52
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", "mod 'puppetlabs-stdlib' \n mod 'puppetlabs-motd'")
53
+
54
+ step 'Push Changes'
55
+ git_add_commit_push(master, 'production', 'add Puppetfile', git_environments_path)
56
+
57
+ step 'Deploy production'
58
+ on(master, "#{r10k_fqp} deploy environment -p")
59
+
60
+ step 'commit a new Puppetfile to production'
61
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", 'mod "puppetlabs-motd"')
62
+
63
+ step 'Push Changes'
64
+ git_add_commit_push(master, 'production', 'add Puppetfile', git_environments_path)
65
+
66
+ step 'create test pp files'
67
+ do_not_purge = [
68
+ "/etc/puppetlabs/code/environments/production/environment_level.pp",
69
+ "/etc/puppetlabs/code/environments/production/site/environment_level.pp"
70
+ ].each do |file|
71
+ create_remote_file(master, file, 'this is a test')
72
+ end
73
+
74
+ purge = [
75
+ "/etc/puppetlabs/code/environments/production/environment_level.zz",
76
+ "/etc/puppetlabs/code/environments/production/site/environment_level.zz"
77
+ ].each do |file|
78
+ create_remote_file(master, file, 'this is a test')
79
+ end
80
+
81
+ #TEST
82
+ step 'Deploy again and check files'
83
+ on(master, "#{r10k_fqp} deploy environment -p")
84
+
85
+ purge.each do |file|
86
+ assert_message = "The file #{file}\n was not purged, it was expected to be"
87
+ assert(on(master, "test -f #{file}", :accept_all_exit_codes => true).exit_code == 1, assert_message)
88
+ end
89
+
90
+ do_not_purge.each do |file|
91
+ assert_message = "The file #{file}\n was purged, it was not expected to be"
92
+ assert(on(master, "test -f #{file}", :accept_all_exit_codes => true).exit_code == 0, assert_message)
93
+ end
@@ -0,0 +1,63 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'RK-257 - C98043 - verify default whitelist only accepts strings or array of strings'
5
+
6
+ #Init
7
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
8
+ r10k_fqp = get_r10k_fqp(master)
9
+ git_environments_path = '/root/environments'
10
+
11
+ git_repo_path = '/git_repos'
12
+ git_repo_name = 'environments'
13
+ git_control_remote = File.join(git_repo_path, "#{git_repo_name}.git")
14
+
15
+ last_commit = git_last_commit(master, git_environments_path)
16
+ git_provider = ENV['GIT_PROVIDER']
17
+
18
+ r10k_config_path = get_r10k_config_file_path(master)
19
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
20
+
21
+ #invalid content to test
22
+ hash_whitelist = '{:cats => \'cats.txt\'}'
23
+ invalid_array_content_whitelist = '[\'cats.txt\', [:broken]]'
24
+
25
+ teardown do
26
+ step 'Restore Original "r10k" Config'
27
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
28
+
29
+ clean_up_r10k(master, last_commit, git_environments_path)
30
+ end
31
+
32
+ # initalize file content
33
+ step 'Stub the forge'
34
+ stub_forge_on(master)
35
+
36
+ step 'Backup Current "r10k" Config'
37
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
38
+
39
+ [hash_whitelist, invalid_array_content_whitelist].each do |whitelist_content|
40
+ r10k_conf = <<-CONF
41
+ cachedir: '/var/cache/r10k'
42
+ git:
43
+ provider: '#{git_provider}'
44
+ sources:
45
+ control:
46
+ basedir: "#{env_path}"
47
+ remote: "#{git_control_remote}"
48
+ deploy:
49
+ purge_whitelist: #{whitelist_content}
50
+ CONF
51
+
52
+ step 'Update the "r10k" Config'
53
+ create_remote_file(master, r10k_config_path, r10k_conf)
54
+
55
+ step 'Deploy r10k, and verify that invalid whitelist content causes error'
56
+ on(master, "#{r10k_fqp} deploy environment -p", :accept_all_exit_codes => true) do |result|
57
+ error = /did not find expected node content while parsing a flow node/
58
+ error_message = 'whitelist content did not generate expected error'
59
+ expect_failure('RK-263') do
60
+ assert_no_match(result.stdout, error, error_message)
61
+ end
62
+ end
63
+ end