class CapGCE::GCEHandler

Public Class Methods

new() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 9
def initialize
  load_config
  @authorizer = fetch_authorizer
  load_gce
end

Public Instance Methods

application() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 61
def application
  Capistrano::Configuration.env.fetch(:application).to_s
end
defined_roles() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 53
def defined_roles
  roles(:all).flat_map(&:roles_array).uniq.sort
end
get_servers_for_role(role) click to toggle source
# File lib/cap-gce/gce-handler.rb, line 69
def get_servers_for_role(role)
  servers = []
  @gce.each do |_, gce|
    next if gce.items.nil?
    servers += gce.items.select do |i|
      instance_has_tag?(i, roles_tag, role) &&
        instance_has_tag?(i, stages_tag, stage) &&
        instance_has_tag?(i, project_tag, application)
    end
  end
  servers.sort_by(&:name)
end
instance_ids() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 44
def instance_ids
  puts defined_roles
    .map { |r| get_servers_for_role(r) }
    .flatten
    .uniq(&:id)
    .map(&:id)
    .join("\n")
end
load_gce() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 15
def load_gce
  compute = Google::Apis::ComputeV1::ComputeService.new
  compute.authorization = @authorizer
  configured_zones = get_zones(fetch(:gce_zone))
  @gce = {}
  configured_zones.each do |zone|
    @gce[zone] = compute.list_instances(
      fetch(:gce_project_id),
      zone,
      filter: fetch(:gce_filter)
    )
  end
end
server_names() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 35
def server_names
  puts defined_roles
    .map { |r| get_servers_for_role(r) }
    .flatten
    .uniq(&:id)
    .map(&:name)
    .join("\n")
end
stage() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 57
def stage
  Capistrano::Configuration.env.fetch(:stage).to_s
end
status_table() click to toggle source
# File lib/cap-gce/gce-handler.rb, line 29
def status_table
  CapGCE::StatusTable.new(
    defined_roles.map { |r| get_servers_for_role(r) }.flatten.uniq(&:id)
  )
end
tag(tag_name) click to toggle source
# File lib/cap-gce/gce-handler.rb, line 65
def tag(tag_name)
  "tag:#{tag_name}"
end

Private Instance Methods

instance_has_tag?(instance, key, value) click to toggle source
# File lib/cap-gce/gce-handler.rb, line 84
def instance_has_tag?(instance, key, value)
  (tag_value(instance, key) || '').split(',').map(&:strip).include?(value.to_s)
end