firespring_dev_commands 2.1.11 → 2.1.12.pre.alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29a90961c458e9095d240b89cf65bfd7cbe3541abd792f59c378a6f758636d67
4
- data.tar.gz: 385f95613b2a66502c4e7a0b55d16315138c9e6cc02637e037865df7d1f3099e
3
+ metadata.gz: f8993e41d585b29c955ea70b4dfae9a5c872cf86178187b9cde5ba1f081c3670
4
+ data.tar.gz: ce445cfe3aa1cb61ccf839041c82e4300671721f60e7c68d4df63a4042c06b8b
5
5
  SHA512:
6
- metadata.gz: dcd3f6a6d8f4fea275bf93500fa17b1c3fcda7a81b16dcd9c7c0072de8e5fe2b4298c1dc9bfdcaa5d1a8a46ecde4bcb4c624da03291638237a58a7a8b99cd12d
7
- data.tar.gz: 3cb1434dd6f7edb66f79abfa7520e91bccf50bdc35588f78487d0eb20771e24f74e5105f4ed10a72c2b0d97d9f762b12ccfd43209f5853dadbd18641fa09a304
6
+ metadata.gz: 2bfbf558bae2b57fff698f64219dba7e3e3c1dda9dd4876bb36668758653ab35d4bb305700e0da7ea3df50181b950f077167361a9724c761a039feb0e83be65a
7
+ data.tar.gz: 538965a55936c9b000a23b911a5b9cad7a50f0d005e94329281ad5e2ca9f43b807b08435813e75f240a37289cc2b5f545f223a52155bedfd4bfbe8d487bcb45d
@@ -21,16 +21,10 @@ module Dev
21
21
  def pipelines(regex_match = nil)
22
22
  raise 'regex_match must be a regexp' if regex_match && !regex_match.is_a?(Regexp)
23
23
 
24
- params = {}
25
- response = client.list_pipelines(params)
26
- pipelines = response.pipelines
27
-
28
- next_token = response.next_token
29
- while next_token
30
- params[:next_token] = next_token
31
- response = client.list_pipelines(params)
32
- pipelines += response.pipelines
33
- next_token = response.next_token
24
+ pipelines = [].tap do |ary|
25
+ Dev::Aws.each_page(client, :list_pipelines) do |response|
26
+ ary.concat(response.pipelines)
27
+ end
34
28
  end
35
29
 
36
30
  pipelines.select! { |it| it.name.match(regex_match) } if regex_match
@@ -24,20 +24,12 @@ module Dev
24
24
 
25
25
  # Retrieve all parameters which start with the given path
26
26
  def list(path, recursive: true, with_decryption: true)
27
- next_token = nil
28
-
29
- parameters = []
30
- loop do
31
- response = client.get_parameters_by_path(
32
- path:,
33
- recursive:,
34
- with_decryption:,
35
- next_token:
36
- )
37
- parameters += response.parameters
38
- break unless (next_token = response.next_token)
27
+ [].tap do |ary|
28
+ params = {path:, recursive:, with_decryption:}
29
+ Dev::Aws.each_page(client, :get_parameters_by_path, params) do |response|
30
+ ary.concat(response.parameters)
31
+ end
39
32
  end
40
- parameters
41
33
  end
42
34
 
43
35
  # Sets the given parameter name's value to the given value
@@ -9,5 +9,17 @@ module Dev
9
9
 
10
10
  # The default role name used if none has been configured when logging in
11
11
  DEFAULT_LOGIN_ROLE_NAME = 'ReadonlyAccessRole'.freeze
12
+
13
+ # Runs the query on the client with the parameters
14
+ # Yields each response page
15
+ def self.each_page(client, query, params = {})
16
+ response = client.send(query, params)
17
+ yield response
18
+
19
+ while response.next_page?
20
+ response = response.next_page
21
+ yield response
22
+ end
23
+ end
12
24
  end
13
25
  end
