ecs_deploy 0.3.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,37 +1,54 @@
1
1
  module EcsDeploy
2
2
  class TaskDefinition
3
+ RETRY_BACKOFF = lambda do |c|
4
+ sleep(1)
5
+ end
6
+
7
+ RETRY_LIMIT = 10
8
+
3
9
  def self.deregister(arn, region: nil)
4
- region = region || EcsDeploy.config.default_region || ENV["AWS_DEFAULT_REGION"]
5
- client = Aws::ECS::Client.new(region: region)
10
+ region ||= EcsDeploy.config.default_region
11
+ param = {retry_backoff: RETRY_BACKOFF, retry_limit: RETRY_LIMIT}
12
+ client = region ? Aws::ECS::Client.new(param.merge(region: region)) : Aws::ECS::Client.new(param)
6
13
  client.deregister_task_definition({
7
14
  task_definition: arn,
8
15
  })
9
- EcsDeploy.logger.info "deregister task definition [#{arn}] [#{region}] [#{Paint['OK', :green]}]"
16
+ EcsDeploy.logger.info "deregister task definition [#{arn}] [#{client.config.region}] [#{Paint['OK', :green]}]"
10
17
  end
11
18
 
12
19
  def initialize(
13
20
  task_definition_name:, region: nil,
14
21
  network_mode: "bridge", volumes: [], container_definitions: [], placement_constraints: [],
15
- task_role_arn: nil
22
+ task_role_arn: nil,
23
+ execution_role_arn: nil,
24
+ requires_compatibilities: nil,
25
+ cpu: nil, memory: nil,
26
+ tags: nil
16
27
  )
17
28
  @task_definition_name = task_definition_name
18
29
  @task_role_arn = task_role_arn
19
- @region = region || EcsDeploy.config.default_region || ENV["AWS_DEFAULT_REGION"]
30
+ @execution_role_arn = execution_role_arn
31
+ region ||= EcsDeploy.config.default_region
20
32
 
21
33
  @container_definitions = container_definitions.map do |cd|
22
34
  if cd[:docker_labels]
23
35
  cd[:docker_labels] = cd[:docker_labels].map { |k, v| [k.to_s, v] }.to_h
24
36
  end
25
- if cd[:log_configuration] && cd[:log_configuration][:options]
26
- cd[:log_configuration][:options] = cd[:log_configuration][:options].map { |k, v| [k.to_s, v] }.to_h
37
+ if cd.dig(:log_configuration, :options)
38
+ cd[:log_configuration][:options] = cd.dig(:log_configuration, :options).map { |k, v| [k.to_s, v] }.to_h
27
39
  end
28
40
  cd
29
41
  end
30
42
  @volumes = volumes
31
43
  @network_mode = network_mode
32
44
  @placement_constraints = placement_constraints
33
-
34
- @client = Aws::ECS::Client.new(region: @region)
45
+ @requires_compatibilities = requires_compatibilities
46
+ @cpu = cpu&.to_s
47
+ @memory = memory&.to_s
48
+ @tags = tags
49
+ param = {retry_backoff: RETRY_BACKOFF, retry_limit: RETRY_LIMIT}
50
+ @client = region ? Aws::ECS::Client.new(param.merge(region: region)) : Aws::ECS::Client.new(param)
51
+ @region = @client.config.region
35
52
  end
36
53
 
37
54
  def recent_task_definition_arns
@@ -52,45 +69,13 @@ module EcsDeploy
52
69
  volumes: @volumes,
53
70
  placement_constraints: @placement_constraints,
54
71
  task_role_arn: @task_role_arn,
72
+ execution_role_arn: @execution_role_arn,
73
+ requires_compatibilities: @requires_compatibilities,
74
+ cpu: @cpu, memory: @memory,
75
+ tags: @tags
55
76
  })
56
77
  EcsDeploy.logger.info "register task definition [#{@task_definition_name}] [#{@region}] [#{Paint['OK', :green]}]"
57
78
  res.task_definition
58
79
  end
59
-
60
- def run(info)
61
- resp = @client.run_task({
62
- cluster: info[:cluster],
63
- task_definition: @task_definition_name,
64
- overrides: {
65
- container_overrides: info[:container_overrides] || []
66
- },
67
- count: info[:count] || 1,
68
- started_by: "capistrano",
69
- })
70
- unless resp.failures.empty?
71
- resp.failures.each do |f|
72
- raise "#{f.arn}: #{f.reason}"
73
- end
74
- end
75
-
76
- wait_targets = Array(info[:wait_stop])
77
- unless wait_targets.empty?
78
- @client.wait_until(:tasks_running, cluster: info[:cluster], tasks: resp.tasks.map { |t| t.task_arn })
79
- @client.wait_until(:tasks_stopped, cluster: info[:cluster], tasks: resp.tasks.map { |t| t.task_arn })
80
-
81
- resp = @client.describe_tasks(cluster: info[:cluster], tasks: resp.tasks.map { |t| t.task_arn })
82
- resp.tasks.each do |t|
83
- t.containers.each do |c|
84
- next unless wait_targets.include?(c.name)
85
-
86
- unless c.exit_code.zero?
87
- raise "Task has errors: #{c.reason}"
88
- end
89
- end
90
- end
91
- end
92
-
93
- EcsDeploy.logger.info "run task [#{@task_definition_name} #{info.inspect}] [#{@region}] [#{Paint['OK', :green]}]"
94
- end
95
80
  end
