lib/pdk/cli.rb in pdk-2.7.1 vs lib/pdk/cli.rb in pdk-3.0.0

- old
+ new

@@ -9,150 +9,154 @@ class Prompt autoload :Test, 'tty/prompt/test' end end -class Cri::Command::CriExitException - def initialize(is_error:) - @is_error = is_error - PDK.analytics.event('CLI', 'invalid command', label: PDK::CLI.anonymised_args.join(' ')) if error? +module Cri + class Command + class CriExitException + def initialize(is_error:) + @is_error = is_error + PDK.analytics.event('CLI', 'invalid command', label: PDK::CLI.anonymised_args.join(' ')) if error? + end + end end end -module PDK::CLI - autoload :Util, 'pdk/cli/util' +module PDK + module CLI + autoload :Util, 'pdk/cli/util' - # Attempt to anonymise the raw ARGV array if the command parsing failed. - # - # If an item does not start with '-' but is preceeded by an item that does - # start with '-', assume that these items are an option/value pair and redact - # the value. Any additional values that do not start with '-' that follow an - # option/value pair are assumed to be arguments (rather than subcommand - # names) and are also redacted. - # - # @example - # # Where PDK::CLI.args => ['new', 'plan', '--some', 'value', 'plan_name'] - # - # PDK::CLI.anonymised_args - # => ['new', 'plan', '--some', 'redacted', 'redacted'] - # - # @return Array[String] the command arguments with any identifying values - # redacted. - def self.anonymised_args - in_args = false - @args.map do |arg| - if arg.start_with?('-') - in_args = true - arg - else - in_args ? 'redacted' : arg + # Attempt to anonymise the raw ARGV array if the command parsing failed. + # + # If an item does not start with '-' but is preceeded by an item that does + # start with '-', assume that these items are an option/value pair and redact + # the value. Any additional values that do not start with '-' that follow an + # option/value pair are assumed to be arguments (rather than subcommand + # names) and are also redacted. + # + # @example + # # Where PDK::CLI.args => ['new', 'plan', '--some', 'value', 'plan_name'] + # + # PDK::CLI.anonymised_args + # => ['new', 'plan', '--some', 'redacted', 'redacted'] + # + # @return Array[String] the command arguments with any identifying values + # redacted. + def self.anonymised_args + in_args = false + @args.map do |arg| + if arg.start_with?('-') + in_args = true + arg + else + in_args ? 'redacted' : arg + end end end - end - def self.run(args) - @args = args - PDK::Config.analytics_config_interview! unless PDK::Util::Env['PDK_DISABLE_ANALYTICS'] || PDK::Config.analytics_config_exist? - @base_cmd.run(args) - rescue PDK::CLI::ExitWithError => e - PDK.logger.send(e.log_level, e.message) + def self.run(args) + @args = args + PDK::Config.analytics_config_interview! unless PDK::Util::Env['PDK_DISABLE_ANALYTICS'] || PDK::Config.analytics_config_exist? + @base_cmd.run(args) + rescue PDK::CLI::ExitWithError => e + PDK.logger.send(e.log_level, e.message) - exit e.exit_code - rescue PDK::CLI::FatalError => e - PDK.logger.fatal(e.message) if e.message + exit e.exit_code + rescue PDK::CLI::FatalError => e + PDK.logger.fatal(e.message) if e.message - # If FatalError was raised as the result of another exception, send the - # details of that exception to the debug log. If there was no cause - # (FatalError raised on its own outside a rescue block), send the details - # of the FatalError exception to the debug log. - cause = e.cause - if cause.nil? - e.backtrace.each { |line| PDK.logger.debug(line) } - else - PDK.logger.debug("#{cause.class}: #{cause.message}") - cause.backtrace.each { |line| PDK.logger.debug(line) } + # If FatalError was raised as the result of another exception, send the + # details of that exception to the debug log. If there was no cause + # (FatalError raised on its own outside a rescue block), send the details + # of the FatalError exception to the debug log. + cause = e.cause + if cause.nil? + e.backtrace.each { |line| PDK.logger.debug(line) } + else + PDK.logger.debug("#{cause.class}: #{cause.message}") + cause.backtrace.each { |line| PDK.logger.debug(line) } + end + + exit e.exit_code end - exit e.exit_code - end + def self.template_url_option(dsl) + require 'pdk/util/template_uri' - def self.template_url_option(dsl) - require 'pdk/util/template_uri' + desc = format('Specifies the URL to the template to use when creating new modules or classes. (default: %{default_url})', default_url: PDK::Util::TemplateURI.default_template_uri) - desc = 'Specifies the URL to the template to use when creating new modules or classes. (default: %{default_url})' % { default_url: PDK::Util::TemplateURI.default_template_uri } + dsl.option nil, 'template-url', desc, argument: :required + end - dsl.option nil, 'template-url', desc, argument: :required - end + def self.template_ref_option(dsl) + dsl.option nil, 'template-ref', 'Specifies the template git branch or tag to use when creating new modules or classes.', argument: :required + end - def self.template_ref_option(dsl) - dsl.option nil, 'template-ref', 'Specifies the template git branch or tag to use when creating new modules or classes.', argument: :required - end + def self.skip_interview_option(dsl) + dsl.option nil, 'skip-interview', 'When specified, skips interactive querying of metadata.' + end - def self.skip_interview_option(dsl) - dsl.option nil, 'skip-interview', 'When specified, skips interactive querying of metadata.' - end + def self.full_interview_option(dsl) + dsl.option nil, 'full-interview', 'When specified, interactive querying of metadata will include all optional questions.' + end - def self.full_interview_option(dsl) - dsl.option nil, 'full-interview', 'When specified, interactive querying of metadata will include all optional questions.' - end + def self.puppet_version_options(dsl) + dsl.option nil, 'puppet-version', 'Puppet version to run tests or validations against.', argument: :required + dsl.option nil, 'pe-version', '(Deprecated) Puppet Enterprise version to run tests or validations against.', argument: :required + end - def self.puppet_version_options(dsl) - dsl.option nil, 'puppet-version', 'Puppet version to run tests or validations against.', argument: :required - dsl.option nil, 'pe-version', 'Puppet Enterprise version to run tests or validations against.', argument: :required - end + def self.puppet_dev_option(dsl) + dsl.option nil, + 'puppet-dev', + 'When specified, PDK will validate or test against the current Puppet source from github.com. To use this option, you must have network access to https://github.com.' + end - def self.puppet_dev_option(dsl) - dsl.option nil, - 'puppet-dev', - 'When specified, PDK will validate or test against the current Puppet source from github.com. To use this option, you must have network access to https://github.com.' - end + @base_cmd = Cri::Command.define do + name 'pdk' + usage 'pdk command [options]' + summary 'Puppet Development Kit' + description 'The shortest path to better modules.' + default_subcommand 'help' - @base_cmd = Cri::Command.define do - name 'pdk' - usage 'pdk command [options]' - summary 'Puppet Development Kit' - description 'The shortest path to better modules.' - default_subcommand 'help' + flag nil, :version, 'Show version of pdk.' do |_, _| + puts PDK::Util::Version.version_string + exit 0 + end - flag nil, :version, 'Show version of pdk.' do |_, _| - puts PDK::Util::Version.version_string - exit 0 - end + flag :h, :help, 'Show help for this command.' do |_, c| + puts c.help + exit 0 + end - flag :h, :help, 'Show help for this command.' do |_, c| - puts c.help - exit 0 - end + format_desc = + "Specify desired output format. Valid formats are '#{PDK::Report.formats.join("', '")}'. " \ + 'You may also specify a file to which the formatted output is sent, ' \ + "for example: '--format=junit:report.xml'. This option may be specified " \ + 'multiple times if each option specifies a distinct target file.' - format_desc = - "Specify desired output format. Valid formats are '#{PDK::Report.formats.join("', '")}'. " \ - 'You may also specify a file to which the formatted output is sent, ' \ - "for example: '--format=junit:report.xml'. This option may be specified " \ - 'multiple times if each option specifies a distinct target file.' + option :f, :format, format_desc, argument: :required, multiple: true do |values| + PDK::CLI::Util::OptionNormalizer.report_formats(values.compact) + end - option :f, :format, format_desc, argument: :required, multiple: true do |values| - PDK::CLI::Util::OptionNormalizer.report_formats(values.compact) + flag :d, :debug, 'Enable debug output.' do |_, _| + PDK.logger.enable_debug_output + end end - flag :d, :debug, 'Enable debug output.' do |_, _| - PDK.logger.enable_debug_output - end - end + require 'pdk/cli/bundle' + require 'pdk/cli/build' + require 'pdk/cli/convert' + require 'pdk/cli/env' + require 'pdk/cli/get' + require 'pdk/cli/new' + require 'pdk/cli/set' + require 'pdk/cli/test' + require 'pdk/cli/update' + require 'pdk/cli/validate' + # require 'pdk/cli/console' Temporarily disabled while we work on the puppet-debugger gem. It will be back soon! (CONT-1154) + require 'pdk/cli/release' + require 'pdk/cli/remove' - require 'pdk/cli/bundle' - require 'pdk/cli/build' - require 'pdk/cli/config' - require 'pdk/cli/convert' - require 'pdk/cli/env' - require 'pdk/cli/get' - require 'pdk/cli/new' - require 'pdk/cli/set' - require 'pdk/cli/test' - require 'pdk/cli/update' - require 'pdk/cli/validate' - require 'pdk/cli/module' - require 'pdk/cli/console' - require 'pdk/cli/release' - require 'pdk/cli/remove' - - @base_cmd.add_command Cri::Command.new_basic_help + @base_cmd.add_command Cri::Command.new_basic_help + end end