@@ -0,0 +1,105 @@
1
+ require 'aws-sdk-lambda'
2
+ require 'aws-sdk-elasticache'
3
+ require 'aws-sdk-rds'
4
+ require 'aws-sdk-opensearchservice'
5
+
6
+ module Dev
7
+ class EndOfLife
8
+ class Aws
9
+ def elasticache_products
10
+ client = ::Aws::ElastiCache::Client.new
11
+
12
+ [].tap do |ary|
13
+ Dev::Aws.each_page(client, :describe_cache_clusters) do |response|
14
+ response.cache_clusters.each do |cluster|
15
+ name = cluster.cache_cluster_id
16
+ product = cluster.engine
17
+ version = cluster.engine_version.reverse.split('.')[-2..].join('.').reverse
18
+ ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ def lambda_products
25
+ client = ::Aws::Lambda::Client.new
26
+
27
+ [].tap do |ary|
28
+ Dev::Aws.each_page(client, :list_functions) do |response|
29
+ response.functions.each do |function|
30
+ # Runtime is empty if using a docker image
31
+ # TODO Should we still handle this case?
32
+ next unless function.runtime
33
+
34
+ name = function.function_name
35
+ product = function&.runtime&.split(/[0-9]/, 2)&.first
36
+ version = function&.runtime&.split(/#{product}/, 2)&.last&.chomp('.x')
37
+ ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def opensearch_products
44
+ client = ::Aws::OpenSearchService::Client.new
45
+
46
+ [].tap do |ary|
47
+ Dev::Aws.each_page(client, :list_domain_names) do |response|
48
+ response.domain_names.each do |domain|
49
+ name = domain.domain_name
50
+ product = domain.engine_type
51
+ version = client.describe_domain(domain_name: name).domain_status.engine_version.split('_').last.split('.').first
52
+ ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ def rds_products
59
+ _rds_instances + _rds_clusters
60
+ end
61
+
62
+ def _rds_instances
63
+ aws_engines = %w(mysql postgresql)
64
+ client = ::Aws::RDS::Client.new
65
+
66
+ [].tap do |ary|
67
+ Dev::Aws.each_page(client, :describe_db_instances) do |response|
68
+ response.db_instances.each do |instance|
69
+ name = instance.db_instance_identifier
70
+ engine = instance.engine.tr('aurora-', '')
71
+ product = if aws_engines.include?(engine)
72
+ "amazon-rds-#{engine}"
73
+ else
74
+ engine
75
+ end
76
+ version = instance.engine_version.reverse.split('.')[-2..].join('.').reverse
77
+ ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ def _rds_clusters
84
+ aws_engines = %w(mysql postgresql)
85
+ client = ::Aws::RDS::Client.new
86
+
87
+ [].tap do |ary|
88
+ Dev::Aws.each_page(client, :describe_db_clusters) do |response|
89
+ response.db_clusters.each do |cluster|
90
+ name = cluster.db_cluster_identifier
91
+ engine = cluster.engine.tr('aurora-', '')
92
+ product = if aws_engines.include?(engine)
93
+ "amazon-rds-#{engine}"
94
+ else
95
+ engine
96
+ end
97
+ version = cluster.engine_version.reverse.split('.')[-2..].join('.').reverse
98
+ ary << Dev::EndOfLife::ProductVersion.new(product, version, name)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -55,9 +55,7 @@ module Dev
55
55
  # If EOL info is a boolean or missing from the current details, overwrite with the manual date (if present)
56
56
  manual_date = Dev::EndOfLife.config.manual_dates["#{product}_#{cycle.tr('.', '_')}".to_sym]
57
57
  detail['eol'] = manual_date if manual_date && (detail['eol'].boolean? || detail['eol'].nil?)
58
-
59
- raise "unable to query eol detail for #{name}, #{cycle}" if detail.empty?
60
-
58
+ detail['eol'] = '1979-01-01' if detail.empty?
61
59
  detail
62
60
  end
63
61
 
@@ -93,6 +93,30 @@ module Dev
93
93
  end
94
94
  end
95
95
  # rubocop:enable Metrics/MethodLength
96
+
97
+ # Create the rake task for the eol method
98
+ def create_eol_task!
99
+ # Have to set a local variable to be accessible inside of the instance_eval block
100
+ exclude = @exclude
101
+
102
+ DEV_COMMANDS_TOP_LEVEL.instance_eval do
103
+ return if exclude.include?(:eol)
104
+
105
+ desc 'Compares the current date to the EOL date for supported resources'
106
+ task eol: %w(init ensure_aws_credentials) do
107
+ account_id = Dev::Aws::Profile.new.current
108
+ account_name = Dev::Aws::Account.new.name_by_account(account_id)
109
+ LOG.info " Current AWS Account is #{account_name} (#{account_id})".light_yellow
110
+
111
+ versions = Dev::EndOfLife::Aws.new.elasticache_products +
112
+ Dev::EndOfLife::Aws.new.lambda_products +
113
+ Dev::EndOfLife::Aws.new.opensearch_products +
114
+ Dev::EndOfLife::Aws.new.rds_products
115
+
116
+ Dev::EndOfLife.new(product_versions: versions.compact).check
117
+ end
118
+ end
119
+ end
96
120
  end
97
121
  end
98
122
  end
@@ -6,6 +6,6 @@ module Dev
6
6
  # Use 'v.v.v.pre.alpha.v' for pre-release vesions
7
7
  # Use 'v.v.v.beta.v for beta versions
8
8
  # Use semantic versioning for any releases (https://semver.org/)
9
- VERSION = '2.1.11'.freeze
9
+ VERSION = '2.1.12.pre.alpha.2'.freeze
10
10
  end
11
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firespring_dev_commands
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.11
4
+ version: 2.1.12.pre.alpha.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Firespring
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-31 00:00:00.000000000 Z
11
+ date: 2023-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -66,6 +66,62 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.61.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: aws-sdk-elasticache
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.88.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.88.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: aws-sdk-lambda
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.101.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.101.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: aws-sdk-opensearchservice
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.24.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.24.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk-rds
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.183.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.183.0
69
125
  - !ruby/object:Gem::Dependency
70
126
  name: aws-sdk-s3
71
127
  requirement: !ruby/object:Gem::Requirement
@@ -280,6 +336,7 @@ files:
280
336
  - lib/firespring_dev_commands/dotenv.rb
281
337
  - lib/firespring_dev_commands/env.rb
282
338
  - lib/firespring_dev_commands/eol.rb
339
+ - lib/firespring_dev_commands/eol/aws.rb
283
340
  - lib/firespring_dev_commands/eol/product_version.rb
284
341
  - lib/firespring_dev_commands/git.rb
285
342
  - lib/firespring_dev_commands/git/info.rb
@@ -342,9 +399,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
342
399
  version: '3.1'
343
400
  required_rubygems_version: !ruby/object:Gem::Requirement
344
401
  requirements:
345
- - - ">="
402
+ - - ">"
346
403
  - !ruby/object:Gem::Version
347
- version: '0'
404
+ version: 1.3.1
348
405
  requirements: []
349
406
  rubygems_version: 3.4.10
350
407
  signing_key: