ecs-rails 0.0.6 → 0.0.8

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: 28b6dcfb2734b269fbb5da27e70b0e7b43e63cbfb025f904724f804108b21573
4
- data.tar.gz: 47e6dc119ec99803eb887f8f1170e6766c28f7c086cbc1b22e7fbdc6d01c6323
3
+ metadata.gz: cbc8985f5cda19d87cfcce63d4c9f41e9f8ee2b5bd044cc25e3078e94eb9df55
4
+ data.tar.gz: 7cc2193739fe260fbc5e8f21a0ec16ed75d3bdb5dabfa7b2a3288fa6360b05ad
5
5
  SHA512:
6
- metadata.gz: 726c40bafbb598ce2673eeaf48b075b12ddd8f79a0fcdaba2c00c3a2c0acf953508d3783495dc6087fa520f73e4895c8733fb6f85caed5807306a7f97cdcacc7
7
- data.tar.gz: e474ae8db2e7eb9b660c5a81e9dd9a76524cc769a50d56b45843b3b30fc65ef55773165552c5c726be704d8b722b3c57dd52bac68b79cad774b1fc17626431ef
6
+ metadata.gz: 934f84d9dad3623f110250f043d1a0030f9313859449b2b15a94e7ecd0fad7f3339f8f8d6165f4cb3dced1e7fa4a076e0cbdcaab05789506e45159b38fc9bb04
7
+ data.tar.gz: c2ddb51f5d6e50905702c6d464db9092a9712e0db7271d3055f0920c2a6f69a35dc5fb48f8da66ef8f255f2255a0eb05b4a56377cf85d3023c82ca35ab50c6f8
data/ecs-rails.gemspec CHANGED
@@ -3,26 +3,27 @@
3
3
  require_relative 'lib/ecs-rails/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "ecs-rails"
6
+ s.name = 'ecs-rails'
7
7
  s.version = EcsRails::VERSION
8
- s.summary = "Connect to your AWS ECS tasks"
9
- s.description = "Connect to your AWS ECS tasks"
8
+ s.summary = 'Connect to your AWS ECS tasks'
9
+ s.description = 'Connect to your AWS ECS tasks'
10
10
  s.authors = ["Franck D'agostini"]
11
- s.email = "franck.dagostini@gmail.com"
12
- s.homepage = "https://rubygems.org/gems/ecs-rails"
13
- s.license = "MIT"
11
+ s.email = 'franck.dagostini@gmail.com'
12
+ s.homepage = 'https://rubygems.org/gems/ecs-rails'
13
+ s.license = 'MIT'
14
14
  s.required_ruby_version = '>= 2.7.0'
15
15
  s.require_paths = ['lib']
16
16
 
17
17
  s.files = `git ls-files -z`.split("\x0")
18
18
 
19
- s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
 
21
21
  s.add_development_dependency 'byebug', '~> 11.1'
22
22
  s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
23
23
 
24
- s.add_runtime_dependency "aws-sdk-ecs", "~> 1.132", "> 1.132"
25
- s.add_runtime_dependency "aws-sdk-ec2", "~> 1.425", "> 1.425"
26
- s.add_runtime_dependency "tty-prompt", "~> 0.23", "> 0.23"
27
- s.add_runtime_dependency "activesupport", "> 5.2"
24
+ s.add_runtime_dependency 'activesupport', '> 5.2'
25
+ s.add_runtime_dependency 'aws-sdk-ec2', '~> 1.425', '> 1.425'
26
+ s.add_runtime_dependency 'aws-sdk-ecs', '~> 1.132', '> 1.132'
27
+ s.add_runtime_dependency 'openssl', '>= 3.2.1'
28
+ s.add_runtime_dependency 'tty-prompt', '~> 0.23', '> 0.23'
28
29
  end
@@ -1,20 +1,17 @@
1
1
  module EcsRails
2
2
  class Client
3
-
4
3
  def client
5
4
  Aws::ECS::Client.new(aws_credentials)
6
5
  end
7
6
 
8
7
  private
9
8
 
10
- def aws_credentials
11
- @aws_credentials ||= {
12
- region: ENV['AWS_REGION'],
13
- access_key_id: ENV['AWS_ACCESS_KEY_ID'],
14
- secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
15
- }
16
- end
17
-
9
+ def aws_credentials
10
+ @aws_credentials ||= {
11
+ region: ENV['AWS_REGION'],
12
+ access_key_id: ENV['AWS_ACCESS_KEY_ID'],
13
+ secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
14
+ }
15
+ end
18
16
  end
19
17
  end
20
-
@@ -1,6 +1,5 @@
1
1
  module EcsRails
2
2
  class TaskSelector
3
-
4
3
  def initialize(client, cluster_name, service_name)
5
4
  @client = client
6
5
  @cluster_name = cluster_name
@@ -13,7 +12,8 @@ module EcsRails
13
12
 
14
13
  service_descriptions.each do |service|
15
14
  service.deployments.each do |deployment|
16
- task_arns = client.list_tasks(cluster: cluster_name, service_name: service.service_name, desired_status: 'RUNNING').task_arns
15
+ task_arns = client.list_tasks(cluster: cluster_name, service_name: service.service_name,
16
+ desired_status: 'RUNNING').task_arns
17
17
  next if task_arns.empty?
18
18
 
19
19
  tasks = client.describe_tasks(cluster: cluster_name, tasks: task_arns).tasks
@@ -22,12 +22,12 @@ module EcsRails
22
22
  tasks_for_deployment = tasks.select { |task| task.task_definition_arn == deployment.task_definition }
23
23
 
24
24
  if tasks_for_deployment.empty?
25
- puts(" No tasks found for this deployment.")
25
+ puts(' No tasks found for this deployment.')
26
26
  elsif tasks_for_deployment.size == 1
27
27
  puts(" Task: #{task_arns.first}")
28
- return task_arns.first
28
+ return task_arns.first
29
29
  else
30
- ask_for_task(tasks_for_deployment)
30
+ return ask_for_task(tasks_for_deployment)
31
31
  end
32
32
  end
33
33
  end
@@ -35,13 +35,13 @@ module EcsRails
35
35
 
36
36
  private
37
37
 
38
- attr_reader :client, :cluster_name, :service_name
38
+ attr_reader :client, :cluster_name, :service_name
39
39
 
40
- def ask_for_task(tasks)
41
- prompt = TTY::Prompt.new
42
- choices = tasks.map { |task| task.split('/').last }
43
- choice = prompt.enum_select("Select a task:", choices)
44
- tasks.grep(Regexp.new(choice)).first
45
- end
40
+ def ask_for_task(tasks)
41
+ prompt = TTY::Prompt.new
42
+ choices = tasks.map { |task| task.task_arn.split('/').last }
43
+ choice = prompt.enum_select('Select a task:', choices)
44
+ tasks.find { |task| task.task_arn.include?(choice) }.task_arn
45
+ end
46
46
  end
47
47
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EcsRails
4
- VERSION = '0.0.6'
4
+ VERSION = '0.0.8'
5
5
  end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe EcsRails::TaskSelector do
4
+ let(:client) { instance_double(Aws::ECS::Client) }
5
+ let(:cluster_name) { 'test-cluster' }
6
+ let(:service_name) { 'test-service' }
7
+ let(:selector) { described_class.new(client, cluster_name, service_name) }
8
+
9
+ describe '#call' do
10
+ let(:service) { instance_double(Aws::ECS::Types::Service, service_name: service_name, deployments: [deployment]) }
11
+ let(:deployment) { instance_double(Aws::ECS::Types::Deployment, task_definition: 'task-def-arn') }
12
+ let(:task_arn) { 'arn:aws:ecs:us-east-1:123456789:task/cluster/abc123' }
13
+
14
+ before do
15
+ allow(client).to receive(:describe_services)
16
+ .with(cluster: cluster_name, services: [service_name])
17
+ .and_return(instance_double(Aws::ECS::Types::DescribeServicesResponse, services: [service]))
18
+ end
19
+
20
+ context 'when there are no running tasks' do
21
+ before do
22
+ allow(client).to receive(:list_tasks)
23
+ .with(cluster: cluster_name, service_name: service_name, desired_status: 'RUNNING')
24
+ .and_return(instance_double(Aws::ECS::Types::ListTasksResponse, task_arns: []))
25
+ end
26
+
27
+ it 'does not return a task ARN' do
28
+ result = selector.call
29
+ expect(result).not_to be_a(String)
30
+ end
31
+ end
32
+
33
+ context 'when there is one running task' do
34
+ let(:task) { instance_double(Aws::ECS::Types::Task, task_definition_arn: 'task-def-arn', task_arn: task_arn) }
35
+
36
+ before do
37
+ allow(client).to receive(:list_tasks)
38
+ .with(cluster: cluster_name, service_name: service_name, desired_status: 'RUNNING')
39
+ .and_return(instance_double(Aws::ECS::Types::ListTasksResponse, task_arns: [task_arn]))
40
+
41
+ allow(client).to receive(:describe_tasks)
42
+ .with(cluster: cluster_name, tasks: [task_arn])
43
+ .and_return(instance_double(Aws::ECS::Types::DescribeTasksResponse, tasks: [task]))
44
+ end
45
+
46
+ it 'returns the task ARN' do
47
+ expect(selector.call).to eq(task_arn)
48
+ end
49
+ end
50
+
51
+ context 'when there are multiple running tasks' do
52
+ let(:task_arn_1) { 'arn:aws:ecs:us-east-1:123456789:task/cluster/abc123' }
53
+ let(:task_arn_2) { 'arn:aws:ecs:us-east-1:123456789:task/cluster/def456' }
54
+ let(:task_1) { instance_double(Aws::ECS::Types::Task, task_definition_arn: 'task-def-arn', task_arn: task_arn_1) }
55
+ let(:task_2) { instance_double(Aws::ECS::Types::Task, task_definition_arn: 'task-def-arn', task_arn: task_arn_2) }
56
+ let(:prompt) { instance_double(TTY::Prompt) }
57
+
58
+ before do
59
+ allow(client).to receive(:list_tasks)
60
+ .with(cluster: cluster_name, service_name: service_name, desired_status: 'RUNNING')
61
+ .and_return(instance_double(Aws::ECS::Types::ListTasksResponse, task_arns: [task_arn_1, task_arn_2]))
62
+
63
+ allow(client).to receive(:describe_tasks)
64
+ .with(cluster: cluster_name, tasks: [task_arn_1, task_arn_2])
65
+ .and_return(instance_double(Aws::ECS::Types::DescribeTasksResponse, tasks: [task_1, task_2]))
66
+
67
+ allow(TTY::Prompt).to receive(:new).and_return(prompt)
68
+ allow(prompt).to receive(:enum_select).with('Select a task:', %w[abc123 def456]).and_return('abc123')
69
+ end
70
+
71
+ it 'prompts the user to select a task and returns the selected task ARN' do
72
+ expect(selector.call).to eq(task_arn_1)
73
+ end
74
+ end
75
+
76
+ context 'when tasks do not match the deployment task definition' do
77
+ let(:task_arn) { 'arn:aws:ecs:us-east-1:123456789:task/cluster/abc123' }
78
+ let(:task) { instance_double(Aws::ECS::Types::Task, task_definition_arn: 'different-task-def', task_arn: task_arn) }
79
+
80
+ before do
81
+ allow(client).to receive(:list_tasks)
82
+ .with(cluster: cluster_name, service_name: service_name, desired_status: 'RUNNING')
83
+ .and_return(instance_double(Aws::ECS::Types::ListTasksResponse, task_arns: [task_arn]))
84
+
85
+ allow(client).to receive(:describe_tasks)
86
+ .with(cluster: cluster_name, tasks: [task_arn])
87
+ .and_return(instance_double(Aws::ECS::Types::DescribeTasksResponse, tasks: [task]))
88
+ end
89
+
90
+ it 'does not return a task ARN' do
91
+ result = selector.call
92
+ expect(result).not_to be_a(String)
93
+ end
94
+ end
95
+ end
96
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franck D'agostini
@@ -44,25 +44,19 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  version: 3.6.0
46
46
  - !ruby/object:Gem::Dependency
47
- name: aws-sdk-ecs
47
+ name: activesupport
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
50
- - - "~>"
51
- - !ruby/object:Gem::Version
52
- version: '1.132'
53
50
  - - ">"
54
51
  - !ruby/object:Gem::Version
55
- version: '1.132'
52
+ version: '5.2'
56
53
  type: :runtime
57
54
  prerelease: false
58
55
  version_requirements: !ruby/object:Gem::Requirement
59
56
  requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '1.132'
63
57
  - - ">"
64
58
  - !ruby/object:Gem::Version
65
- version: '1.132'
59
+ version: '5.2'
66
60
  - !ruby/object:Gem::Dependency
67
61
  name: aws-sdk-ec2
68
62
  requirement: !ruby/object:Gem::Requirement
@@ -84,39 +78,59 @@ dependencies:
84
78
  - !ruby/object:Gem::Version
85
79
  version: '1.425'
86
80
  - !ruby/object:Gem::Dependency
87
- name: tty-prompt
81
+ name: aws-sdk-ecs
88
82
  requirement: !ruby/object:Gem::Requirement
89
83
  requirements:
90
84
  - - "~>"
91
85
  - !ruby/object:Gem::Version
92
- version: '0.23'
86
+ version: '1.132'
93
87
  - - ">"
94
88
  - !ruby/object:Gem::Version
95
- version: '0.23'
89
+ version: '1.132'
96
90
  type: :runtime
97
91
  prerelease: false
98
92
  version_requirements: !ruby/object:Gem::Requirement
99
93
  requirements:
100
94
  - - "~>"
101
95
  - !ruby/object:Gem::Version
102
- version: '0.23'
96
+ version: '1.132'
103
97
  - - ">"
104
98
  - !ruby/object:Gem::Version
105
- version: '0.23'
99
+ version: '1.132'
106
100
  - !ruby/object:Gem::Dependency
107
- name: activesupport
101
+ name: openssl
108
102
  requirement: !ruby/object:Gem::Requirement
109
103
  requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 3.2.1
107
+ type: :runtime
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 3.2.1
114
+ - !ruby/object:Gem::Dependency
115
+ name: tty-prompt
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '0.23'
110
121
  - - ">"
111
122
  - !ruby/object:Gem::Version
112
- version: '5.2'
123
+ version: '0.23'
113
124
  type: :runtime
114
125
  prerelease: false
115
126
  version_requirements: !ruby/object:Gem::Requirement
116
127
  requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0.23'
117
131
  - - ">"
118
132
  - !ruby/object:Gem::Version
119
- version: '5.2'
133
+ version: '0.23'
120
134
  description: Connect to your AWS ECS tasks
121
135
  email: franck.dagostini@gmail.com
122
136
  executables:
@@ -146,6 +160,7 @@ files:
146
160
  - lib/ecs-rails/task_selector.rb
147
161
  - lib/ecs-rails/version.rb
148
162
  - spec/ecs-rails/ecs_rails_configuration_spec.rb
163
+ - spec/ecs-rails/task_selector_spec.rb
149
164
  - spec/fixtures/ecs-rails.yml
150
165
  - spec/spec_helper.rb
151
166
  homepage: https://rubygems.org/gems/ecs-rails