lib/wombat/cli.rb in wombat-cli-0.2.1 vs lib/wombat/cli.rb in wombat-cli-0.3.0

- old
+ new

@@ -5,42 +5,38 @@ require 'wombat/common' require 'wombat/build' require 'wombat/deploy' require 'wombat/output' require 'wombat/delete' +require 'wombat/update' +require 'wombat/init' class Options NAME = File.basename($0).freeze def self.parse(args) options = OpenStruct.new - options.templates = calculate_templates("*.json") global = OptionParser.new do |opts| opts.banner = "Usage: #{NAME} [SUBCOMMAND [options]]" opts.separator "" opts.version = Wombat::VERSION opts.separator <<-COMMANDS.gsub(/^ {8}/, "") build : build one or more templates + delete : delete a stack + deploy : deploy a stack help : prints this help message + init : create wombat skeleton project list : list all templates in project - deploy : deploy a stack outputs : get outputs for a stack - delete : delete a stack + update : update lock and/or cloud template COMMANDS end templates_argv_proc = proc { |options| - options.templates = calculate_templates(args) unless args.empty? - - options.templates.each do |t| - if !File.exists?("packer/#{t}.json") - $stderr.puts "File packer/#{t}.json does not exist for template '#{t}'" - exit(1) - end - end + options.templates = ARGV unless args.empty? } box_version_argv_proc = proc { |options| options.box = ARGV[0] options.version = ARGV[1] @@ -48,18 +44,15 @@ stack_argv_proc = proc { |options| options.stack = ARGV[0] } + file_argv_proc = proc { |options| + options.file = ARGV[0] + } + subcommand = { - help: { - parser: OptionParser.new {}, - argv: proc { |options| - puts global - exit(0) - } - }, build: { class: BuildRunner, parser: OptionParser.new { |opts| opts.banner = "Usage: #{NAME} build [options] TEMPLATE[ TEMPLATE ...]" @@ -75,22 +68,19 @@ options.parallel = opt end }, argv: templates_argv_proc }, - list: { - class: ListRunner, + delete: { + class: DeleteRunner, parser: OptionParser.new { |opts| - opts.banner = "Usage: #{NAME} list [TEMPLATE ...]" + opts.banner = "Usage: #{NAME} delete STACK" + + opts.on("-c CLOUD", "--cloud CLOUD", "Select cloud") do |opt| + options.cloud = opt + end }, - argv: templates_argv_proc - }, - outputs: { - class: OutputRunner, - parser: OptionParser.new { |opts| - opts.banner = "Usage: #{NAME} outputs [TEMPLATE ...]" - }, argv: stack_argv_proc }, deploy: { class: DeployRunner, parser: OptionParser.new { |opts| @@ -102,27 +92,58 @@ opts.on("--update-lock", "Update lockfile") do |opt| options.update_lock = opt end - opts.on("--create-template", "Create template") do |opt| + opts.on("--update-template", "Update template") do |opt| options.create_template = opt end }, argv: stack_argv_proc }, - delete: { - class: DeleteRunner, + help: { + parser: OptionParser.new {}, + argv: proc { |options| + puts global + exit(0) + } + }, + init: { + class: InitRunner, parser: OptionParser.new { |opts| - opts.banner = "Usage: #{NAME} delete STACK" + opts.banner = "Usage: #{NAME} init" + opts.on("-p PATH", "--path PATH", "Path to copy skeleton") do |opt| + options.path = opt + end + }, + argv: stack_argv_proc + }, + list: { + class: ListRunner, + parser: OptionParser.new { |opts| + opts.banner = "Usage: #{NAME} list [TEMPLATE ...]" + }, + argv: templates_argv_proc + }, + outputs: { + class: OutputRunner, + parser: OptionParser.new { |opts| + opts.banner = "Usage: #{NAME} outputs [TEMPLATE ...]" + }, + argv: stack_argv_proc + }, + update: { + class: UpdateRunner, + parser: OptionParser.new { |opts| + opts.banner = "Usage: #{NAME} update [lock || template]" + opts.on("-c CLOUD", "--cloud CLOUD", "Select cloud") do |opt| options.cloud = opt end }, - - argv: stack_argv_proc + argv: file_argv_proc } } global.order! @@ -133,34 +154,30 @@ options.command = command options.klass = subcommand.fetch(command).fetch(:class) options end - - def self.calculate_templates(globs) - Dir.chdir('packer') do - Array(globs). - map { |glob| result = Dir.glob("#{glob}"); result.empty? ? glob : result }. - flatten. - sort. - delete_if { |file| file =~ /\.variables\./ }. - map { |template| template.sub(/\.json$/, '') } - end - end end class ListRunner include Common attr_reader :templates def initialize(opts) - @templates = opts.templates + @templates = opts.templates.nil? ? calculate_templates : opts.templates end def start - templates.each { |template| puts template } + templates.each do |t| + if !File.exists?("#{conf['packer_dir']}/#{t}.json") + $stderr.puts "File #{conf['packer_dir']}/#{t}.json does not exist for template '#{t}'" + exit(1) + else + puts t + end + end end end class Runner