ecs_compose 0.1.0.pre10 → 0.1.0.pre11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3cd0b018b8b9b888c1122557c0a161334766b53
4
- data.tar.gz: 16060721d639f8d4476873f03b41a34a18f68648
3
+ metadata.gz: d921f9b7cfc815df0f612407f5c4b6a5eb36a242
4
+ data.tar.gz: 517f89b2d4b32570307fb789370270b24a211882
5
5
  SHA512:
6
- metadata.gz: b64b87966680476d655a08de539f3f7d9ff1e6bdb043bdca0e98fff3c8becbe3162c656818385da9e62a7970146c2e55b97e234995b683350b9894628e1974be
7
- data.tar.gz: 089581fab759d2710fd2e74d913fec10dcdf1a6a0e8ca6fb182f019d8ceece2637f4929a01bbfafae6b73a81fdc1e8874b1047804d4c74136ce9a663fc800b20
6
+ metadata.gz: 850739a8d7a033f072c3b8a764a967d428cc28d7402ac69fc002d57e57bb5414cb260945c655023388fa96a5f2b11a75aa3243f99607716db4c7944bc626490f
7
+ data.tar.gz: 90a241bc97e878262a503e6310ff30fc8a4bf2b31bb15c05c9f1ee5e690250386b95ad2b4750ae8d7704ea3ff5ce100e6c6ce5180fe534253cf30521aa3dc775
data/exe/ecs-compose CHANGED
@@ -186,6 +186,9 @@ end
186
186
  # Run our application.
187
187
  begin
188
188
  App.new.run
189
+ rescue EcsCompose::TaskError => e
190
+ puts e.message.red
191
+ exit(1)
189
192
  rescue Docopt::Exit => e
190
193
  puts e.message
191
194
  exit(1)
@@ -18,12 +18,16 @@ module EcsCompose
18
18
  # Run `aws ecs` with the specified arguments.
19
19
  def self.run(*args)
20
20
  command = ["aws", "ecs"] + args + ["--output", "json"]
21
- puts "→ #{command.join(' ').blue}"
21
+ STDERR.puts "→ #{command.join(' ').blue}"
22
22
  stdout, status = Open3.capture2(*command)
23
23
  if status != 0
24
24
  raise "Error running: #{command.inspect}"
25
25
  end
26
- JSON.parse(stdout)
26
+ if stdout.empty?
27
+ nil
28
+ else
29
+ JSON.parse(stdout)
30
+ end
27
31
  end
28
32
 
29
33
  # Register the specified task definition (passed as JSON data).
@@ -57,5 +61,15 @@ module EcsCompose
57
61
  "--task-definition", task_definition,
58
62
  *extra_args)
59
63
  end
64
+
65
+ def self.wait_tasks_stopped(*arns)
66
+ run("wait", "tasks-stopped",
67
+ "--tasks", arns.join(" "))
68
+ end
69
+
70
+ def self.describe_tasks(*arns)
71
+ run("describe-tasks",
72
+ "--tasks", arns.join(" "))
73
+ end
60
74
  end
61
75
  end
