class Eclair::GCEItem

Attributes

instance[R]

Public Class Methods

new(instance) click to toggle source
Calls superclass method Eclair::Item::new
# File lib/eclair/providers/gce/gce_item.rb, line 10
def initialize instance
  super()
  @instance = instance
end

Public Instance Methods

color() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 19
def color
  if @selected
    [Curses::COLOR_YELLOW, -1, Curses::A_BOLD]
  elsif !connectable?
    [Curses::COLOR_BLACK, -1, Curses::A_BOLD]
  else
    [Curses::COLOR_WHITE, -1]
  end
end
command() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 57
def command
  hosts = [private_ip_address, public_ip_address].compact
  ports = config.ssh_ports
  ssh_options = config.ssh_options
  ssh_command = config.ssh_command
  username = "ubuntu"
  format = config.exec_format

  joined_cmd = hosts.map do |host|
    ports.map do |port|
      {
        "{ssh_command}" => ssh_command,
        "{ssh_options}" => ssh_options,
        "{port}"        => port,
        "{username}"    => username,
        "{host}"        => host,
        "{ssh_key}"     => ""
      }.reduce(format) { |cmd,pair| cmd.sub(pair[0],pair[1].to_s) }
    end
  end.join(" || ")
  # puts joined_cmd
  "echo Attaching to #{name} \\[#{name}\\] && #{joined_cmd}"
end
connectable?() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 81
def connectable?
  status == "RUNNING"
end
description() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 41
def description
  @instance["description"]
end
header() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 29
    def header
      <<-EOS
      #{name} (#{public_ip_address} #{private_ip_address})
      launched at #{launch_time.to_time}
      #{description}
      EOS
    end
id() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 15
def id
  @instance["id"]
end
label() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 37
def label
  " - #{name} [#{launched_at}]"
end
name() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 45
def name
  @instance["name"]
end
private_ip_address() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 53
def private_ip_address
  @instance.dig("networkInterfaces", 0, "networkIP")
end
public_ip_address() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 49
def public_ip_address
  @instance.dig("networkInterfaces", 0, "accessConfigs", 0, "natIP")
end
search_key() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 85
def search_key
  name.downcase
end

Private Instance Methods

launch_time() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 95
def launch_time
  Time.parse(@instance["creationTimestamp"]).localtime
end
launched_at() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 99
def launched_at
  diff = Time.now - launch_time
  {
    "year" => 31557600,
    "month" => 2592000,
    "day" => 86400,
    "hour" => 3600,
    "minute" => 60,
    "second" => 1
  }.each do |unit,v|
    if diff >= v
      value = (diff/v).to_i
      return "#{value} #{unit}#{value > 1 ? "s" : ""}"
    end
  end
  "now"
end
status() click to toggle source
# File lib/eclair/providers/gce/gce_item.rb, line 91
def status
  @instance["status"]
end