ecs_helper 0.0.24 → 0.0.28

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: 94ec8bc777deff0ff480a06146d0ba2279e43cb69ee8022298ddb1205c97ac12
4
- data.tar.gz: d9ecf4394985744a91936dfba1c08c245e889297c1ba8c70153b7a6f82d080a8
3
+ metadata.gz: d7d7e1d62103b4759b19005b1bc248f562749be0bc5f7c5b1b351d2e5a7874f8
4
+ data.tar.gz: 8d2d35ef50190a45ed9ea689485d43776026eef91c496a3353c200a42c50389f
5
5
  SHA512:
6
- metadata.gz: c043ec8866cdc97ddea947ef173299cd0bf5664eb9c2e9fbc7a5ecb6dff0d93f8321a9ea15bf99a73f1ad688d613f933a6996920598ad7c34bfa398295189a35
7
- data.tar.gz: 3f853cb33f3d091367210e1a08fe1dcf0594cde62d4c490213ae85035b475970a815228817d43c50efa6e7cc30b582a2ecdfb817ffe9fb617bc72b44f5dd00aa
6
+ metadata.gz: 4440e1cc6a9cec9f38e8ea485c86131ebdf15635464bf577b02cb6557b908f43a1769b5289b826815d9ad8282c14446677f6b478a1771ce82706beeb2ea4d04d
7
+ data.tar.gz: c4cf0985abb1934130d7ad7266554d4c30643de641e2f3e3bb3d7b625fe1eb0b9c5c88d70ff935f2e9663d1ddb65e8c3782069782c8b4dd8aafb06ffa6644901
data/Gemfile.lock CHANGED
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ecs_helper (0.0.23)
4
+ ecs_helper (0.0.28)
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)
8
+ aws-sdk-ssm (~> 1.0.0.rc7)
8
9
  colorize (~> 0.8, >= 0.8)
9
10
  json (~> 2.5, >= 2.5)
10
11
  terrapin (~> 0.6, >= 0.6)
@@ -17,13 +18,13 @@ GEM
17
18
  ast (2.4.2)
18
19
  awesome_print (1.9.2)
19
20
  aws-eventstream (1.2.0)
20
- aws-partitions (1.496.0)
21
+ aws-partitions (1.503.0)
21
22
  aws-sdk-core (3.121.0)
22
23
  aws-eventstream (~> 1, >= 1.0.2)
23
24
  aws-partitions (~> 1, >= 1.239.0)
24
25
  aws-sigv4 (~> 1.1)
25
26
  jmespath (~> 1.0)
26
- aws-sdk-ecr (1.45.0)
27
+ aws-sdk-ecr (1.46.0)
27
28
  aws-sdk-core (~> 3, >= 3.120.0)
28
29
  aws-sigv4 (~> 1.1)
29
30
  aws-sdk-ecrpublic (1.6.0)
@@ -32,8 +33,12 @@ GEM
32
33
  aws-sdk-ecs (1.85.0)
33
34
  aws-sdk-core (~> 3, >= 3.120.0)
34
35
  aws-sigv4 (~> 1.1)
36
+ aws-sdk-ssm (1.0.0)
37
+ aws-sdk-core (~> 3)
38
+ aws-sigv4 (~> 1.0)
35
39
  aws-sigv4 (1.4.0)
36
40
  aws-eventstream (~> 1, >= 1.0.2)
41
+ bump (0.10.0)
37
42
  byebug (11.1.3)
38
43
  climate_control (0.2.0)
39
44
  coderay (1.1.3)
@@ -45,9 +50,14 @@ GEM
45
50
  json (2.5.1)
46
51
  method_source (1.0.0)
47
52
  minitest (5.14.4)
53
+ minitest-power_assert (0.3.1)
54
+ minitest
55
+ power_assert (>= 1.1)
56
+ mocha (1.13.0)
48
57
  parallel (1.20.1)
49
58
  parser (3.0.2.0)
50
59
  ast (~> 2.4.1)
60
+ power_assert (2.0.1)
51
61
  pry (0.14.1)
52
62
  coderay (~> 1.1)
53
63
  method_source (~> 1.0)
@@ -86,13 +96,17 @@ GEM
86
96
  hashdiff (>= 0.4.0, < 2.0.0)
87
97
 
88
98
  PLATFORMS
89
- x86_64-linux-musl
99
+ x86_64-darwin-18
100
+ x86_64-linux
90
101
 
91
102
  DEPENDENCIES
92
103
  awesome_print
104
+ bump
93
105
  bundler (~> 2.2)
94
106
  ecs_helper!
95
107
  minitest
108
+ minitest-power_assert
109
+ mocha
96
110
  pry
97
111
  pry-byebug
98
112
  pry-inline
