class Interferon::HostSources::AwsRds
Public Class Methods
new(options)
click to toggle source
# File lib/interferon/host_sources/aws_rds.rb, line 5 def initialize(options) missing = %w(access_key_id secret_access_key).reject { |r| options.key?(r) } AWS.config(access_key_id: options['access_key_id'], secret_access_key: options['secret_access_key']) if missing.empty? # initialize a list of regions to check @regions = if options['regions'] && !options['regions'].empty? options['regions'] else AWS.regions.map(&:name) end end
Public Instance Methods
list_hosts()
click to toggle source
# File lib/interferon/host_sources/aws_rds.rb, line 19 def list_hosts hosts = [] @regions.each do |region| rds = AWS::RDS.new(region: region) AWS.memoize do rds.instances.each do |instance| # get the tags for the instance arn = arn(region, instance.id) tag_list = rds.client.list_tags_for_resource(resource_name: arn)[:tag_list] tags = Hash[tag_list.map { |h| [h[:key], h[:value]] }] tags['owners'] ||= '' tags['owner_groups'] ||= '' # build the host data for this instance hosts << { source: 'aws_rds', region: region, instance_id: instance.id, db_name: instance.db_name, engine: instance.engine, engine_version: instance.engine_version, # metrics allocated_storage: instance.allocated_storage, iops: instance.iops, # replication info is_replica: !instance.read_replica_source_db_instance_identifier.nil?, replica_source_name: instance.read_replica_source_db_instance_identifier, replica_names: instance.read_replica_db_instance_identifiers.join(','), replicas: instance.read_replica_db_instance_identifiers.count, owners: tags['owners'].split(','), owner_groups: tags['owner_groups'].split(','), db_env: tags['db_env'], db_role: tags['db_role'], } end end end hosts end
Private Instance Methods
account_number()
click to toggle source
unfortunately, this appears to be the only way to get your account number
# File lib/interferon/host_sources/aws_rds.rb, line 74 def account_number return @account_number if @account_number begin my_arn = AWS::IAM.new( access_key_id: @access_key_id, secret_access_key: @secret_access_key ).client.get_user[:user][:arn] rescue AWS::IAM::Errors::AccessDenied => e my_arn = e.message.split[1] end @account_number = my_arn.split(':')[4] end
arn(region, instance_id)
click to toggle source
# File lib/interferon/host_sources/aws_rds.rb, line 69 def arn(region, instance_id) "arn:aws:rds:#{region}:#{account_number}:db:#{instance_id}" end