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 +4 -4
- data/Gemfile.lock +14 -3
- data/bin/console +0 -1
- data/bin/ecs_helper +7 -3
- data/docker-compose.yml +1 -0
- data/ecs_helper.gemspec +3 -0
- data/lib/ecs_helper/client.rb +8 -7
- data/lib/ecs_helper/command/base.rb +15 -2
- data/lib/ecs_helper/command/build_and_push.rb +10 -2
- data/lib/ecs_helper/command/export_env_secrets.rb +51 -0
- data/lib/ecs_helper/command/export_images.rb +5 -1
- data/lib/ecs_helper/command.rb +12 -5
- data/lib/ecs_helper/error/base.rb +10 -0
- data/lib/ecs_helper/error/command_not_found.rb +2 -0
- data/lib/ecs_helper/error.rb +6 -0
- data/lib/ecs_helper/logging.rb +9 -5
- data/lib/ecs_helper/version.rb +1 -1
- data/lib/ecs_helper.rb +1 -0
- metadata +48 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f55caddc893a35d05fbf7778dcbc4c290b5384f3e6e085681fe2957a137deeb0
|
4
|
+
data.tar.gz: aa48800b2c966ce376134df397a1c2fcebf9ba22ad678f058433a6c07876b87b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
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.
|
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
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
|
-
|
8
|
-
helper.
|
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
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'
|
data/lib/ecs_helper/client.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'aws-sdk-ecs'
|
2
2
|
require 'aws-sdk-ecr'
|
3
|
-
require 'aws-sdk-
|
3
|
+
require 'aws-sdk-ssm'
|
4
4
|
|
5
5
|
class ECSHelper::Client
|
6
|
-
attr_accessor :ecs, :ecr, :
|
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
|
-
@
|
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
|
-
|
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
|
-
|
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
|
data/lib/ecs_helper/command.rb
CHANGED
@@ -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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
|
data/lib/ecs_helper/logging.rb
CHANGED
@@ -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
|
-
|
5
|
-
|
8
|
+
console title.send(color)
|
9
|
+
console message
|
6
10
|
else
|
7
|
-
|
11
|
+
console title
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
15
|
def error(message, code = 1)
|
12
|
-
|
13
|
-
|
16
|
+
console "Error".red
|
17
|
+
console message
|
14
18
|
exit code
|
15
19
|
end
|
16
20
|
end
|
data/lib/ecs_helper/version.rb
CHANGED
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.
|
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-
|
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
|