ecs_oneshot 0.1.1 → 1.0.0

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: 6d35d3d137141ecc4b2bac0e823a5ca74d598b80093f0e6e87deb50e9ad7f492
4
- data.tar.gz: 40d2a17b0f05018d506cf715a21f8799b2af1386b764c1d886368d53e71623d4
3
+ metadata.gz: 9f55e1bf5ed436b6b9a39d8dd9ee6946b475a060e8f50560d64ddef12326b8cc
4
+ data.tar.gz: 9056ca0a22315281d41e87a55e046d35164595475cae7fce4bd6b47c22c965f7
5
5
  SHA512:
6
- metadata.gz: a03c2b215c42c42a29a50a4c229009db52a8f493226bc7c902adacb5645540ceac3a1b60cebf85906270cdb31c997cdea3ca5a1dfcbba293e0c4df4b4eaafbca
7
- data.tar.gz: 9a54537e2bf20043ebf739908eb7cdf3a6460f547d65b3b39d59403ad1804b9bf898e7fae68d9d9dba4b0a2f7aad6db6fe8d6f485a230ba54f199afb75f593df
6
+ metadata.gz: 9c449cd8b03b692ce89a12d2a98ee769b498ef5b5b0282d2266421e50c404ffbb474cc3ed3749b8d4a4218d9a7bb07ff1520d6a4cf8b115afb14525de526eade
7
+ data.tar.gz: db60aab1c7dc48e7e9a9116358c3e60b925a7245727b6d942a333c492b47eb49705d4e3498cdf1d0d3faba03569fc2669f348399af33bc91414ac8ab081fa57d
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ecs_oneshot (0.1.1)
4
+ ecs_oneshot (1.0.0)
5
5
  aws-sdk-cloudwatchlogs
6
6
  aws-sdk-ecs
