ecs_helper 0.0.28 → 0.0.29

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
  SHA256:
3
- metadata.gz: d7d7e1d62103b4759b19005b1bc248f562749be0bc5f7c5b1b351d2e5a7874f8
4
- data.tar.gz: 8d2d35ef50190a45ed9ea689485d43776026eef91c496a3353c200a42c50389f
3
+ metadata.gz: d9360d89edeb8333e9caf152cb45a4a1d6042c3f614ab0d6d5d45e8d6bcd6e61
4
+ data.tar.gz: b3d2c66d829a1cf4b35e0d9dd476427287770fd14beb4e28729cc263d58ec878
5
5
  SHA512:
6
- metadata.gz: 4440e1cc6a9cec9f38e8ea485c86131ebdf15635464bf577b02cb6557b908f43a1769b5289b826815d9ad8282c14446677f6b478a1771ce82706beeb2ea4d04d
7
- data.tar.gz: c4cf0985abb1934130d7ad7266554d4c30643de641e2f3e3bb3d7b625fe1eb0b9c5c88d70ff935f2e9663d1ddb65e8c3782069782c8b4dd8aafb06ffa6644901
6
+ metadata.gz: 20bc088dc9e4f3cbd8d04d83354faa39e3e319abcfe10335e0444fda5d755c32e883854f32a072c93f96129e98ba13b7d5dd53187a0b81dfc2cdcd3bc5bb8075
7
+ data.tar.gz: b588b0c7003c7e08afd46ce196b04cae8756c0c7b2ba3aafabbbc20c9a9e99ef319fc952d14f23a4bd9b19291714d20843149d86bb50371f689218868d5de4f3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ecs_helper (0.0.28)
4
+ ecs_helper (0.0.29)
5
5
  aws-sdk-ecr (~> 1.42, >= 1.42)
6
6
  aws-sdk-ecrpublic (~> 1.3, >= 1.3)
7
7
  aws-sdk-ecs (~> 1.80, >= 1.80)
data/Makefile ADDED
@@ -0,0 +1,30 @@
1
+ .PHONY: test build bump-major bump-minor bump-patch help
2
+ .DEFAULT_GOAL := test
3
+ CURRENT_VERSION=$(shell bump current)
4
+ NEXT_PATCH=$(shell bump show-next patch)
5
+ NEXT_MINOR=$(shell bump show-next minor)
6
+ NEXT_MAJOR=$(shell bump show-next major)
7
+ GEM_VERSION=ecs_helper-${CURRENT_VERSION}.gem
8
+
9
+ test: ## Run the unit tests
10
+ bundle exec rake --trace
11
+
12
+ build: ## Build the ruby gem
13
+ gem build ecs_helper.gemspec
14
+
15
+ push:
16
+ gem push ${GEM_VERSION}
17
+
18
+ release:
19
+ bump set ${NEXT_PATCH}
20
+ make build
21
+ make push
22
+
23
+ bump-major: ## Bump the major version (1.0.0 -> 2.0.0)
24
+ bump major
25
+
26
+ bump-minor: ## Bump the minor version (0.1.0 -> 0.2.0)
27
+ bump minor
28
+
29
+ bump-patch: ## Bump the patch version (0.0.1 -> 0.0.2)
30
+ bump patch
@@ -56,6 +56,14 @@ class ECSHelper::Client
56
56
  ecs.describe_tasks(params).tasks
57
57
  end
58
58
 
59
+ def list_tasks(params = {})
60
+ ecs.list_tasks(params).task_arns
61
+ end
62
+
63
+ def execute_command(params = {})
64
+ ecs.execute_command(params)
65
+ end
66
+
59
67
  # ECR
60
68
  def private_repositories(params = {})
61
69
  ecr.describe_repositories(params).repositories
@@ -22,6 +22,15 @@ class ECSHelper::Command::Base
22
22
  helper.project
23
23
  end
24
24
 
