class Mina::EC2

Constants

VERSION

Attributes

ec2[RW]
project_tag[R]
tags[R]

Public Class Methods

new(tags, project_tag, settings) click to toggle source
# File lib/mina/ec2.rb, line 9
def initialize(tags, project_tag, settings)
  @tags = tags
  @project_tag = project_tag

  @ec2 = {}
  settings[:regions].each do |region|
    @ec2[region] = ec2_connect(
      region: region,
      access_key_id: settings[:access_key_id],
      secret_access_key: settings[:secret_access_key]
    )
  end
end

Public Instance Methods

ec2_connect(region: nil, access_key_id:, secret_access_key:) click to toggle source
# File lib/mina/ec2.rb, line 23
def ec2_connect(region: nil, access_key_id:, secret_access_key:)
  AWS.start_memoizing
  AWS::EC2.new(
    access_key_id: access_key_id,
    secret_access_key: secret_access_key,
    region: region
  )
end
get_domain(instance) click to toggle source
# File lib/mina/ec2.rb, line 45
def get_domain(instance)
  instance.public_dns_name || instance.public_ip_address || instance.private_ip_address
end
get_servers() click to toggle source
# File lib/mina/ec2.rb, line 32
def get_servers
  servers = []
  @ec2.each do |_, ec2|
    instances = ec2.instances
      .filter(tag(project_tag), "*#{project}*")
      .filter('instance-state-name', 'running')
    servers << instances.select do |i|
      verify_instance_tags(i)
    end
  end
  servers.flatten.sort_by {|s| s.tags["Name"] || ''}
end
project() click to toggle source
# File lib/mina/ec2.rb, line 53
def project
  tags[project_tag]
end
tag(tag_name) click to toggle source
# File lib/mina/ec2.rb, line 49
def tag(tag_name)
  "tag:#{tag_name}"
end

Private Instance Methods

get_regions(regions=nil) click to toggle source
# File lib/mina/ec2.rb, line 58
def get_regions(regions=nil)
  unless regions.nil? || regions.empty?
    return regions
  else
    @ec2 = ec2_connect
    @ec2.regions.map(&:name)
  end
end
verify_instance_tags(instance) click to toggle source
# File lib/mina/ec2.rb, line 67
def verify_instance_tags(instance)
  missing = []

  @tags.each do |name, value|
    missing << name unless (instance.tags[name.to_s.capitalize] || '').split(',').map(&:strip).include?(value.to_s)
  end

  missing.empty?
end