7
7
 
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  ![Ruby](https://github.com/sinsoku/ecs_oneshot/workflows/Ruby/badge.svg)
4
4
  [![Gem Version](https://badge.fury.io/rb/ecs_oneshot.svg)](https://badge.fury.io/rb/ecs_oneshot)
5
5
 
6
- A CLI tool that simply executes tasks on AWS ECS.
6
+ Provides a simple way to run one-shot tasks using the ECS runTask API.
7
7
 
8
8
  ## Installation
9
9
 
@@ -23,12 +23,21 @@ Or install it yourself as:
23
23
 
24
24
  ## Usage
25
25
 
26
- ### Quickstart
26
+ ```
27
+ Usage: ecs_oneshot [options] -- <commmand>
28
+ -c, --config FILE Specify configuration file. (default: .ecs_oneshot.yml)
29
+ -e, --environment ENVIRONMENT Specify environment. (default: production)
30
+ --cluster CLUSTER
31
+ --service SERVICE
32
+ --task-definition TASK_DEFINITION
33
+ --container CONTAINER
34
+ ```
27
35
 
28
- Run any command with the same configurations as your existing ECS service.
36
+ ## Example
29
37
 
30
38
  ```console
31
- $ ecs_oneshot --cluster <mycluster> --service <myservice> --container <mycontainer> -- bin/rails -T
39
+ $ ecs_oneshot --cluster mycluster --service myservice --task-definition rails-app:1 --container app -- bin/rails -T
40
+ Task started. Watch this task's details in the Amazon ECS console: https://console.aws.amazon.com/ecs/home?ap-northeast-1#/clusters/default/tasks/00000000-1234-5678-9000-aaaaaaaaaaaa/details
32
41
  === Wait for Task Starting...
33
42
  === Following Logs...
34
43
  rails about # List versions of all Rails frameworks and the environment
@@ -49,6 +58,7 @@ If the configuration file exists, it will be loaded.
49
58
  production:
50
59
  cluster: mycluster
51
60
  service: myservice
61
+ task_definition: task-def
52
62
  container: mycontainer
53
63
  ```
54
64
 
@@ -9,11 +9,7 @@ module EcsOneshot
9
9
  def run(args = ARGV)
10
10
  options = parse_options(args)
11
11
 
12
- if options[:init]
13
- init_config(options)
14
- else
15
- run_task(options)
16
- end
12
+ run_task(options)
17
13
  rescue Error => e
18
14
  warn e.message
19
15
  exit 1
@@ -36,6 +32,7 @@ module EcsOneshot
36
32
 
37
33
  t = Task.new(config)
38
34
  t.run
35
+ puts "Task started. Watch this task's details in the Amazon ECS console: #{t.console_url}\n\n"
39
36
  puts "=== Wait for Task Starting..."
40
37
  t.wait_running
41
38
  puts "=== Following Logs..."
@@ -43,14 +40,7 @@ module EcsOneshot
43
40
  puts "\n=== Task Stopped."
44
41
  end
45
42
 
46
- def init_config(options)
47
- path = options[:config]
48
- env = options[:environment]
49
-
50
- Config.safe_build(options).save(path, env)
51
- end
52
-
53
- def parse_options(args) # rubocop:disable Metrics/MethodLength
43
+ def parse_options(args) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
54
44
  opts = OptionParser.new
55
45
  opts.banner = "Usage: ecs_oneshot [options] -- <commmand>"
56
46
  opts.version = VERSION
@@ -59,13 +49,14 @@ module EcsOneshot
59
49
  opts.on("-e", "--environment ENVIRONMENT", "Specify environment. (default: production)")
60
50
  opts.on("--cluster CLUSTER")
61
51
  opts.on("--service SERVICE")
52
+ opts.on("--task-definition TASK_DEFINITION")
62
53
  opts.on("--container CONTAINER")
63
- opts.on("--init", "Generate a configuration file.")
64
54
 
65
55
  {}.tap do |h|
66
56
  h[:command] = opts.parse(args, into: h)
67
57
  h[:config] ||= ".ecs_oneshot.yml"
68
58
  h[:environment] ||= "production"
59
+ h[:task_definition] = h.delete(:"task-definition")
69
60
  end
70
61
  end
71
62
  end
@@ -3,7 +3,7 @@
3
3
  require "yaml"
4
4
 
5
5
  module EcsOneshot
6
- Config = Struct.new(:cluster, :service, :container, :command, keyword_init: true)
6
+ Config = Struct.new(:cluster, :service, :container, :task_definition, :command, keyword_init: true)
7
7
 
8
8
  class Config
9
9
  class << self
@@ -23,14 +23,6 @@ module EcsOneshot
23
23
  end
24
24
  end
25
25
 
26
- def save(path, env)
27
- raise Error, "already exists at '#{path}'." if File.exist?(path)
28
-
29
- File.open(path, "w") do |f|
30
- YAML.dump({ env => to_h.transform_keys(&:to_s) }, f)
31
- end
32
- end
33
-
34
26
  def merge(other)
35
27
  new_options = to_h.merge(other.to_h.compact)
36
28
  Config.new(**new_options)
@@ -20,6 +20,10 @@ module EcsOneshot
20
20
  @id = @arn.split("/").last
21
21
  end
22
22
 
23
+ def console_url
24
+ "https://console.aws.amazon.com/ecs/home?#{ecs.config.region}#/clusters/#{config.cluster}/tasks/#{@id}/details"
25
+ end
26
+
23
27
  def wait_running
24
28
  ecs.wait_until(:tasks_running, cluster: config.cluster, tasks: [arn])
25
29
  rescue Aws::Waiters::Errors::WaiterFailed
@@ -68,8 +72,7 @@ module EcsOneshot
68
72
  def task_definition
69
73
  return @task_definition if @task_definition
70
74
 
71
- # NOTE: Delete a version to use latest task definition
72
- task_definition = service.task_definition.sub(/:\d+$/, "")
75
+ task_definition = config.task_definition || service.task_definition
73
76
  @task_definition = ecs.describe_task_definition(task_definition: task_definition)
74
77
  .task_definition
75
78
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EcsOneshot
4
- VERSION = "0.1.1"
4
+ VERSION = "1.0.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs_oneshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takumi Shotoku
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-26 00:00:00.000000000 Z
11
+ date: 2020-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-cloudwatchlogs