25
+ def check_bin(bin)
26
+ check_cmd = Terrapin::CommandLine.new("which #{bin}")
27
+ result = check_cmd.run
28
+ "success"
29
+ rescue Terrapin::CommandNotFoundError, Terrapin::ExitStatusError => e
30
+ messages = ["#{bin} not found"]
31
+ raise ECSHelper::Error::BinNotFound.new(messages)
32
+ end
33
+
25
34
  def application
26
35
  helper.application
27
36
  end
@@ -29,10 +38,12 @@ class ECSHelper::Command::Base
29
38
  def validate
30
39
  required.each do |r|
31
40
  value = options[r]
32
- unless value
33
- puts "'#{r}' required for command '#{type}'".light_white
34
- puts option_parser.help
35
- exit
41
+ if value.nil?
42
+ messages = [
43
+ "'#{r}' required for command '#{type}'".light_white,
44
+ option_parser.help
45
+ ]
46
+ raise ECSHelper::Error::CommandValidationError.new(messages)
36
47
  end
37
48
  end
38
49
  end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'terrapin'
4
+
5
+ class ECSHelper::Command::Exec < ECSHelper::Command::Base
6
+ def cmd_option_parser
7
+ options = { command: 'bash -c' }
8
+ parser = ::OptionParser.new do |opts|
9
+ opts.banner = 'Usage: ecs_helper exec [options]. require session-manager-plugin and aws cli v2'
10
+ opts.on('-p VALUE', '--project VALUE',
11
+ "Set project name, if not specified will look at ENV['PROJECT'], will be used to detect cluster") do |p|
12
+ options[:project] = processEqual(p)
13
+ end
14
+ opts.on('-a VALUE', '--application VALUE',
15
+ "Set application name, if not specified will look at ENV['APPLICATION'], will be used to detect service and task definition") do |a|
16
+ options[:application] = processEqual(a)
17
+ end
18
+ opts.on('-c', '--container VALUE', 'Cache image before build, default false') { |c| options[:container] = c }
19
+ opts.on('--command VALUE', 'Command to execute') { |c| options[:command] = c }
20
+ end
21
+ [parser, options]
22
+ end
23
+
24
+ def required
25
+ [:container]
26
+ end
27
+
28
+ def check_session_manager_plugin
29
+ check_bin('session-manager-plugin')
30
+ end
31
+
32
+ def check_aws_cli_version
33
+ check_cmd = Terrapin::CommandLine.new("aws --version")
34
+ result = check_cmd.run
35
+ version = parse_version(result)
36
+ if version === "1"
37
+ messages = [
38
+ "Exec command requires aws cli v2".light_white,
39
+ cmd_option_parser[0].help
40
+ ]
41
+ raise ECSHelper::Error::CommandValidationError.new(messages)
42
+ end
43
+ end
44
+
45
+ def check_aws_cli
46
+ check_bin('aws')
47
+ check_aws_cli_version
48
+ "success"
49
+ end
50
+
51
+
52
+ def check_aws_cli_version
53
+ check_cmd = Terrapin::CommandLine.new("aws --version")
54
+ result = check_cmd.run
55
+ version = parse_version(result)
56
+ if version === "1"
57
+ messages = [
58
+ "Exec command requires aws cli v2".light_white,
59
+ cmd_option_parser[0].help
60
+ ]
61
+ raise ECSHelper::Error::CommandValidationError.new(messages)
62
+ end
63
+ end
64
+
65
+ def run
66
+ log("Command", type)
67
+ log("Cluster", cluster_arn)
68
+ log("Service", service_arn)
69
+ log("Task", task_arn)
70
+ log("Options", options)
71
+ log("Check session-manager-plugin ", check_session_manager_plugin)
72
+ log("Check aws cli version", check_aws_cli)
73
+ exec
74
+ end
75
+
76
+ def exec
77
+ exec_cmd = Terrapin::CommandLine.new("aws ecs execute-command --cluster #{cluster_arn} --task #{task_arn} --container=#{helper.options[:container]} --command=#{helper.options[:command]} --interactive")
78
+ # --region us-east-1
79
+ exec_cmd.run
80
+ end
81
+
82
+ private
83
+
84
+ def parse_version(string)
85
+ string.split('/')[1][0]
86
+ end
87
+
88
+ def cluster_arn
89
+ helper.current_cluster
90
+ end
91
+
92
+ def service_arn
93
+ helper.current_service
94
+ end
95
+
96
+ def task_arn
97
+ @task_arn ||= helper.client.list_tasks({cluster: cluster_arn, service_name: service_arn, desired_status: "RUNNING"})[0]
98
+ end
99
+ end
@@ -5,6 +5,7 @@ class ECSHelper::Command
5
5
  autoload :Deploy, 'ecs_helper/command/deploy'
