pdk 1.3.2 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8152056a45f108c734ac1eb4a017e986cad496b1
4
- data.tar.gz: 1a0c6eb3e786de37918cc21fa6247a6460c848bf
3
+ metadata.gz: c3c5a5c1229e58da80498533964f4d7ae26cd5e7
4
+ data.tar.gz: 656f786a2d964d6ee08da649d7649580a9ea24d0
5
5
  SHA512:
6
- metadata.gz: 372986f1e28505390b9f27e0ff3edb28249b3a142719a5f89392cbd222c76260c4de03c452b3a6c2a59e8e9d775be353a24143c2df4adcb933d4799860973eac
7
- data.tar.gz: d6e711d87610a449e833f48afeb3dc6105ef880ef7b70041384a7107b020e97b52618699101a4ff4a8c14adb13ef4f085b4d561b1138c2474667d36ce15d45a1
6
+ metadata.gz: de547cceb59992ac724afbfd57888c9aea06bb875dff612d5f4fab63e52b25f39fead90fb9720fc9915c4bff40774efe1d03174742884c2903f44555b8a03a5f
7
+ data.tar.gz: c716798699ba50f829f8b444b41706c12d0f4310ae0ad80efd000f893ef82dd34cde7c193dcef98c059ad79f9d011cd9a4d77f625eb6eab0b0bd99cfa73e9adc
@@ -4,7 +4,68 @@ All changes to this repo will be documented in this file.
4
4
  See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) for a high-level summary.
5
5
 
6
6
 