@@ -102,4 +116,4 @@ DEPENDENCIES
102
116
  webmock
103
117
 
104
118
  BUNDLED WITH
105
- 2.2.22
119
+ 2.2.27
data/bin/ecs_helper CHANGED
@@ -3,5 +3,10 @@
3
3
 
4
4
  require 'ecs_helper'
5
5
 
6
- helper = ECSHelper.new
7
- helper.run
6
+ begin
7
+ helper = ECSHelper.new
8
+ helper.run
9
+ rescue ECSHelper::Error::Base => e
10
+ puts e.message
11
+ exit 1
12
+ end
data/docker-compose.yml CHANGED
@@ -20,6 +20,7 @@ services:
20
20
  - BUNDLE_PATH=/bundle_cache
21
21
  - GEM_HOME=/bundle_cache
22
22
  - GEM_PATH=/bundle_cache
23
+ - SKIP_LOGS=true
23
24
 
24
25
  bundle_cache:
25
26
  image: busybox
data/ecs_helper.gemspec CHANGED
@@ -21,12 +21,15 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_development_dependency 'awesome_print'
23
23
  s.add_development_dependency 'minitest'
24
+ s.add_development_dependency 'mocha'
24
25
  s.add_development_dependency 'pry'
26
+ s.add_development_dependency 'minitest-power_assert'
25
27
  s.add_development_dependency 'pry-byebug'
26
28
  s.add_development_dependency 'pry-inline'
27
29
  s.add_development_dependency 'rubocop'
28
30
  s.add_development_dependency 'rubocop-minitest'
29
31
  s.add_development_dependency 'webmock'
32
+ s.add_development_dependency 'bump'
30
33
 
31
34
  s.add_development_dependency "bundler", "~> 2.2"
32
35
  s.add_development_dependency "rake"
@@ -34,6 +37,7 @@ Gem::Specification.new do |s|
34
37
  s.add_runtime_dependency 'aws-sdk-ecr', '~> 1.42', '>= 1.42'
35
38
  s.add_runtime_dependency 'aws-sdk-ecrpublic', '~> 1.3', '>= 1.3'
36
39
  s.add_runtime_dependency 'aws-sdk-ecs', '~> 1.80', '>= 1.80'
40
+ s.add_runtime_dependency 'aws-sdk-ssm', '~> 1.0.0.rc7'
37
41
  s.add_runtime_dependency 'colorize', '~> 0.8', '>= 0.8'
38
42
  s.add_runtime_dependency 'json', '~> 2.5', '>= 2.5'
39
43
  s.add_runtime_dependency 'terrapin', '~> 0.6', '>= 0.6'
@@ -1,13 +1,13 @@
1
1
  require 'aws-sdk-ecs'
2
2
  require 'aws-sdk-ecr'
3
- require 'aws-sdk-ecrpublic'
3
+ require 'aws-sdk-ssm'
4
4
 
5
5
  class ECSHelper::Client
6
- attr_accessor :ecs, :ecr, :ecr_public
6
+ attr_accessor :ecs, :ecr, :ssm
7
7
  def initialize
8
8
  @ecs = Aws::ECS::Client.new
9
9
  @ecr = Aws::ECR::Client.new
10
- @ecr_public = Aws::ECRPublic::Client.new
10
+ @ssm = Aws::SSM::Client.new
11
11
  end
12
12
 
13
13
  # ECS
@@ -61,11 +61,12 @@ class ECSHelper::Client
61
61
  ecr.describe_repositories(params).repositories
62
62
  end
63
63
 
64
- def public_repositories(params = {})
65
- ecr_public.describe_repositories(params).repositories
66
- end
67
-
68
64
  def describe_images(params = {})
69
65
  ecr.describe_images(params).image_details[0]
70
66
  end
67
+
68
+ # SSM
69
+ def get_ssm_parameters(params = {})
70
+ ssm.get_parameters(params).parameters
71
+ end
71
72
  end
@@ -6,6 +6,7 @@ class ECSHelper::Command::Base
6
6
  include ECSHelper::Logging
7
7
  attr_accessor :type, :options, :helper, :client, :option_parser
8
8
 
9
+
9
10
  def initialize(helper)
10
11
  @client = helper.client
11
12
  @helper = helper
@@ -17,6 +18,14 @@ class ECSHelper::Command::Base
17
18
  helper.type
18
19
  end
19
20
 
21
+ def project
22
+ helper.project
23
+ end
24
+
25
+ def application
26
+ helper.application
27
+ end
28
+
20
29
  def validate
21
30
  required.each do |r|
22
31
  value = options[r]
@@ -28,12 +37,16 @@ class ECSHelper::Command::Base
28
37
  end
29
38
  end
30
39
 
31
- private
32
-
33
40
  def required
