wrapbox 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/wrapbox/runner/docker.rb +4 -3
- data/lib/wrapbox/runner/ecs.rb +27 -9
- data/lib/wrapbox/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67a6e2d03ab3ecd91eb20638f7ea5faa3b42e6e9
|
4
|
+
data.tar.gz: d64a6d52580d830f3c48dad77885fb1d344baaa9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc8c3a0b68c1d636a501cf205fa41741c526b1c432d2e2e09875b181a4bf3e3b3d8e2ff754ef341f7fcf6d98426a1a187eafdcca8d6c03241ecc7f531625d982
|
7
|
+
data.tar.gz: 800d8fedf7f5d0aea0850b3d5158699d0107ccfda0eb2f00319e331af2e38d48ba0e18a274bca0c08f6f008cda1761d2cfb70e018bd40342c912ce70043cb9bd
|
data/README.md
CHANGED
@@ -85,6 +85,17 @@ Wrapbox.run_cmd(["ls ."], environments: [{name: "RAILS_ENV", value: "development
|
|
85
85
|
| additional_container_definitions | Container definitions for sub containers |
|
86
86
|
| task_role_arn | see. http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html |
|
87
87
|
|
88
|
+
`WRAPBOX_CMD_INDEX` environment variable is available in `run_cmd` and you can distinguish logs from each command like below:
|
89
|
+
|
90
|
+
```
|
91
|
+
log_configuration:
|
92
|
+
log_driver: syslog
|
93
|
+
options:
|
94
|
+
syslog-address: "tcp://192.168.0.42:123"
|
95
|
+
env: WRAPBOX_CMD_INDEX
|
96
|
+
tag: wrapbox-{{ printf "%03s" (.ExtraAttributes nil).WRAPBOX_CMD_INDEX }}
|
97
|
+
```
|
98
|
+
|
88
99
|
### for docker
|
89
100
|
| name | desc |
|
90
101
|
| -------------------- | ----------------------------------------------------------- |
|
@@ -35,9 +35,10 @@ module Wrapbox
|
|
35
35
|
|
36
36
|
environments = extract_environments(environments)
|
37
37
|
|
38
|
-
ths = cmds.map do |cmd|
|
39
|
-
Thread.new(cmd) do |c|
|
40
|
-
|
38
|
+
ths = cmds.map.with_index do |cmd, idx|
|
39
|
+
Thread.new(cmd, idx) do |c, i|
|
40
|
+
envs = environments + ["WRAPBOX_CMD_INDEX=#{idx}"]
|
41
|
+
exec_docker(definition: definition, cmd: c.split(/\s+/), environments: envs)
|
41
42
|
end
|
42
43
|
end
|
43
44
|
ths.each(&:join)
|
data/lib/wrapbox/runner/ecs.rb
CHANGED
@@ -4,6 +4,7 @@ require "thor"
|
|
4
4
|
require "yaml"
|
5
5
|
require "active_support/core_ext/hash"
|
6
6
|
require "logger"
|
7
|
+
require "pp"
|
7
8
|
|
8
9
|
require "wrapbox/config_repository"
|
9
10
|
require "wrapbox/version"
|
@@ -76,14 +77,15 @@ module Wrapbox
|
|
76
77
|
|
77
78
|
def run_cmd(cmds, container_definition_overrides: {}, **parameters)
|
78
79
|
task_definition = register_task_definition(container_definition_overrides)
|
79
|
-
parameter = Parameter.new(**parameters)
|
80
80
|
|
81
|
-
ths = cmds.map do |cmd|
|
82
|
-
Thread.new(cmd) do |c|
|
81
|
+
ths = cmds.map.with_index do |cmd, idx|
|
82
|
+
Thread.new(cmd, idx) do |c, i|
|
83
|
+
Thread.current[:cmd_index] = i
|
84
|
+
envs = (parameters[:environments] || []) + [{name: "WRAPBOX_CMD_INDEX", value: i.to_s}]
|
83
85
|
run_task(
|
84
86
|
task_definition.task_definition_arn, nil, nil, nil,
|
85
87
|
c.split(/\s+/),
|
86
|
-
|
88
|
+
Parameter.new(**parameters.merge(environments: envs))
|
87
89
|
)
|
88
90
|
end
|
89
91
|
end
|
@@ -111,7 +113,7 @@ module Wrapbox
|
|
111
113
|
task_status = fetch_task_status(cl, task.task_arn)
|
112
114
|
|
113
115
|
# If exit_code is nil, Container is force killed or ECS failed to launch Container by Irregular situation
|
114
|
-
error_message =
|
116
|
+
error_message = build_error_message(task_definition_name, task.task_arn, task_status)
|
115
117
|
raise ContainerAbnormalEnd, error_message unless task_status[:exit_code]
|
116
118
|
raise ExecutionFailure, error_message unless task_status[:exit_code] == 0
|
117
119
|
|
@@ -142,8 +144,10 @@ module Wrapbox
|
|
142
144
|
current_retry_interval = parameter.retry_interval
|
143
145
|
|
144
146
|
begin
|
147
|
+
run_task_options = build_run_task_options(task_definition_arn, class_name, method_name, args, command, cl, parameter.environments, parameter.task_role_arn)
|
148
|
+
@logger.debug("Task Options: #{run_task_options}")
|
145
149
|
task = client
|
146
|
-
.run_task(
|
150
|
+
.run_task(run_task_options)
|
147
151
|
.tasks[0]
|
148
152
|
|
149
153
|
raise LackResource unless task # this case is almost lack of container resource.
|
@@ -194,7 +198,8 @@ module Wrapbox
|
|
194
198
|
end
|
195
199
|
rescue LaunchFailure
|
196
200
|
if launch_try_count >= parameter.launch_retry
|
197
|
-
|
201
|
+
task_status = fetch_task_status(cl, task.task_arn)
|
202
|
+
raise LaunchFailure, build_error_message(task_definition_name, task.task_arn, task_status)
|
198
203
|
else
|
199
204
|
launch_try_count += 1
|
200
205
|
@logger.debug("Retry Create Task after #{current_retry_interval} sec")
|
@@ -236,8 +241,13 @@ module Wrapbox
|
|
236
241
|
|
237
242
|
def fetch_task_status(cluster, task_arn)
|
238
243
|
task = client.describe_tasks(cluster: cluster, tasks: [task_arn]).tasks[0]
|
239
|
-
container = task.containers.find { |c| c.name
|
240
|
-
{
|
244
|
+
container = task.containers.find { |c| c.name == task_definition_name }
|
245
|
+
{
|
246
|
+
last_status: task.last_status,
|
247
|
+
exit_code: container.exit_code,
|
248
|
+
stopped_reason: task.stopped_reason,
|
249
|
+
container_stopped_reason: container.reason
|
250
|
+
}
|
241
251
|
end
|
242
252
|
|
243
253
|
def register_task_definition(container_definition_overrides)
|
@@ -337,6 +347,13 @@ module Wrapbox
|
|
337
347
|
}
|
338
348
|
end
|
339
349
|
|
350
|
+
def build_error_message(task_definition_name, task_arn, task_status)
|
351
|
+
error_message = "Container #{task_definition_name} is failed. task=#{task_arn}, "
|
352
|
+
error_message << "cmd_index=#{Thread.current[:cmd_index]}, " if Thread.current[:cmd_index]
|
353
|
+
error_message << "exit_code=#{task_status[:exit_code]}, task_stopped_reason=#{task_status[:stopped_reason]}, container_stopped_reason=#{task_status[:container_stopped_reason]}"
|
354
|
+
error_message
|
355
|
+
end
|
356
|
+
|
340
357
|
class Cli < Thor
|
341
358
|
namespace :ecs
|
342
359
|
|
@@ -360,6 +377,7 @@ module Wrapbox
|
|
360
377
|
{name: k, value: v}
|
361
378
|
end
|
362
379
|
run_options = {
|
380
|
+
cluster: options[:cluster],
|
363
381
|
task_role_arn: options[:task_role_arn],
|
364
382
|
timeout: options[:timeout],
|
365
383
|
launch_timeout: options[:launch_timeout],
|
data/lib/wrapbox/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wrapbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- joker1007
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -212,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
212
|
version: '0'
|
213
213
|
requirements: []
|
214
214
|
rubyforge_project:
|
215
|
-
rubygems_version: 2.6.
|
215
|
+
rubygems_version: 2.6.11
|
216
216
|
signing_key:
|
217
217
|
specification_version: 4
|
218
218
|
summary: Ruby method runner on AWS ECS
|