r10k 3.5.0 → 3.8.0

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +4 -1
  3. data/.github/workflows/docker.yml +25 -1
  4. data/.github/workflows/rspec_tests.yml +81 -0
  5. data/.travis.yml +14 -11
  6. data/CHANGELOG.mkd +42 -6
  7. data/CODEOWNERS +1 -1
  8. data/Gemfile +1 -1
  9. data/README.mkd +13 -4
  10. data/azure-pipelines.yml +2 -1
  11. data/doc/dynamic-environments/configuration.mkd +60 -3
  12. data/doc/dynamic-environments/usage.mkd +5 -4
  13. data/doc/faq.mkd +6 -1
  14. data/doc/puppetfile.mkd +2 -0
  15. data/docker/Makefile +16 -2
  16. data/docker/r10k/Dockerfile +17 -6
  17. data/docker/r10k/release.Dockerfile +23 -4
  18. data/integration/tests/git_source/git_source_repeated_remote.rb +68 -0
  19. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +1 -1
  20. data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +1 -1
  21. data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +1 -1
  22. data/lib/r10k/action/deploy/environment.rb +3 -0
  23. data/lib/r10k/action/deploy/module.rb +4 -1
  24. data/lib/r10k/action/runner.rb +34 -0
  25. data/lib/r10k/cli/deploy.rb +9 -4
  26. data/lib/r10k/cli/puppetfile.rb +5 -5
  27. data/lib/r10k/environment/base.rb +8 -1
  28. data/lib/r10k/environment/with_modules.rb +27 -19
  29. data/lib/r10k/forge/module_release.rb +2 -2
  30. data/lib/r10k/git.rb +1 -0
  31. data/lib/r10k/git/cache.rb +12 -4
  32. data/lib/r10k/git/rugged/credentials.rb +32 -2
  33. data/lib/r10k/git/stateful_repository.rb +4 -0
  34. data/lib/r10k/initializers.rb +2 -0
  35. data/lib/r10k/module/base.rb +8 -0
  36. data/lib/r10k/module/forge.rb +1 -1
  37. data/lib/r10k/module/git.rb +20 -3
  38. data/lib/r10k/puppetfile.rb +30 -12
  39. data/lib/r10k/settings.rb +24 -2
  40. data/lib/r10k/source/git.rb +22 -2
  41. data/lib/r10k/version.rb +1 -1
  42. data/locales/r10k.pot +60 -36
  43. data/spec/fixtures/unit/action/r10k_creds.yaml +9 -0
  44. data/spec/shared-examples/subprocess-runner.rb +11 -5
  45. data/spec/unit/action/deploy/environment_spec.rb +43 -2
  46. data/spec/unit/action/deploy/module_spec.rb +40 -1
  47. data/spec/unit/action/puppetfile/install_spec.rb +1 -0
  48. data/spec/unit/action/runner_spec.rb +48 -1
  49. data/spec/unit/environment/git_spec.rb +3 -2
  50. data/spec/unit/environment/with_modules_spec.rb +74 -0
  51. data/spec/unit/forge/module_release_spec.rb +14 -10
  52. data/spec/unit/git/cache_spec.rb +10 -0
  53. data/spec/unit/git/rugged/credentials_spec.rb +69 -2
  54. data/spec/unit/git_spec.rb +3 -3
  55. data/spec/unit/module/git_spec.rb +55 -0
  56. data/spec/unit/puppetfile_spec.rb +61 -7
  57. data/spec/unit/settings_spec.rb +12 -0
  58. data/spec/unit/source/git_spec.rb +49 -1
  59. metadata +6 -2
data/doc/faq.mkd CHANGED
@@ -141,7 +141,7 @@ modulepath = modules:external-modules
141
141
 
142
142
  Lastly, you can simply move your locally versioned modules to a separate
143
143
  directory to avoid conflicting over the `/modules` directory entirely. With this
144
- example as well you can use the `environment.conf file to tell Puppet which
144
+ example as well you can use the `environment.conf` file to tell Puppet which
145
145
  directories contain modules.
146
146
 
147
147
  ```
@@ -149,6 +149,11 @@ directories contain modules.
149
149
  modulepath = internal-modules:modules