@@ -36,7 +36,9 @@ module EcsCompose
36
36
  json = {
37
37
  "name" => name,
38
38
  "image" => fields.fetch("image"),
39
- # Default to a tiny guaranteed CPU share.
39
+ # Default to a tiny guaranteed CPU share. Currently, 2 is the
40
+ # smallest meaningful value, and various ECS tools will round
41
+ # smaller numbers up.
40
42
  "cpu" => fields["cpu_shares"] || 2,
41
43
  "memory" => mem_limit_to_mb(fields.fetch("mem_limit")),
42
44
  "links" => fields["links"] || [],
@@ -21,7 +21,7 @@ module EcsCompose
21
21
  # Returns a string of the form `"name:revision"` identifying the task
22
22
  # we registered.
23
23
  def register
24
- reg = EcsCompose::Ecs.register_task_definition(to_json)
24
+ reg = Ecs.register_task_definition(to_json)
25
25
  .fetch("taskDefinition")
26
26
  "#{reg.fetch('family')}:#{reg.fetch('revision')}"
27
27
  end
@@ -29,14 +29,20 @@ module EcsCompose
29
29
  # Register this task definition with ECS, and update the corresponding
30
30
  # service.
31
31
  def update
32
- EcsCompose::Ecs.update_service(name, register)
32
+ Ecs.update_service(name, register)
33
33
  end
34
34
 
35
35
  # Run this task definition as a one-shot ECS task, with the specified
36
36
  # overrides.
37
37
  def run(**args)
38
38
  overrides_json = json_generator.generate_override_json(**args)
39
- EcsCompose::Ecs.run_task(register, overrides_json: overrides_json)
39
+ info = Ecs.run_task(register, overrides_json: overrides_json)
40
+ arn = info.fetch("tasks")[0].fetch("taskArn")
41
+ #STDERR.puts("Running as: #{arn}")
42
+
43
+ # Wait until the task has finished running and check for errors.
44
+ Ecs.wait_tasks_stopped(arn)
45
+ TaskError.fail_on_errors(Ecs.describe_tasks(arn))
40
46
  end
41
47
 
42
48
  # Generate ECS task definition JSON for this instance.
@@ -48,7 +54,7 @@ module EcsCompose
48
54
 
49
55
  # Return a JSON generator for this task.
50
56
  def json_generator
51
- @json_generator ||= EcsCompose::JsonGenerator.new(name, yaml)
57
+ @json_generator ||= JsonGenerator.new(name, yaml)
52
58
  end
53
59
  end
54
60
  end
@@ -0,0 +1,45 @@
1
+ module EcsCompose
2
+ # We raise this error if `aws ecs describe-tasks` indicates that a
3
+ # process has failed.
4
+ class TaskError < RuntimeError
5
+ def self.fail_on_errors(task_descriptions)
6
+ errs1 = task_descriptions.fetch("failures").map {|f| failure_error(f) }
7
+ errs2 = task_descriptions.fetch("tasks").map do |task|
8
+ task.fetch("containers").map do |container|
9
+ container_error(container)
10
+ end
11
+ end.flatten.compact
12
+ errs = errs1 + errs2
13
+ unless errs.empty?
14
+ raise new(errs)
15
+ end
16
+ end
17
+
18
+ #:nodoc:
19
+ def self.container_error(container)
20
+ exit_code = container.fetch("exitCode")
21
+ name = container.fetch("name")
22
+ if exit_code == 0
23
+ nil
24
+ elsif container.has_key?("reason")
25
+ "#{name}: #{container.fetch("reason")}"
26
+ else
27
+ "#{name}: exited with code #{exit_code}"
28
+ end
29
+ end
30
+
31
+ #:nodoc:
32
+ def self.failure_error(failure)
33
+ "#{failure.fetch("reason")} (resource: #{failure.fetch("arn")})"
34
+ end
35
+
36
+ attr_reader :messages
37
+
38
+ # Create a new task error with one or more messages.
39
+ def initialize(messages)
40
+ message = (["Errors running tasks:"] + messages).join("\n- ")
41
+ super(message)
42
+ @messages = messages
43
+ end
44
+ end
45
+ end
data/lib/ecs_compose.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "ecs_compose/version"
2
2
  require "ecs_compose/json_generator"
3
3
  require "ecs_compose/ecs"
4
+ require "ecs_compose/task_error"
4
5
  require "ecs_compose/task_definition"
5
6
  require "ecs_compose/manifest"
6
7
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs_compose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre10
4
+ version: 0.1.0.pre11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Kidd
@@ -108,6 +108,7 @@ files:
108
108
  - lib/ecs_compose/json_generator.rb
109
109
  - lib/ecs_compose/manifest.rb
110
110
  - lib/ecs_compose/task_definition.rb
111
+ - lib/ecs_compose/task_error.rb
111
112
  - lib/ecs_compose/version.rb
112
113
  - publish.sh
113
114
  homepage: https://github.com/faradayio/ecs_compose