34
41
  []
35
42
  end
36
43
 
44
+ def printable?
45
+ false
46
+ end
47
+
48
+ private
49
+
37
50
  def processEqual(value)
38
51
  value.start_with?('=') ? value[1..-1] : value
39
52
  end
@@ -55,7 +55,7 @@ class ECSHelper::Command::BuildAndPush < ECSHelper::Command::Base
55
55
  pull_cmd = Terrapin::CommandLine.new("docker pull #{latest_tag}")
56
56
  pull_cmd.run
57
57
  rescue Terrapin::ExitStatusError => e
58
- puts e.message
58
+ console e.message
59
59
  end
60
60
 
61
61
  def build
@@ -66,7 +66,7 @@ class ECSHelper::Command::BuildAndPush < ECSHelper::Command::Base
66
66
  command = (build_command + build_args + cache_command + tags_command).join(' ')
67
67
  build_cmd = Terrapin::CommandLine.new(command)
68
68
 
69
- puts "Building with two tags: #{latest_tag} & #{version_tag}"
69
+ console "Building with two tags: #{latest_tag} & #{version_tag}"
70
70
  build_cmd.run
71
71
  end
72
72
 
@@ -93,6 +93,14 @@ class ECSHelper::Command::BuildAndPush < ECSHelper::Command::Base
93
93
  "#{repository}:#{helper.version}"
94
94
  end
95
95
 
96
+ def project
97
+ helper.project
98
+ end
99
+
100
+ def application
101
+ helper.application
102
+ end
103
+
96
104
  def repository
97
105
  @repository ||= begin
98
106
  all = client.private_repositories
@@ -0,0 +1,51 @@
1
+ require 'terrapin'
2
+
3
+ class ECSHelper::Command::ExportEnvSecrets < ECSHelper::Command::Base
4
+ attr_accessor :params
5
+
6
+ def cmd_option_parser
7
+ options = {
8
+ env_vars: []
9
+ }
10
+ parser = ::OptionParser.new do |opts|
11
+ opts.banner = "Usage: ecs_helper export_env_secrets"
12
+ opts.on('-n', '--name=VARIABLE', '') { |o| options[:env_vars] << o }
13
+ end
14
+ [parser, options]
15
+ end
16
+
17
+ def required
18
+ []
19
+ end
20
+
21
+ def printable?
22
+ true
23
+ end
24
+
25
+ def run
26
+ return log("No ENV secrets to export. Please pass ENV variables names using -n") if options[:env_vars].empty?
27
+ export_values
28
+ end
29
+
30
+ private
31
+
32
+ def to_aws_ssm_name(name)
33
+ "/#{helper.project}-#{helper.application}-#{helper.environment}/#{name}"
34
+ end
35
+
36
+ def export_values
37
+ params_name = options[:env_vars].map {|var_name| to_aws_ssm_name(var_name)}
38
+ aws_ssm_params = client.get_ssm_parameters(names: params_name, with_decryption: true)
39
+
40
+ variables = (['export'] + aws_ssm_params.map do |aws_ssm_param|
41
+ next if aws_ssm_param.empty?
42
+ value = aws_ssm_param.value
43
+ name = aws_ssm_param.name.split('/').last
44
+
45
+ "#{name}=#{value}"
46
+ rescue Aws::SSM::Errors::ParameterNotFound
47
+ next
48
+ end).join(' ')
49
+ variables
50
+ end
51
+ end
@@ -14,8 +14,12 @@ class ECSHelper::Command::ExportImages < ECSHelper::Command::Base
14
14
  []
15
15
  end
16
16
 
17
+ def printable?
18
+ true
19
+ end
20
+
17
21
  def run
18
- puts export_images
22
+ export_images
19
23
  end
20
24
 
21
25
  private
@@ -6,6 +6,7 @@ class ECSHelper::Command
6
6
  autoload :ExportImages, 'ecs_helper/command/export_images'
7
7
  autoload :ECRLogin, 'ecs_helper/command/ecr_login'
8
8
  autoload :RunCommand, 'ecs_helper/command/run_command'
9
+ autoload :ExportEnvSecrets, 'ecs_helper/command/export_env_secrets'
9
10
 
10
11
  CMD_MAPPING = {
11
12
  "build_and_push" => BuildAndPush,
@@ -13,6 +14,7 @@ class ECSHelper::Command
13
14
  "export_images" => ExportImages,
14
15
  "ecr_login" => ECRLogin,
15
16
  "run_command" => RunCommand,
17
+ "export_env_secrets" => ExportEnvSecrets,
16
18
  }
17
19
  AVAILABLE_COMMANDS = CMD_MAPPING.keys
18
20
 
@@ -26,10 +28,12 @@ class ECSHelper::Command
26
28
 
