lib/awsssh.rb in awsssh-2.0.1 vs lib/awsssh.rb in awsssh-2.1.0

- old
+ new

@@ -1,11 +1,16 @@ #!/usr/bin/env ruby require 'rubygems' require 'net/ssh' require 'json' +require "aws-sdk" +# require "pry" +require "inifile" class Awsssh + CONFIG_DIR = ENV['AWSSSH_CONFIG_DIR'] || "/Users/#{ENV['USER']}/.aws/" + CONF_FILE = ENV['AWSSSH_CONFIG_FILE'] || "aws_config_" def do_start if ARGV[0] == "--list-accounts" list_accounts elsif ARGV[0] == "--list-servers" && !ARGV[1].nil? @@ -15,12 +20,10 @@ else help end end - CONFIG_DIR = "/Users/#{ENV['USER']}/.aws/" - CONF_FILE = "aws_config_" ## # Renders the Help # # * *Returns* : # - [String] @@ -50,15 +53,15 @@ # # * *Returns* : # - [Array] StackIDs def list_stacks(account) - awscfg(account) - stacks = JSON.parse(`aws opsworks describe-stacks`) + ow = awscfg(account) + stacks = ow.client.describe_stacks[:stacks] stack_ids = [] - stacks['Stacks'].each do |stack| - stack_ids << stack['StackId'] + stacks.each do |stack| + stack_ids << stack[:stack_id] end return stack_ids end @@ -72,13 +75,13 @@ # * *Returns* : # - Stecks JSON # def read_stack(stackid, account) - # `awscfg #{account}` - awscfg(account) - JSON.parse(`aws opsworks describe-instances --stack-id #{stackid}`) + ow = awscfg(account) + ow.client.describe_instances({:stack_id => stackid}) + # JSON.parse(`aws opsworks describe-instances --stack-id #{stackid}`) end ## # Lists all AWS Accounts # @@ -92,11 +95,11 @@ puts "This are the known AWS Accounts:" config_files = Dir.entries(CONFIG_DIR) config_files.each do |file| if file[0,CONF_FILE.length] == CONF_FILE file_part = file.split("_") - unless file_part[2].nil? + unless file_part.last.nil? printf "\t- %-#{length}s\n", file_part[2] end end end end @@ -110,12 +113,12 @@ # * *Returns* : # - [String] # - <servername> (<status>) def server_name(stack) - stack["Instances"].each do |instance| - printf "\t- %-20s %s\n", instance["Hostname"], instance["Status"] + stack[:instances].each do |instance| + printf "\t- %-20s %s\n", instance[:hostname], instance[:status] end end ## # List all Servers for a given AWS Account @@ -143,13 +146,13 @@ host = server.split("-") public_dns = nil stack_ids = list_stacks host[0] stack_ids.each do |stack_id| stack = read_stack(stack_id, host[0]) - stack["Instances"].each do |i| - if i["Hostname"] == server - public_dns = i["PublicDns"] + stack.instances.each do |i| + if i[:hostname] == server + public_dns = i[:public_dns] break end end break unless public_dns.nil? end @@ -164,11 +167,15 @@ exec "ssh #{public_dns}" end def awscfg(account) - if File.exists?(CONFIG_DIR + CONF_FILE + account) - `awscfg #{account}` + if cnf = IniFile.load(CONFIG_DIR + CONF_FILE + account)['default'] + return AWS::OpsWorks.new( + access_key_id: cnf['aws_access_key_id'], + secret_access_key: cnf['aws_secret_access_key'], + region: cnf['region'] + ) else puts "No config #{CONF_FILE}#{account} found" exit -1 end end \ No newline at end of file