96
81
  end
@@ -1,3 +1,3 @@
1
1
  module EcsDeploy
2
- VERSION = "0.3.0"
2
+ VERSION = "1.0.2"
3
3
  end
metadata CHANGED
@@ -1,29 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - joker1007
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-03 00:00:00.000000000 Z
11
+ date: 2021-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aws-sdk
14
+ name: aws-sdk-autoscaling
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.9'
19
+ version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.9'
26
+ version: '1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk-cloudwatch
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk-cloudwatchevents
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: aws-sdk-ec2
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aws-sdk-ecs
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: aws-sdk-sqs
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1'
27
97
  - !ruby/object:Gem::Dependency
28
98
  name: terminal-table
29
99
  requirement: !ruby/object:Gem::Requirement
@@ -56,30 +126,50 @@ dependencies:
56
126
  name: bundler
57
127
  requirement: !ruby/object:Gem::Requirement
58
128
  requirements:
59
- - - "~>"
129
+ - - ">="
60
130
  - !ruby/object:Gem::Version
61
131
  version: '1.11'
132
+ - - "<"
133
+ - !ruby/object:Gem::Version
134
+ version: '3'
62
135
  type: :development
63
136
  prerelease: false
64
137
  version_requirements: !ruby/object:Gem::Requirement
65
138
  requirements:
66
- - - "~>"
139
+ - - ">="
67
140
  - !ruby/object:Gem::Version
68
141
  version: '1.11'
142
+ - - "<"
143
+ - !ruby/object:Gem::Version
144
+ version: '3'
69
145
  - !ruby/object:Gem::Dependency
70
146
  name: rake
71
147
  requirement: !ruby/object:Gem::Requirement
72
148
  requirements:
73
- - - "~>"
149
+ - - ">="
74
150
  - !ruby/object:Gem::Version
75
151
  version: '10.0'
76
152
  type: :development
77
153
  prerelease: false
78
154
  version_requirements: !ruby/object:Gem::Requirement
79
155
  requirements:
80
- - - "~>"
156
+ - - ">="
81
157
  - !ruby/object:Gem::Version
82
158
  version: '10.0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rspec
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '3.0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '3.0'
83
173
  description: AWS ECS deploy helper
84
174
  email:
85
175
  - kakyoin.hierophant@gmail.com
@@ -89,6 +179,8 @@ extensions: []
89
179
  extra_rdoc_files: []
90
180
  files:
91
181
  - ".gitignore"
182
+ - ".travis.yml"
183
+ - CHANGELOG.md
92
184
  - Gemfile
93
185
  - README.md
94
186
  - Rakefile
@@ -98,8 +190,16 @@ files:
98
190
  - exe/ecs_auto_scaler
99
191
  - lib/ecs_deploy.rb
100
192
  - lib/ecs_deploy/auto_scaler.rb
193
+ - lib/ecs_deploy/auto_scaler/auto_scaling_group_config.rb
194
+ - lib/ecs_deploy/auto_scaler/cluster_resource_manager.rb
195
+ - lib/ecs_deploy/auto_scaler/config_base.rb
196
+ - lib/ecs_deploy/auto_scaler/instance_drainer.rb
197
+ - lib/ecs_deploy/auto_scaler/service_config.rb
198
+ - lib/ecs_deploy/auto_scaler/spot_fleet_request_config.rb
199
+ - lib/ecs_deploy/auto_scaler/trigger_config.rb
101
200
  - lib/ecs_deploy/capistrano.rb
102
201
  - lib/ecs_deploy/configuration.rb
202
+ - lib/ecs_deploy/instance_fluctuation_manager.rb
103
203
  - lib/ecs_deploy/scheduled_task.rb
104
204
  - lib/ecs_deploy/service.rb
105
205
  - lib/ecs_deploy/task_definition.rb
@@ -107,7 +207,7 @@ files:
107
207
  homepage: https://github.com/reproio/ecs_deploy
108
208
  licenses: []
109
209
  metadata: {}
110
- post_install_message:
210
+ post_install_message:
111
211
  rdoc_options: []
112
212
  require_paths:
113
213
  - lib
@@ -122,9 +222,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
222
  - !ruby/object:Gem::Version
123
223
  version: '0'
124
224
  requirements: []
125
- rubyforge_project:
126
- rubygems_version: 2.6.12
127
- signing_key:
225
+ rubygems_version: 3.2.15
226
+ signing_key:
128
227
  specification_version: 4
129
228
  summary: AWS ECS deploy helper
130
229
  test_files: []