ecs_helper 0.0.4 → 0.0.9
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abb3dcfdd4e42b2bf86e57422c59ceda2458f359e557cd0f782385c3e673ecf1
|
4
|
+
data.tar.gz: d036e9dbfac6b04133e2667f13e897b1e43cbad438d586904e53bb26b9536eee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d4df5b95e14fce83d28822904a4822bc6f8074cd7895b950a18ac68675790e8d998b0c9fa22b985430b1a5684b026b63c1caa771263025517d5272d7e54837c
|
7
|
+
data.tar.gz: 26dd182dcb2b0bc3d437acb41d3c89f2513b6ec4944c28a971244fcce3bece4efb63261591aadd31a5c4088557cc440e5ccc699cc1e014598e3424db427fa7ef
|
data/lib/ecs_helper/client.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'aws-sdk-ecs'
|
2
2
|
require 'aws-sdk-ecr'
|
3
|
+
require 'aws-sdk-ecrpublic'
|
3
4
|
|
4
5
|
class ECSHelper::Client
|
5
|
-
attr_accessor :ecs, :ecr
|
6
|
+
attr_accessor :ecs, :ecr, :ecr_public
|
6
7
|
def initialize
|
7
8
|
@ecs = Aws::ECS::Client.new
|
8
9
|
@ecr = Aws::ECR::Client.new
|
10
|
+
@ecr_public = Aws::ECRPublic::Client.new
|
9
11
|
end
|
10
12
|
|
11
13
|
# ECS
|
@@ -47,10 +49,14 @@ class ECSHelper::Client
|
|
47
49
|
end
|
48
50
|
|
49
51
|
# ECR
|
50
|
-
def
|
52
|
+
def private_repositories(params = {})
|
51
53
|
ecr.describe_repositories(params).repositories
|
52
54
|
end
|
53
55
|
|
56
|
+
def public_repositories(params = {})
|
57
|
+
ecr_public.describe_repositories(params).repositories
|
58
|
+
end
|
59
|
+
|
54
60
|
def describe_images(params = {})
|
55
61
|
ecr.describe_images(params).image_details[0]
|
56
62
|
end
|
@@ -22,13 +22,19 @@ class ECSHelper::Command::BuildAndPush < ECSHelper::Command::Base
|
|
22
22
|
log("Command", type)
|
23
23
|
log("Options", options)
|
24
24
|
log("Repository", repository)
|
25
|
-
log("Auth",
|
25
|
+
log("Auth Private", auth_private)
|
26
|
+
log("Auth Public", auth_public)
|
26
27
|
log("Pull", pull)
|
27
28
|
log("Build", build)
|
28
29
|
log("Push", push)
|
29
30
|
end
|
30
31
|
|
31
|
-
def
|
32
|
+
def auth_public
|
33
|
+
auth_cmd = Terrapin::CommandLine.new("aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws")
|
34
|
+
auth_cmd.run
|
35
|
+
end
|
36
|
+
|
37
|
+
def auth_private
|
32
38
|
auth_cmd = Terrapin::CommandLine.new("aws ecr get-login --no-include-email | sh")
|
33
39
|
auth_cmd.run
|
34
40
|
end
|
@@ -72,7 +78,9 @@ class ECSHelper::Command::BuildAndPush < ECSHelper::Command::Base
|
|
72
78
|
|
73
79
|
def repository
|
74
80
|
@repository ||= begin
|
75
|
-
|
81
|
+
private_repos = client.private_repositories
|
82
|
+
public_repos = client.public_repositories
|
83
|
+
all = private_repos + public_repos
|
76
84
|
with_name = all.select { |r| r.repository_arn.include?(image_name) }
|
77
85
|
return with_name[0].repository_uri if with_name.length === 1
|
78
86
|
|
@@ -2,7 +2,7 @@ require 'terrapin'
|
|
2
2
|
|
3
3
|
class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
4
4
|
attr_accessor :repositories, :task_definition, :new_task_definition, :service
|
5
|
-
|
5
|
+
DEFAULT_TIMEOUT = 300
|
6
6
|
STEP = 5
|
7
7
|
|
8
8
|
def cmd_option_parser
|
@@ -12,20 +12,23 @@ class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
|
12
12
|
opts.on("-p VALUE", "--project VALUE", "Set project name, if not specified will look at ENV['PROJECT'], will be used to detect cluster") { |p| options[:project] = processEqual(p) }
|
13
13
|
opts.on("-a VALUE", "--application VALUE", "Set application name, if not specified will look at ENV['APPLICATION'], will be used to detect service and task definition") { |a| options[:application] = processEqual(a) }
|
14
14
|
opts.on("-e VALUE", "--environment VALUE", "Set environment, if not specified will look at ENV['ENVIRONMENT'], it there is empty will try to detect based on the branch") { |e| options[:environment] = processEqual(e) }
|
15
|
-
opts.on("-
|
15
|
+
opts.on("-v VALUE", "--version VALUE", "Set version which will be applied to all containers in the task if tag is present in the repo") { |t| options[:version] = processEqual(t) }
|
16
16
|
opts.on("-c VALUE", "--cluster VALUE", "Set cluster name, could be autodetected if project and environment are specified") { |c| options[:cluster] = processEqual(c) }
|
17
17
|
opts.on("-s VALUE", "--service VALUE", "Set service, could be autodetected if application and environment are specified") { |s| options[:service] = processEqual(s) }
|
18
|
+
opts.on("-t VALUE", "--timeout VALUE", "Set timeout how long to wait until deployment finished") { |t| options[:timeout] = processEqual(t) }
|
18
19
|
end
|
19
20
|
[parser, options]
|
20
21
|
end
|
21
22
|
|
23
|
+
def timeout
|
24
|
+
|
22
25
|
def run
|
23
26
|
log("Command", type)
|
24
27
|
log("Options", options)
|
25
28
|
log("Environment", environment)
|
26
29
|
log("Cluster", cluster_arn)
|
27
30
|
log("Service", service_arn)
|
28
|
-
log("
|
31
|
+
log("Version", version)
|
29
32
|
log("Service task definition", task_definition_arn)
|
30
33
|
log("Containers", pretty_container_definitions)
|
31
34
|
log("New task definition", new_task_definition.task_definition_arn)
|
@@ -37,7 +40,7 @@ class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
|
37
40
|
def wait_for_deployment(time = 0)
|
38
41
|
service = helper.client.describe_service(cluster_arn, service_arn)
|
39
42
|
return true if service.deployments.count == 1
|
40
|
-
error("Deployment timeout (#{
|
43
|
+
error("Deployment timeout (#{timeout})") if time > timeout
|
41
44
|
sleep STEP
|
42
45
|
wait_for_deployment(time + STEP)
|
43
46
|
end
|
@@ -56,8 +59,12 @@ class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
|
56
59
|
helper.current_service
|
57
60
|
end
|
58
61
|
|
59
|
-
def
|
60
|
-
options[:
|
62
|
+
def version
|
63
|
+
options[:version] || helper.version
|
64
|
+
end
|
65
|
+
|
66
|
+
def timeout
|
67
|
+
options[:timeout] || DEFAULT_TIMEOUT
|
61
68
|
end
|
62
69
|
|
63
70
|
def service
|
@@ -77,11 +84,11 @@ class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
|
77
84
|
end
|
78
85
|
|
79
86
|
def repositories
|
80
|
-
@repositories ||= client.
|
87
|
+
@repositories ||= client.private_repositories
|
81
88
|
end
|
82
89
|
|
83
|
-
def
|
84
|
-
client.describe_images({repository_name: repo.repository_name, image_ids: [image_tag:
|
90
|
+
def version_image(repo)
|
91
|
+
client.describe_images({repository_name: repo.repository_name, image_ids: [image_tag: version]})
|
85
92
|
rescue
|
86
93
|
nil
|
87
94
|
end
|
@@ -99,7 +106,7 @@ class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
|
99
106
|
def container_definition_to_ecr(cd)
|
100
107
|
repo = repo_for(cd.name)
|
101
108
|
is_ecr = cd.image.include?(ecr_base)
|
102
|
-
image = repo &&
|
109
|
+
image = repo && version_image(repo)
|
103
110
|
should_update = is_ecr && repo && image
|
104
111
|
[repo, is_ecr, image, should_update]
|
105
112
|
end
|
@@ -107,7 +114,7 @@ class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
|
107
114
|
def new_container_definitions
|
108
115
|
container_definitions.map do |cd|
|
109
116
|
repo, is_ecr, image, should_be_updated = container_definition_to_ecr(cd)
|
110
|
-
cd.image = "#{repo.repository_uri}:#{
|
117
|
+
cd.image = "#{repo.repository_uri}:#{version}" if should_be_updated
|
111
118
|
cd.to_hash
|
112
119
|
end
|
113
120
|
end
|
@@ -120,7 +127,7 @@ class ECSHelper::Command::Deploy < ECSHelper::Command::Base
|
|
120
127
|
cd.image,
|
121
128
|
is_ecr ? "ECR image" : "Not a ECR image",
|
122
129
|
repo ? "Repo #{repo.repository_name}" : "Repo not found",
|
123
|
-
image ? "Image
|
130
|
+
image ? "Image version #{version}" : "Image version #{version} not found",
|
124
131
|
should_be_updated ? "Will be updated" : "Not applicable"
|
125
132
|
].join(' | ')
|
126
133
|
end.join("\n")
|
@@ -16,10 +16,16 @@ class ECSHelper::Command::ECRLogin < ECSHelper::Command::Base
|
|
16
16
|
|
17
17
|
def run
|
18
18
|
log("Command", type)
|
19
|
-
log("Auth",
|
19
|
+
log("Auth Private", auth_private)
|
20
|
+
log("Auth Public", auth_public)
|
20
21
|
end
|
21
22
|
|
22
|
-
def
|
23
|
+
def auth_public
|
24
|
+
auth_cmd = Terrapin::CommandLine.new("aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws")
|
25
|
+
auth_cmd.run
|
26
|
+
end
|
27
|
+
|
28
|
+
def auth_private
|
23
29
|
auth_cmd = Terrapin::CommandLine.new("aws ecr get-login --no-include-email | sh")
|
24
30
|
auth_cmd.run
|
25
31
|
end
|
@@ -18,12 +18,6 @@ class ECSHelper::Command::ExportImages < ECSHelper::Command::Base
|
|
18
18
|
puts export_images
|
19
19
|
end
|
20
20
|
|
21
|
-
def auth
|
22
|
-
auth_cmd = Terrapin::CommandLine.new("aws ecr get-login --no-include-email | sh")
|
23
|
-
auth_cmd.run
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
21
|
private
|
28
22
|
|
29
23
|
def project
|
@@ -35,7 +29,7 @@ class ECSHelper::Command::ExportImages < ECSHelper::Command::Base
|
|
35
29
|
end
|
36
30
|
|
37
31
|
def export_images
|
38
|
-
variables = (['export'] + client.
|
32
|
+
variables = (['export'] + client.private_repositories.map do |repo|
|
39
33
|
container_name = repo.repository_name.scan(/#{project}-#{application}-(.*)/).flatten.first
|
40
34
|
key = container_name.upcase.gsub("-", "_") + "_IMAGE"
|
41
35
|
value = "#{repo.repository_uri}:#{helper.version}"
|
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.9
|
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-06-
|
11
|
+
date: 2021-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-ecs
|
@@ -50,6 +50,26 @@ dependencies:
|
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '1.42'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: aws-sdk-ecrpublic
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.3'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.3'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.3'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '1.3'
|
53
73
|
- !ruby/object:Gem::Dependency
|
54
74
|
name: json
|
55
75
|
requirement: !ruby/object:Gem::Requirement
|