ecs_helper 0.0.23 → 0.0.27

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: 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