ecs_helper 0.0.23 → 0.0.27

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: b17047bb6e73d68facd95b4fda9959d3844999d9aff387c54e7f3b2d15233f90
4
- data.tar.gz: 8856d676db8ac4d88487a94cce680b7325ea2e461f29ba4b99b715be3d7f4d6f
3
+ metadata.gz: f55caddc893a35d05fbf7778dcbc4c290b5384f3e6e085681fe2957a137deeb0
4
+ data.tar.gz: aa48800b2c966ce376134df397a1c2fcebf9ba22ad678f058433a6c07876b87b
5
5
  SHA512:
6
- metadata.gz: 6021a0c6b0e063fb1ca06e14225a950e1f52c0c581ac1d2f401a4905f1298977dc0aba0910f20dd2d17e7ccb5b5c52bf1aed31ad8b76e6e942fed475d0c78963
7
- data.tar.gz: f4c3b18c8aeefaa87b03a3adb3213c42d2816a670330a2de41f74c4a15fe9e1d251b20bffcd4a1ae93b9664b9653c4f49706fb960e9479d53b54e9bf85e72678
6
+ metadata.gz: 0ac816e7907aa1e37b14392dd8d3cc0dbf5127e1a9f3bd6cec76ca4474d9a83e876eafbb003da8b6a48b11b67a9c163c8db4713c9ba1adee30efe1d4a399c9c8
7
+ data.tar.gz: 45d514d5bfe25c083f98d44e561655a1feba0d44727fea02b1f1146dd63311eaf2e173e41d103d8238d1aa9eb0357c5171403b0726523d62eceaab6b5670827b
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.26)
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,6 +33,9 @@ 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)
37
41
  byebug (11.1.3)
@@ -45,9 +49,14 @@ GEM
45
49
  json (2.5.1)
46
50
  method_source (1.0.0)
47
51
  minitest (5.14.4)
52
+ minitest-power_assert (0.3.1)
53
+ minitest
54
+ power_assert (>= 1.1)
55
+ mocha (1.13.0)
48
56
  parallel (1.20.1)
49
57
  parser (3.0.2.0)
50
58
  ast (~> 2.4.1)
59
+ power_assert (2.0.1)
51
60
  pry (0.14.1)
52
61
  coderay (~> 1.1)
53
62
  method_source (~> 1.0)
@@ -93,6 +102,8 @@ DEPENDENCIES
93
102
  bundler (~> 2.2)
94
103
  ecs_helper!
95
104
  minitest
105
+ minitest-power_assert
106
+ mocha
96
107
  pry
97
108
  pry-byebug
98
109
  pry-inline
data/bin/console CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'bundler/setup'
5
4
  require 'ecs_helper'
6
5
 
7
6
  # You can add fixtures and/or initialization code here to make experimenting
data/bin/ecs_helper CHANGED
@@ -1,8 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'bundler/setup'
5
4
  require 'ecs_helper'
6
5
 
7
- helper = ECSHelper.new
8
- 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,7 +21,9 @@ 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'
@@ -34,6 +36,7 @@ Gem::Specification.new do |s|
34
36
  s.add_runtime_dependency 'aws-sdk-ecr', '~> 1.42', '>= 1.42'
35
37
  s.add_runtime_dependency 'aws-sdk-ecrpublic', '~> 1.3', '>= 1.3'
36
38
  s.add_runtime_dependency 'aws-sdk-ecs', '~> 1.80', '>= 1.80'
39
+ s.add_runtime_dependency 'aws-sdk-ssm', '~> 1.0.0.rc7'
37
40
  s.add_runtime_dependency 'colorize', '~> 0.8', '>= 0.8'
38
41
  s.add_runtime_dependency 'json', '~> 2.5', '>= 2.5'
39
42
  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,10 @@ class ECSHelper::Command
39
43
 
40
44
  def run
41
45
  command.validate
42
- command.run
46
+ result = command.run
47
+ puts command if command.printable?
48
+ puts result if command.printable?
49
+ result
43
50
  end
44
51
  end
45
52
 
@@ -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.23'
4
+ VERSION = '0.0.27'
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.23
4
+ version: 0.0.27
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
@@ -210,6 +238,20 @@ dependencies:
210
238
  - - "~>"
211
239
  - !ruby/object:Gem::Version
212
240
  version: '1.80'
241
+ - !ruby/object:Gem::Dependency
242
+ name: aws-sdk-ssm
243
+ requirement: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - "~>"
246
+ - !ruby/object:Gem::Version
247
+ version: 1.0.0.rc7
248
+ type: :runtime
249
+ prerelease: false
250
+ version_requirements: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - "~>"
253
+ - !ruby/object:Gem::Version
254
+ version: 1.0.0.rc7
213
255
  - !ruby/object:Gem::Dependency
214
256
  name: colorize
215
257
  requirement: !ruby/object:Gem::Requirement
@@ -294,9 +336,13 @@ files:
294
336
  - lib/ecs_helper/command/build_and_push.rb
295
337
  - lib/ecs_helper/command/deploy.rb
296
338
  - lib/ecs_helper/command/ecr_login.rb
339
+ - lib/ecs_helper/command/export_env_secrets.rb
297
340
  - lib/ecs_helper/command/export_images.rb
298
341
  - lib/ecs_helper/command/run_command.rb
299
342
  - lib/ecs_helper/common_helper.rb
343
+ - lib/ecs_helper/error.rb
344
+ - lib/ecs_helper/error/base.rb
345
+ - lib/ecs_helper/error/command_not_found.rb
300
346
  - lib/ecs_helper/logging.rb
301
347
  - lib/ecs_helper/service_helper.rb
302
348
  - lib/ecs_helper/task_definition_helper.rb