r10k 3.5.2

Sign up to get free protection for your applications and to get access to all the features.
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,111 @@
1
+ Git Providers
2
+ =============
3
+
4
+ As of 1.5.0, r10k can interact with Git repositories using multiple Git
5
+ providers.
6
+
7
+ Shellgit
8
+ --------
9
+
10
+ The shellgit provider is the original Git provider that is based on shelling out
11
+ to the `git` binary. It relies on the standard set of Git userland executables
12
+ in order to work.
13
+
14
+ The shellgit provider is the default Git provider in order to maintain
15
+ compatibility with existing r10k installations.
16
+
17
+ ### Requirements
18
+
19
+ The shellgit provider requires that `git` can be found on the `PATH` environment
20
+ variable. This can be done by installing the git package via the system package
21
+ manager.
22
+
23
+ ### SSH Configuration
24
+
25
+ Because the shellgit provider relies on the `git` command which in turn uses the
26
+ `ssh` binary as the SSH transport layer, configuring access to Git repositories
27
+ over SSH is done by configuring the underlying `ssh` command.
28
+
29
+ Rugged
30
+ ------
31
+
32
+ The rugged provider is based on the [libgit2](https://github.com/libgit2/libgit2)
33
+ library and the Ruby [rugged gem](https://github.com/libgit2/rugged).
34
+
35
+ ### SSH Configuration
36
+
37
+ Since the rugged provider does not read ~/.ssh if using SSH based Git
38
+ repositories, the 'private_key' option must be provided. An optional 'username'
39
+ field can be provided when the Git remote URL does not provide a username.
40
+
41
+ ```yaml
42
+ git:
43
+ private_key: '/root/.ssh/id_rsa'
44
+ username: 'git'
45
+ ```
46
+
47
+ If you have per repository private keys you can add them with the repositories list.
48
+
49
+ ```yaml
50
+ git:
51
+ # default private key
52
+ private_key: '/root/.ssh/id_rsa'
53
+ repositories:
54
+ - remote: "git@github.com:my_org/private_repo"
55
+ # private key for this repo only
56
+ private_key: '/root/.ssh/private_repo_id'
57
+ ```
58
+
59
+ #### Supported transports with Rugged
60
+
61
+ Rugged compiles libgit2 and and the Ruby bindings when the gem is installed. You
62
+ may need libraries installed before you install the gem to use certain protocols
63
+ to access git remote repositories.
64
+
65
+ For ssh support, you need to have libssh2 installed (along with the relevant dev
66
+ package/headers) before you install the Rugged gem.
67
+
68
+ For https support on Linux, you need to have OpenSSL installed (along with the
69
+ relevant dev package/headers) before you install the Rugged gem. OS X and
70
+ Windows support should automatically include https support.
71
+
72
+ You can check whether https or ssh support is included in your Rugged
73
+ installation by using the following in irb and making sure the required feature
74
+ is listed:
75
+
76
+ ```ruby
77
+ irb(main):001:0> require('rugged')
78
+ => true
79
+ irb(main):002:0> Rugged.features
80
+ => [:threads, :https, :ssh]
81
+ irb(main):003:0>
82
+ ```
83
+ You will require the ':https' or ':ssh' features to use the respective protocols
84
+ in your Puppetfile module references or in r10k.yaml. R10K 2.0.0 and later will
85
+ automatically issue a warning if either feature is missing.
86
+
87
+ libssh2 on Debian and Ubuntu is compiled against libgcrypto instead of OpenSSL
88
+ [due to licensing reasons](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668271), and
89
+ unfortunately libgcrypto does not support a number of required operations,
90
+ including reading from a private key file. You will need to either use shellgit
91
+ or recompile your own libssh2-1 package to use OpenSSL on these distributions.
92
+ If you see the following error message, this is the likely cause:
93
+
94
+ Failed to authenticate SSH session: Unable to extract public key from private key file: Method unimplemented in libgcrypt backend at /var/cache/r10k/ssh---git@git.example.com-sys-puppet.git
95
+
96
+ Configuration
97
+ -------------
98
+
99
+ R10K will attempt to use the shellgit provider, then fall back to the rugged
100
+ provider, and then hard fail if no Git provider is available.
101
+
102
+ The Git provider in use can be manually specified by specifying the desired
103
+ provider in r10k.yaml.
104
+
105
+ ```yaml
106
+ git:
107
+ provider: 'rugged'
108
+ ```
109
+
110
+ Valid values are 'rugged' and 'shellgit'. If an invalid value is used r10k will
111
+ raise an error.
@@ -0,0 +1,309 @@
1
+ Puppetfile
2
+ ==========
3
+
4
+ Puppetfiles are a simple Ruby based DSL that specifies a list of modules to
5
+ install, what version to install, and where to fetch them from. r10k can use a
6
+ Puppetfile to install a set of Puppet modules for local development, or they can
7
+ be used with r10k environment deployments to install additional modules into a
8
+ given environment.
9
+
10
+ Unlike librarian-puppet, the r10k implementation of Puppetfiles does not include
11
+ dependency resolution, but it is on the roadmap.
12
+
13
+ When directly working with Puppetfiles, you can use the `r10k puppetfile`
14
+ subcommand to interact with a Puppetfile.
15
+
16
+ When using r10k's deploy functionality, interacting with Puppetfiles is handled
17
+ on a case by case basis.
18
+
19
+ Because the Puppetfile format is actually implemented using a Ruby DSL any valid
20
+ Ruby expression can be used. That being said, being a bit too creative in the
21
+ DSL can lead to surprising (read: bad) things happening, so consider keeping it
22
+ simple.
23
+
24
+ Commands
25
+ --------
26
+
27
+ Puppetfile subcommands assume that the Puppetfile to operate on is in the
28
+ current working directory and modules should be installed in the 'modules'
29
+ directory relative to the current working directory.
30
+
31
+ Install or update all modules in a given Puppetfile
32
+ into ./modules)
33
+
34
+ r10k puppetfile install
35
+
36
+ Verify the Puppetfile syntax
37
+
38
+ r10k puppetfile check
39
+
40
+ Remove any modules in the 'modules' directory that are not specified in the
41
+ Puppetfile:
42
+
43
+ r10k puppetfile purge
44
+
45
+ Global settings
46
+ ---------------
47
+
48
+ The following settings can be used to control how the Puppetfile installs and
49
+ handles modules.
50
+
51
+ ### forge
52
+
53
+ The `forge` setting specifies which server that Forge based modules are fetched
54
+ from. This is currently a noop and is provided for compatibility with
55
+ librarian-puppet.
56
+
57
+ R10k supports setting the Forge to use _globally_ in `r10k.yaml`. see [Configuration](/doc/dynamic-environments/configuration.mkd#baseurl) for details.
58
+
59
+ ### moduledir
60
+
61
+ The `moduledir` setting specifies where modules from the Puppetfile will be
62
+ installed. This defaults to the `modules` directory relative to the Puppetfile.
63
+ If the path is absolute then the modules will be installed to that absolute
64
+ path, otherwise it's assumed that the `moduledir` setting should be relative and
65
+ the modules will be installed in that directory relative to the Puppetfile.
66
+
67
+ The moduledir setting should be placed before any modules are declared.
68
+
69
+ Install modules to an absolute path:
70
+
71
+ ```ruby
72
+ moduledir '/etc/puppet/modules'
73
+
74
+ mod 'branan/eight_hundred' # will be installed into '/etc/puppet/modules/eight_hundred'
75
+ ```
76
+
77
+ Install modules to a relative path:
78
+
79
+ ```ruby
80
+ moduledir 'thirdparty'
81
+
82
+ mod 'branan/eight_hundred' # will be installed into `dirname /path/to/Puppetfile`/thirdparty/eight_hundred
83
+ ```
84
+
85
+ **Note**: support for a relative moduledir was added in r10k 1.4.0; the behavior
86
+ of a relative moduledir path is undefined on earlier versions of r10k.
87
+
88
+ Module types
89
+ ------------
90
+
91
+ r10k can install Puppet modules from a number of different sources. Right now
92
+ modules can be installed from the Puppet Forge, Git, or SVN.
93
+
94
+ ### Puppet Forge
95
+
96
+ Modules can be installed from the Puppet Forge.
97
+
98
+ If no version is specified the latest version available at the time will be
99
+ installed, and will be kept at that version.
100
+
101
+ mod 'puppetlabs/apache'
102
+
103
+ If a version is specified then that version will be installed.
104
+
105
+ mod 'puppetlabs/apache', '0.10.0'
106
+
107
+ If the version is set to :latest then the module will be always updated to the
108
+ latest version available.
109
+
110
+ mod 'puppetlabs/apache', :latest
111
+
112
+ ### Git
113
+
114
+ Git repositories that contain a Puppet module can be cloned and used as modules.
115
+ When Git is used, the module version can be specified by using `:ref`, `:tag`,
116
+ `:commit`, and `:branch`.
117
+
118
+ When a module is installed using `:ref`, r10k uses some simple heuristics to
119
+ determine the type of Git object that should be checked out. This can be used
120
+ with a git commit, branch reference, or a tag.
121
+
122
+ When a module is installed using `:tag` or `:commit`, r10k assumes that the
123
+ given object is a tag or commit and can do some optimizations around fetching
124
+ the object. If the tag or commit is already available r10k will skip network
125
+ operations when updating the repo, which can speed up install times.
126
+
127
+ Module versions can also be specified using `:branch` to track a specific
128
+ branch reference.
129
+
130
+ #### Examples
131
+
132
+ ```ruby
133
+ # Install puppetlabs/apache and keep it up to date with 'master'
134
+ mod 'apache',
135
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache'
136
+
137
+ # Install puppetlabs/apache and track the 'docs_experiment' branch
138
+ mod 'apache',
139
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache',
140
+ :ref => 'docs_experiment'
141
+
142
+ # Install puppetlabs/apache and pin to the '0.9.0' tag
143
+ mod 'apache',
144
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache',
145
+ :tag => '0.9.0'
146
+
147
+ # Install puppetlabs/apache and pin to the '83401079' commit
148
+ mod 'apache',
149
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache',
150
+ :commit => '83401079053dca11d61945bd9beef9ecf7576cbf'
151
+
152
+ # Install puppetlabs/apache and track the 'docs_experiment' branch
153
+ mod 'apache',
154
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache',
155
+ :branch => 'docs_experiment'
156
+ ```
157
+
158
+ #### Control Repo Branch Tracking
159
+
160
+ Since r10k 2.4.0, the `:branch` option can be set to the special value
161
+ `:control_branch` to indicate that the content should track a branch
162
+ reference matching the containing control repo branch. For example, if a
163
+ Puppetfile containing a Git content declaration is in the "testing" branch
164
+ of a control repo, a setting of `:control_branch` will attempt to deploy that
165
+ content from a "testing" branch of the content repo.
166
+
167
+ Additionally, you can specify a `:default_branch` option which is the branch
168
+ reference that content will be deployed from if the the given `:ref`, `:tag`,
169
+ `:commit`, or `:branch` option cannot be resolved and deployed. If the desired
170
+ content cannot be resolved and no default branch is given, or if the default
171
+ branch can also not be resolved, an error will be logged and the content will
172
+ not be deployed or updated.
173
+
174
+ #### :control\_branch Examples
175
+
176
+ ```ruby
177
+ # Deploy content from branch matching control repo branch.
178
+ mod 'hieradata',
179
+ :git => 'git@git.example.com:organization/hieradata.git',
180
+ :branch => :control_branch
181
+
182
+ # Track control branch and fall-back to master if no matching branch.
183
+ mod 'hieradata',
184
+ :git => 'git@git.example.com:organization/hieradata.git',
185
+ :branch => :control_branch,
186
+ :default_branch => 'master'
187
+ ```
188
+
189
+
190
+ ### SVN
191
+
192
+ Modules can be installed via SVN. If no version is given, the module will track
193
+ the latest version available in the main SVN repository.
194
+
195
+ mod 'apache',
196
+ :svn => 'https://github.com/puppetlabs/puppetlabs-apache/trunk'
197
+
198
+ If an SVN revision number is specified with `:rev` (or `:revision`), that
199
+ SVN revision will be kept checked out.
200
+
201
+ mod 'apache',
202
+ :svn => 'https://github.com/puppetlabs/puppetlabs-apache/trunk',
203
+ :rev => '154'
204
+
205
+ mod 'apache',
206
+ :svn => 'https://github.com/puppetlabs/puppetlabs-apache/trunk',
207
+ :revision => '154'
208
+
209
+ If the SVN repository requires credentials, you can supply the `:username` and
210
+ `:password` options.
211
+
212
+ mod 'apache',
213
+ :svn => 'https://github.com/puppetlabs/puppetlabs-apache/trunk',
214
+ :username => 'azurediamond',
215
+ :password => 'hunter2'
216
+
217
+ **Note**: SVN credentials are passed as command line options, so the SVN
218
+ credentials may be visible in the process table when r10k is running. If you
219
+ choose to supply SVN credentials make sure that the system running r10k is
220
+ appropriately secured.
221
+
222
+ ### Local
223
+
224
+ In the event you want to store locally written modules in your r10k-managed
225
+ repository in the Puppetfile managed path, you can use the `:local` type.
226
+
227
+ For instance, if you have a Git repository with the following structure:
228
+
229
+ ```
230
+ # tree -L 2
231
+ .
232
+ ├── environment.conf
233
+ ├── modules
234
+ │   └── local_module
235
+ └── Puppetfile
236
+
237
+ 4 directories, 2 files
238
+ ```
239
+
240
+ And you want to prevent `local_module` from being removed, you can add a 'local'
241
+ module in your Puppetfile:
242
+
243
+ ```
244
+ mod 'local_module', :local => true
245
+
246
+ # Include your other modules as normal
247
+ mod 'branan/eight_hundred'
248
+ mod 'puppetlabs/apache'
249
+ ```
250
+
251
+ If you run r10k against this Git branch, you'll get the following:
252
+
253
+ ```
254
+ # tree -L 2
255
+ .
256
+ ├── environment.conf
257
+ ├── modules
258
+ │   ├── apache
259
+ │   ├── eight_hundred
260
+ │   └── local_module
261
+ └── Puppetfile
262
+
263
+ 4 directories, 2 files
264
+ ```
265
+
266
+ #### Caveats
267
+
268
+ This is a workaround for r10k not being able to determine that modules
269
+ created via VCS should not be purged, but is not meant to be a long term
270
+ solution. The general practice around having local and remote modules in the
271
+ same Git repository is to move modules versioned into a separate directory, like
272
+ so:
273
+
274
+ ```
275
+ # tree -L 2
276
+ .
277
+ ├── environment.conf
278
+ ├── site-modules
279
+ │   └── local_module
280
+ ├── modules
281
+ │   ├── apache
282
+ │   └── eight_hundred
283
+ └── Puppetfile
284
+
285
+ 4 directories, 2 files
286
+ ```
287
+
288
+ Moving modules stored in the Git repository into a separate directory will
289
+ remove the need to have Puppetfile entries for every locally versioned Puppet
290
+ module.
291
+
292
+ For more information see the [FAQ entry](faq.mkd#how-do-i-prevent-r10k-from-removing-modules-in-the-modules-directory-of-my-git-repository)
293
+ on managing internal and external modules in the same directory.
294
+
295
+ ### Per-Item Install Path
296
+
297
+ Git and SVN content types support installing into an alternate path without changing
298
+ the value of moduledir by specifying an 'install\_path' option:
299
+
300
+ ```
301
+ # This will install the 'apache' module into 'external/apache'.
302
+ mod 'apache',
303
+ :git => 'git@github.com:puppetlabs/puppetlabs-apache.git',
304
+ :install_path => 'external'
305
+ ```
306
+
307
+ The given 'install\_path' can be an absolute path or a path relative to the base of
308
+ the environment. Note that r10k will exit with an error if you attempt to set the
309
+ 'path' option to a directory outside of the environment.
@@ -0,0 +1,38 @@
1
+ Updating Your Puppetfile
2
+ ========================
3
+
4
+ Over time, your Puppetfile may become stale and reference older versions of modules or miss dependencies for the modules. Your Puppetfile will require maintenance to keep it up to date.
5
+
6
+ Manual Updates
7
+ --------------
8
+
9
+ You can manually update your Puppetfile very easily. By visiting the module's homepage on the [Puppet Forge](https://forge.puppetlabs.com/), you can determine the new version of a module and update it:
10
+
11
+ # Original
12
+ mod 'puppetlabs/apache', '0.10.0'
13
+
14
+ # New
15
+ mod 'puppetlabs/apache', '1.0.0'
16
+
17
+ When using a module directly from a git/svn repo, the `:tag` or `:ref` should be updated:
18
+
19
+ # Original
20
+ mod 'apache',
21
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache',
22
+ :tag => '0.10.0'
23
+
24
+ # Original
25
+ mod 'apache',
26
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache',
27
+ :tag => '1.0.0'
28
+
29
+ Dependency tracking can be done on the Puppet Forge as well by looking at the Dependency tab (Ex: [puppetlabs/apache](https://forge.puppetlabs.com/puppetlabs/apache/dependencies) and visiting each module in turn, or examining `metadata.json` in non-forge modules.
30
+
31
+ Automatic Updates
32
+ -----------------
33
+
34
+ The manual update process is sufficient when updating a small number of modules for a specific effort. Automatic tooling is helpful when updating a lengthier number of modules and for scheduled updates. A number of tools have been provided by the Puppet user community to assist with this. You are encouraged to review each tool before using them, and use of these tools is at your own risk.
35
+
36
+ * [ra10ke](https://rubygems.org/gems/ra10ke) ([project page](https://github.com/tampakrap/ra10ke/)) - A set of rake tasks to scan the Puppetfile for out of date modules
37
+ * [puppetfile-updater](https://rubygems.org/gems/puppetfile-updater/) ([project page](https://github.com/camptocamp/puppetfile-updater)) - A set of rake tasks to scan the Puppetfile, find newer versions, update the Puppetfile, and commit the changes.
38
+ * [generate-puppetfile](https://rubygems.org/gems/generate-puppetfile) ([project page](https://github.com/rnelson0/puppet-generate-puppetfile)) - A command line tool to generate raw Puppetfiles, update existing Puppetfiles, and optionally generate a `.fixtures.yml` file.