27
29
  def klass
28
30
  CMD_MAPPING[type] || begin
29
- puts "Command not found".light_white
30
- puts "Available commands are #{AVAILABLE_COMMANDS}".light_white
31
- puts global_option_parser
32
- exit
31
+ messages = [
32
+ "Command not found".light_white,
33
+ "Available commands are #{AVAILABLE_COMMANDS}".light_white,
34
+ global_option_parser
35
+ ]
36
+ raise ECSHelper::Error::CommandNotFound.new(messages)
33
37
  end
34
38
  end
35
39
 
@@ -39,7 +43,9 @@ class ECSHelper::Command
39
43
 
40
44
  def run
41
45
  command.validate
42
- command.run
46
+ result = command.run
47
+ puts result if command.printable?
48
+ result
43
49
  end
44
50
  end
45
51
 
@@ -0,0 +1,10 @@
1
+ class ECSHelper::Error::Base < StandardError
2
+ def initialize(builder)
3
+ @builder = builder
4
+ end
5
+
6
+ def message
7
+ return @builder.join("\n") if @builder
8
+ "Failed"
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ class ECSHelper::Error::CommandNotFound < ECSHelper::Error::Base
2
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ECSHelper::Error
4
+ autoload :Base, 'ecs_helper/error/base'
5
+ autoload :CommandNotFound, 'ecs_helper/error/command_not_found'
6
+ end
@@ -1,16 +1,20 @@
1
1
  module ECSHelper::Logging
2
+ def console(message)
3
+ puts message if ENV["SKIP_LOGS"].nil?
4
+ end
5
+
2
6
  def log(title, message = nil, color = "light_white")
3
7
  if message
4
- puts title.send(color)
5
- puts message
8
+ console title.send(color)
9
+ console message
6
10
  else
7
- puts title
11
+ console title
8
12
  end
9
13
  end
10
14
 
11
15
  def error(message, code = 1)
12
- puts "Error".red
13
- puts message
16
+ console "Error".red
17
+ console message
14
18
  exit code
15
19
  end
16
20
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ECSHelper
4
- VERSION = '0.0.24'
4
+ VERSION = '0.0.28'
5
5
  end
data/lib/ecs_helper.rb CHANGED
@@ -11,6 +11,7 @@ class ECSHelper
11
11
  autoload :ClusterHelper, 'ecs_helper/cluster_helper'
12
12
  autoload :ServiceHelper, 'ecs_helper/service_helper'
13
13
  autoload :TaskDefinitionHelper, 'ecs_helper/task_definition_helper'
14
+ autoload :Error, 'ecs_helper/error'
14
15
  autoload :Command, 'ecs_helper/command'
15
16
 
16
17
  def_delegators :client, :task_definitions, :clusters, :services, :tasks, :repositories, :repositories, :task_definition, :run_task
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.24
4
+ version: 0.0.28
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-06 00:00:00.000000000 Z
11
+ date: 2021-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: pry
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-power_assert
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: pry-byebug
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +150,20 @@ dependencies:
122
150
  - - ">="
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: bump
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
125
167
  - !ruby/object:Gem::Dependency
126
168
  name: bundler
127
169
  requirement: !ruby/object:Gem::Requirement
@@ -210,6 +252,20 @@ dependencies:
210
252
  - - "~>"
211
253
  - !ruby/object:Gem::Version
212
254
  version: '1.80'
255
+ - !ruby/object:Gem::Dependency
256
+ name: aws-sdk-ssm
257
+ requirement: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - "~>"
260
+ - !ruby/object:Gem::Version
261
+ version: 1.0.0.rc7
262
+ type: :runtime
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - "~>"
267
+ - !ruby/object:Gem::Version
268
+ version: 1.0.0.rc7
213
269
  - !ruby/object:Gem::Dependency
214
270
  name: colorize
215
271
  requirement: !ruby/object:Gem::Requirement
@@ -294,9 +350,13 @@ files:
294
350
  - lib/ecs_helper/command/build_and_push.rb
295
351
  - lib/ecs_helper/command/deploy.rb
296
352
  - lib/ecs_helper/command/ecr_login.rb
353
+ - lib/ecs_helper/command/export_env_secrets.rb
297
354
  - lib/ecs_helper/command/export_images.rb
298
355
  - lib/ecs_helper/command/run_command.rb
299
356
  - lib/ecs_helper/common_helper.rb
357
+ - lib/ecs_helper/error.rb
358
+ - lib/ecs_helper/error/base.rb
359
+ - lib/ecs_helper/error/command_not_found.rb
300
360
  - lib/ecs_helper/logging.rb
301
361
  - lib/ecs_helper/service_helper.rb
302
362
  - lib/ecs_helper/task_definition_helper.rb