class Moonshot::SSHCommandBuilder

Create an ssh command from configuration.

Constants

Result

Public Class Methods

new(ssh_config, instance_id) click to toggle source
# File lib/moonshot/ssh_command_builder.rb, line 8
def initialize(ssh_config, instance_id)
  @config = ssh_config
  @instance_id = instance_id
end

Public Instance Methods

build(command = nil) click to toggle source
# File lib/moonshot/ssh_command_builder.rb, line 13
def build(command = nil)
  cmd = ['ssh', '-t']
  cmd << "-i #{@config.ssh_identity_file}" if @config.ssh_identity_file
  cmd << "-l #{@config.ssh_user}" if @config.ssh_user
  cmd << instance_ip
  cmd << Shellwords.escape(command) if command
  Result.new(cmd.join(' '), instance_ip)
end

Private Instance Methods

instance_ip() click to toggle source
# File lib/moonshot/ssh_command_builder.rb, line 24
def instance_ip
  @instance_ip ||= Aws::EC2::Client.new
                                   .describe_instances(instance_ids: [@instance_id])
                                   .reservations.first.instances.first.public_ip_address
rescue
  raise "Failed to determine public IP address for instance #{@instance_id}!"
end