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