7
- ## [v1.3.2](https://github.com/puppetlabs/pdk/tree/v1.3.2) (2018-01-16)
7
+ ## [v1.4.1](https://github.com/puppetlabs/pdk/tree/v1.4.1) (2018-02-26)
8
+ [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.4.0...v1.4.1)
9
+
10
+ **Fixed bugs:**
11
+
12
+ - pdk update and convert fixes [\#433](https://github.com/puppetlabs/pdk/pull/433) ([bmjen](https://github.com/bmjen))
13
+
14
+ **Merged pull requests:**
15
+
16
+ - Updates msg in pdk update on unconverted module [\#442](https://github.com/puppetlabs/pdk/pull/442) ([bmjen](https://github.com/bmjen))
17
+ - Release 1.4.1 amend [\#441](https://github.com/puppetlabs/pdk/pull/441) ([bmjen](https://github.com/bmjen))
18
+ - \(maint\) pdk update checks if module is pdk compat [\#440](https://github.com/puppetlabs/pdk/pull/440) ([bmjen](https://github.com/bmjen))
19
+ - Release 1.4.1 amend [\#439](https://github.com/puppetlabs/pdk/pull/439) ([bmjen](https://github.com/bmjen))
20
+ - \(maint\) add a `pdk module build` command to point to `pdk build` [\#438](https://github.com/puppetlabs/pdk/pull/438) ([DavidS](https://github.com/DavidS))
21
+ - \(maint\) unhide the `update` command [\#437](https://github.com/puppetlabs/pdk/pull/437) ([DavidS](https://github.com/DavidS))
22
+ - \(maint\) update: don't mention deleted Gemfile.lock and .bundle/config [\#436](https://github.com/puppetlabs/pdk/pull/436) ([DavidS](https://github.com/DavidS))
23
+ - Release 1.4.1 [\#435](https://github.com/puppetlabs/pdk/pull/435) ([bmjen](https://github.com/bmjen))
24
+
25
+ ## [v1.4.0](https://github.com/puppetlabs/pdk/tree/v1.4.0) (2018-02-21)
26
+ [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.3.2...v1.4.0)
27
+
28
+ **Implemented enhancements:**
29
+
30
+ - \(PDK-771\) Wireframe `pdk update` CLI [\#419](https://github.com/puppetlabs/pdk/pull/419) ([rodjek](https://github.com/rodjek))
31
+ - \(PDK-550\) Removes unrequired questions from module interview [\#410](https://github.com/puppetlabs/pdk/pull/410) ([bmjen](https://github.com/bmjen))
32
+ - \(PDK-506\) pdk new provider [\#409](https://github.com/puppetlabs/pdk/pull/409) ([DavidS](https://github.com/DavidS))
33
+ - \(PDK-748\) Wireframe `pdk build` CLI [\#407](https://github.com/puppetlabs/pdk/pull/407) ([rodjek](https://github.com/rodjek))
34
+
35
+ **Fixed bugs:**
36
+
37
+ - if a newer rubocop version is installed, pdk should fall-back to safe defaults [\#420](https://github.com/puppetlabs/pdk/issues/420)
38
+ - Update validation regex and error message for module name question [\#430](https://github.com/puppetlabs/pdk/pull/430) ([ardrigh](https://github.com/ardrigh))
39
+ - \(PDK-789\) Add pdk metadata to all generated templatedirs. [\#428](https://github.com/puppetlabs/pdk/pull/428) ([bmjen](https://github.com/bmjen))
40
+
41
+ **Closed issues:**
42
+
43
+ - WS1.Reputation - Symantec Endpoint Protection [\#403](https://github.com/puppetlabs/pdk/issues/403)
44
+ - task input\_method 'powershell' fails validation [\#369](https://github.com/puppetlabs/pdk/issues/369)
45
+ - PDK should have an option to disable progress indicator to make it usable in CI [\#323](https://github.com/puppetlabs/pdk/issues/323)
46
+
47
+ **Merged pull requests:**
48
+
49
+ - Release 1.4.0 [\#432](https://github.com/puppetlabs/pdk/pull/432) ([bmjen](https://github.com/bmjen))
50
+ - \(PDK-808\) Fix to pdk update when there are sync.yml changes [\#431](https://github.com/puppetlabs/pdk/pull/431) ([bmjen](https://github.com/bmjen))
51
+ - \(PDK-806\) Update metadata interview text if metadata.json already exists [\#429](https://github.com/puppetlabs/pdk/pull/429) ([rodjek](https://github.com/rodjek))
52
+ - \(FIXUP\) Make `pdk build` overwrite prompt consistent [\#427](https://github.com/puppetlabs/pdk/pull/427) ([scotje](https://github.com/scotje))
53
+ - \(maint\) Update unit tests to use exit\_zero/exit\_nonzero matchers [\#426](https://github.com/puppetlabs/pdk/pull/426) ([rodjek](https://github.com/rodjek))
54
+ - \(PDK-804\) Fixes error in build without ignore file [\#425](https://github.com/puppetlabs/pdk/pull/425) ([bmjen](https://github.com/bmjen))
55
+ - \(PDK-799\) Adds unit tests for the UX validation [\#423](https://github.com/puppetlabs/pdk/pull/423) ([bmjen](https://github.com/bmjen))
56
+ - \(PDK-754\) Interview for missing or Forge only metadata before build [\#422](https://github.com/puppetlabs/pdk/pull/422) ([bmjen](https://github.com/bmjen))
57
+ - \(PDK-772\) Refactor PDK::Module::Convert for re-use in PDK::Module::Update [\#421](https://github.com/puppetlabs/pdk/pull/421) ([rodjek](https://github.com/rodjek))
58
+ - Revert "\(maint\) pin pdk-templates version ref to workaround puppet 5.… [\#418](https://github.com/puppetlabs/pdk/pull/418) ([bmjen](https://github.com/bmjen))
59
+ - \(PDK-799\) Adds validations and checks to pdk build workflow [\#416](https://github.com/puppetlabs/pdk/pull/416) ([bmjen](https://github.com/bmjen))
60
+ - Small fixes [\#415](https://github.com/puppetlabs/pdk/pull/415) ([DavidS](https://github.com/DavidS))
61
+ - \(maint\) Make sure we use pdk-templates master if in development [\#414](https://github.com/puppetlabs/pdk/pull/414) ([bmjen](https://github.com/bmjen))
62
+ - \(maint\) bump version for dev. [\#412](https://github.com/puppetlabs/pdk/pull/412) ([bmjen](https://github.com/bmjen))
63
+ - \(PDK-758\) Initial port & cleanup of the module build code [\#411](https://github.com/puppetlabs/pdk/pull/411) ([rodjek](https://github.com/rodjek))
64
+ - \(maint\) Fix error templatedir error message [\#408](https://github.com/puppetlabs/pdk/pull/408) ([DavidS](https://github.com/DavidS))
65
+ - \(MAINT\) remove dead code [\#406](https://github.com/puppetlabs/pdk/pull/406) ([DavidS](https://github.com/DavidS))
66
+ - \(PDK-575\) Run puppet parser validate with an dummy empty puppet.conf [\#402](https://github.com/puppetlabs/pdk/pull/402) ([rodjek](https://github.com/rodjek))
67
+
68
+ ## [v1.3.2](https://github.com/puppetlabs/pdk/tree/v1.3.2) (2018-01-17)
8
69
  [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.3.1...v1.3.2)
9
70
 
10
71
  **Closed issues:**
@@ -15,6 +76,7 @@ See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) f
15
76
  **Merged pull requests:**
16
77
 
17
78
  - \(maint\) Default PDK::TEMPLATE\_REF to PDK::VERSION [\#405](https://github.com/puppetlabs/pdk/pull/405) ([rodjek](https://github.com/rodjek))
79
+ - 1.3.2 Release Prep [\#404](https://github.com/puppetlabs/pdk/pull/404) ([HelenCampbell](https://github.com/HelenCampbell))
18
80
  - \(PDK-552\) Soften PDK::CLI::Util.ensure\_in\_module! error messages [\#401](https://github.com/puppetlabs/pdk/pull/401) ([rodjek](https://github.com/rodjek))
19
81
  - \(PDK-739\) Fall back to default template if necessary [\#400](https://github.com/puppetlabs/pdk/pull/400) ([rodjek](https://github.com/rodjek))
20
82
 
@@ -45,6 +45,10 @@ module PDK::CLI
45
45
  dsl.option nil, 'skip-interview', _('When specified, skips interactive querying of metadata.')
46
46
  end
47
47
 
48
+ def self.full_interview_option(dsl)
49
+ dsl.option nil, 'full-interview', _('When specified, interactive querying of metadata will include all optional questions.')
50
+ end
51
+
48
52
  @base_cmd = Cri::Command.define do
49
53
  name 'pdk'
50
54
  usage _('pdk command [options]')
@@ -83,9 +87,11 @@ module PDK::CLI
83
87
  end
84
88
 
85
89
  require 'pdk/cli/bundle'
90
+ require 'pdk/cli/build'
86
91
  require 'pdk/cli/convert'
87
92
  require 'pdk/cli/new'
88
93
  require 'pdk/cli/test'
94
+ require 'pdk/cli/update'
89
95
  require 'pdk/cli/validate'
90
96
  require 'pdk/cli/module'
91
97
 
@@ -0,0 +1,76 @@
1
+ require 'pdk/cli/util'
2
+
3
+ module PDK::CLI
4
+ @build_cmd = @base_cmd.define_command do
5
+ name 'build'
6
+ usage _('build [options]')
7
+ summary _('Builds a package from the module that can be published to the Puppet Forge.')
8
+
9
+ option nil, 'target-dir',
10
+ _('The target directory where you want PDK to write the package.'),
11
+ argument: :required, default: File.join(Dir.pwd, 'pkg')
12
+
13
+ option nil, 'force', _('Skips the prompts and builds the module package.')
14
+
15
+ run do |opts, _args, _cmd|
16
+ require 'pdk/module/build'
17
+
18
+ # Make sure build is being run in a valid module directory with a metadata.json
19
+ PDK::CLI::Util.ensure_in_module!(
20
+ message: _('`pdk build` can only be run from inside a valid module with a metadata.json.'),
21
+ log_level: :info,
22
+ )
23
+
24
+ module_metadata = PDK::Module::Metadata.from_file('metadata.json')
25
+
26
+ # TODO: Ensure forge metadata has been set, or call out to interview
27
+ # to set it.
28
+ #
29
+ unless module_metadata.forge_ready?
30
+ if opts[:force]
31
+ PDK.logger.error _('This module is missing required fields in the metadata.json. Re-run the build command without --force to add this information.')
32
+ exit 1
33
+ else
34
+ module_metadata.interview_for_forge!
35
+ module_metadata.write!('metadata.json')
36
+ end
37
+ end
38
+
39
+ builder = PDK::Module::Build.new(opts)
40
+
41
+ unless opts[:force]
42
+ if builder.package_already_exists?
43
+ PDK.logger.info _("The file '%{package}' already exists.") % { package: builder.package_file }
44
+
45
+ unless PDK::CLI::Util.prompt_for_yes(_('Overwrite?'), default: false)
46
+ PDK.logger.info _('Build cancelled; exiting.')
47
+ exit 0
48
+ end
49
+ end
50
+
51
+ unless builder.module_pdk_compatible?
52
+ PDK.logger.info _('This module is not compatible with PDK, so PDK can not validate or test this build. ' \
53
+ 'Unvalidated modules may have errors when uploading to the Forge. ' \
54
+ 'To make this module PDK compatible and use validate features, cancel the build and run `pdk convert`.')
55
+
56
+ unless PDK::CLI::Util.prompt_for_yes(_('Continue build without converting?'))
57
+ PDK.logger.info _('Build cancelled; exiting.')
58
+ exit 0
59
+ end
60
+ end
61
+ end
62
+
63
+ PDK.logger.info _('Building %{module_name} version %{module_version}') % {
64
+ module_name: module_metadata.data['name'],
65
+ module_version: module_metadata.data['version'],
66
+ }
67
+
68
+ builder.build
69
+
70
+ PDK.logger.info _('Build of %{package_name} has completed successfully. Built package can be found here: %{package_path}') % {
71
+ package_name: module_metadata.data['name'],
72
+ package_path: builder.package_file,
73
+ }
74
+ end
75
+ end
76
+ end
@@ -8,6 +8,7 @@ module PDK::CLI
8
8
 
9
9
  PDK::CLI.template_url_option(self)
10
10
  PDK::CLI.skip_interview_option(self)
11
+ PDK::CLI.full_interview_option(self)
11
12
  flag nil, :noop, _('Do not convert the module, just output what would be done.')
12
13
  flag nil, :force, _('Convert the module automatically, with no prompts.')
13
14
 
@@ -24,6 +25,16 @@ module PDK::CLI
24
25
  raise PDK::CLI::ExitWithError, _('You can not specify --noop and --force when converting a module')
25
26
  end
26
27
 
28
+ if opts[:'skip-interview'] && opts[:'full-interview']
29
+ PDK.logger.info _('Ignoring --full-interview and continuing with --skip-interview.')
30
+ opts[:'full-interview'] = false
31
+ end
32
+
33
+ if opts[:force] && opts[:'full-interview']
34
+ PDK.logger.info _('Ignoring --full-interview and continuing with --force.')
35
+ opts[:'full-interview'] = false
36
+ end
37
+
27
38
  PDK::Module::Convert.invoke(opts)
28
39
  end
29
40
  end
@@ -10,4 +10,5 @@ module PDK::CLI
10
10
  @module_cmd.add_command Cri::Command.new_basic_help
11
11
  end
12
12
 
13
+ require 'pdk/cli/module/build'
13
14
  require 'pdk/cli/module/generate'
@@ -0,0 +1,14 @@
1
+ require 'tty-prompt'
2
+
3
+ module PDK::CLI
4
+ @module_build_cmd = @module_cmd.define_command do
5
+ name 'build'
6
+ usage _('build')
7
+ summary _('This command is now \'pdk build\'.')
8
+
9
+ run do |_opts, _args, _cmd|
10
+ PDK.logger.warn(_('Modules are built using the ‘pdk build’ command.'))
11
+ exit 1
12
+ end
13
+ end
14
+ end
@@ -13,4 +13,5 @@ end
13
13
  require 'pdk/cli/new/class'
14
14
  require 'pdk/cli/new/defined_type'
15
15
  require 'pdk/cli/new/module'
16
+ require 'pdk/cli/new/provider'
16
17
  require 'pdk/cli/new/task'
@@ -6,6 +6,7 @@ module PDK::CLI
6
6
 
7
7
  PDK::CLI.template_url_option(self)
8
8
  PDK::CLI.skip_interview_option(self)
9
+ PDK::CLI.full_interview_option(self)
9
10
 
10
11
  option nil, 'license', _('Specifies the license this module is written under. ' \
11
12
  "This should be a identifier from https://spdx.org/licenses/. Common values are 'Apache-2.0', 'MIT', or 'proprietary'."), argument: :required
@@ -16,6 +17,11 @@ module PDK::CLI
16
17
  module_name = args[0]
17
18
  target_dir = args[1]
18
19
 
20
+ if opts[:'skip-interview'] && opts[:'full-interview']
21
+ PDK.logger.info _('Ignoring --full-interview and continuing with --skip-interview.')
22
+ opts[:'full-interview'] = false
23
+ end
24
+
19
25
  unless module_name.nil? || module_name.empty?
20
26
  module_name_parts = module_name.split('-', 2)
21
27
  if module_name_parts.size > 1
@@ -0,0 +1,27 @@
1
+ module PDK::CLI
2
+ @new_provider_cmd = @new_cmd.define_command do
3
+ name 'provider'
4
+ usage _('provider [options] <name>')
5
+ summary _('[experimental] Create a new ruby provider named <name> using given options')
6
+
7
+ PDK::CLI.template_url_option(self)
8
+
9
+ run do |opts, args, _cmd|
10
+ PDK::CLI::Util.ensure_in_module!
11
+
12
+ provider_name = args[0]
13
+ module_dir = Dir.pwd
14
+
15
+ if provider_name.nil? || provider_name.empty?
16
+ puts command.help
17
+ exit 1
18
+ end
19
+
20
+ unless Util::OptionValidator.valid_provider_name?(provider_name)
21
+ raise PDK::CLI::ExitWithError, _("'%{name}' is not a valid provider name") % { name: provider_name }
22
+ end
23
+
24
+ PDK::Generate::Provider.new(module_dir, provider_name, opts).run
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ require 'pdk/cli/util'
2
+ require 'pdk/util'
3
+
4
+ module PDK::CLI
5
+ @update_cmd = @base_cmd.define_command do
6
+ name 'update'
7
+ usage _('update [options]')
8
+ summary _('Update a module that has been created by or converted for use by PDK.')
9
+
10
+ flag nil, :noop, _('Do not update the module, just output what would be done.')
11
+ flag nil, :force, _('Update the module automatically, with no prompts.')
12
+
13
+ run do |opts, _args, _cmd|
14
+ require 'pdk/module/update'
15
+
16
+ PDK::CLI::Util.ensure_in_module!(
17
+ message: _('`pdk update` can only be run from inside a valid module directory.'),
18
+ log_level: :info,
19
+ )
20
+
21
+ raise PDK::CLI::ExitWithError, _('This module does not appear to be PDK compatible. To make the module compatible with PDK, run `pdk convert`.') unless PDK::Util.module_pdk_compatible?
22
+
23
+ if opts[:noop] && opts[:force]
24
+ raise PDK::CLI::ExitWithError, _('You can not specify --noop and --force when updating a module')
25
+ end
26
+
27
+ updater = PDK::Module::Update.new(opts)
28
+
29
+ updater.run
30
+ end
31
+ end
32
+ end
@@ -46,6 +46,7 @@ module PDK
46
46
 
47
47
  begin
48
48
  response = prompt.yes?(question_text) do |q|
49
+ q.default opts[:default] unless opts[:default].nil?
49
50
  q.validate(validator, _('Answer "Y" to continue or "n" to cancel.'))
50
51
  end
51
52
  rescue TTY::Prompt::Reader::InputInterrupt
@@ -47,25 +47,6 @@ module PDK
47
47
  { method: "write_#{format}".to_sym, target: target }
48
48
  end
49
49
  end
50
-
51
- def self.parameter_specification(value)
52
- param_name, param_type = value.split(':', 2)
53
- param_type = 'String' if param_type.nil?
54
-
55
- unless PDK::CLI::Util::OptionValidator.valid_param_name?(param_name)
56
- raise PDK::CLI::ExitWithError, _("'%{name}' is not a valid parameter name") % {
57
- name: param_name,
58
- }
59
- end
60
-
61
- unless PDK::CLI::Util::OptionValidator.valid_data_type?(param_type)
62
- raise PDK::CLI::ExitWithError, _("'%{type}' is not a valid data type") % {
63
- type: param_type,
64
- }
65
- end
66
-
67
- { name: param_name, type: param_type }
68
- end
69
50
  end
70
51
  end
71
52
  end
@@ -24,6 +24,10 @@ module PDK
24
24
  end
25
25
  singleton_class.send(:alias_method, :valid_task_name?, :valid_module_name?)
26
26
 
27
+ # https://puppet.com/docs/puppet/5.3/custom_types.html#creating-a-type only says the name has to be a ruby symbol.
28
+ # Let's assume that only strings similar to module names can actually be resolved by the puppet language.
29
+ singleton_class.send(:alias_method, :valid_provider_name?, :valid_module_name?)
30
+
27
31
  # Validate a Puppet namespace against the regular expression in the
28
32
  # documentation: https://docs.puppet.com/puppet/4.10/lang_reserved.html#classes-and-defined-resource-types
29
33
  def self.valid_namespace?(string)
@@ -46,33 +50,6 @@ module PDK
46
50
 
47
51
  !(string =~ %r{\A[a-z][a-zA-Z0-9_]*\Z}).nil?
48
52
  end
49
-
50
- # Naive validation of a data type declaration. Extracts all the bare
51
- # words and compares them against a list of known data types.
52
- #
53
- # @todo This prevents the use of dynamic data types like TypeReferences
54
- # but that shouldn't be a problem for the current feature set. This
55
- # should be replaced eventually by something better (or just call
56
- # Puppet::Pops::Types::TypesParser)
57
- def self.valid_data_type?(string)
58
- valid_types = %w[
59
- String Integer Float Numeric Boolean Array Hash Regexp Undef
60
- Default Class Resource Scalar Collection Variant Data Pattern Enum
61
- Tuple Struct Optional Catalogentry Type Any Callable NotUndef
62
- ].freeze
63
-
64
- string.scan(%r{\b(([a-zA-Z0-9_]+)(,|\[|\]|\Z))}) do |result|
65
- type = result[1]
66
-
67
- return false unless string =~ %r{\A[A-Z]}
68
-
69
- unless valid_types.include?(type)
70
- PDK.logger.warn(_("Non-standard data type '%{type}', make sure the type is available in your code, or dependencies") % { type: type })
71
- end
72
- end
73
-
74
- true
75
- end
76
53
  end
77
54
  end
78
55
  end
@@ -1,5 +1,6 @@
1
- require 'pdk/generate/module'
2
1
  require 'pdk/generate/defined_type'
2
+ require 'pdk/generate/module'
3
+ require 'pdk/generate/provider'
3
4
  require 'pdk/generate/puppet_class'
4
5
  require 'pdk/generate/task'
5
6
  require 'pdk/module/metadata'
@@ -98,7 +98,7 @@ module PDK
98
98
  login_clean = 'username' if login_clean.empty?
99
99
 
100
100
  if login_clean != login
101
- PDK.logger.warn _('Your username is not a valid Forge username. Proceeding with the username %{username}. You can fix this later in metadata.json.') % {
101
+ PDK.logger.debug _('Your username is not a valid Forge username. Proceeding with the username %{username}. You can fix this later in metadata.json.') % {
102
102
  username: login_clean,
103
103
  }
104
104
  end
@@ -125,8 +125,6 @@ module PDK
125
125
  metadata = PDK::Module::Metadata.new(defaults)
126
126
  module_interview(metadata, opts) unless opts[:'skip-interview']
127
127
 
128
- metadata.update!('pdk-version' => PDK::Util::Version.version_string)
129
-
130
128
  metadata
131
129
  end
132
130
 
@@ -156,8 +154,8 @@ module PDK
156
154
  question: _('If you have a name for your module, add it here.'),
157
155
  help: _('This is the name that will be associated with your module, it should be relevant to the modules content.'),
158
156
  required: true,
159
- validate_pattern: %r{\A[a-z0-9]+\Z}i,
160
- validate_message: _('Module names can only contain lowercase letters and numbers'),
157
+ validate_pattern: %r{\A[a-z][a-z0-9_]*\Z}i,
158
+ validate_message: _('Module names must begin with a lowercase letter and can only include lowercase letters, numbers, and underscores.'),
161
159
  },
162
160
  {
163
161
  name: 'forge_username',
@@ -176,6 +174,7 @@ module PDK
176
174
  validate_pattern: %r{\A[0-9]+\.[0-9]+\.[0-9]+},
177
175
  validate_message: _('Semantic Version numbers must be in the form MAJOR.MINOR.PATCH'),
178
176
  default: metadata.data['version'],
177
+ forge_only: true,
179
178
  },
180
179
  {
181
180
  name: 'author',
@@ -249,30 +248,34 @@ module PDK
249
248
  default: [1, 2, 7],
250
249
  },
251
250
  {
252
- name: 'summary',
253
- question: _('Summarize the purpose of this module in a single sentence.'),
254
- help: _('This helps other Puppet users understand what the module does.'),
255
- required: true,
256
- default: metadata.data['summary'],
251
+ name: 'summary',
252
+ question: _('Summarize the purpose of this module in a single sentence.'),
253
+ help: _('This helps other Puppet users understand what the module does.'),
254
+ required: true,
255
+ default: metadata.data['summary'],
256
+ forge_only: true,
257
257
  },
258
258
  {
259
- name: 'source',
260
- question: _('If there is a source code repository for this module, enter the URL here.'),
261
- help: _('Skip this if no repository exists yet. You can update this later in the metadata.json.'),
262
- required: true,
263
- default: metadata.data['source'],
259
+ name: 'source',
260
+ question: _('If there is a source code repository for this module, enter the URL here.'),
261
+ help: _('Skip this if no repository exists yet. You can update this later in the metadata.json.'),
262
+ required: true,
263
+ default: metadata.data['source'],
264
+ forge_only: true,
264
265
  },
265
266
  {
266
- name: 'project_page',
267
- question: _('If there is a URL where others can learn more about this module, enter it here.'),
268
- help: _('Optional. You can update this later in the metadata.json.'),
269
- default: metadata.data['project_page'],
267
+ name: 'project_page',
268
+ question: _('If there is a URL where others can learn more about this module, enter it here.'),
269
+ help: _('Optional. You can update this later in the metadata.json.'),
270
+ default: metadata.data['project_page'],
271
+ forge_only: true,
270
272
  },
271
273
  {
272
- name: 'issues_url',
273
- question: _('If there is a public issue tracker for this module, enter its URL here.'),
274
- help: _('Optional. You can update this later in the metadata.json.'),
275
- default: metadata.data['issues_url'],
274
+ name: 'issues_url',
275
+ question: _('If there is a public issue tracker for this module, enter its URL here.'),
276
+ help: _('Optional. You can update this later in the metadata.json.'),
277
+ default: metadata.data['issues_url'],
278
+ forge_only: true,
276
279
  },
277
280
  ]
278
281
 
@@ -280,18 +283,33 @@ module PDK
280
283
 
281
284
  interview = PDK::CLI::Util::Interview.new(prompt)
282
285
 
283
- questions.reject! { |q| q[:name] == 'module_name' } if opts.key?(:module_name)
284
- questions.reject! { |q| q[:name] == 'license' } if opts.key?(:license)
286
+ if opts[:only_ask]
287
+ questions.reject! do |question|
288
+ if %w[module_name forge_username].include?(question[:name])
289
+ metadata.data['name'] && metadata.data['name'] =~ %r{\A[a-z0-9]+-[a-z0-9]+\Z}i
290
+ else
291
+ !opts[:only_ask].include?(question[:name])
292
+ end
293
+ end
294
+ else
295
+ questions.reject! { |q| q[:name] == 'module_name' } if opts.key?(:module_name)
296
+ questions.reject! { |q| q[:name] == 'license' } if opts.key?(:license)
297
+ questions.reject! { |q| q[:forge_only] } unless opts.key?(:'full-interview')
298
+ end
285
299
 
286
300
  interview.add_questions(questions)
287
301
 
302
+ action = File.file?('metadata.json') ? _('update') : _('create')
288
303
  puts _(
289
- "\nWe need to create a metadata.json file for this module, so we\'re going to ask you %{count} " \
304
+ "\nWe need to %{action} the metadata.json file for this module, so we\'re going to ask you %{count} " \
290
305
  "questions.\n" \
291
306
  'If the question is not applicable to this module, accept the default option ' \
292
307
  'shown after each question. You can modify any answers at any time by manually updating ' \
293
308
  "the metadata.json file.\n\n",
294
- ) % { count: interview.num_questions }
309
+ ) % {
310
+ count: interview.num_questions,
311
+ action: action,
312
+ }
295
313
 
296
314
  answers = interview.run
297
315
 
@@ -300,15 +318,21 @@ module PDK
300
318
  exit 0
301
319
  end
302
320
 
303
- opts[:username] = answers['forge_username']
304
- opts[:module_name] = answers['module_name'] unless answers['module_name'].nil?
321
+ unless answers['forge_username'].nil?
322
+ opts[:username] = answers['forge_username']
305
323
 
306
- answers['name'] = "#{opts[:username]}-" + (opts[:module_name])
307
- answers['license'] = opts[:license] if opts.key?(:license)
308
- answers['operatingsystem_support'].flatten!
324
+ unless answers['module_name'].nil?
325
+ opts[:module_name] = answers['module_name']
326
+
327
+ answers.delete('module_name')
328
+ end
309
329
 
310
- answers.delete('forge_username')
311
- answers.delete('module_name')
330
+ answers['name'] = "#{opts[:username]}-" + (opts[:module_name])
331
+ answers.delete('forge_username')
332
+ end
333
+
334
+ answers['license'] = opts[:license] if opts.key?(:license)
335
+ answers['operatingsystem_support'].flatten! if answers.key?('operatingsystem_support')
312
336
 
313
337
  metadata.update!(answers)
314
338
 
@@ -326,9 +350,11 @@ module PDK
326
350
  end
327
351
 
328
352
  PDK.answers.update!(
329
- 'forge_username' => opts[:username],
330
- 'author' => answers['author'],
331
- 'license' => answers['license'],
353
+ {
354
+ 'forge_username' => opts[:username],
355
+ 'author' => answers['author'],
356
+ 'license' => answers['license'],
357
+ }.delete_if { |_key, value| value.nil? },
332
358
  )
333
359
  end
334
360
  end