audit.rb 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # frozen_string_literal: true
  2. require 'nodes'
  3. require 'accounts'
  4. require 'fog'
  5. require 'neoinfra/aws'
  6. # NeoInfra Account information
  7. module NeoInfra
  8. # Provide informations about the accounts available
  9. class Audit
  10. def audit_nodes
  11. results = Hash.new { |h, k| h[k] = {} }
  12. aws = NeoInfra::Aws.new
  13. @cfg = NeoInfra::Config.new
  14. @cfg.accounts.each do |account|
  15. base_conf = {
  16. provider: 'AWS',
  17. aws_access_key_id: account[:key],
  18. aws_secret_access_key: account[:secret]
  19. }
  20. aws.regions.each do |region|
  21. region_conf = { region: region }
  22. new_conn = Fog::Compute.new(region_conf.merge(base_conf))
  23. new_conn.servers.all.each do |ec2|
  24. %i[required recommended]. each do |a|
  25. next if (ec2.tags.keys.sort & @cfg.tag_policy[a].sort) == @cfg.tag_policy[a].sort
  26. results[ec2.id].merge!("#{a}_missing_tags" => @cfg.tag_policy[a].sort - ec2.tags.keys.sort,
  27. 'tags' => ec2.tags.keys.sort,
  28. 'account' => account[:name],
  29. 'launched' => ec2.created_at,
  30. 'region' => region,
  31. 'ssh_key' => ec2.key_name)
  32. end
  33. end
  34. end
  35. end
  36. results
  37. end
  38. end
  39. end