6
6
  autoload :ExportImages, 'ecs_helper/command/export_images'
7
7
  autoload :ECRLogin, 'ecs_helper/command/ecr_login'
8
+ autoload :Exec, 'ecs_helper/command/exec'
8
9
  autoload :RunCommand, 'ecs_helper/command/run_command'
9
10
  autoload :ExportEnvSecrets, 'ecs_helper/command/export_env_secrets'
10
11
 
@@ -15,6 +16,7 @@ class ECSHelper::Command
15
16
  "ecr_login" => ECRLogin,
16
17
  "run_command" => RunCommand,
17
18
  "export_env_secrets" => ExportEnvSecrets,
19
+ "exec" => Exec,
18
20
  }
19
21
  AVAILABLE_COMMANDS = CMD_MAPPING.keys
20
22
 
@@ -0,0 +1,2 @@
1
+ class ECSHelper::Error::BinNotFound < ECSHelper::Error::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class ECSHelper::Error::CommandValidationError < ECSHelper::Error::Base
2
+ end
@@ -3,4 +3,6 @@
3
3
  class ECSHelper::Error
4
4
  autoload :Base, 'ecs_helper/error/base'
5
5
  autoload :CommandNotFound, 'ecs_helper/error/command_not_found'
6
+ autoload :CommandValidationError, 'ecs_helper/error/command_validation_error'
7
+ autoload :BinNotFound, 'ecs_helper/error/bin_not_found'
6
8
  end
@@ -1,6 +1,6 @@
1
1
  module ECSHelper::Logging
2
2
  def console(message)
3
- puts message if ENV["SKIP_LOGS"].nil?
3
+ puts message if ENV["SKIP_LOGS"] != 'true'
4
4
  end
5
5
 
6
6
  def log(title, message = nil, color = "light_white")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ECSHelper
4
- VERSION = '0.0.28'
4
+ VERSION = '0.0.29'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.28
4
+ version: 0.0.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Petrov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-20 00:00:00.000000000 Z
11
+ date: 2021-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -337,6 +337,7 @@ files:
337
337
  - Dockerfile
338
338
  - Gemfile
339
339
  - Gemfile.lock
340
+ - Makefile
340
341
  - Rakefile
341
342
  - bin/console
342
343
  - bin/ecs_helper
@@ -350,13 +351,16 @@ files:
350
351
  - lib/ecs_helper/command/build_and_push.rb
351
352
  - lib/ecs_helper/command/deploy.rb
352
353
  - lib/ecs_helper/command/ecr_login.rb
354
+ - lib/ecs_helper/command/exec.rb
353
355
  - lib/ecs_helper/command/export_env_secrets.rb
354
356
  - lib/ecs_helper/command/export_images.rb
355
357
  - lib/ecs_helper/command/run_command.rb
356
358
  - lib/ecs_helper/common_helper.rb
357
359
  - lib/ecs_helper/error.rb
358
360
  - lib/ecs_helper/error/base.rb
361
+ - lib/ecs_helper/error/bin_not_found.rb
359
362
  - lib/ecs_helper/error/command_not_found.rb
363
+ - lib/ecs_helper/error/command_validation_error.rb
360
364
  - lib/ecs_helper/logging.rb
361
365
  - lib/ecs_helper/service_helper.rb
362
366
  - lib/ecs_helper/task_definition_helper.rb