r10k 1.4.2 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (244) hide show
  1. data/.travis.yml +2 -0
  2. data/CHANGELOG.mkd +192 -0
  3. data/CONTRIBUTING.mkd +3 -3
  4. data/Gemfile +4 -0
  5. data/README.mkd +13 -6
  6. data/doc/dynamic-environments/configuration.mkd +77 -8
  7. data/doc/dynamic-environments/git-environments.mkd +12 -2
  8. data/doc/dynamic-environments/quickstart.mkd +6 -0
  9. data/doc/faq.mkd +6 -6
  10. data/doc/git/cloning-and-mirroring.mkd +60 -0
  11. data/doc/git/providers.mkd +68 -0
  12. data/integration/Gemfile +3 -0
  13. data/integration/README.mkd +29 -0
  14. data/integration/configs/README.mkd +7 -0
  15. data/integration/configs/pe/centos-6-64mda +25 -0
  16. data/integration/configs/pe/centos-7-64mda +25 -0
  17. data/integration/configs/pe/debian-6-64mda +25 -0
  18. data/integration/configs/pe/debian-7-64mda +25 -0
  19. data/integration/configs/pe/redhat-6-64mda +25 -0
  20. data/integration/configs/pe/redhat-7-64mda +25 -0
  21. data/integration/configs/pe/sles-11-64mda +25 -0
  22. data/integration/configs/pe/ubuntu-1004-64mda +25 -0
  23. data/integration/configs/pe/ubuntu-1204-64mda +25 -0
  24. data/integration/configs/pe/ubuntu-1404-64mda +25 -0
  25. data/integration/files/README.mkd +4 -0
  26. data/integration/files/hiera.yaml +8 -0
  27. data/integration/files/modules/helloworld/manifests/init.pp +3 -0
  28. data/integration/files/modules/hieratest/manifests/init.pp +3 -0
  29. data/integration/files/modules/unicode/files/pretend_unicode +1 -0
  30. data/integration/files/modules/unicode/manifests/init.pp +6 -0
  31. data/integration/files/pre-suite/prod_env.config +3 -0
  32. data/integration/files/r10k_conf.yaml.erb +9 -0
  33. data/integration/lib/README.mkd +4 -0
  34. data/integration/lib/git_utils.rb +205 -0
  35. data/integration/lib/master_manipulator.rb +205 -0
  36. data/integration/lib/r10k_utils.rb +166 -0
  37. data/integration/manifests/README.mkd +4 -0
  38. data/integration/pre-suite/00_pe_install.rb +4 -0
  39. data/integration/pre-suite/01_git_config.rb +59 -0
  40. data/integration/pre-suite/02_pe_r10k.rb +60 -0
  41. data/integration/pre-suite/03_test_utils.rb +17 -0
  42. data/integration/pre-suite/README.mkd +5 -0
  43. data/integration/test_run_scripts/README.mkd +5 -0
  44. data/integration/test_run_scripts/all_tests-rugged-pe-centos6.sh +20 -0
  45. data/integration/test_run_scripts/all_tests-rugged-pe-rhel7.sh +20 -0
  46. data/integration/test_run_scripts/all_tests-rugged-pe-sles11.sh +20 -0
  47. data/integration/test_run_scripts/all_tests-rugged-pe-ubuntu1204.sh +20 -0
  48. data/integration/test_run_scripts/all_tests-rugged-pe-ubuntu1404.sh +20 -0
  49. data/integration/test_run_scripts/all_tests-shellgit-pe-centos6.sh +20 -0
  50. data/integration/test_run_scripts/all_tests-shellgit-pe-rhel7.sh +20 -0
  51. data/integration/test_run_scripts/all_tests-shellgit-pe-sles11.sh +20 -0
  52. data/integration/test_run_scripts/all_tests-shellgit-pe-ubuntu1204.sh +20 -0
  53. data/integration/test_run_scripts/all_tests-shellgit-pe-ubuntu1404.sh +20 -0
  54. data/integration/test_run_scripts/basic_functionality/all_tests-pe-centos6.sh +20 -0
  55. data/integration/test_run_scripts/command_line/all_tests-pe-centos6.sh +20 -0
  56. data/integration/test_run_scripts/git_source/all_tests-pe-centos6.sh +20 -0
  57. data/integration/test_run_scripts/user_scenario/basic_workflow/all_tests-pe-centos6.sh +20 -0
  58. data/integration/test_run_scripts/user_scenario/complex_workflow/all_tests-pe-centos6.sh +20 -0
  59. data/integration/tests/README.mkd +4 -0
  60. data/integration/tests/basic_functionality/negative/neg_deploy_with_invalid_r10k_yaml.rb +46 -0
  61. data/integration/tests/basic_functionality/negative/neg_deploy_with_missing_r10k_yaml.rb +27 -0
  62. data/integration/tests/command_line/deploy_env_without_mod_update.rb +75 -0
  63. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +76 -0
  64. data/integration/tests/command_line/negative/neg_invalid_cli_dep_flag.rb +22 -0
  65. data/integration/tests/command_line/negative/neg_invalid_cli_env_flag.rb +22 -0
  66. data/integration/tests/command_line/negative/neg_invalid_cmd_line_arg.rb +24 -0
  67. data/integration/tests/git_source/git_source_git.rb +123 -0
  68. data/integration/tests/git_source/git_source_ssh.rb +84 -0
  69. data/integration/tests/git_source/git_source_submodule.rb +69 -0
  70. data/integration/tests/git_source/negative/neg_git_broken_remote.rb +37 -0
  71. data/integration/tests/git_source/negative/neg_git_unauthorized_https.rb +45 -0
  72. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +72 -0
  73. data/integration/tests/git_source/negative/neg_git_unicode_branch.rb +34 -0
  74. data/integration/tests/user_scenario/basic_workflow/multi_env_1000_branches.rb +66 -0
  75. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +110 -0
  76. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +113 -0
  77. data/integration/tests/user_scenario/basic_workflow/multi_env_hiera.rb +93 -0
  78. data/integration/tests/user_scenario/basic_workflow/multi_env_multi_source.rb +132 -0
  79. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +160 -0
  80. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_basedir.rb +45 -0
  81. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +43 -0
  82. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +40 -0
  83. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +42 -0
  84. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_remote.rb +44 -0
  85. data/integration/tests/user_scenario/basic_workflow/negative/neg_branch_name_collision.rb +63 -0
  86. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +73 -0
  87. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +45 -0
  88. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +51 -0
  89. data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_env_name.rb +33 -0
  90. data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_puppet_file.rb +35 -0
  91. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +44 -0
  92. data/integration/tests/user_scenario/basic_workflow/negative/neg_read_only.rb +57 -0
  93. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +44 -0
  94. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +73 -0
  95. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +103 -0
  96. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +80 -0
  97. data/integration/tests/user_scenario/basic_workflow/single_env_custom_module.rb +48 -0
  98. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +73 -0
  99. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +81 -0
  100. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +67 -0
  101. data/integration/tests/user_scenario/basic_workflow/single_env_non-existent_base_dir.rb +93 -0
  102. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +92 -0
  103. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +116 -0
  104. data/integration/tests/user_scenario/basic_workflow/single_env_unicode_paths.rb +59 -0
  105. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +165 -0
  106. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +162 -0
  107. data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +110 -0
  108. data/lib/r10k/action/cri_runner.rb +10 -13
  109. data/lib/r10k/cli.rb +3 -8
  110. data/lib/r10k/cli/version.rb +10 -1
  111. data/lib/r10k/deployment/config.rb +26 -6
  112. data/lib/r10k/deployment/config/loader.rb +38 -29
  113. data/lib/r10k/deployment/source.rb +2 -4
  114. data/lib/r10k/environment/git.rb +10 -19
  115. data/lib/r10k/environment/name.rb +86 -0
  116. data/lib/r10k/errors.rb +8 -5
  117. data/lib/r10k/feature.rb +35 -0
  118. data/lib/r10k/feature/collection.rb +23 -0
  119. data/lib/r10k/features.rb +18 -0
  120. data/lib/r10k/git.rb +106 -12
  121. data/lib/r10k/git/alternates.rb +2 -2
  122. data/lib/r10k/git/cache.rb +43 -26
  123. data/lib/r10k/git/errors.rb +12 -6
  124. data/lib/r10k/git/head.rb +3 -0
  125. data/lib/r10k/git/ref.rb +3 -0
  126. data/lib/r10k/git/remote_head.rb +6 -0
  127. data/lib/r10k/git/repository.rb +6 -0
  128. data/lib/r10k/git/rugged.rb +17 -0
  129. data/lib/r10k/git/rugged/bare_repository.rb +86 -0
  130. data/lib/r10k/git/rugged/base_repository.rb +90 -0
  131. data/lib/r10k/git/rugged/cache.rb +11 -0
  132. data/lib/r10k/git/rugged/thin_repository.rb +72 -0
  133. data/lib/r10k/git/rugged/working_repository.rb +99 -0
  134. data/lib/r10k/git/shellgit.rb +9 -0
  135. data/lib/r10k/git/shellgit/bare_repository.rb +29 -0
  136. data/lib/r10k/git/shellgit/base_repository.rb +102 -0
  137. data/lib/r10k/git/shellgit/cache.rb +11 -0
  138. data/lib/r10k/git/shellgit/thin_repository.rb +56 -0
  139. data/lib/r10k/git/shellgit/working_repository.rb +73 -0
  140. data/lib/r10k/git/stateful_repository.rb +80 -0
  141. data/lib/r10k/git/tag.rb +3 -0
  142. data/lib/r10k/git/working_dir.rb +15 -2
  143. data/lib/r10k/logging.rb +73 -36
  144. data/lib/r10k/logging/terminaloutputter.rb +36 -0
  145. data/lib/r10k/module/forge.rb +10 -9
  146. data/lib/r10k/module/git.rb +14 -44
  147. data/lib/r10k/module/metadata_file.rb +31 -0
  148. data/lib/r10k/module/svn.rb +0 -1
  149. data/lib/r10k/module_repository/forge.rb +20 -7
  150. data/lib/r10k/puppetfile.rb +1 -1
  151. data/lib/r10k/settings/container.rb +6 -0
  152. data/lib/r10k/settings/mixin.rb +9 -0
  153. data/lib/r10k/source.rb +2 -3
  154. data/lib/r10k/source/base.rb +5 -5
  155. data/lib/r10k/source/git.rb +11 -86
  156. data/lib/r10k/source/svn.rb +8 -52
  157. data/lib/r10k/util/basedir.rb +4 -4
  158. data/lib/r10k/util/commands.rb +31 -0
  159. data/lib/r10k/util/exec_env.rb +36 -0
  160. data/lib/r10k/util/platform.rb +4 -0
  161. data/lib/r10k/util/purgeable.rb +2 -2
  162. data/lib/r10k/util/subprocess.rb +3 -7
  163. data/lib/r10k/util/subprocess/runner.rb +3 -28
  164. data/lib/r10k/util/subprocess/runner/posix.rb +103 -0
  165. data/lib/r10k/util/subprocess/runner/pump.rb +59 -0
  166. data/lib/r10k/util/subprocess/{windows/runner.rb → runner/windows.rb} +2 -11
  167. data/lib/r10k/util/symbolize_keys.rb +31 -0
  168. data/lib/r10k/version.rb +1 -1
  169. data/lib/shared/puppet/module_tool/metadata.rb +197 -0
  170. data/r10k.gemspec +7 -5
  171. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  172. data/spec/fixtures/module/forge/bad_module/metadata.json +1 -0
  173. data/spec/fixtures/unit/util/subprocess/posix/runner/no-execute.sh +3 -0
  174. data/spec/fixtures/vcr/cassettes/R10K_ModuleRepository_Forge/and_the_expected_version_is_latest/can_fetch_all_versions_of_a_given_module.yml +171 -26
  175. data/spec/fixtures/vcr/cassettes/R10K_ModuleRepository_Forge/and_the_expected_version_is_latest/can_fetch_the_latest_version_of_a_given_module.yml +171 -26
  176. data/spec/fixtures/vcr/cassettes/R10K_ModuleRepository_Forge/and_the_expected_version_is_latest/ignores_deleted_releases.yml +190 -0
  177. data/spec/fixtures/vcr/cassettes/R10K_ModuleRepository_Forge/it_handles_errors_from_forgeapi_puppetlabs_com/raises_an_error_for_a_non-existant_module.yml +34 -0
  178. data/spec/fixtures/vcr/cassettes/R10K_Module_Forge/and_the_expected_version_is_latest/sets_the_expected_version_based_on_the_latest_forge_version.yml +87 -26
  179. data/spec/integration/git/rugged/bare_repository_spec.rb +13 -0
  180. data/spec/integration/git/rugged/thin_repository_spec.rb +14 -0
  181. data/spec/integration/git/rugged/working_repository_spec.rb +13 -0
  182. data/spec/integration/git/shellgit/bare_repository_spec.rb +13 -0
  183. data/spec/integration/git/shellgit/thin_repository_spec.rb +14 -0
  184. data/spec/integration/git/shellgit/working_repository_spec.rb +13 -0
  185. data/spec/integration/git/stateful_repository_spec.rb +104 -0
  186. data/spec/matchers/match_realpath.rb +18 -0
  187. data/spec/shared-contexts/git-fixtures.rb +55 -0
  188. data/spec/shared-examples/git-repository.rb +38 -0
  189. data/spec/shared-examples/git/bare_repository.rb +70 -0
  190. data/spec/shared-examples/git/thin_repository.rb +26 -0
  191. data/spec/shared-examples/git/working_repository.rb +115 -0
  192. data/spec/shared-examples/subprocess-runner.rb +83 -0
  193. data/spec/spec_helper.rb +13 -9
  194. data/spec/unit/action/cri_runner_spec.rb +0 -6
  195. data/spec/unit/action/puppetfile/{cri_action_spec.rb → cri_runner_spec.rb} +0 -0
  196. data/spec/unit/deployment/config/loader_spec.rb +48 -0
  197. data/spec/unit/deployment/config_spec.rb +49 -0
  198. data/spec/unit/environment/git_spec.rb +5 -39
  199. data/spec/unit/environment/name_spec.rb +135 -0
  200. data/spec/unit/feature_spec.rb +50 -0
  201. data/spec/unit/git/alternates_spec.rb +1 -1
  202. data/spec/unit/git/cache_spec.rb +32 -19
  203. data/spec/unit/git/commit_spec.rb +1 -0
  204. data/spec/unit/git/head_spec.rb +1 -6
  205. data/spec/unit/git/ref_spec.rb +0 -23
  206. data/spec/unit/git/rugged/cache_spec.rb +26 -0
  207. data/spec/unit/git/shellgit/cache_spec.rb +27 -0
  208. data/spec/unit/git/stateful_repository_spec.rb +43 -0
  209. data/spec/unit/git/tag_spec.rb +1 -0
  210. data/spec/unit/git/working_dir_spec.rb +1 -0
  211. data/spec/unit/git_spec.rb +74 -0
  212. data/spec/unit/logging/terminaloutputter_spec.rb +53 -0
  213. data/spec/unit/logging_spec.rb +68 -0
  214. data/spec/unit/module/forge_spec.rb +7 -38
  215. data/spec/unit/module/git_spec.rb +7 -38
  216. data/spec/unit/module/metadata_file_spec.rb +69 -0
  217. data/spec/unit/module/svn_spec.rb +0 -4
  218. data/spec/unit/module_repository/forge_spec.rb +22 -1
  219. data/spec/unit/puppet/module_tool/metadata_spec.rb +301 -0
  220. data/spec/unit/settings/container_spec.rb +17 -0
  221. data/spec/unit/source/git_spec.rb +0 -123
  222. data/spec/unit/source/svn_spec.rb +66 -0
  223. data/spec/unit/util/commands_spec.rb +61 -0
  224. data/spec/unit/util/exec_env_spec.rb +56 -0
  225. data/spec/unit/util/subprocess/runner/posix_spec.rb +7 -0
  226. data/spec/unit/util/subprocess/runner/pump_spec.rb +79 -0
  227. data/spec/unit/util/subprocess_spec.rb +3 -2
  228. data/spec/unit/util/symbolize_keys_spec.rb +51 -0
  229. metadata +226 -45
  230. data/lib/r10k/execution.rb +0 -47
  231. data/lib/r10k/module/metadata.rb +0 -47
  232. data/lib/r10k/util/core_ext/hash_ext.rb +0 -19
  233. data/lib/r10k/util/subprocess/io.rb +0 -7
  234. data/lib/r10k/util/subprocess/posix.rb +0 -4
  235. data/lib/r10k/util/subprocess/posix/io.rb +0 -7
  236. data/lib/r10k/util/subprocess/posix/runner.rb +0 -140
  237. data/lib/r10k/util/subprocess/windows.rb +0 -4
  238. data/lib/r10k/util/subprocess/windows/io.rb +0 -6
  239. data/spec/fixtures/vcr/cassettes/R10K_ModuleRepository_Forge/looking_up_versions.yml +0 -42
  240. data/spec/fixtures/vcr/cassettes/R10K_ModuleRepository_Forge/looking_up_versions/can_fetch_all_versions_of_a_given_module.yml +0 -42
  241. data/spec/fixtures/vcr/cassettes/R10K_ModuleRepository_Forge/looking_up_versions/can_fetch_the_latest_version_of_a_given_module.yml +0 -42
  242. data/spec/unit/deployment/source_spec.rb +0 -24
  243. data/spec/unit/module/metadata_spec.rb +0 -68
  244. data/spec/unit/util/core_ext/hash_ext_spec.rb +0 -63
