class Krane::CLI::DeployCommand

Constants

DEFAULT_DEPLOY_TIMEOUT
OPTIONS
PROTECTED_NAMESPACES

Public Class Methods

from_options(namespace, context, options) click to toggle source
# File lib/krane/cli/deploy_command.rb, line 38
def self.from_options(namespace, context, options)
  require 'krane/deploy_task'
  require 'krane/options_helper'
  require 'krane/label_selector'

  selector = ::Krane::LabelSelector.parse(options[:selector]) if options[:selector]
  selector_as_filter = options['selector-as-filter']

  if selector_as_filter && !selector
    raise(Thor::RequiredArgumentMissingError, '--selector must be set when --selector-as-filter is set')
  end

  logger = ::Krane::FormattedLogger.build(namespace, context,
    verbose_prefix: options['verbose-log-prefix'])

  protected_namespaces = options['protected-namespaces']
  if options['protected-namespaces'].size == 1 && %w('' "").include?(options['protected-namespaces'][0])
    protected_namespaces = []
  end

  filenames = options[:filenames].dup
  filenames << "-" if options[:stdin]
  if filenames.empty?
    raise(Thor::RequiredArgumentMissingError, '--filenames must be set and not empty')
  end

  ::Krane::OptionsHelper.with_processed_template_paths(filenames) do |paths|
    deploy = ::Krane::DeployTask.new(
      namespace: namespace,
      context: context,
      filenames: paths,
      logger: logger,
      global_timeout: ::Krane::DurationParser.new(options["global-timeout"]).parse!.to_i,
      selector: selector,
      selector_as_filter: selector_as_filter,
      protected_namespaces: protected_namespaces,
    )

    deploy.run!(
      verify_result: options["verify-result"],
      prune: options[:prune]
    )
  end
end