ecs_helper 0.0.22 → 0.0.26

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: 2aad1449589dfa716e00c39044d4d41a26be0d6259a58dd7d3afbc12aa04f080
4
- data.tar.gz: 7adf8d5400ae6b72f1e95a6ea28eebf36680991d4159c581a4724e57e40441f2
3
+ metadata.gz: 16ad520e81a6ee88b6cb3b67c8e68ee1cf0e724ea20d1fdd8595ffda8023be65
4
+ data.tar.gz: 6d1398b798ae584fbb163d6234f01b209abb00bdd33489ee75e5ec2aae1f9bcd
5
5
  SHA512:
6
- metadata.gz: e05baf049896f3e556a782625a458ef2eb5b82700b3dec40de575d94b9052be752422bc26250e2025a91569c5a41e6f758f2ec33c2598d6d2642ac688606477b
7
- data.tar.gz: 7f1af6a600d59038880b9edb87b32f670ca52721d960b634a2da49a3c825d9e80d583bec6aa8a79d49da20c351dc44cbaad0b39857ace8af7dd8f0b2fce07c18
6
+ metadata.gz: 44029c3fab73d9878376b1590bcba8a0f1ab39324a0aadac136f9736021514390fffec0c221d20769602c14934558221b1685eca8e1867a4f199e7790b5865b5
7
+ data.tar.gz: abda0b0495455d13034a82345d2ff5dc09349a08b80c4b641b41ad3117f37fe3a28e25469f4857275babcad65673587dbb76f6398602e8b7447095a6a5f99e8d
data/Gemfile CHANGED
@@ -2,5 +2,3 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
  gemspec
5
-
6
- gem 'coveralls', require: false
data/Gemfile.lock CHANGED
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ecs_helper (0.0.22)
4
+ ecs_helper (0.0.25)
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,35 +33,36 @@ 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)
38
42
  climate_control (0.2.0)
39
43
  coderay (1.1.3)
40
44
  colorize (0.8.1)
41
- coveralls (0.8.23)
42
- json (>= 1.8, < 3)
43
- simplecov (~> 0.16.1)
44
- term-ansicolor (~> 1.3)
45
- thor (>= 0.19.4, < 2.0)
46
- tins (~> 1.6)
47
45
  crack (0.4.5)
48
46
  rexml
49
- docile (1.4.0)
50
47
  hashdiff (1.0.1)
51
48
  jmespath (1.4.0)
52
49
  json (2.5.1)
53
50
  method_source (1.0.0)
54
51
  minitest (5.14.4)
52
+ minitest-power_assert (0.3.1)
53
+ minitest
54
+ power_assert (>= 1.1)
55
+ mocha (1.13.0)
55
56
  parallel (1.20.1)
56
57
  parser (3.0.2.0)
57
58
  ast (~> 2.4.1)
58
- pry (0.13.1)
59
+ power_assert (2.0.1)
60
+ pry (0.14.1)
59
61
  coderay (~> 1.1)
60
62
  method_source (~> 1.0)
61
- pry-byebug (3.9.0)
63
+ pry-byebug (3.8.0)
62
64
  byebug (~> 11.0)
63
- pry (~> 0.13.0)
65
+ pry (~> 0.10)
64
66
  pry-inline (1.0.7)
65
67
  pry (> 0.10.0)
66
68
  unicode (~> 0.4.4)
@@ -83,19 +85,8 @@ GEM
83
85
  rubocop-minitest (0.15.0)
84
86
  rubocop (>= 0.90, < 2.0)
85
87
  ruby-progressbar (1.11.0)
86
- simplecov (0.16.1)
87
- docile (~> 1.1)
88
- json (>= 1.8, < 3)
89
- simplecov-html (~> 0.10.0)
90
- simplecov-html (0.10.2)
91
- sync (0.5.0)
92
- term-ansicolor (1.7.1)
93
- tins (~> 1.0)
94
88
  terrapin (0.6.0)
95
89
  climate_control (>= 0.0.3, < 1.0)
96
- thor (1.1.0)
97
- tins (1.29.1)
98
- sync
99
90
  unicode (0.4.4.4)
100
91
  unicode-display_width (2.0.0)
101
92
  webmock (3.14.0)
@@ -109,9 +100,10 @@ PLATFORMS
109
100
  DEPENDENCIES
110
101
  awesome_print
111
102
  bundler (~> 2.2)
112
- coveralls
113
103
  ecs_helper!
114
104
  minitest
105
+ minitest-power_assert
106
+ mocha
115
107
  pry
116
108
  pry-byebug
117
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]
@@ -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,46 @@
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 run
22
+ return log("No ENV secrets to export. Please pass ENV variables names using -n") if options[:env_vars].empty?
23
+ export_values
24
+ end
25
+
26
+ private
27
+
28
+ def to_aws_ssm_name(name)
29
+ "/#{helper.project}-#{helper.application}-#{helper.environment}/#{name}"
30
+ end
31
+
32
+ def export_values
33
+ params_name = options[:env_vars].map {|var_name| to_aws_ssm_name(var_name)}
34
+ aws_ssm_params = client.get_ssm_parameters(names: params_name, with_decryption: true)
35
+
36
+ variables = (['export'] + aws_ssm_params.map do |aws_ssm_param|
37
+ next if aws_ssm_param.empty?
38
+ value = aws_ssm_param.value
39
+ name = aws_ssm_param.name.split('/').last
40
+
41
+ "#{name}=#{value}"
42
+ rescue Aws::SSM::Errors::ParameterNotFound
43
+ next
44
+ end).join(' ')
45
+ end
46
+ end
@@ -15,7 +15,7 @@ class ECSHelper::Command::ExportImages < ECSHelper::Command::Base
15
15
  end
16
16
 
17
17
  def run
18
- puts export_images
18
+ export_images
19
19
  end
20
20
 
21
21
  private
@@ -31,7 +31,7 @@ class ECSHelper::Command::ExportImages < ECSHelper::Command::Base
31
31
  def export_images
32
32
  variables = (['export'] + client.private_repositories.map do |repo|
33
33
  container_name = repo.repository_name.scan(/#{project}-#{application}-(.*)/).flatten.first
34
- next if conainer_name.nil?
34
+ next if container_name.nil?
35
35
  key = container_name.upcase.gsub("-", "_") + "_IMAGE"
36
36
  value = "#{repo.repository_uri}:#{helper.version}"
37
37
  "#{key}=#{value}"
@@ -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
 
@@ -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.22'
4
+ VERSION = '0.0.26'
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.22
4
+ version: 0.0.26
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