r10k 3.6.0 → 3.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docker.yml +4 -1
  3. data/.github/workflows/release.yml +3 -2
  4. data/.github/workflows/rspec_tests.yml +81 -0
  5. data/.github/workflows/stale.yml +19 -0
  6. data/.travis.yml +8 -1
  7. data/CHANGELOG.mkd +33 -0
  8. data/CODEOWNERS +2 -2
  9. data/README.mkd +2 -2
  10. data/doc/common-patterns.mkd +1 -0
  11. data/doc/dynamic-environments/configuration.mkd +123 -42
  12. data/doc/dynamic-environments/usage.mkd +12 -11
  13. data/doc/puppetfile.mkd +23 -3
  14. data/docker/Gemfile +1 -1
  15. data/docker/Makefile +4 -3
  16. data/docker/docker-compose.yml +18 -0
  17. data/docker/r10k/Dockerfile +1 -1
  18. data/docker/r10k/docker-entrypoint.sh +0 -1
  19. data/docker/r10k/release.Dockerfile +1 -1
  20. data/docker/spec/dockerfile_spec.rb +26 -32
  21. data/integration/tests/git_source/git_source_repeated_remote.rb +2 -2
  22. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +2 -1
  23. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +2 -1
  24. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -1
  25. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +2 -1
  26. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +1 -1
  27. data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +1 -1
  28. data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +1 -1
  29. data/lib/r10k/action/base.rb +10 -0
  30. data/lib/r10k/action/deploy/display.rb +49 -10
  31. data/lib/r10k/action/deploy/environment.rb +102 -51
  32. data/lib/r10k/action/deploy/module.rb +55 -30
  33. data/lib/r10k/action/puppetfile/check.rb +3 -1
  34. data/lib/r10k/action/puppetfile/install.rb +20 -23
  35. data/lib/r10k/action/puppetfile/purge.rb +8 -2
  36. data/lib/r10k/action/runner.rb +34 -0
  37. data/lib/r10k/cli/deploy.rb +14 -7
  38. data/lib/r10k/cli/puppetfile.rb +5 -5
  39. data/lib/r10k/content_synchronizer.rb +83 -0
  40. data/lib/r10k/deployment.rb +1 -1
  41. data/lib/r10k/environment/base.rb +30 -3
  42. data/lib/r10k/environment/git.rb +17 -5
  43. data/lib/r10k/environment/name.rb +22 -4
  44. data/lib/r10k/environment/svn.rb +11 -4
  45. data/lib/r10k/environment/with_modules.rb +46 -30
  46. data/lib/r10k/git.rb +1 -0
  47. data/lib/r10k/git/cache.rb +11 -1
  48. data/lib/r10k/git/rugged/credentials.rb +39 -2
  49. data/lib/r10k/initializers.rb +2 -0
  50. data/lib/r10k/module.rb +1 -1
  51. data/lib/r10k/module/base.rb +17 -1
  52. data/lib/r10k/module/forge.rb +29 -11
  53. data/lib/r10k/module/git.rb +50 -27
  54. data/lib/r10k/module/local.rb +2 -1
  55. data/lib/r10k/module/svn.rb +24 -18
  56. data/lib/r10k/puppetfile.rb +66 -83
  57. data/lib/r10k/settings.rb +29 -2
  58. data/lib/r10k/source/base.rb +9 -0
  59. data/lib/r10k/source/git.rb +18 -7
  60. data/lib/r10k/source/hash.rb +5 -5
  61. data/lib/r10k/source/svn.rb +5 -3
  62. data/lib/r10k/util/cleaner.rb +21 -0
  63. data/lib/r10k/util/setopts.rb +33 -12
  64. data/lib/r10k/version.rb +1 -1
  65. data/locales/r10k.pot +98 -82
  66. data/r10k.gemspec +1 -1
  67. data/spec/fixtures/unit/action/r10k_creds.yaml +9 -0
  68. data/spec/r10k-mocks/mock_source.rb +1 -1
  69. data/spec/shared-examples/puppetfile-action.rb +7 -7
  70. data/spec/shared-examples/subprocess-runner.rb +11 -5
  71. data/spec/unit/action/deploy/display_spec.rb +35 -5
  72. data/spec/unit/action/deploy/environment_spec.rb +207 -37
  73. data/spec/unit/action/deploy/module_spec.rb +173 -26
  74. data/spec/unit/action/puppetfile/check_spec.rb +2 -2
  75. data/spec/unit/action/puppetfile/install_spec.rb +31 -10
  76. data/spec/unit/action/puppetfile/purge_spec.rb +25 -5
  77. data/spec/unit/action/runner_spec.rb +48 -1
  78. data/spec/unit/environment/git_spec.rb +19 -2
  79. data/spec/unit/environment/name_spec.rb +28 -0
  80. data/spec/unit/environment/svn_spec.rb +12 -0
  81. data/spec/unit/environment/with_modules_spec.rb +74 -0
  82. data/spec/unit/git/cache_spec.rb +10 -0
  83. data/spec/unit/git/rugged/credentials_spec.rb +79 -2
  84. data/spec/unit/git_spec.rb +3 -3
  85. data/spec/unit/module/forge_spec.rb +21 -13
  86. data/spec/unit/module/git_spec.rb +64 -1
  87. data/spec/unit/module_spec.rb +60 -10
  88. data/spec/unit/puppetfile_spec.rb +63 -60
  89. data/spec/unit/settings_spec.rb +12 -0
  90. data/spec/unit/source/git_spec.rb +15 -3
  91. data/spec/unit/util/purgeable_spec.rb +2 -8
  92. data/spec/unit/util/setopts_spec.rb +25 -1
  93. metadata +11 -11
  94. data/azure-pipelines.yml +0 -87
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e54158e0a651c799246229971ba62ad36bd40a670ca84e61479aa5280306c8a
4
- data.tar.gz: 153cc105ce9276d79e2501dc99accb398bba8fec423fbf0726a1b183993a2748
3
+ metadata.gz: 1a9adbfc4e0f834dfdec6b9703325c61c617ec21d2261034aa3ba702ae9a0710
4
+ data.tar.gz: f46775713081247843c4189a13349458c7dd2691ce0e9cf99ae02b1e3d21bceb
5
5
  SHA512:
