Class: Toquen::AWSProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/toquen/aws.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAWSProxy

Returns a new instance of AWSProxy.



13
14
15
16
17
18
# File 'lib/toquen/aws.rb', line 13

def initialize
  @key_id = fetch(:aws_access_key_id)
  @key = fetch(:aws_secret_access_key)
  @regions = fetch(:aws_regions, ['us-east-1'])
  AWS.config(:access_key_id => @key_id, :secret_access_key => @key)
end

Instance Attribute Details

#regionsObject (readonly)

Returns the value of attribute regions.



11
12
13
# File 'lib/toquen/aws.rb', line 11

def regions
  @regions
end

Instance Method Details

#add_role(ivips, role) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/toquen/aws.rb', line 30

def add_role(ivips, role)
  @regions.each do |region|
    AWS.config(:access_key_id => @key_id, :secret_access_key => @key, :region => region)
    ec2 = AWS::EC2.new
    ec2.instances.map do |i|
      if ivips.include? i.public_ip_address
        roles = Toquen.config.aws_roles_extractor.call(i)
        unless roles.include? role
          roles << role
          ec2.tags.create(i, 'Roles', :value => roles.uniq.sort.join(' '))
        end
      end
    end
  end
end

#authorize_ingress(secgroup, protocol, port, ip) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/toquen/aws.rb', line 74

def authorize_ingress(secgroup, protocol, port, ip)
  # test if exists first
  return false if secgroup.ingress_ip_permissions.to_a.select { |p|
    p.protocol == protocol and p.port_range.include?(port) and p.ip_ranges.include?(ip)
  }.length > 0

  secgroup.authorize_ingress(protocol, port, ip)
  true
end

#filter(details) ⇒ Object



24
25
26
27
28
# File 'lib/toquen/aws.rb', line 24

def filter(details)
  details.select { |detail|
    not detail[:name].nil? and detail[:roles].length > 0
  }
end

#get_security_groups(ids) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/toquen/aws.rb', line 62

def get_security_groups(ids)
  result = []
  @regions.map do |region|
    AWS.config(:access_key_id => @key_id, :secret_access_key => @key, :region => region)
    AWS.memoize do
      ectwo = AWS::EC2.new
      ectwo.security_groups.each { |sg| result << sg if ids.include? sg.id }
    end
  end
  result
end

#remove_role(ivips, role) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/toquen/aws.rb', line 46

def remove_role(ivips, role)
  @regions.each do |region|
    AWS.config(:access_key_id => @key_id, :secret_access_key => @key, :region => region)
    ec2 = AWS::EC2.new
    ec2.instances.map do |i|
      if ivips.include? i.public_ip_address
        roles = Toquen.config.aws_roles_extractor.call(i)
        if roles.include? role
          roles = roles.reject { |r| r == role }
          Toquen.config.aws_roles_setter.call(ec2, i, roles.uniq)
        end
      end
    end
  end
end

#revoke_ingress(secgroup, protocol, port, ip) ⇒ Object



84
85
86
87
88
89
90
91
92
# File 'lib/toquen/aws.rb', line 84

def revoke_ingress(secgroup, protocol, port, ip)
  # test if exists first
  return false unless secgroup.ingress_ip_permissions.to_a.select { |p|
    p.protocol == protocol and p.port_range.include?(port) and p.ip_ranges.include?(ip)
  }.length > 0

  secgroup.revoke_ingress(protocol, port, ip)
  true
end

#server_detailsObject



20
21
22
# File 'lib/toquen/aws.rb', line 20

def server_details
  filter @regions.map { |region| server_details_in(region) }.flatten
end

#server_details_in(region) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/toquen/aws.rb', line 94

def server_details_in(region)
  AWS.config(:access_key_id => @key_id, :secret_access_key => @key, :region => region)
  AWS.memoize do
    AWS::EC2.new.instances.filter("instance-state-name", "running").map do |i|
      {
        :id => i.tags["Name"],
        :internal_ip => i.private_ip_address,
        :external_ip => i.public_ip_address,
        :name => i.tags["Name"],
        :roles => Toquen.config.aws_roles_extractor.call(i),
        :type => i.instance_type,
        :external_dns => i.public_dns_name,
        :internal_dns => i.private_dns_name,
        :security_groups => i.security_groups.to_a.map(&:id),
        :environment => i.tags["Environment"] || nil
      }
    end
  end
end