@@ -4,7 +4,9 @@ bundler_args: "--without system"
4
4
  script: "bundle exec rspec --color --format documentation spec/unit"
5
5
  notifications:
6
6
  email: false
7
+ sudo: false
7
8
  rvm:
9
+ - "2.2.0"
8
10
  - "2.1.0"
9
11
  - "2.0.0"
10
12
  - "1.9.3"
@@ -1,6 +1,198 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ 1.5.1
5
+ -----
6
+
7
+ 2015/04/09
8
+
9
+ ### Thanks
10
+
11
+ Thanks to all the users that helped track down RK-86, and Zack Smith in specific
12
+ for tracing the source of the bug.
13
+
14
+ ### User notes
15
+
16
+ (RK-62) Warn when Rugged is compiled without SSH or HTTPS transports
17
+
18
+ If Rugged/libgit2 was compiled without libssh2, trying to access a Git
19
+ repository via SSH throws a fairly cryptic error. It's not terribly easy to
20
+ specially handle the error message that's being logged, but in lieu of that r10k
21
+ now checks the Rugged gem to make sure it's compiled with support for SSH and
22
+ HTTPS when the Rugged Git provider is used.
23
+
24
+ (RK-79) Bump minimum required version of faraday_middlware-multi_json
25
+
26
+ Faraday 0.9.0 changed the API for middleware plugins, which made it incompatible
27
+ with the faraday_middleware-multi_json plugin. That plugin supported the new API
28
+ in version 0.0.6 but the minimum required version in the r10k gemspec was not
29
+ updated, allowing r10k to be installed with incompatible versions of faraday and
30
+ faraday_middleware-multi_json. This has been fixed by requiring the minimum
31
+ compatible version of faraday_middleware-multi_json.
32
+
33
+ (RK-86) Git modules don't properly track branches
34
+
35
+ R10k 1.5.0 added smarter syncing for Git caches to reduce network traffic, but
36
+ it accidentally caused branches to stop tracking changes to the remote branch.
37
+ This has been fixed and the pre-1.5.0 behavior has been restored.
38
+
39
+ 1.5.0
40
+ -----
41
+
42
+ 2015/04/02
43
+
44
+ ### Announcements
45
+
46
+ Ruby 1.8.7 has had a good run, but it's time for r10k to think about moving on.
47
+ As of r10k 1.5.0, support for Ruby 1.8.7 is officially deprecated. Issues
48
+ affecting Ruby 1.8.7 will still be fixed, but will be of lower priority. Support
49
+ for Ruby 1.8.7 will be dropped entirely in r10k 2.0.0.
50
+
51
+ ### Thanks
52
+
53
+ Thanks to the following contributors for their work on this release:
54
+
55
+ * [Brett Swift](https://github.com/brettswift) for adding custom prefix values
56
+ for sources (RK-35)
57
+ * [Eli Young](https://github.com/elyscape) for adding additional debug
58
+ information to `r10k version` (RK-37)
59
+ * [Pete Fritchman](https://github.com/fetep) for removing a warning generated
60
+ under Ruby 2.2 (RK-55)
61
+ * [Theo Chatzimichos](https://github.com/tampakrap) for updating the
62
+ dependency versions for r10k
63
+ * [ETL](https://github.com/etlweather), [Ben S](https://github.com/juniorsysadmin),
64
+ and [Robert Nelson](https://github.com/rnelson0) for their documentation
65
+ contributions
66
+
67
+ ### User notes
68
+
69
+ (GH-57) Git based modules fail to detect presence of git binary
70
+
71
+ As part of RK-17, r10k now checks to make sure that the `git` binary is present
72
+ and executable before trying to run any commands. If Git is missing, r10k will
73
+ fail hard instead of trying to run and failing on the first failed command.
74
+
75
+ (GH-195) (RK-35) Allow sources to specify a custom prefix string
76
+
77
+ For r10k deployments that have separate sources for Puppet code and Hiera data,
78
+ the created environment paths must line up between the code and data repos. With
79
+ basic prefixing where the source name is used as the prefix string, it's not
80
+ possible to use prefixing and commonly named environments. This has been fixed
81
+ so that the source `prefix` option can be given true, false, or a string which
82
+ is a custom value to use for prefixing.
83
+
84
+ (RK-17) Add rugged/libgit2 based Git implementation
85
+
86
+ The libgit2 library and Ruby rugged gem provide a native interface to Git for
87
+ Ruby that is faster and more consistent than shelling out to Git. An additional
88
+ rugged based Git implementation has been added along the original 'shellgit'
89
+ implementation, and the implementations can be swapped out as needed.
90
+
91
+ (RK-24) Add '/etc/puppetlabs/r10k/r10k.yaml' to config search path
92
+
93
+ In order to be more consistent with the rest of the Puppet ecosystem, r10k will
94
+ now check for configuration in a standard location inside of '/etc/puppetlabs'.
95
+ The old location, '/etc/r10k.yaml' is still respected so no configuration change
96
+ is needed at this point, although the old location will be deprecated in the
97
+ future.
98
+
99
+ (RK-25) Warn if both '/etc/r10k.yaml' and '/etc/puppetlabs/r10k/r10k.yaml' exist
100
+
101
+ (RK-31) Remove undocumented search for 'r10k.yaml'
102
+
103
+ Early versions of r10k would try to search for 'r10k.yaml' in parent
104
+ directories, in the same manner that programs like Git and Bundler recursively
105
+ search for configuration. However this functionality isn't terribly useful, is a
106
+ bit surprising, and adds a lot of complexity. This behavior has been removed in
107
+ 1.5.0.
108
+
109
+ (RK-32, RK-33, RK-38) Provide configuration options for Git providers
110
+
111
+ The r10k Git providers can now be selected and configured via configuration in
112
+ r10k.yaml. See the [Git specific documentation](doc/git) for more information on
113
+ these settings.
114
+
115
+ (RK-37) Support higher verbosity levels for `r10k version`
116
+
117
+ If `r10k version` is run with the `--verbose` flag, diagnostic information about
118
+ r10k will be included along with version information.
119
+
120
+ (RK-39, RK-66) Improved logging/messaging
121
+
122
+ R10k now logs more information about what's going on and is more consistent
123
+ about which levels it displays messages.
124
+
125
+ (RK-74) Improved log formatting
126
+
127
+ The log formatting that r10k uses was added in some distant point in the past
128
+ where there were few users, and wasn't really designed with users in mind. The
129
+ formatting has been improved so that at lower log levels the formatting will
130
+ include the log level and nothing else, and at higher levels it will include
131
+ timing information.
132
+
133
+ (RK-75) Optional log coloring
134
+
135
+ At higher log levels r10k can produce a lot of logging information at a rapid
136
+ rate, and in general errors and warnings are not very visually distinct and easy
137
+ to miss. To help solve these problems r10k 1.5.0 now has optional colored
138
+ logging to help provide more information/context at a glance. Coloring can be
139
+ enabled with the `--color` option.
140
+
141
+ (GH-265) (RK-11) Unix commands with > 64KiB of output no longer deadlock
142
+
143
+ Unix pipes have a maximum buffer size of 64KiB, and if the pipe buffer fills
144
+ then subsequent writes will block. Since r10k used to wait for a subprocess to
145
+ finish before reading from the attached pipes, if the process filled the buffers
146
+ then the processes would deadlock.
147
+
148
+ This has been fixed by continually reading from the subprocess pipes to prevent
149
+ the buffers from filling up.
150
+
151
+ Unfortunately implementing this correctly requires reading from the pipes until
152
+ EOF, which breaks the ssh ControlPersist functionality. Supporting both the
153
+ ControlPersist functionality while preventing deadlock introduces too many
154
+ potential race conditions, so unfortunately workarounds for this issue can't be
155
+ accepted.
156
+
157
+ See https://bugzilla.mindrot.org/show_bug.cgi?id=1988 for more information about
158
+ the ssh ControlPersist bug.
159
+
160
+ ### Developer notes
161
+
162
+ (GH-142) Use Forge v3 API
163
+
164
+ R10k was using the old and deprecated v1 Forge API to determine the latest
165
+ version of Forge modules when using the `:latest` module version. This has been
166
+ fixed so that the v3 API is used.
167
+
168
+ (RK-16) Decouple Git platform dependent and independent code
169
+
170
+ The original code that interfaced r10k and Git was very tightly coupled; there
171
+ was no defined interface and it was expected that r10k would always shell out to
172
+ Git. This has been fixed by extracting the shellout specific code to a library
173
+ and defining a common interface for Git classes so that different Git
174
+ implementations can be used. The existing shellout implementation has been
175
+ renamed to 'shellgit' and should be functionally equivalent to the Git
176
+ implementation in previous versions of r10k.
177
+
178
+ (RK-55, GH-355) Prevent warnings on Ruby 2.2
179
+
180
+ Ruby 2.2 generates warnings when comparing values and `#<=>` raises an
181
+ exception; the code triggering this behavior has been cleaned up to prevent a
182
+ warning from being logged.
183
+
184
+ (RK-65) Switch to using the semantic_puppet gem
185
+
186
+ R10k is switching from the old vendored copy of 'SemVer' that was stolen from
187
+ Puppet to the 'semantic_puppet' gem, which is the library that Puppet now uses
188
+ for version comparisons and parsing.
189
+
190
+ (RK-48) Ignore deleted versions when fetching latest module version
191
+
192
+ When looking up the latest version of a module on the Forge, if the latest
193
+ version had been deleted r10k would try to install that deleted version anyways.
194
+ This has been fixed so that all deleted module releases will be ignored.
195
+
4
196
  1.4.2
5
197
  -----
6
198
 
@@ -8,7 +8,7 @@ tracker][github-issue-tracker]. When filing a bug report or feature request,
8
8
  please spend a moment to look for existing issue reports and update those with
9
9
  additional information if possible.
10
10
 
11
- [github-issue-tracker]: https://github.com/adrienthebo/r10k/issues
11
+ [github-issue-tracker]: https://github.com/puppetlabs/r10k/issues
12
12
 
13
13
  ### Bug reports
14
14
 
@@ -57,7 +57,7 @@ Contributing fixes and improvements to the core documentation is a great way to
57
57
  help improve R10K. Improvements to the FAQ, example code, and so forth can go a
58
58
  long way towards making R10K more approachable for new users and existing users
59
59
  alike. For more information about the submission process please see the section
60
- on [code contributions][#code-contributions].
60
+ on [code contributions](#code-contributions).
61
61
 
62
62
  ## Code contributions
63
63
 
@@ -75,7 +75,7 @@ guide.
75
75
  * To create a new topic branch; `git checkout -b fix/master/my_contribution master`
76
76
  * Please avoid working directly on the 'master' branch.
77
77
  * Make commits of logical units.
78
- * Your commit should include a high level description of your work in HISTORY.textile
78
+ * Your commit message should include a high level description of your work.
79
79
  * Check for unnecessary whitespace with `git diff --check` before committing.
80
80
 
81
81
  ```
data/Gemfile CHANGED
@@ -2,6 +2,10 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ group :extra do
6
+ gem 'rugged', '~> 0.21.4' if RUBY_VERSION > '1.8.7'
7
+ end
8
+
5
9
  group :development do
6
10
  gem 'simplecov', '~> 0.9.1' if RUBY_VERSION > '1.8.7'
7
11
  end
data/README.mkd CHANGED
@@ -3,16 +3,15 @@ r10k
3
3
 
4
4
  Puppet environment and module deployment
5
5
 
6
- [![Build Status](https://travis-ci.org/adrienthebo/r10k.png?branch=master)](https://travis-ci.org/adrienthebo/r10k)
6
+ [![Build Status](https://travis-ci.org/puppetlabs/r10k.png?branch=master)](https://travis-ci.org/puppetlabs/r10k)
7
7
 
8
8
  Description
9
9
  -----------
10
10
 
11
- [librarian-puppet]: https://github.com/rodjek/librarian-puppet
12
11
  [workflow]: http://puppetlabs.com/blog/git-workflow-and-puppet-environments/
13
12
 
14
13
  R10k provides a general purpose toolset for deploying Puppet environments and
15
- modules. It implements the [Puppetfile][librarian-puppet] format and provides a native
14
+ modules. It implements the [Puppetfile](doc/puppetfile.mkd) format and provides a native
16
15
  implementation of Puppet [dynamic environments][workflow].
17
16
 
18
17
  Requirements
@@ -20,7 +19,7 @@ Requirements
20
19
 
21
20
  R10k supports the following Ruby versions:
22
21
 
23
- - 1.8.7 (POSIX minimum version)
22
+ - 1.8.7 (POSIX minimum version, deprecated)
24
23
  - 1.9.3 (Windows minimum version)
25
24
  - 2.0.0
26
25
  - 2.1.0
@@ -33,6 +32,14 @@ environments and modules.
33
32
  - Git is required for creating environments and modules from Git
34
33
  - SVN is required for creating environments and modules from SVN
35
34
 
35
+ ### Ruby 1.8.7 is deprecated
36
+
37
+ As of r10k 1.5.0, support for Ruby 1.8.7 is deprecated. Because of the
38
+ increasing cost of supporting Ruby 1.8.7, issues only affecting 1.8.7 will be
39
+ fixed but will have a lower priority.
40
+
41
+ Support for 1.8.7 will be dropped entirely in r10k 2.0.0.
42
+
36
43
  Installation
37
44
  ------------
38
45
 
@@ -57,7 +64,7 @@ installation:
57
64
  If you have more specific needs or plan on modifying r10k you can run it out of
58
65
  a git repository using Bundler for dependencies:
59
66
 
60
- git clone git://github.com/adrienthebo/r10k
67
+ git clone git://github.com/puppetlabs/r10k
61
68
  cd r10k
62
69
  bundle install
63
70
  bundle exec r10k help
@@ -73,7 +80,7 @@ information see the topic specific documentation:
73
80
  * [Environment Deployment Documentation](doc/dynamic-environments.mkd)
74
81
  * [Quickstart](doc/dynamic-environments/quickstart.mkd)
75
82
  * [Common Patterns](doc/common-patterns.mkd)
76
- * [Workflow Guide](doc/workflow-guide.mkd)
83
+ * [Workflow Guide](doc/dynamic-environments/workflow-guide.mkd)
77
84
 
78
85
  For more general questions, see the [FAQ](doc/faq.mkd).
79
86
 
@@ -7,11 +7,27 @@ deployed.
7
7
  Config file location
8
8
  --------------------
9
9
 
10
- By default r10k will try to read `/etc/r10k.yaml` for configuration settings.
11
- You can specify an alternate configuration file by specifying the `--config`
12
- option, like so:
10
+ ### Manual configuration
13
11
 
14
- r10k deploy -c /srv/puppet/r10k.yaml
12
+ An explicit configuration file location be specified by providing the `--config`
13
+ option to `r10k deploy`, like so:
14
+
15
+ r10k deploy --config /srv/puppet/r10k.yaml [...]
16
+
17
+ ### Automatic configuration
18
+
19
+ If an explicit configuration file is not given, r10k will search the following
20
+ locations for a configuration file.
21
+
22
+ * `{current working directory}/r10k.yaml`
23
+ * `/etc/puppetlabs/r10k/r10k.yaml` (1.5.0 and later)
24
+ * `/etc/r10k.yaml` (deprecated in 1.5.0)
25
+
26
+ In 1.5.0 r10k added `/etc/puppetlabs/r10k/r10k.yaml` to the configuration search
27
+ path. The old location, `/etc/r10k.yaml` has been deprecated in favor of the new
28
+ location. If both `/etc/puppetlabs/r10k/r10k.yaml` and `/etc/r10k.yaml` exist
29
+ and explicit configuration file has not been given, r10k will log a warning and
30
+ use `/etc/puppetlabs/r10k/r10.yaml`.
15
31
 
16
32
  General options
17
33
  ---------------
@@ -36,6 +52,22 @@ The cachedir setting defaults to `~/.r10k`. If the HOME environment variable is
36
52
  unset r10k will assume that r10k is being run with the Puppet [`prerun_command`][prerun_command]
37
53
  setting and will set the cachedir default to `/root/.r10k`.
38
54
 
55
+ ### git
56
+
57
+ The 'git' setting is a hash that contains Git specific settings.
58
+
59
+ #### provider
60
+
61
+ The provider option determines which Git provider should be used.
62
+
63
+ ```yaml
64
+ git:
65
+ provider: rugged # one of shellgit, rugged
66
+ ```
67
+
68
+ See the [git provider documentation](../git/providers.mkd) for more information
69
+ regarding Git providers.
70
+
39
71
  Deployment options
40
72
  ------------------
41
73
 
@@ -84,7 +116,7 @@ from. It may be any valid URL that the source may check out or clone. The remote
84
116
  must be able to be fetched without any interactive input, eg usernames or
85
117
  passwords cannot be prompted for in order to fetch the remote.
86
118
 
87
- ```
119
+ ```yaml
88
120
  ---
89
121
  sources:
90
122
  mysource:
@@ -104,9 +136,11 @@ sources:
104
136
  basedir: '/etc/puppet/environments'
105
137
  ```
106
138
 
107
- R10k will not check to make sure that different sources collide in a single base
108
- directory; if you are using multiple sources you are responsible for making sure
109
- that they do not overwrite each other. See also the prefix setting.
139
+ If two different sources have the same basedir, it's possible for them to create
140
+ two separate environments with the same name and file path. If this occurs r10k
141
+ will treat this as a fatal error and will abort. To avoid this, use prefixing on one
142
+ or both of the sources to make sure that all environment names are unique. See
143
+ also the [prefix](#prefix) setting.
110
144
 
111
145
  ### prefix
112
146
 
@@ -121,6 +155,10 @@ sources:
121
155
  basedir: '/etc/puppet/environments'
122
156
  prefix: true # All environments will be prefixed with "mysource_"
123
157
  ```
158
+ #### prefix behaviour
159
+ * if `true` environment folder will be prefixed with the name of the source.
160
+ * if `false` (default) environment folder will not be prefixed
161
+ * if `String` environment folder will be prefixed with the `prefix` value.
124
162
 
125
163
  Examples
126
164
  --------
@@ -190,3 +228,34 @@ This will create the following directory structure:
190
228
  `-- dev_loadtest # dev repository, loadtest branch
191
229
  ```
192
230
 
231
+ #### Multiple tenancy with external hieradata
232
+
233
+ If hiera data is in a separate repository from your control repository, you
234
+ must override the `prefix` so environment folders line up in both directories:
235
+
236
+ ```yaml
237
+ ---
238
+ sources:
239
+ main:
240
+ app1_data:
241
+ remote: 'git://git-server.site/my-org/app1-hieradata'
242
+ basedir: '/etc/puppet/hieradata'
243
+ prefix: "app1"
244
+ app1_modules:
245
+ remote: 'git://git-server.site/my-org/app1-puppet-modules'
246
+ basedir: '/etc/puppet/environments'
247
+ prefix: "app1"
248
+ ```
249
+
250
+
251
+ This will create the following directory structure:
252
+
253
+ ```
254
+ /etc/puppet/environments
255
+ |-- app1_production # app1 modules repository, production branch
256
+ |-- app1_develop # app1 modules repository, develop branch
257
+
258
+ /etc/puppet/hieradata
259
+ |-- app1_production # app1 data repository, production branch
260
+ |-- app1_develop # app1 data repository, develop branch
261
+ ```
@@ -12,7 +12,7 @@ The core idea of dynamic environments is that you should be able to manage your
12
12
  Puppet modules in the same manner that you would manage any other code base. It
13
13
  builds on top of Git topic branch model.
14
14
 
15
- [git-topic-branching]: http://git-scm.com/book/en/Git-Branching-Branching-Workflows#Topic-Branches "Git Topic Branches"
15
+ [git-topic-branching]: http://git-scm.com/book/en/Git-Branching-Branching-Workflows#Topic-Branches
16
16
 
17
17
  One of the most prevalent ways of using Git relies on using [topic branches][git-topic-branching].
18
18
  Whenever changes need to be made that need to be reviewed or tested before going
@@ -22,7 +22,7 @@ is completed it is merged into a "master" or "production" branch. This is very
22
22
  powerful because it allows any number of people to rapidly develop features in
23
23
  isolation and merge features in a single operation.
24
24
 
25
- The dynamic environment model extends extends this git branching strategy to
25
+ The dynamic environment model extends this git branching strategy to
26
26
  your live Puppet masters. It creates a mapping between Git branches and Puppet
27
27
  environments so that you can use the Git branching model and have that be
28
28
  seamlessly reflected in Puppet environments. This means that creating a new Git
@@ -45,6 +45,16 @@ future r10k runs. Finally, if there are directories that do not match existing
45
45
  branches, r10k will assume that the branches for those environments were delete
46
46
  and will remove those environments.
47
47
 
48
+ r10k will need to be be able to authenticate with each repository. Most Git
49
+ systems support authentication with SSH keys. GitHub calls them [deploy
50
+ keys][github-deploy-keys]. Bitbucket calls them [deployment
51
+ keys][bitbucket-deployment-keys]. Stash calls them [SSH access
52
+ keys][stash-access-keys].
53
+
54
+ [github-deploy-keys]: https://developer.github.com/guides/managing-deploy-keys/#deploy-keys
55
+ [bitbucket-deployment-keys]: https://confluence.atlassian.com/display/BITBUCKET/Use+deployment+keys
56
+ [stash-access-keys]: https://confluence.atlassian.com/display/STASH/SSH+access+keys+for+system+use
57
+
48
58
  Configuration
49
59
  -------------
50
60