6
- metadata.gz: 264ea2591c062d460edab02b8edf7a59c9ebc08ebea27ee2b103e43bdf71c936b797094014d66b776573196d4a9e86dfc9f0fd345626f27d7e25c8170ebaa83a
7
- data.tar.gz: 224e40f3f13466ab2ea3296bc3741b10d591ea65c97ba60b3dd81078f70149770c07c46ac1464a44fd59af0d20dbc8bbf1a5e3990e5d7921cc05403772d99640
6
+ metadata.gz: 979de4fa8399e28f4fdf742b8ca5a23a4f116a96a7131ad93bcdb859db16aae59cea5e45fd8fa03c98229fd1f321f25334775f4a4efe27eb90464bac2b1d8b37
7
+ data.tar.gz: efefb07a7a85813a0b967110e05a28a8e4badf5987cd13fec95b37dafd8dc3fdf86081f1c6a023a667c0a8f5416e53cd50ef84bb5fd39a6f70085ff2737e5913
@@ -29,7 +29,10 @@ jobs:
29
29
  - run: gem install bundler
30
30
  - name: Build container
31
31
  working-directory: docker
32
- run: make lint build test
32
+ run: |
33
+ docker system prune --all --force --volumes
34
+ docker builder prune --force --keep-storage=10GB
35
+ make lint build test
33
36
  - name: Publish container
34
37
  working-directory: docker
35
38
  run: |
@@ -3,7 +3,7 @@ name: Tag and release
3
3
  on:
4
4
  push:
