r10k 3.5.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
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