150
150
  ```
151
151
 
152
+ #### Does R10K support Local/Private Forge?
153
+
154
+ Yes. Set the Forge to use _globally_ in `r10k.yaml`. see [Configuration](/doc/dynamic-environments/configuration.mkd#baseurl) for details.
155
+
156
+
152
157
  #### What does the name mean?
153
158
 
154
159
  It’s called R10K because I’m terrible at names. When I started working on R10K
data/doc/puppetfile.mkd CHANGED
@@ -54,6 +54,8 @@ The `forge` setting specifies which server that Forge based modules are fetched
54
54
  from. This is currently a noop and is provided for compatibility with
55
55
  librarian-puppet.
56
56
 
57
+ R10k supports setting the Forge to use _globally_ in `r10k.yaml`. see [Configuration](/doc/dynamic-environments/configuration.mkd#baseurl) for details.
58
+
57
59
  ### moduledir
58
60
 
59
61
  The `moduledir` setting specifies where modules from the Puppetfile will be
data/docker/Makefile CHANGED
@@ -1,11 +1,12 @@
1
1
  PUPPERWARE_ANALYTICS_STREAM ?= dev
2
2
  NAMESPACE ?= puppet
3
- git_describe = $(shell git describe)
3
+ git_describe = $(shell git describe --tags)
4
4
  vcs_ref := $(shell git rev-parse HEAD)
5
5
  build_date := $(shell date -u +%FT%T)
6
6
  hadolint_available := $(shell hadolint --help > /dev/null 2>&1; echo $$?)
7
7
  hadolint_command := hadolint
8
8
  hadolint_container := hadolint/hadolint:latest
9
+ alpine_version := 3.9
9
10
  export BUNDLE_PATH = $(PWD)/.bundle/gems
10
11
  export BUNDLE_BIN = $(PWD)/.bundle/bin
11
12
  export GEMFILE = $(PWD)/Gemfile
@@ -13,6 +14,14 @@ export DOCKER_BUILDKIT = 1
13
14
 
14
15
  ifeq ($(IS_RELEASE),true)
15
16
  VERSION ?= $(shell echo $(git_describe) | sed 's/-.*//')
17
+ PUBLISHED_VERSION ?= $(shell curl --silent 'https://rubygems.org/api/v1/gems/r10k.json' | jq '."version"' | tr -d '"')
18
+ CONTAINER_EXISTS = $(shell DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect $(NAMESPACE)/r10k:$(VERSION) > /dev/null 2>&1; echo $$?)
19
+ ifeq ($(CONTAINER_EXISTS),0)
20
+ SKIP_BUILD ?= true
21
+ else ifneq ($(VERSION),$(PUBLISHED_VERSION))
22
+ SKIP_BUILD ?= true
23
+ endif
24
+
16
25
  LATEST_VERSION ?= latest
17
26
  dockerfile := release.Dockerfile
18
27
  dockerfile_context := r10k
@@ -26,6 +35,10 @@ endif
26
35
  prep:
27
36
  @git fetch --unshallow 2> /dev/null ||:
28
37
  @git fetch origin 'refs/tags/*:refs/tags/*'
38
+ ifeq ($(SKIP_BUILD),true)
39
+ @echo "SKIP_BUILD is true, exiting with 1"
40
+ @exit 1
41
+ endif
29
42
 
30
43
  lint:
31
44
  ifeq ($(hadolint_available),0)
@@ -36,9 +49,10 @@ else
36
49
  endif
37
50
 
38
51
  build: prep
52
+ docker pull alpine:$(alpine_version)
39
53
  docker build \
40
54
  ${DOCKER_BUILD_FLAGS} \
41
- --pull \
55
+ --build-arg alpine_version=$(alpine_version) \
42
56
  --build-arg vcs_ref=$(vcs_ref) \
43
57
  --build-arg build_date=$(build_date) \
44
58
  --build-arg version=$(VERSION) \
@@ -1,4 +1,5 @@
1
- FROM alpine:3.9 as build
1
+ ARG alpine_version=3.9
2
+ FROM alpine:${alpine_version} as build
2
3
 
3
4
  # hadolint ignore=DL3018
4
5
  RUN apk add --no-cache ruby git && \
@@ -8,7 +9,7 @@ COPY . /workspace
8
9
  RUN gem build r10k.gemspec && \
9
10
  mv r10k*.gem r10k.gem
10
11
 
11
- FROM alpine:3.9
12
+ FROM alpine:${alpine_version}
12
13
 
13
14
  ARG vcs_ref
14
15
  ARG build_date
@@ -16,6 +17,11 @@ ARG version="3.1.0"
16
17
  # Used by entrypoint to submit metrics to Google Analytics.
17
18
  # Published images should use "production" for this build_arg.
18
19
  ARG pupperware_analytics_stream="dev"
20
+ # required to schedule runs of "r10k" in K8s
21
+ ARG supercronic_version="0.1.9"
22
+ ARG supercronic_sha1sum="5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85"
23
+ ARG supercronic="supercronic-linux-amd64"
24
+ ARG supercronic_url="https://github.com/aptible/supercronic/releases/download/v$supercronic_version/$supercronic"
19
25
 
20
26
  LABEL org.label-schema.maintainer="Puppet Release Team <release@puppet.com>" \
21
27
  org.label-schema.vendor="Puppet" \
@@ -32,7 +38,7 @@ COPY docker/r10k/docker-entrypoint.d /docker-entrypoint.d
32
38
  ENTRYPOINT ["/docker-entrypoint.sh"]
33
39
  CMD ["help"]
34
40
 
35
- # dyanmic LABELs and ENV vars placed lower for the sake of Docker layer caching
41
+ # dynamic LABELs and ENV vars placed lower for the sake of Docker layer caching
36
42
  ENV PUPPERWARE_ANALYTICS_STREAM="$pupperware_analytics_stream"
37
43
 
38
44
  LABEL org.label-schema.version="$version" \
@@ -40,16 +46,21 @@ LABEL org.label-schema.version="$version" \
40
46
  org.label-schema.build-date="$build_date"
41
47
 
42
48
  COPY --from=build /workspace/r10k.gem /
49
+ SHELL ["/bin/ash", "-eo", "pipefail", "-c"]
43
50
  # ignore apk and gem pinning
44
51
  # hadolint ignore=DL3018,DL3028
45
- RUN chmod a+x /adduser.sh && \
52
+ RUN chmod a+x /adduser.sh /docker-entrypoint.sh && \
46
53
  # Add a puppet user to run r10k as for consistency with puppetserver
47
54
  /adduser.sh && \
48
- chmod +x /docker-entrypoint.sh && \
49
55
  chown -R puppet: /docker-entrypoint.d /docker-entrypoint.sh && \
50
56
  apk add --no-cache ruby openssh-client git ruby-rugged curl ruby-json ruby-etc && \
51
57
  gem install --no-doc /r10k.gem && \
52
- rm -f /r10k.gem
58
+ rm -f /r10k.gem && \
59
+ curl --fail --silent --show-error --location --remote-name "$supercronic_url" && \
60
+ echo "${supercronic_sha1sum} ${supercronic}" | sha1sum -c - && \
61
+ chmod +x "$supercronic" && \
62
+ mv "$supercronic" "/usr/local/bin/${supercronic}" && \
63
+ ln -s "/usr/local/bin/${supercronic}" /usr/local/bin/supercronic
53
64
 
54
65
  USER puppet
55
66
  WORKDIR /home/puppet
@@ -1,4 +1,5 @@
1
- FROM alpine:3.9
1
+ ARG alpine_version=3.9
2
+ FROM alpine:${alpine_version}
2
3
 
3
4
  ARG vcs_ref
4
5
  ARG build_date
@@ -6,6 +7,11 @@ ARG version="3.1.0"
6
7
  # Used by entrypoint to submit metrics to Google Analytics.
7
8
  # Published images should use "production" for this build_arg.
8
9
  ARG pupperware_analytics_stream="dev"
10
+ # required to schedule runs of "r10k" in K8s
11
+ ARG supercronic_version="0.1.9"
12
+ ARG supercronic_sha1sum="5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85"
13
+ ARG supercronic="supercronic-linux-amd64"
14
+ ARG supercronic_url="https://github.com/aptible/supercronic/releases/download/v$supercronic_version/$supercronic"
9
15
 
10
16
  LABEL org.label-schema.maintainer="Puppet Release Team <release@puppet.com>" \
11
17
  org.label-schema.vendor="Puppet" \
@@ -16,7 +22,7 @@ LABEL org.label-schema.maintainer="Puppet Release Team <release@puppet.com>" \
16
22
  org.label-schema.schema-version="1.0" \
17
23
  org.label-schema.dockerfile="/release.Dockerfile"
18
24
 
19
- COPY docker-entrypoint.sh /
25
+ COPY adduser.sh docker-entrypoint.sh /
20
26
  COPY docker-entrypoint.d /docker-entrypoint.d
21
27
 
22
28
  ENTRYPOINT ["/docker-entrypoint.sh"]
@@ -29,8 +35,21 @@ LABEL org.label-schema.version="$version" \
29
35
  org.label-schema.vcs-ref="$vcs_ref" \
30
36
  org.label-schema.build-date="$build_date"
31
37
 
32
- RUN chmod +x /docker-entrypoint.sh && \
38
+ SHELL ["/bin/ash", "-eo", "pipefail", "-c"]
39
+ # ignore apk and gem pinning
40
+ # hadolint ignore=DL3018,DL3028
41
+ RUN chmod a+x /adduser.sh /docker-entrypoint.sh && \
42
+ /adduser.sh && \
43
+ chown -R puppet: /docker-entrypoint.d /docker-entrypoint.sh && \
33
44
  apk add --no-cache ruby openssh-client git ruby-rugged curl ruby-dev make gcc musl-dev && \
34
- gem install --no-doc r10k:"$version" json etc
45
+ gem install --no-doc r10k:"$version" json etc && \
46
+ curl --fail --silent --show-error --location --remote-name "$supercronic_url" && \
47
+ echo "${supercronic_sha1sum} ${supercronic}" | sha1sum -c - && \
48
+ chmod +x "$supercronic" && \
49
+ mv "$supercronic" "/usr/local/bin/${supercronic}" && \
50
+ ln -s "/usr/local/bin/${supercronic}" /usr/local/bin/supercronic
51
+
52
+ USER puppet
53
+ WORKDIR /home/puppet
35
54
 
36
55
  COPY release.Dockerfile /
@@ -0,0 +1,68 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'Verify the same remote can be used in more than one object'
5
+
6
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
7
+ r10k_fqp = get_r10k_fqp(master)
8
+ git_environments_path = '/root/environments'
9
+ git_repo_path = '/git_repos'
10
+ git_repo_name = 'environments'
11
+ git_control_remote = File.join(git_repo_path, "#{git_repo_name}.git")
12
+ code_dir = "#{env_path}/production"
13
+
14
+ last_commit = git_last_commit(master, git_environments_path)
15
+ git_provider = ENV['GIT_PROVIDER']
16
+ r10k_config_path = get_r10k_config_file_path(master)
17
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
18
+ #In-line files
19
+ r10k_conf = <<-CONF
20
+ cachedir: '/var/cache/r10k'
21
+ git:
22
+ provider: '#{git_provider}'
23
+ sources:
24
+ control:
25
+ basedir: "#{env_path}"
26
+ remote: "#{git_control_remote}"
27
+ CONF
28
+
29
+ # Install the same module in two different places
30
+ puppetfile = <<-EOS
31
+ mod 'prod_apache',
32
+ :git => 'git://github.com/puppetlabs/puppetlabs-apache.git',
33
+ :branch => 'master'
34
+
35
+ mod 'test_apache',
36
+ :git => 'git://github.com/puppetlabs/puppetlabs-apache.git',
37
+ :branch => 'master'
38
+ EOS
39
+
40
+ teardown do
41
+ step 'Restore Original "r10k" Config'
42
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
43
+
44
+ clean_up_r10k(master, last_commit, git_environments_path)
45
+ end
46
+
47
+ step 'Stub the forge'
48
+ stub_forge_on(master)
49
+
50
+ step 'Backup Current "r10k" Config'
51
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
52
+
53
+ step 'Update the "r10k" Config'
54
+ create_remote_file(master, r10k_config_path, r10k_conf)
55
+
56
+ step 'Ask r10k to deploy'
57
+ on(master, "#{r10k_fqp} deploy environment -p")
58
+
59
+ step 'Add puppetfile with repeated remote'
60
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", puppetfile)
61
+ git_add_commit_push(master, 'production', 'add Puppetfile', git_environments_path)
62
+
63
+ step 'Deploy r10k'
64
+ on(master, "#{r10k_fqp} deploy environment -p")
65
+
66
+ step 'Verify module was installed in both places'
67
+ on(master, "test -d #{code_dir}/modules/prod_apache")
68
+ on(master, "test -d #{code_dir}/modules/test_apache")
@@ -24,7 +24,7 @@ stage_env_notify_message = 'This is a different message'
24
24
  stage_env_notify_message_regex = /#{stage_env_notify_message}/
25
25
 
26
26
  #Verification for "test" Environment
27
- test_env_error_message_regex = /Error:.*Could not find environment 'test'/
27
+ test_env_error_message_regex = /Error:.*Could not.*environment '?test'?/
28
28
 
29
29
  #Verification for "temp" Environment
30
30
  test_env_notify_message_regex = /I am in the temp environment/
@@ -15,7 +15,7 @@ initial_env_names = ['production', 'stage']
15
15
 
16
16
  #Verification
17
17
  notify_message_regex = /I am in the production environment/
18
- stage_env_error_message_regex = /Error:.*Could not find environment 'stage'/
18
+ stage_env_error_message_regex = /Error:.*Could not.*environment '?stage'?/
19
19
 
20
20
  #Manifest
21
21
  site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
@@ -22,7 +22,7 @@ site_pp = create_site_pp(master_certname, ' include helloworld')
22
22
  notify_message_prod_env_regex = /I am in the production environment/
23
23
  notify_message_test_env_regex = /I am in the test environment/
24
24
  removal_message_test_env_regex = /Removing unmanaged path.*test/
25
- error_message_regex = /Could not retrieve catalog from remote server/
25
+ error_message_regex = /Could not retrieve (catalog from remote server|information from environment test)/
26
26
 
27
27
  #Teardown
28
28
  teardown do
@@ -188,6 +188,9 @@ module R10K
188
188
  'no-force': :self,
189
189
  'generate-types': :self,
190
190
  'puppet-path': :self,
191
+ 'puppet-conf': :self,
192
+ 'private-key': :self,
193
+ 'oauth-token': :self,
191
194
  'default-branch-override': :self)
192
195
  end
193
196
  end
@@ -76,7 +76,10 @@ module R10K
76
76
  cachedir: :self,
77
77
  'no-force': :self,
78
78
  'generate-types': :self,
79
- 'puppet-path': :self)
79
+ 'puppet-path': :self,
80
+ 'puppet-conf': :self,
81
+ 'private-key': :self,
82
+ 'oauth-token': :self)
80
83
  end
81
84
  end
82
85
  end
@@ -46,6 +46,7 @@ module R10K
46
46
  overrides[:cachedir] = @opts[:cachedir] if @opts.key?(:cachedir)
47
47
  overrides[:deploy] = {} if @opts.key?(:'puppet-path') || @opts.key?(:'generate-types')
48
48
  overrides[:deploy][:puppet_path] = @opts[:'puppet-path'] if @opts.key?(:'puppet-path')
49
+ overrides[:deploy][:puppet_conf] = @opts[:'puppet-conf'] unless @opts[:'puppet-conf'].nil?
49
50
  overrides[:deploy][:generate_types] = @opts[:'generate-types'] if @opts.key?(:'generate-types')
50
51
 
51
52
  with_overrides = config_settings.merge(overrides) do |key, oldval, newval|
@@ -54,6 +55,10 @@ module R10K
54
55
  newval
55
56
  end
56
57
 
58
+ # Credentials from the CLI override both the global and per-repo
59
+ # credentials from the config, and so need to be handled specially
60
+ with_overrides = add_credential_overrides(with_overrides)
61
+
57
62
  @settings = R10K::Settings.global_settings.evaluate(with_overrides)
58
63
 
59
64
  R10K::Initializers::GlobalInitializer.new(@settings).call
@@ -91,6 +96,35 @@ module R10K
91
96
 
92
97
  results
93
98
  end
99
+
100
+ def add_credential_overrides(overrides)
101
+ sshkey_path = @opts[:'private-key']
102
+ token_path = @opts[:'oauth-token']
103
+
104
+ if sshkey_path && token_path
105
+ raise R10K::Error, "Cannot specify both an SSH key and a token to use with this deploy."
106
+ end
107
+
108
+ if sshkey_path
109
+ overrides[:git] ||= {}
110
+ overrides[:git][:private_key] = sshkey_path
111
+ if repo_settings = overrides[:git][:repositories]
112
+ repo_settings.each do |repo|
113
+ repo[:private_key] = sshkey_path
114
+ end
115
+ end
116
+ elsif token_path
117
+ overrides[:git] ||= {}
118
+ overrides[:git][:oauth_token] = token_path
119
+ if repo_settings = overrides[:git][:repositories]
120
+ repo_settings.each do |repo|
121
+ repo[:oauth_token] = token_path
122
+ end
123
+ end
124
+ end
125
+
126
+ overrides
127
+ end
94
128
  end
95
129
  end
96
130
  end
@@ -21,7 +21,7 @@ module R10K::CLI
21
21
  (https://puppet.com/docs/puppet/latest/environments_about.html).
22
22
  DESCRIPTION
23
23
 
24
- required nil, :cachedir, 'Specify a cachedir, overriding the value in config'
24
+ option nil, :cachedir, 'Specify a cachedir, overriding the value in config', argument: :required
25
25
  flag nil, :'no-force', 'Prevent the overwriting of local module modifications'
26
26
  flag nil, :'generate-types', 'Run `puppet generate types` after updating an environment'
27
27
  option nil, :'puppet-path', 'Path to puppet executable', argument: :required do |value, cmd|
@@ -31,6 +31,9 @@ module R10K::CLI
31
31
  exit 1
32
32
  end
33
33
  end
34
+ option nil, :'puppet-conf', 'Path to puppet.conf', argument: :required
35
+ option nil, :'private-key', 'Path to SSH key to use when cloning. Only valid with rugged provider', argument: :required
36
+ option nil, :'oauth-token', 'Path to OAuth token to use when cloning. Only valid with rugged provider', argument: :required
34
37
 
35
38
  run do |opts, args, cmd|
36
39
  puts cmd.help(:verbose => opts[:verbose])
@@ -61,7 +64,8 @@ scheduled. On subsequent deployments, Puppetfile deployment will default to off.
61
64
  DESCRIPTION
62
65
 
63
66
  flag :p, :puppetfile, 'Deploy modules from a puppetfile'
64
- required nil, :'default-branch-override', 'Specify a branchname to override the default branch in the puppetfile'
67
+ option nil, :'default-branch-override', 'Specify a branchname to override the default branch in the puppetfile',
68
+ argument: :required
65
69
 
66
70
  runner R10K::Action::CriRunner.wrap(R10K::Action::Deploy::Environment)
67
71
  end
@@ -81,7 +85,7 @@ It will load the Puppetfile configurations out of all environments, and will
81
85
  try to deploy the given module names in all environments.
82
86
  DESCRIPTION
83
87
 
84
- required :e, :environment, 'Update the modules in the given environment'
88
+ option :e, :environment, 'Update the modules in the given environment', argument: :required
85
89
 
86
90
  runner R10K::Action::CriRunner.wrap(R10K::Action::Deploy::Module)
87
91
  end
@@ -99,7 +103,8 @@ try to deploy the given module names in all environments.
99
103
  flag :p, :puppetfile, 'Display Puppetfile modules'
100
104
  flag nil, :detail, 'Display detailed information'
101
105
  flag nil, :fetch, 'Update available environment lists from all remote sources'
102
- required nil, :format, 'Display output in a specific format. Valid values: json, yaml. Default: yaml'
106
+ option nil, :format, 'Display output in a specific format. Valid values: json, yaml. Default: yaml',
107
+ argument: :required
103
108
 
104
109
  runner R10K::Action::CriRunner.wrap(R10K::Action::Deploy::Display)
105
110
  end
@@ -30,8 +30,8 @@ Puppetfile (http://bombasticmonkey.com/librarian-puppet/).
30
30
  name 'install'
31
31
  usage 'install'
32
32
  summary 'Install all modules from a Puppetfile'
33
- required nil, :moduledir, 'Path to install modules to'
34
- required nil, :puppetfile, 'Path to puppetfile'
33
+ option nil, :moduledir, 'Path to install modules to', argument: :required
34
+ option nil, :puppetfile, 'Path to puppetfile', argument: :required
35
35
  flag nil, :force, 'Force locally changed files to be overwritten'
36
36
  runner R10K::Action::Puppetfile::CriRunner.wrap(R10K::Action::Puppetfile::Install)
37
37
  end
@@ -45,7 +45,7 @@ Puppetfile (http://bombasticmonkey.com/librarian-puppet/).
45
45
  usage 'check'
46
46
  summary 'Try and load the Puppetfile to verify the syntax is correct.'
47
47
 
48
- required nil, :puppetfile, 'Path to Puppetfile'
48
+ option nil, :puppetfile, 'Path to Puppetfile', argument: :required
49
49
  runner R10K::Action::Puppetfile::CriRunner.wrap(R10K::Action::Puppetfile::Check)
50
50
  end
51
51
  end
@@ -58,8 +58,8 @@ Puppetfile (http://bombasticmonkey.com/librarian-puppet/).
58
58
  usage 'purge'
59
59
  summary 'Purge unmanaged modules from a Puppetfile managed directory'
60
60
 
61
- required nil, :moduledir, 'Path to install modules to'
62
- required nil, :puppetfile, 'Path to Puppetfile'
61
+ option nil, :moduledir, 'Path to install modules to', argument: :required
62
+ option nil, :puppetfile, 'Path to Puppetfile', argument: :required
63
63
  runner R10K::Action::Puppetfile::CriRunner.wrap(R10K::Action::Puppetfile::Purge)
64
64
  end
65
65
  end