5
5
  branches:
6
- - master
6
+ - main
7
7
  paths:
8
8
  - 'lib/r10k/version.rb'
9
9
 
@@ -15,10 +15,11 @@ jobs:
15
15
  with:
16
16
  fetch-depth: '0'
17
17
  - name: Bump version and push tag
18
- uses: anothrNick/github-tag-action@1.17.2
18
+ uses: anothrNick/github-tag-action@1.35.0
19
19
  env:
20
20
  GITHUB_TOKEN: ${{ secrets.PUPPET_RELEASE_GH_TOKEN }}
21
21
  DEFAULT_BUMP: patch
22
+ TAG_CONTEXT: branch
22
23
  WITH_V: false
23
24
  # Uncomment this if the tag and version file become out-of-sync and
24
25
  # you need to tag at a specific version.
@@ -0,0 +1,81 @@
1
+ name: Rspec tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ rspec_tests:
10
+ name: ${{ matrix.cfg.os }}(ruby ${{ matrix.cfg.ruby }})
11
+ strategy:
12
+ matrix:
13
+ cfg:
14
+ - {os: ubuntu-18.04, ruby: 2.4}
15
+ - {os: ubuntu-18.04, ruby: 2.5}
16
+ - {os: ubuntu-18.04, ruby: 2.6}
17
+ - {os: ubuntu-18.04, ruby: 2.7}
18
+ - {os: ubuntu-18.04, ruby: jruby-9.2.9.0}
19
+ - {os: windows-2016, ruby: 2.5}
20
+ - {os: windows-2016, ruby: 2.6}
21
+ - {os: windows-2016, ruby: 2.7}
22
+
23
+ runs-on: ${{ matrix.cfg.os }}
24
+ steps:
25
+ - name: Checkout current PR
26
+ uses: actions/checkout@v2
27
+
28
+ - name: Install ruby version ${{ matrix.cfg.ruby }}
29
+ uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: ${{ matrix.cfg.ruby }}
32
+
33
+ - name: Install bundler and gems
34
+ run: |
35
+ gem install bundler
36
+ bundle config set without packaging documentation
37
+ bundle install --jobs 4 --retry 3
38
+
39
+ - name: Run tests on Windows
40
+ if: runner.os == 'Windows'
41
+ run: |
42
+ # https://github.com/ruby/ruby/pull/2791/files#diff-ff5ff976e81bebd977f0834e60416abbR97-R100
43
+ # Actions uses UTF8, causes test failures, similar to normal OS setup
44
+ $PSDefaultParameterValues['*:Encoding'] = 'utf8'
45
+ [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("IBM437")
46
+ [Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("IBM437")
47
+ $Env:LOG_SPEC_ORDER = 'true'
48
+
49
+ # debug information
50
+ chcp
51
+ Get-WinSystemLocale
52
+ Get-ChildItem Env: | % { Write-Output "$($_.Key): $($_.Value)" }
53
+ # list current OpenSSL install
54
+ gem list openssl
55
+ ruby -ropenssl -e 'puts \"OpenSSL Version - #{OpenSSL::OPENSSL_VERSION}\"; puts \"OpenSSL Library Version - #{OpenSSL::OPENSSL_LIBRARY_VERSION}\"'
56
+ Get-Content Gemfile.lock
57
+ ruby -v
58
+ gem --version
59
+ bundle --version
60
+
61
+ # Run tests
62
+ bundle exec rspec --color --format documentation spec/unit
63
+
64
+ - name: Run tests on Linux
65
+ if: runner.os == 'Linux'
66
+ run: |
67
+ # debug information
68
+ cat Gemfile.lock
69
+ ruby -v
70
+ gem --version
71
+ bundle --version
72
+
73
+ if [[ ${{ matrix.cfg.ruby }} =~ "jruby" ]]; then
74
+ export _JAVA_OPTIONS='-Xmx1024m -Xms512m'
75
+
76
+ # workaround for PUP-10683
77
+ sudo apt remove rpm
78
+ fi
79
+
80
+ # Run tests
81
+ bundle exec rspec --color --format documentation spec/unit
@@ -0,0 +1,19 @@
1
+ name: Mark stale issues
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "30 1 * * *"
6
+
7
+ jobs:
8
+ stale:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/stale@v3
12
+ with:
13
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
14
+ days-before-stale: 60
15
+ days-before-close: 7
16
+ stale-issue-message: 'This issue has been marked stale because it has had no activity for 60 days. The Puppet Team is actively prioritizing existing bugs and new features, if this issue is still important to you please comment and we will add this to our backlog to complete. Otherwise, it will be closed in 7 days.'
17
+ stale-issue-label: 'stale'
18
+ stale-pr-message: "This PR has been marked stale because it has had no activity for 60 days. If you are still interested in getting this merged, please comment and we'll try to move it forward. Otherwise, it will be closed in 7 days."
19
+ stale-pr-label: 'stale'
data/.travis.yml CHANGED
@@ -29,7 +29,8 @@ matrix:
29
29
  - docker
30
30
  rvm: 2.6.6
31
31
  env:
32
- - DOCKER_COMPOSE_VERSION=1.25.5
32
+ - DOCKER_COMPOSE_VERSION=1.28.6
33
+ - DOCKER_BUILDX_VERSION=0.5.1
33
34
  # necessary to prevent overwhelming TravisCI build output limits
34
35
  - DOCKER_BUILD_FLAGS="--progress plain"
35
36
  before_install:
@@ -37,9 +38,15 @@ matrix:
37
38
  - curl --location https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname --kernel-name`-`uname --machine` > docker-compose
38
39
  - chmod +x docker-compose
39
40
  - sudo mv docker-compose /usr/local/bin
41
+ - mkdir -vp ~/.docker/cli-plugins
42
+ - curl --location https://github.com/docker/buildx/releases/download/v${DOCKER_BUILDX_VERSION}/buildx-v${DOCKER_BUILDX_VERSION}.linux-amd64 > ~/.docker/cli-plugins/docker-buildx
43
+ - chmod +x ~/.docker/cli-plugins/docker-buildx
44
+ - docker buildx create --name travis_builder --use
40
45
  script:
41
46
  - set -e
42
47
  - cd docker
43
48
  - make lint
44
49
  - make build
45
50
  - make test
51
+ after_script:
52
+ - docker buildx rm travis_builder
data/CHANGELOG.mkd CHANGED
@@ -4,6 +4,39 @@ CHANGELOG
4
4
  Unreleased
5
5
  ----------
6
6
 
7
+ 3.9.2
8
+
9
+ - Makes the third parameter to R10K::Actions optional, restoring backwards compatability broken in 3.9.1.
10
+
11
+ 3.9.1
12
+ -----
13
+
14
+ - Invalid module specifications in a Puppetfile will cause the R10K run to abort earlier than before. Prior to this release, the R10K run would complete, sync all other modules, and return an exit code of 1. R10K will now stop syncing modules and abort immediately. [#1161](https://github.com/puppetlabs/r10k/pull/1161)
15
+
16
+ 3.9.0
17
+ -----
18
+
19
+ - Add '--modules' flag to `deploy` subcommand as a replacement to '--puppetfile', deprecate '--puppetfile'. [#1147](https://github.com/puppetlabs/r10k/pull/1147)
20
+ - Deprecate 'purge_whitelist' and favor usage of 'purge_allowlist'. [#1144](https://github.com/puppetlabs/r10k/pull/1144)
21
+ - Add 'strip\_component' environment source configuration setting, to allow deploying Git branches named like "env/production" as Puppet environments named like "production". [#1128](https://github.com/puppetlabs/r10k/pull/1128)
22
+ - A warning will be emitted when the user supplies conflicting arguments to module definitions in a Puppetfile, such as when specifying both :commit and :branch [#1130](https://github.com/puppetlabs/r10k/pull/1130)
23
+ - Add optional standard module and environment specification interface: name, type, source, version. These options can be used when specifying environments and/or modules in a yaml/exec source, as well as when specifying modules in a Puppetfile. Providing the standard interface simplifies integrations with external services [#1131](https://github.com/puppetlabs/r10k/pull/1131)
24
+ - Pin cri to 2.15.10 to maintain support for Ruby 2.3 and 2.4 [#1121](https://github.com/puppetlabs/r10k/issues/1121)
25
+
26
+ 3.8.0
27
+ -----
28
+
29
+ - When a forge module fails name validation the offending name will now be printed in the error message. [#1126](https://github.com/puppetlabs/r10k/pull/1126)
30
+ - Module ref resolution will now fall back to the normal default branch if the default branch override cannot be resolved. [#1122](https://github.com/puppetlabs/r10k/pull/1122)
31
+ - Experimental feature change: conflicts between environment-defined modules and Puppetfile-defined modules now default to logging a warning and deploying the environment module version, overriding the Puppetfile. Previously, conflicts would result in an error. The behavior is now configurable via the `module_conflicts` environment setting [#1107](https://github.com/puppetlabs/r10k/pull/1107)
32
+
33
+ 3.7.0
34
+ -----
35
+
36
+ - Use %LOCALAPPDATA% for Windows cachedir [#1049](https://github.com/puppetlabs/r10k/issues/1049)
37
+ - Add support for defining custom puppet.conf when generating types [#993](https://github.com/puppetlabs/r10k/pull/993)
38
+ - Update test cases to account for error message changes in Puppet 7
39
+
7
40
  3.6.0
8
41
  -----
9
42
 
data/CODEOWNERS CHANGED
@@ -1,2 +1,2 @@
1
- * @puppetlabs/puppetserver-maintainers @adrienthebo @dhollinger
2
- /docker/ @puppetlabs/pupperware
1
+ * @puppetlabs/puppetserver-maintainers
2
+ /docker/ @puppetlabs/platform-services
data/README.mkd CHANGED
@@ -17,8 +17,8 @@ implementation of Puppet [environments][workflow].
17
17
  Requirements
18
18
  ------------
19
19
 
20
- R10k supports the Ruby versions `>= 2.3.0`. It's tested on Ruby 2.3.0 up to
21
- Ruby 2.6.0 + Jruby.
20
+ R10k supports the Ruby versions `>= 2.4.0`. It's tested on Ruby 2.4.0 up to
21
+ Ruby 2.7.0 + Jruby.
22
22
 
23
23
  R10k requires additional components, depending on how you plan on managing
24
24
  environments and modules.
@@ -42,3 +42,4 @@ publicly available hook. These include:
42
42
  * [Reaktor](https://github.com/pzim/reaktor)
43
43
  * [zack/r10k's Webhooks](https://forge.puppetlabs.com/zack/r10k#webhook-support)
44
44
  (Puppet Enterprise only)
45
+ * [Simple Puppet Provisioner](https://github.com/mbaynton/SimplePuppetProvisioner)
@@ -249,9 +249,9 @@ found which is neither committed to the control repo branch that maps to that
249
249
  environment, nor declared in a Puppetfile committed to that branch.
250
250
 
251
251
  Enabling this purge level will cause r10k to load and parse the Puppetfile for
252
- the environment even without the `--puppetfile` flag being set. However,
252
+ the environment even without the `--modules` flag being set. However,
253
253
  Puppetfile content will still only be deployed if the environment is new or
254
- the `--puppetfile` flag is set. Additionally, no environment-level content
254
+ the `--modules` flag is set. Additionally, no environment-level content
255
255
  will be purged if any errors are encountered while evaluating the Puppetfile
256
256
  or deploying its contents.
257
257
 
@@ -266,31 +266,31 @@ managed by a Puppetfile include the configured `moduledir` (which defaults to
266
266
  "modules") as well as alternate directories specified as an `install_path`
267
267
  option to any Puppetfile content declarations.
268
268
 
269
- #### purge\_whitelist
269
+ #### purge\_allowlist
270
270
 
271
- The `purge_whitelist` setting exempts the specified filename patterns from
271
+ The `purge_allowlist` setting exempts the specified filename patterns from
272
272
  being purged. This setting is currently only considered during `environment`
273
273
  level purging. (See above.) Given value must be a list of shell style filename
274
274
  patterns in string format.
275
275
 
276
276
  See the Ruby [documentation for the `fnmatch` method](http://ruby-doc.org/core-2.2.0/File.html#method-c-fnmatch)
277
277
  for more details on valid patterns. Note that the `FNM_PATHNAME` and
278
- `FNM_DOTMATCH` flags are in effect when r10k considers the whitelist.
278
+ `FNM_DOTMATCH` flags are in effect when r10k considers the allowlist.
279
279
 
280
280
  Patterns are relative to the root of the environment being purged and *do
281
- not match recursively* by default. For example, a whitelist value of
281
+ not match recursively* by default. For example, a allowlist value of
282
282
  `*myfile*` would only preserve a matching file at the root of the
283
283
  environment. To preserve the file throughout the deployed environment,
284
284
  a recursive pattern such as `**/*myfile*` would be required.
285
285
 
286
- Files matching a whitelist pattern may still be removed if they exist in
286
+ Files matching a allowlist pattern may still be removed if they exist in
287
287
  a folder that is otherwise subject to purging. In this case, an additional
288
- whitelist rule to preserve the containing folder is required.
288
+ allowlist rule to preserve the containing folder is required.
289
289
 
290
290
  ```yaml
291
291
  ---
292
292
  deploy:
293
- purge_whitelist: [ 'custom.json', '**/*.xpp' ]
293
+ purge_allowlist: [ 'custom.json', '**/*.xpp' ]
294
294
  ```
295
295
 
296
296
 
@@ -327,6 +327,15 @@ deploy:
327
327
  puppet_path: '/usr/local/bin/puppet'
328
328
  ```
329
329
 
330
+ #### puppet\_conf
331
+
332
+ The path to the puppet.conf file used for generating types. Defaults to `/etc/puppetlabs/puppet/puppet.conf`.
333
+
334
+ ```yaml
335
+ deploy:
336
+ puppet_conf: '/opt/puppet/conf/puppet.conf'
337
+ ```
338
+
330
339
  Source options
331
340
  --------------
332
341
 
@@ -385,6 +394,23 @@ sources:
385
394
  * if `false` (default) environment folder will not be prefixed
386
395
  * if `String` environment folder will be prefixed with the `prefix` value.
387
396
 
397
+ ### strip\_component
398
+
399
+ The 'strip\_component' setting allows parts of environment names from a source to have a transformation applied, removing a part of the name before turning them into Puppet environments. This is primarily useful for VCS sources (e.g. Git), because it allows branch names to use prefixes or organizing name components such as "env/production", "env/development", but deploy Puppet environments from these branches named without the leading "env/" component. E.g. "production", "development".
400
+
401
+ ```yaml
402
+ ---
403
+ sources:
404
+ mysource:
405
+ basedir: '/etc/puppet/environments'
406
+ strip_component: 'env/'
407
+ ```
408
+
409
+ #### strip\_component behaviour
410
+
411
+ * if `string` environment names will have this prefix removed, if the prefix is present. Note that when string values are used, names can only have prefix components removed.
412
+ * if `/regex/` the regex will be matched against environment names and if a match is found, the matching name component will be removed.
413
+
388
414
  ### ignore_branch_prefixes
389
415
 
390
416
  The 'ignore_branch_prefixes' setting causes environments to be ignored which match in part or whole
@@ -560,13 +586,13 @@ When using the YAML source type, every environment is enumerated in a single yam
560
586
  ---
561
587
  production:
562
588
  type: git
563
- remote: git@github.com:puppetlabs/control-repo.git
564
- ref: 8820892
589
+ source: git@github.com:puppetlabs/control-repo.git
590
+ version: 8820892
565
591
 
566
592
  development:
567
593
  type: git
568
- remote: git@github.com:puppetlabs/control-repo.git
569
- ref: 8820892
594
+ source: git@github.com:puppetlabs/control-repo.git
595
+ version: 8820892
570
596
  ```
571
597
 
572
598
  ### YAMLdir Environment Source
@@ -597,8 +623,8 @@ The contents of the file should be a hash specifying the enviornment type, and a
597
623
  # production.yaml
598
624
  ---
599
625
  type: git
600
- remote: git@github.com:puppetlabs/control-repo.git
601
- ref: 8820892
626
+ source: git@github.com:puppetlabs/control-repo.git
627
+ version: 8820892
602
628
  ```
603
629
 
604
630
  ### Exec environment Source
@@ -619,7 +645,7 @@ sources:
619
645
 
620
646
  The environment modules feature allows module content to be attached to an environment at environment definition time. This happens before modules specified in a Puppetfile are attached to an environment, which does not happen until deploy time. Environment module implementation depends on the environment source type.
621
647
 
622
- For the YAML environment source type, attach modules to an environment by specifying a modules key for the environment, and providing a hash of modules to attach. Each module accepts the same arguments accepted by the `mod` method in a Puppetfile.
648
+ For the YAML environment source type, attach modules to an environment by specifying a modules key for the environment, and providing a hash of modules to attach. Each module accepts the same arguments accepted by the `mod` method in a Puppetfile. For ease of reading and consistency, however, it is perferred to use the generic type, source, and version options over implementation-specific formats and options such as "ref" and "git".
623
649
 
624
650
  The example below includes two Forge modules and one module sourced from a Git repository. The two environments are almost identical. However, a new version of the stdlib module has been deployed in development (6.2.0), that has not yet been deployed to production.
625
651
 
@@ -627,25 +653,35 @@ The example below includes two Forge modules and one module sourced from a Git r
627
653
  ---
628
654
  production:
629
655
  type: git
630
- remote: git@github.com:puppetlabs/control-repo.git
631
- ref: 8820892
656
+ source: git@github.com:puppetlabs/control-repo.git
657
+ version: 8820892
632
658
  modules:
633
- puppetlabs-stdlib: 6.0.0
634
- puppetlabs-concat: 6.1.0
659
+ puppetlabs-stdlib:
660
+ type: forge
661
+ version: 6.0.0
662
+ puppetlabs-concat:
663
+ type: forge
664
+ version: 6.1.0
635
665
  reidmv-xampl:
636
- git: https://github.com/reidmv/reidmv-xampl.git
637
- ref: 62d07f2
666
+ type: git
667
+ source: https://github.com/reidmv/reidmv-xampl.git
668
+ version: 62d07f2
638
669
 
639
670
  development:
640
671
  type: git
641
- remote: git@github.com:puppetlabs/control-repo.git
642
- ref: 8820892
672
+ source: git@github.com:puppetlabs/control-repo.git
673
+ version: 8820892
643
674
  modules:
644
- puppetlabs-stdlib: 6.2.0
645
- puppetlabs-concat: 6.1.0
675
+ puppetlabs-stdlib:
676
+ type: forge
677
+ version: 6.2.0
678
+ puppetlabs-concat:
679
+ type: forge
680
+ version: 6.1.0
646
681
  reidmv-xampl:
647
- git: https://github.com/reidmv/reidmv-xampl.git
648
- ref: 62d07f2
682
+ type: git
683
+ source: https://github.com/reidmv/reidmv-xampl.git
684
+ version: 62d07f2
649
685
  ```
650
686
 
651
687
  An example of a single environment definition for the YAMLdir environment source type:
@@ -654,14 +690,49 @@ An example of a single environment definition for the YAMLdir environment source
654
690
  # production.yaml
655
691
  ---
656
692
  type: git
657
- remote: git@github.com:puppetlabs/control-repo.git
658
- ref: 8820892
693
+ source: git@github.com:puppetlabs/control-repo.git
694
+ version: 8820892
695
+ modules:
696
+ puppetlabs-stdlib:
697
+ type: forge
698
+ version: 6.0.0
699
+ puppetlabs-concat:
700
+ type: forge
701
+ version: 6.1.0
702
+ reidmv-xampl:
703
+ type: git
704
+ source: https://github.com/reidmv/reidmv-xampl.git
705
+ version: 62d07f2
706
+ ```
707
+
708
+ #### Puppetfile module conflicts
709
+
710
+ When a module is defined in an environment and also in a Puppetfile, the default behavior is for the environment definition of the module to take precedence, a warning to be logged, and the Puppetfile definition to be ignored. The behavior is configurable to optionally skip the warning, or allow a hard failure instead. Use the `module_conflicts` option in an environment definition to control this.
711
+
712
+ Available `module_conflicts` options:
713
+
714
+ * `override_and_warn` (default): the version of the module defined by the environment will be used, and the version defined in the Puppetfile will be ignored. A warning will be printed.
715
+ * `override`: the version of the module defined by the environment will be used, and the version defined in the Puppetfile will be ignored.
716
+ * `error`: an error will be raised alerting the user to the conflict. The environment will not be deployed.
717
+
718
+ ```yaml
719
+ # production.yaml
720
+ ---
721
+ type: git
722
+ source: git@github.com:puppetlabs/control-repo.git
723
+ version: 8820892
724
+ module_conflicts: override_and_warn
659
725
  modules:
660
- puppetlabs-stdlib: 6.0.0
661
- puppetlabs-concat: 6.1.0
726
+ puppetlabs-stdlib:
727
+ type: forge
728
+ version: 6.0.0
729
+ puppetlabs-concat:
730
+ type: forge
731
+ version: 6.1.0
662
732
  reidmv-xampl:
663
- git: https://github.com/reidmv/reidmv-xampl.git
664
- ref: 62d07f2
733
+ type: git
734
+ source: https://github.com/reidmv/reidmv-xampl.git
735
+ version: 62d07f2
665
736
  ```
666
737
 
667
738
  ### Bare Environment Type
@@ -675,18 +746,28 @@ The bare environment type allows sources that support environment modules to ope
675
746
  production:
676
747
  type: bare
677
748
  modules:
678
- puppetlabs-stdlib: 6.0.0
679
- puppetlabs-concat: 6.1.0
749
+ puppetlabs-stdlib:
750
+ type: forge
751
+ version: 6.0.0
752
+ puppetlabs-concat:
753
+ type: forge
754
+ version: 6.1.0
680
755
  reidmv-xampl:
681
- git: https://github.com/reidmv/reidmv-xampl.git
682
- ref: 62d07f2
756
+ type: git
757
+ source: https://github.com/reidmv/reidmv-xampl.git
758
+ version: 62d07f2
683
759
 
684
760
  development:
685
761
  type: bare
686
762
  modules:
687
- puppetlabs-stdlib: 6.0.0
688
- puppetlabs-concat: 6.1.0
763
+ puppetlabs-stdlib:
764
+ type: forge
765
+ version: 6.0.0
766
+ puppetlabs-concat:
767
+ type: forge
768
+ version: 6.1.0
689
769
  reidmv-xampl:
690
- git: https://github.com/reidmv/reidmv-xampl.git
691
- ref: 62d07f2
770
+ type: git
771
+ source: https://github.com/reidmv/reidmv-xampl.git
772
+ version: 62d07f2
692
773
  ```