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,94 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-62 - C62387 - Single Environment Deployed to Non-existent Base Directory Path'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ original_env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
9
+ env_path = '/tmp/puppet/temp/environments'
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ git_environments_path = '/root/environments'
13
+ git_repo_path = '/git_repos'
14
+ git_control_remote = File.join(git_repo_path, 'environments.git')
15
+ git_provider = ENV['GIT_PROVIDER'] || 'shellgit'
16
+
17
+ last_commit = git_last_commit(master, git_environments_path)
18
+ local_files_root_path = ENV['FILES'] || 'files'
19
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
20
+
21
+ r10k_config_path = get_r10k_config_file_path(master)
22
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
23
+
24
+ #In-line files
25
+ r10k_conf = <<-CONF
26
+ cachedir: '/var/cache/r10k'
27
+ git:
28
+ provider: '#{git_provider}'
29
+ sources:
30
+ control:
31
+ basedir: "#{env_path}"
32
+ remote: "#{git_control_remote}"
33
+ CONF
34
+
35
+ #Manifest
36
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
37
+ site_pp = create_site_pp(master_certname, ' include helloworld')
38
+
39
+ #Verification
40
+ notify_message_regex = /I am in the production environment/
41
+
42
+ #Teardown
43
+ teardown do
44
+ step 'Restore Original "environmentpath" Path'
45
+ on(master, puppet("config set environmentpath \"#{original_env_path}\""))
46
+
47
+ step 'Restore Original "r10k" Config'
48
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
49
+
50
+ step 'Remove Temporary Environments Path'
51
+ on(master, "rm -rf #{env_path}")
52
+
53
+ step 'Restart the Puppet Server Service'
54
+ restart_puppet_server(master)
55
+
56
+ clean_up_r10k(master, last_commit, git_environments_path)
57
+ end
58
+
59
+ #Setup
60
+ step 'Backup Current "r10k" Config'
61
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
62
+
63
+ step 'Update the "r10k" Config'
64
+ create_remote_file(master, r10k_config_path, r10k_conf)
65
+
66
+ step 'Change Puppet "environmentpath"'
67
+ on(master, puppet("config set environmentpath \"#{env_path}\""))
68
+
69
+ step 'Restart the Puppet Server Service'
70
+ restart_puppet_server(master)
71
+
72
+ step 'Checkout "production" Branch'
73
+ git_on(master, 'checkout production', git_environments_path)
74
+
75
+ step 'Copy "helloworld" Module to "production" Environment Git Repo'
76
+ scp_to(master, helloworld_module_path, File.join(git_environments_path, "site", 'helloworld'))
77
+
78
+ step 'Inject New "site.pp" to the "production" Environment'
79
+ inject_site_pp(master, site_pp_path, site_pp)
80
+
81
+ step 'Push Changes'
82
+ git_add_commit_push(master, 'production', 'Update site.pp and add module.', git_environments_path)
83
+
84
+ #Tests
85
+ step 'Deploy "production" Environment via r10k'
86
+ on(master, "#{r10k_fqp} deploy environment -v")
87
+
88
+ agents.each do |agent|
89
+ step "Run Puppet Agent"
90
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
91
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
92
+ assert_match(notify_message_regex, result.stdout, 'Expected message not found!')
93
+ end
94
+ end
@@ -0,0 +1,93 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-73 - C63184 - Single Environment Purge Unmanaged Modules'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ git_environments_path = '/root/environments'
9
+ last_commit = git_last_commit(master, git_environments_path)
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ #Verification
13
+ motd_path = '/etc/motd'
14
+ motd_contents = 'Hello!'
15
+ motd_contents_regex = /\A#{motd_contents}\z/
16
+
17
+ error_message_regex = /Blah/
18
+
19
+ #File
20
+ puppet_file = <<-PUPPETFILE
21
+ mod "puppetlabs/xinetd"
22
+ PUPPETFILE
23
+
24
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
25
+
26
+ #Manifest
27
+ manifest = <<-MANIFEST
28
+ class { 'motd':
29
+ content => '#{motd_contents}',
30
+ }
31
+ MANIFEST
32
+
33
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
34
+ site_pp = create_site_pp(master_certname, manifest)
35
+
36
+ #Teardown
37
+ teardown do
38
+ clean_up_r10k(master, last_commit, git_environments_path)
39
+
40
+ step 'Remove "/etc/motd" File'
41
+ on(agents, "rm -rf #{motd_path}")
42
+ end
43
+
44
+ #Setup
45
+ step 'Stub Forge on Master'
46
+ stub_forge_on(master)
47
+
48
+ step 'Checkout "production" Branch'
49
+ git_on(master, 'checkout production', git_environments_path)
50
+
51
+ step 'Manually Install the "motd" Module from the Forge'
52
+ on(master, puppet('module install puppetlabs-motd'))
53
+
54
+ step 'Create "Puppetfile" for the "production" Environment'
55
+ create_remote_file(master, puppet_file_path, puppet_file)
56
+
57
+ step 'Inject New "site.pp" to the "production" Environment'
58
+ inject_site_pp(master, site_pp_path, site_pp)
59
+
60
+ step 'Push Changes'
61
+ git_add_commit_push(master, 'production', 'Update site.pp and add module.', git_environments_path)
62
+
63
+ #Tests
64
+ step 'Deploy Environments via r10k'
65
+ on(master, "#{r10k_fqp} deploy environment -v -p")
66
+
67
+ step 'Plug-in Sync Agents'
68
+ on(agents, puppet("plugin download --server #{master}"))
69
+
70
+ agents.each do |agent|
71
+ step 'Run Puppet Agent Against "production" Environment'
72
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
73
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
74
+ end
75
+
76
+ step "Verify MOTD Contents"
77
+ on(agent, "cat #{motd_path}") do |result|
78
+ assert_match(motd_contents_regex, result.stdout, 'File content is invalid!')
79
+ end
80
+ end
81
+
82
+ step 'Use r10k to Purge Unmanaged Modules'
83
+ on(master, "#{r10k_fqp} puppetfile purge -v", :acceptable_exit_codes => 1)
84
+
85
+ #Agent will fail because r10k will purge the "motd" module
86
+ agents.each do |agent|
87
+ step 'Attempt to Run Puppet Agent'
88
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 0) do |result|
89
+ expect_failure('Expected to fail due to CODEMGMT-78') do
90
+ assert_match(error_message_regex, result.stderr, 'Expected error was not detected!')
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,117 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-111 - C63600 - Single Environment Switch Between Forge and Git for Puppetfile Module'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
9
+ prod_env_modules_path = File.join(env_path, 'production', 'modules')
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ git_environments_path = '/root/environments'
13
+ last_commit = git_last_commit(master, git_environments_path)
14
+
15
+ #Verification
16
+ motd_path = '/etc/motd'
17
+ motd_template_path = File.join(prod_env_modules_path, 'motd', 'templates', 'motd.erb')
18
+ motd_template_contents_forge = 'Hello!'
19
+ motd_contents_git = 'Bonjour!'
20
+ motd_contents_forge_regex = /\A#{motd_template_contents_forge}\n\z/
21
+ motd_contents_git_regex = /\A#{motd_contents_git}\z/
22
+
23
+ #File
24
+ puppet_file_forge = <<-PUPPETFILE
25
+ mod "puppetlabs/motd", '1.1.1'
26
+ PUPPETFILE
27
+
28
+ puppet_file_git = <<-PUPPETFILE
29
+ mod "puppetlabs/motd",
30
+ :git => 'git://github.com/puppetlabs/puppetlabs-motd',
31
+ :tag => '1.2.0'
32
+ PUPPETFILE
33
+
34
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
35
+
36
+ #Manifest
37
+ manifest_forge = <<-MANIFEST
38
+ include motd
39
+ MANIFEST
40
+
41
+ manifest_git = <<-MANIFEST
42
+ class { 'motd':
43
+ content => '#{motd_contents_git}',
44
+ }
45
+ MANIFEST
46
+
47
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
48
+ site_pp_forge = create_site_pp(master_certname, manifest_forge)
49
+ site_pp_git = create_site_pp(master_certname, manifest_git)
50
+
51
+ #Teardown
52
+ teardown do
53
+ clean_up_r10k(master, last_commit, git_environments_path)
54
+
55
+ step 'Remove "/etc/motd" File'
56
+ on(agents, "rm -rf #{motd_path}")
57
+ end
58
+
59
+ #Setup
60
+ step 'Stub Forge on Master'
61
+ stub_forge_on(master)
62
+
63
+ step 'Checkout "production" Branch'
64
+ git_on(master, 'checkout production', git_environments_path)
65
+
66
+ step 'Inject New "site.pp" to the "production" Environment'
67
+ inject_site_pp(master, site_pp_path, site_pp_forge)
68
+
69
+ step 'Create "Puppetfile" for the "production" Environment'
70
+ create_remote_file(master, puppet_file_path, puppet_file_forge)
71
+
72
+ step 'Push Changes'
73
+ git_add_commit_push(master, 'production', 'Update site.pp and add modules.', git_environments_path)
74
+
75
+ #Tests
76
+ step 'Deploy "production" Environment via r10k'
77
+ on(master, "#{r10k_fqp} deploy environment -v -p")
78
+
79
+ step 'Update MOTD Template'
80
+ create_remote_file(master, motd_template_path, motd_template_contents_forge)
81
+ on(master, "chmod 644 #{motd_template_path}")
82
+
83
+ agents.each do |agent|
84
+ step 'Run Puppet Agent'
85
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => [0,2]) do |result|
86
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
87
+ end
88
+
89
+ step 'Verify MOTD Contents for Forge Version of Module'
90
+ on(agent, "cat #{motd_path}") do |result|
91
+ assert_match(motd_contents_forge_regex, result.stdout, 'File content is invalid!')
92
+ end
93
+ end
94
+
95
+ step 'Update "Puppetfile" to use Git for MOTD Module'
96
+ create_remote_file(master, puppet_file_path, puppet_file_git)
97
+
98
+ step 'Update "site.pp" in the "production" Environment'
99
+ inject_site_pp(master, site_pp_path, site_pp_git)
100
+
101
+ step 'Push Changes'
102
+ git_add_commit_push(master, 'production', 'Update site.pp and Puppetfile.', git_environments_path)
103
+
104
+ step 'Deploy "production" Environment Again via r10k'
105
+ on(master, "#{r10k_fqp} deploy environment -v -p")
106
+
107
+ agents.each do |agent|
108
+ step 'Run Puppet Agent'
109
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => [0,2]) do |result|
110
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
111
+ end
112
+
113
+ step 'Verify MOTD Contents for Git Version of Module'
114
+ on(agent, "cat #{motd_path}") do |result|
115
+ assert_match(motd_contents_git_regex, result.stdout, 'File content is invalid!')
116
+ end
117
+ end
@@ -0,0 +1,60 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-62 - C59260 - Single Environment with Unicode File Paths'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ environment_path = on(master, puppet('config', 'print', 'environmentpath')).stdout.rstrip
9
+ prod_env_modules_path = File.join(environment_path, 'production', 'modules')
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ git_environments_path = '/root/environments'
13
+ last_commit = git_last_commit(master, git_environments_path)
14
+ local_files_root_path = ENV['FILES'] || 'files'
15
+
16
+ unicode_module_path = File.join(local_files_root_path, 'modules', 'unicode')
17
+ unicode_remote_original_file_path = File.join(git_environments_path, 'modules', 'unicode', 'files', 'pretend_unicode')
18
+ unicode_remote_rename_file_path = File.join(git_environments_path, 'modules', 'unicode', 'files', "\uAD62\uCC63\uC0C3\uBEE7\uBE23\uB7E9\uC715\uCEFE\uBF90\uAE69")
19
+
20
+ #Verification
21
+ unicode_file_contents_regex = /\AHa ha ha! I am in Korean!\n\z/
22
+
23
+ #Manifest
24
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
25
+ site_pp = create_site_pp(master_certname, ' include unicode')
26
+
27
+ #Teardown
28
+ teardown do
29
+ clean_up_r10k(master, last_commit, git_environments_path)
30
+ end
31
+
32
+ #Setup
33
+ step 'Checkout "production" Branch'
34
+ git_on(master, 'checkout production', git_environments_path)
35
+
36
+ step 'Copy "unicode" Module to "production" Environment Git Repo'
37
+ scp_to(master, unicode_module_path, File.join(git_environments_path, 'modules'))
38
+
39
+ #Required because of CODEMGMT-87
40
+ step 'Rename File to Actual Unicode'
41
+ on(master, "mv #{unicode_remote_original_file_path} #{unicode_remote_rename_file_path}".force_encoding('BINARY'))
42
+
43
+ step 'Inject New "site.pp" to the "production" Environment'
44
+ inject_site_pp(master, site_pp_path, site_pp)
45
+
46
+ step 'Push Changes'
47
+ git_add_commit_push(master, 'production', 'Update site.pp and add modules.', git_environments_path)
48
+
49
+ #Tests
50
+ step 'Deploy "production" Environment via r10k'
51
+ on(master, "#{r10k_fqp} deploy environment -v")
52
+
53
+ #Note: Usually a full Puppet Run would be performed for verification.
54
+ #Since Puppet has problems with Unicode, this test will verify the file
55
+ #directly in the r10k environment.
56
+
57
+ step 'Verify Unicode File'
58
+ on(master, "cat #{unicode_remote_rename_file_path}") do |result|
59
+ assert_match(unicode_file_contents_regex, result.stdout, 'File content is invalid!')
60
+ end
@@ -0,0 +1,166 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-117 - C63602- Single Environment Upgrade Forge Module then Revert Change'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
9
+ prod_env_modules_path = File.join(env_path, 'production', 'modules')
10
+
11
+ git_environments_path = '/root/environments'
12
+ last_commit = git_last_commit(master, git_environments_path)
13
+ r10k_fqp = get_r10k_fqp(master)
14
+
15
+ #Verification
16
+ motd_path = '/etc/motd'
17
+ motd_template_path = File.join(prod_env_modules_path, 'motd', 'templates', 'motd.erb')
18
+ motd_template_contents = 'Hello!'
19
+ motd_new_contents = 'Yolo!'
20
+ motd_contents_old_regex = /\A#{motd_template_contents}\n\z/
21
+ motd_contents_new_regex = /\A#{motd_new_contents}\z/
22
+
23
+ motd_old_version = /"*1.1.1*"/
24
+ motd_new_version = /"*1.2.0*"/
25
+ motd_version_file_path = File.join(prod_env_modules_path, 'motd', 'metadata.json')
26
+
27
+ #File
28
+ puppet_file_old_motd = <<-PUPPETFILE
29
+ mod "puppetlabs/motd", '1.1.1'
30
+ PUPPETFILE
31
+
32
+ puppet_file_new_motd = <<-PUPPETFILE
33
+ mod "puppetlabs/motd", '1.2.0'
34
+ PUPPETFILE
35
+
36
+ puppet_file_path = File.join(git_environments_path, 'Puppetfile')
37
+ puppet_file_path_bak = "#{puppet_file_path}.bak"
38
+
39
+ #Manifest
40
+ manifest_old = <<-MANIFEST
41
+ include motd
42
+ MANIFEST
43
+
44
+ manifest_new = <<-MANIFEST
45
+ class { 'motd':
46
+ content => '#{motd_new_contents}',
47
+ }
48
+ MANIFEST
49
+
50
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
51
+ site_pp_old = create_site_pp(master_certname, manifest_old)
52
+ site_pp_new = create_site_pp(master_certname, manifest_new)
53
+
54
+ #Teardown
55
+ teardown do
56
+ clean_up_r10k(master, last_commit, git_environments_path)
57
+
58
+ step 'Remove "/etc/motd" File'
59
+ on(agents, "rm -rf #{motd_path}")
60
+ end
61
+
62
+ #Setup
63
+ step 'Stub Forge on Master'
64
+ stub_forge_on(master)
65
+
66
+ step 'Checkout "production" Branch'
67
+ git_on(master, 'checkout production', git_environments_path)
68
+
69
+ step 'Inject New "site.pp" to the "production" Environment'
70
+ inject_site_pp(master, site_pp_path, site_pp_old)
71
+
72
+ step 'Create "Puppetfile" for the "production" Environment'
73
+ create_remote_file(master, puppet_file_path, puppet_file_old_motd)
74
+
75
+ step 'Push Changes'
76
+ git_add_commit_push(master, 'production', 'Update site.pp and add modules.', git_environments_path)
77
+
78
+ #Tests
79
+ step 'Deploy "production" Environment via r10k'
80
+ on(master, "#{r10k_fqp} deploy environment -v -p")
81
+
82
+ step 'Update MOTD Template'
83
+ create_remote_file(master, motd_template_path, motd_template_contents)
84
+ on(master, "chmod 644 #{motd_template_path}")
85
+
86
+ agents.each do |agent|
87
+ step 'Run Puppet Agent'
88
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => [0,2]) do |result|
89
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
90
+ end
91
+
92
+ step 'Verify MOTD Contents for Forge Version of Module'
93
+ on(agent, "cat #{motd_path}") do |result|
94
+ assert_match(motd_contents_old_regex, result.stdout, 'File content is invalid!')
95
+ end
96
+
97
+ step 'Verify Version 1.1.1 of the MOTD Module'
98
+ on(master, "grep version #{motd_version_file_path}") do |result|
99
+ assert_match(motd_old_version, result.stdout, 'File content is invalid!')
100
+ end
101
+ end
102
+
103
+ step 'Backup Old MOTD "Puppetfile" to allow for creation of New MOTD "Puppetfile"'
104
+ on(master, "mv #{puppet_file_path} #{puppet_file_path_bak}")
105
+
106
+ step 'Update "Puppetfile" to use New Module Version 1.2.0'
107
+ create_remote_file(master, puppet_file_path, puppet_file_new_motd)
108
+
109
+ step 'Update "site.pp" in the "production" Environment to New Style Manifest'
110
+ inject_site_pp(master, site_pp_path, site_pp_new)
111
+
112
+ step 'Push Changes'
113
+ git_add_commit_push(master, 'production', 'Update site.pp and Puppetfile.', git_environments_path)
114
+
115
+ step 'Deploy "production" Environment Again via r10k'
116
+ on(master, "#{r10k_fqp} deploy environment -v -p")
117
+
118
+ agents.each do |agent|
119
+ step 'Run Puppet Agent'
120
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => [0,2]) do |result|
121
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
122
+ end
123
+
124
+ step 'Verify MOTD Contents for New Version of Module'
125
+ on(agent, "cat #{motd_path}") do |result|
126
+ assert_match(motd_contents_new_regex, result.stdout, 'File content is invalid!')
127
+ end
128
+
129
+ step 'Verify Version 1.2.0 of the MOTD Module'
130
+ on(master, "grep version #{motd_version_file_path}") do |result|
131
+ assert_match(motd_new_version, result.stdout, 'File content is invalid!')
132
+ end
133
+ end
134
+
135
+ step 'Restore Old MOTD "Puppetfile"'
136
+ on(master, "mv #{puppet_file_path_bak} #{puppet_file_path}")
137
+
138
+ step 'Revert "site.pp" in the "production" Environment to Old Style Manifest'
139
+ inject_site_pp(master, site_pp_path, site_pp_old)
140
+
141
+ step 'Push Changes'
142
+ git_add_commit_push(master, 'production', 'Update site.pp and add modules.', git_environments_path)
143
+
144
+ step 'Deploy "production" Environment Again via r10k'
145
+ on(master, "#{r10k_fqp} deploy environment -v -p")
146
+
147
+ step 'Update MOTD Template'
148
+ create_remote_file(master, motd_template_path, motd_template_contents)
149
+ on(master, "chmod 644 #{motd_template_path}")
150
+
151
+ agents.each do |agent|
152
+ step 'Run Puppet Agent'
153
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => [0,2]) do |result|
154
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
155
+ end
156
+
157
+ step 'Verify MOTD Contents for Old Version of Module'
158
+ on(agent, "cat #{motd_path}") do |result|
159
+ assert_match(motd_contents_old_regex, result.stdout, 'File content is invalid!')
160
+ end
161
+
162
+ step 'Verify Version 1.1.1 of the MOTD Module'
163
+ on(master, "grep version #{motd_version_file_path}") do |result|
164
+ assert_match(motd_old_version, result.stdout, 'File content is invalid!')
165
+ end
166
+ end