lib/awsssh.rb in awsssh-2.1.0 vs lib/awsssh.rb in awsssh-2.1.1
- old
+ new
@@ -3,184 +3,168 @@
require 'net/ssh'
require 'json'
require "aws-sdk"
# require "pry"
require "inifile"
+require "thor"
-class Awsssh
+class Awsssh < Thor
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"
+ desc "-s SERVER [-a ACCOUNT]", "connect to a server"
+ option :server, :aliases => :s, :desc => "(required) The server name to connect with"
+ option :account, :aliases => :a, :desc => "Specify a account for a connection. Needet if the account don't came from the server name"
+ option :list_accounts, :type => :boolean, :desc => "List all Accounts"
+ option :list_servers, :desc => "List all Servers for a given Account"
+ def connect
+ if options[:server]
+ connecting(options[:server], options[:account])
+ elsif options[:list_accounts]
list_accounts
- elsif ARGV[0] == "--list-servers" && !ARGV[1].nil?
- list_servers(ARGV[1])
- elsif !ARGV[0].nil? && ARGV[0][0,2] != "--"
- connect ARGV[0]
+ elsif options[:list_servers]
+ list_servers(options[:list_servers])
+ elsif options[:server]
+ connecting(options[:server], options[:account])
else
- help
+ help "connect"
end
end
- ##
- # Renders the Help
- #
- # * *Returns* :
- # - [String]
- # usage: awsssh [<instance-name>|parameters]
- # <instance-name> Name of the instance
- # parameters:
- # --help This help
- # --list-accounts List all known AWS Accounts
- # --list-servers <account> List all Server for an AWS Account
-
- def help
- length = 30
- puts "usage: awsssh [<instance-name>|parameters]"
- printf "\t %-#{length}s Name of the instance\n", "<instance-name>"
- puts "parameters:"
- printf "\t %-#{length}s This help\n", "--help"
- printf "\t %-#{length}s List all known AWS Accounts\n", "--list-accounts"
- printf "\t %-#{length}s List all Server for an AWS Account\n", "--list-servers <account>"
+ def help(*args)
+ super("connect")
end
+ private
+ ##
+ # List stacks for a account
+ #
+ # * *Args* :
+ # - +account+ -> Account name
+ #
+ # * *Returns* :
+ # - [Array] StackIDs
+ def list_stacks(account)
+ ow = awscfg(account)
+ stacks = ow.client.describe_stacks[:stacks]
+ stack_ids = []
+ stacks.each do |stack|
+ stack_ids << stack[:stack_id]
+ end
+ return stack_ids
+ end
- ##
- # List stacks for a account
- #
- # * *Args* :
- # - +account+ -> Account name
- #
- # * *Returns* :
- # - [Array] StackIDs
- def list_stacks(account)
- ow = awscfg(account)
- stacks = ow.client.describe_stacks[:stacks]
- stack_ids = []
- stacks.each do |stack|
- stack_ids << stack[:stack_id]
+ ##
+ # Read Stack
+ #
+ # * *Args* :
+ # - +stackid+ -> Stack ID
+ # - +account+ -> Account name
+ #
+ # * *Returns* :
+ # - Stecks JSON
+ #
+ def read_stack(stackid, account)
+ ow = awscfg(account)
+ ow.client.describe_instances({:stack_id => stackid})
+ # JSON.parse(`aws opsworks describe-instances --stack-id #{stackid}`)
end
- return stack_ids
- end
-
- ##
- # Read Stack
- #
- # * *Args* :
- # - +stackid+ -> Stack ID
- # - +account+ -> Account name
- #
- # * *Returns* :
- # - Stecks JSON
- #
-
- def read_stack(stackid, account)
- ow = awscfg(account)
- ow.client.describe_instances({:stack_id => stackid})
- # JSON.parse(`aws opsworks describe-instances --stack-id #{stackid}`)
- end
-
- ##
- # Lists all AWS Accounts
- #
- # * *Returns* :
- # - [String]
- # This are the known AWS Accounts:
- # - account
-
- def list_accounts
- length = 30
- 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.last.nil?
- printf "\t- %-#{length}s\n", file_part[2]
+ ##
+ # Lists all AWS Accounts
+ #
+ # * *Returns* :
+ # - [String]
+ # This are the known AWS Accounts:
+ # - account
+ def list_accounts
+ length = 30
+ 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.last.nil?
+ printf "\t- %-#{length}s\n", file_part[2]
+ end
end
end
end
- end
- ##
- # Server Name
- #
- # * *Args* :
- # - +stack+ -> Stack as JSON
- #
- # * *Returns* :
- # - [String]
- # - <servername> (<status>)
-
- def server_name(stack)
- stack[:instances].each do |instance|
- printf "\t- %-20s %s\n", instance[:hostname], instance[:status]
+ ##
+ # Server Name
+ #
+ # * *Args* :
+ # - +stack+ -> Stack as JSON
+ #
+ # * *Returns* :
+ # - [String]
+ # - <servername> (<status>)
+ def server_name(stack)
+ stack[:instances].each do |instance|
+ printf "\t- %-20s %s\n", instance[:hostname], instance[:status]
+ end
end
- end
- ##
- # List all Servers for a given AWS Account
- #
- # * *Args* :
- # - +account+ -> AWS Account name
- #
-
- def list_servers(account)
- stacks = list_stacks account
- stacks.each do |stack_id|
- stack = read_stack stack_id, account
- server_name stack
+ ##
+ # List all Servers for a given AWS Account
+ #
+ # * *Args* :
+ # - +account+ -> AWS Account name
+ #
+ def list_servers(account)
+ stacks = list_stacks account
+ stacks.each do |stack_id|
+ stack = read_stack stack_id, account
+ server_name stack
+ end
end
- end
- ##
- # Establish the connection
- #
- # * *Args* :
- # - +server+ -> Server name
- #
-
- def connect(server)
- 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[:public_dns]
- break
+ ##
+ # Establish the connection
+ #
+ # * *Args* :
+ # - +server+ -> Server name
+ #
+ def connecting(server, account=nil)
+ public_dns = nil
+ host = server.split("-")
+ ac = account || host[0]
+ stack_ids = list_stacks ac
+ stack_ids.each do |stack_id|
+ stack = read_stack(stack_id, ac)
+ stack.instances.each do |i|
+ if i[:hostname] == server
+ public_dns = i[:public_dns]
+ break
+ end
end
+ break unless public_dns.nil?
end
- break unless public_dns.nil?
- end
- if public_dns.nil?
- puts "Server '#{server}' not found. Try ssh"
- exec "ssh #{server}"
- exit -1
- end
+ if public_dns.nil?
+ puts "Server '#{server}' not found. Try ssh"
+ exec "ssh #{server}"
+ exit -1
+ end
- puts "Connecting to #{server} (#{public_dns})"
- exec "ssh #{public_dns}"
+ puts "Connecting to #{server} (#{public_dns})"
+ exec "ssh #{public_dns}"
- end
-
- def 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
-
-
+ def awscfg(account)
+ if cnf = IniFile.load(CONFIG_DIR + CONF_FILE + account)
+ cnf = cnf['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. Maybe use -a to specify a account."
+ exit -1
+ end
+ end
+ default_task :connect
end
\ No newline at end of file