class Paknife::Cli
Constants
- BACKENDS
- DEFAULT_KNIFE
- DEFAULT_OPTIONS
- DEFAULT_THREADS
- SUBCOMMANDS
Attributes
contexts[R]
Public Class Methods
new(argv)
click to toggle source
# File lib/paknife/cli.rb, line 25 def initialize(argv) @options, backend, subcommand, nodes, knife_options = parse_argv(argv) @contexts = build_contexts(backend, subcommand, nodes, knife_options) end
run(argv)
click to toggle source
# File lib/paknife/cli.rb, line 19 def self.run(argv) new(argv).run end
Public Instance Methods
run()
click to toggle source
# File lib/paknife/cli.rb, line 30 def run Parallel.each(contexts, in_threads: determine_threads) do |context| context.run end end
Private Instance Methods
build_contexts(backend, subcommand, nodes, knife_options)
click to toggle source
# File lib/paknife/cli.rb, line 113 def build_contexts(backend, subcommand, nodes, knife_options) opts = { log_level: determine_log_level, knife: determine_knife, } nodes.map.with_index do |node, index| Context.new(index, backend, subcommand, node, knife_options, opts) end end
determine_knife()
click to toggle source
# File lib/paknife/cli.rb, line 124 def determine_knife @options[:knife] || ENV["PAKNIFE_KNIFE"] || DEFAULT_KNIFE end
determine_log_level()
click to toggle source
# File lib/paknife/cli.rb, line 138 def determine_log_level if @options[:quiet] :warn else :info end end
determine_threads()
click to toggle source
# File lib/paknife/cli.rb, line 128 def determine_threads threads = @options[:threads] || ENV["PAKNIFE_THREADS"] || DEFAULT_THREADS if threads.to_s.downcase == "max" @contexts.count else [@contexts.count, threads.to_i].min end end
parse_argv(argv)
click to toggle source
# File lib/paknife/cli.rb, line 38 def parse_argv(argv) [parse_options(argv), *parse_knife_argv(argv)] end
parse_knife_argv(argv)
click to toggle source
# File lib/paknife/cli.rb, line 90 def parse_knife_argv(argv) backend = argv.shift # solo or zero abort "Invalid backend: `#{backend}`" unless BACKENDS.include?(backend) subcommand = argv.shift abort "Invalid subcommand: `#{subcommand}`" unless SUBCOMMANDS.include?(subcommand) nodes = [] knife_options = [] knife_options_section = false argv.each do |arg| knife_options_section ||= arg.start_with?("-") if knife_options_section knife_options << arg else nodes << arg end end [backend, subcommand, nodes, knife_options] end
parse_options(argv)
click to toggle source
# File lib/paknife/cli.rb, line 42 def parse_options(argv) opts = {} OptionParser.new do |op| op.banner = <<-USAGE Usage: #{op.program_name} [<options>] <backend> <subcommand> <nodes> [<knife_options>] Backend: solo : run knife-solo zero : run knffe-zero (Not well tested) Options: USAGE op.version = VERSION op.on("-k", "--knife VALUE") do |v| opts[:knife] = v end op.on("-q", "--[no-]quiet") do |v| opts[:quiet] = v end op.on("-t", "--threads VALUE") do |v| if v == "max" opts[:threads] = :max elsif v.to_i > 0 opts[:threads] = v.to_i else abort "Invalid value for `--thread` option: #{v}" end end op.on_tail("-h", "--help") do puts op.help exit end op.on_tail("-v", "--version") do puts "#{op.program_name} #{op.version}" exit end end.order! DEFAULT_OPTIONS.merge(opts) end