123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- # frozen_string_literal: true
- require 'accounts'
- require 'regions'
- require 'mime-types'
- require 'fog-aws'
- require 's3'
- require 'neo4j'
- require 'rds'
- require 'neoinfra/config'
- require 'neoinfra/cloudwatch'
- # NeoInfra Account information
- module NeoInfra
- # Provide informations about the accounts available
- class Aws
- def initialize
- @cfg = NeoInfra::Config.new
- neo4j_url = "http://#{@cfg.neo4j[:host]}:#{@cfg.neo4j[:port]}"
- Neo4j::Session.open(:server_db, neo4j_url)
- end
- def regions
- account = @cfg.accounts.first
- base_conf = {
- provider: 'AWS',
- aws_access_key_id: account[:key],
- aws_secret_access_key: account[:secret]
- }
- conn = Fog::Compute.new(base_conf)
- conn.describe_regions.data[:body]['regionInfo'].collect { |x| x['regionName'] }
- end
- def region_count
- Region.all.length
- end
- def az_count
- Az.all.length
- end
- def azs(region)
- account = @cfg.accounts.first
- base_conf = {
- provider: 'AWS',
- aws_access_key_id: account[:key],
- aws_secret_access_key: account[:secret],
- region: region
- }
- conn = Fog::Compute.new(base_conf)
- conn.describe_availability_zones.data[:body]['availabilityZoneInfo'].collect { |x| x['zoneName'] }
- end
- def load_regions
- regions.each do |region|
- next unless Region.where(region: region).empty?
- r = Region.new(
- region: region
- )
- r.save
- azs(region).each do |az|
- next unless Az.where(az: az).empty?
- a = Az.new(az: az)
- a.save
- AzRegion.create(from_node: a, to_node: Region.where(region: region).first)
- end
- end
- end
- def list_buckets
- buckets = []
- Bucket.all.order('n.size DESC').each do |b|
- buckets << {
- 'name' => b.name,
- 'size' => b.size,
- 'versioning' => b.versioning,
- 'creation' => b.creation,
- 'region' => b.region.region,
- 'owner' => b.owner.name
- }
- end
- return buckets
- end
- def load_buckets
- cw = NeoInfra::Cloudwatch.new
- @cfg.accounts.each do |account|
- base_conf = {
- provider: 'AWS',
- aws_access_key_id: account[:key],
- aws_secret_access_key: account[:secret]
- }
- s = Fog::Storage.new(base_conf)
- s.directories.each do |bucket|
- next unless Bucket.where(name: bucket.key).empty?
- begin
- vers = bucket.versioning?.to_s
- crea = bucket.creation_date.to_s
- rescue
- vers = "unknown"
- crea = "unknown"
- end
- b = Bucket.new(
- name: bucket.key,
- versioning: vers,
- creation: crea,
- size: cw.get_bucket_size(account[:key], account[:secret], bucket.location, bucket.key)
- )
- b.save
- BucketRegion.create(from_node: b, to_node: Region.where(region: bucket.location).first)
- BucketAccount.create(from_node: b, to_node: AwsAccount.where(name: account[:name]).first)
- end
- end
- end
- def load_security_groups
- @cfg.accounts.each do |account|
- base_conf = {
- provider: 'AWS',
- aws_access_key_id: account[:key],
- aws_secret_access_key: account[:secret]
- }
- self.regions.each do |region|
- region_conf = { region: region }
- conn = Fog::Compute.new(region_conf.merge(base_conf))
- conn.security_groups.all.each do |grp|
- next unless SecurityGroup.where(sg_id: grp.group_id).empty?
- g = SecurityGroup.new(
- sg_id: grp.group_id,
- name: grp.name,
- description: grp.description,
- )
- g.save
- SecurityGroupOwner.create(from_node: g, to_node: AwsAccount.where(account_id: grp.owner_id).first)
- SecurityGroupVpc.create(from_node: g, to_node: Vpc.where(vpc_id: grp.vpc_id).first)
- end
- end
- end
- end
- def load_rds
- @cfg.accounts.each do |account|
- base_conf = {
- aws_access_key_id: account[:key],
- aws_secret_access_key: account[:secret]
- }
- s = Fog::AWS::RDS.new(base_conf)
- s.servers.each do |rds|
- next unless Rds.where(name: rds.id).empty?
- r = Rds.new(
- name: rds.id,
- size: rds.flavor_id,
- engine: rds.engine,
- engine_version: rds.engine_version,
- multi_az: rds.multi_az.to_s,
- endpoint: rds.endpoint['Address'],
- port: rds.endpoint['Port'],
- allocated_storage: rds.allocated_storage,
- )
- r.save
- RdsAz.create(from_node: r, to_node: Az.where(az: rds.availability_zone).first)
- RdsAccount.create(from_node: r, to_node: AwsAccount.where(name: account[:name]).first)
- end
- end
- end
- end
- end
|