Skip to content

Instantly share code, notes, and snippets.

@toritori0318
Last active August 29, 2015 14:02
Show Gist options
  • Save toritori0318/8f937914e906495306a8 to your computer and use it in GitHub Desktop.
Save toritori0318/8f937914e906495306a8 to your computer and use it in GitHub Desktop.
rikanjoのやつ
require 'optparse'
require 'aws/rikanjo/base'
module Aws
module RiKanjoo
class CLI
def initialize
@options = {}
@optparse = nil
@cost = nil
end
def start
parse
rikanjo
output
end
def parse
@options = {}
@optparse = OptionParser.new do |opts|
opts.banner = 'Usage: rikanjo ec2/rds [options]'
# subcommand
mode = ARGV.shift
if mode == 'ec2'
elsif mode == 'rds'
opts.on('--multiaz', 'enable multi-az') do |value|
@options[:multiaz] = value
end
else
$stderr.puts "no such subcommand: #{mode}"
puts opts
exit 1
end
@options[:mode] = mode
region_values = %w(us-east-1 us-west-1 us-west-2 eu-west-1 ap-southeast-1 ap-northeast-1 ap-southeast-2 sa-east-1 )
opts.on('-r', '--region=VALUE', region_values, "specify aws-region (#{region_values.join('/')})") do |value|
@options[:region] = value
end
opts.on('-t', '--instance_type=VALUE', 'specify ec2-instance-type') do |value|
@options[:instance_type] = value
end
ri_util_values = %w(light medium heavy)
opts.on('-u', '--ri_util=VALUE', ri_util_values, "specify ri-util (#{ri_util_values.join('/')})") do |value|
@options[:ri_util] = value
end
output_json = %w(true false)
opts.on('-j', '--output_json=BOOL', output_json, "specify output_json true") do |value|
@options[:output_json] = value
end
opts.on('-h', '--help') do
puts opts
exit
end
end
# validation
begin
@optparse.parse!
require_args = [:region, :instance_type, :ri_util]
error_args = require_args.select { |param| @options[param].nil? }
unless error_args.empty?
puts "require arguments: #{error_args.join(', ')}"
puts
puts @optparse
exit
end
rescue
puts $!.to_s
puts
puts @optparse
exit
end
end
def rikanjo
# rikanjo
a = Aws::RiKanjoo::Base.new(
mode = @options[:mode],
region = @options[:region],
instance_type = @options[:instance_type],
ri_util = @options[:ri_util],
multiaz = @options[:multiaz],
)
@cost = a.total_cost_year
end
######################################
# JSONで標準出力
def output
if @options[:output_json]
output_json()
else
output_text()
end
end
######################################
# JSONで標準出力
def output_json
puts @cost.to_json
end
######################################
# テキストで標準出力
def output_text
puts "'region': #{@cost['region']}"
puts "'instance_type': #{@cost['instance_type']}"
#...
end
end
end
end
#!/usr/bin/env ruby
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
require 'aws/rikanjo/cli'
Aws::RiKanjoo::CLI.new.start
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment