class Toquen::AWSProxy
Class to handle all interaction with AWS
Attributes
regions[R]
Public Class Methods
new()
click to toggle source
# File lib/toquen/aws.rb, line 15 def initialize @regions = fetch(:aws_regions, ['us-east-1']) key = fetch(:aws_access_key_id) key_id = fetch(:aws_secret_access_key) creds = Aws::Credentials.new(key, key_id) Aws.config.update(credentials: creds) if creds.set? end
Public Instance Methods
add_role(ivips, role)
click to toggle source
# File lib/toquen/aws.rb, line 39 def add_role(ivips, role) each_instance do |i| roles = extract_details(i)[:roles] next unless !roles.include?(role) && ivips.include?(i.public_ip_address) roles << role tag = { key: 'Roles', value: roles.uniq.sort.join(' ') } i.create_tags(tags: [tag]) end end
each_instance(running = true, regions = nil) { |i| ... }
click to toggle source
# File lib/toquen/aws.rb, line 27 def each_instance(running = true, regions = nil) filters = [] filters << { name: 'instance-state-name', values: ['running'] } if running results = [] (regions || @regions).each do |region| resource = Aws::EC2::Resource.new(region: region) results += resource.instances.map { |i| yield(i) } end results end
extract_details(instance)
click to toggle source
# File lib/toquen/aws.rb, line 92 def extract_details(instance) tags = instance.tags.each_with_object({}) { |t, h| h[t.key] = t.value } { id: tags['Name'], name: tags['Name'], type: instance.instance_type, environment: tags['Environment'], internal_ip: instance.private_ip_address, external_ip: instance.public_ip_address, external_dns: instance.public_dns_name, internal_dns: instance.private_dns_name, roles: tags.fetch('Roles', '').split, security_groups: instance.security_groups.map(&:group_id) } end
get_security_groups(ids)
click to toggle source
# File lib/toquen/aws.rb, line 59 def get_security_groups(ids) @regions.map do |region| sgs = Aws::EC2::Resource.new(region: region).security_groups sgs.select { |sg| ids.include? sg.group_id } end.flatten end
remove_role(ivips, role)
click to toggle source
# File lib/toquen/aws.rb, line 49 def remove_role(ivips, role) each_instance do |i| roles = extract_details(i)[:roles] next unless roles.include?(role) && ivips.include?(i.public_ip_address) roles.reject! { |r| r == role } tag = { key: 'Roles', value: roles.uniq.sort.join(' ') } i.create_tags(tags: [tag]) end end
revoke_ingress(secgroup, protocol, port, ip)
click to toggle source
# File lib/toquen/aws.rb, line 79 def revoke_ingress(secgroup, protocol, port, ip) # test if exists first return false if secgroup.ip_permissions.to_a.select do |p| port_match = ((p.from_port)..(p.to_port)).cover? port ip_match = p.ip_ranges.map(&:cidr_ip).include?(ip) p.ip_protocol == protocol && port_match && ip_match end.empty? secgroup.revoke_ingress(ip_protocol: protocol, from_port: port, to_port: port, cidr_ip: ip) true end
server_details(running = true, regions = nil)
click to toggle source
# File lib/toquen/aws.rb, line 23 def server_details(running = true, regions = nil) each_instance(running, regions) { |inst| extract_details(inst) } end