Class: Dev::EndOfLife::Aws

Inherits:
Object show all
Defined in:
lib/firespring_dev_commands/eol/aws.rb

Overview

Class which queries several different AWS product types and returns ProductVersion entities which can be checked for EOL

Instance Method Summary collapse

Instance Method Details

#default_products ⇒ Object

Queries and returns product versions for the default product types



12
13
14
# File 'lib/firespring_dev_commands/eol/aws.rb', line 12

def default_products
  (elasticache_products + lambda_products + opensearch_products + rds_products).flatten.compact
end

#elasticache_products ⇒ Object

Queries and returns product versions for elasticache products



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/firespring_dev_commands/eol/aws.rb', line 17

def elasticache_products
  client = ::Aws::ElastiCache::Client.new

  [].tap do |ary|
    Dev::Aws.each_page(client, :describe_cache_clusters) do |response|
      response.cache_clusters.each do |cluster|
        name = cluster.cache_cluster_id
        product = cluster.engine
        version = cluster.engine_version.reverse.split('.')[-2..].join('.').reverse
        ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
      end
    end
  end
end

#lambda_products ⇒ Object

Queries and returns product versions for lambda products



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/firespring_dev_commands/eol/aws.rb', line 33

def lambda_products
  client = ::Aws::Lambda::Client.new

  [].tap do |ary|
    Dev::Aws.each_page(client, :list_functions) do |response|
      response.functions.each do |function|
        # Runtime is empty if using a docker image
        next unless function.runtime

        name = function.function_name
        product = function&.runtime&.split(/[0-9]/, 2)&.first
        version = function&.runtime&.split(/#{product}/, 2)&.last&.chomp('.x')
        ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
      end
    end
  end
end

#opensearch_products ⇒ Object

Queries and returns product versions for opensearch products



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/firespring_dev_commands/eol/aws.rb', line 52

def opensearch_products
  client = ::Aws::OpenSearchService::Client.new

  [].tap do |ary|
    Dev::Aws.each_page(client, :list_domain_names) do |response|
      response.domain_names.each do |domain|
        name = domain.domain_name
        product = domain.engine_type
        version = client.describe_domain(domain_name: name).domain_status.engine_version.split('_').last.split('.').first
        ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
      end
    end
  end
end

#rds_cluster_products ⇒ Object

Queries and returns product versions for rds cluster products



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

def rds_cluster_products
  aws_engines = %w(mysql postgresql)
  client = ::Aws::RDS::Client.new

  [].tap do |ary|
    Dev::Aws.each_page(client, :describe_db_clusters) do |response|
      response.db_clusters.each do |cluster|
        name = cluster.db_cluster_identifier
        engine = cluster.engine.tr('aurora-', '')
        product = if aws_engines.include?(engine)
                    "amazon-rds-#{engine}"
                  else
                    engine
                  end
        version = cluster.engine_version.reverse.split('.')[-2..].join('.').reverse
        ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
      end
    end
  end
end

#rds_instance_products ⇒ Object

Queries and returns product versions for rds instance products



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/firespring_dev_commands/eol/aws.rb', line 73

def rds_instance_products
  aws_engines = %w(mysql postgresql)
  client = ::Aws::RDS::Client.new

  [].tap do |ary|
    Dev::Aws.each_page(client, :describe_db_instances) do |response|
      response.db_instances.each do |instance|
        name = instance.db_instance_identifier
        engine = instance.engine.tr('aurora-', '')
        product = if aws_engines.include?(engine)
                    "amazon-rds-#{engine}"
                  else
                    engine
                  end
        version = instance.engine_version.reverse.split('.')[-2..].join('.').reverse
        ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
      end
    end
  end
end

#rds_products ⇒ Object

Queries and returns product versions for rds products



68
69
70
# File 'lib/firespring_dev_commands/eol/aws.rb', line 68

def rds_products
  rds_instance_products + rds_cluster_products
end