indocker 0.3.8 → 0.4.0
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 +18 -18
- data/lib/indocker/container_deployer.rb +41 -28
- data/lib/indocker/deploy_context.rb +4 -2
- data/lib/indocker/docker.rb +2 -1
- data/lib/indocker/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2e66344870970bb12d0f6811219da96fe68d4549416280ac39cf3bd07960ff96
|
|
4
|
+
data.tar.gz: ff05089cd25b1aea14d84a052febae5436b002cedbb03d7490cc2659815a6846
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 44a2d51ed48f473d5b5f65f81d681d188be17830487b1ff98ac63b252f99f5ca33686f262c41fc763f3f70e9244b31a1469615fae6b47f6f16b91b3632129eb3
|
|
7
|
+
data.tar.gz: d196b2da95b698b3b897c54a408526229978f69e29f9c6d297c4bda8234662ea633f6e493b7612cd218132b4aa96bdc97bcb4c057a591e270e4d35b1714f48d4
|
data/Gemfile.lock
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
indocker (0.
|
|
4
|
+
indocker (0.4.0)
|
|
5
5
|
net-ssh
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
10
|
coderay (1.1.3)
|
|
11
|
-
diff-lcs (1.5.
|
|
12
|
-
docile (1.4.
|
|
13
|
-
method_source (1.
|
|
14
|
-
net-ssh (7.
|
|
15
|
-
pry (0.
|
|
11
|
+
diff-lcs (1.5.1)
|
|
12
|
+
docile (1.4.1)
|
|
13
|
+
method_source (1.1.0)
|
|
14
|
+
net-ssh (7.3.0)
|
|
15
|
+
pry (0.15.0)
|
|
16
16
|
coderay (~> 1.1)
|
|
17
17
|
method_source (~> 1.0)
|
|
18
18
|
rake (12.3.3)
|
|
19
|
-
rspec (3.
|
|
20
|
-
rspec-core (~> 3.
|
|
21
|
-
rspec-expectations (~> 3.
|
|
22
|
-
rspec-mocks (~> 3.
|
|
23
|
-
rspec-core (3.
|
|
24
|
-
rspec-support (~> 3.
|
|
25
|
-
rspec-expectations (3.
|
|
19
|
+
rspec (3.13.0)
|
|
20
|
+
rspec-core (~> 3.13.0)
|
|
21
|
+
rspec-expectations (~> 3.13.0)
|
|
22
|
+
rspec-mocks (~> 3.13.0)
|
|
23
|
+
rspec-core (3.13.2)
|
|
24
|
+
rspec-support (~> 3.13.0)
|
|
25
|
+
rspec-expectations (3.13.3)
|
|
26
26
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
27
|
-
rspec-support (~> 3.
|
|
28
|
-
rspec-mocks (3.
|
|
27
|
+
rspec-support (~> 3.13.0)
|
|
28
|
+
rspec-mocks (3.13.2)
|
|
29
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
30
|
-
rspec-support (~> 3.
|
|
31
|
-
rspec-support (3.
|
|
30
|
+
rspec-support (~> 3.13.0)
|
|
31
|
+
rspec-support (3.13.2)
|
|
32
32
|
simplecov (0.18.5)
|
|
33
33
|
docile (~> 1.1)
|
|
34
34
|
simplecov-html (~> 0.11)
|
|
35
|
-
simplecov-html (0.
|
|
35
|
+
simplecov-html (0.13.1)
|
|
36
36
|
|
|
37
37
|
PLATFORMS
|
|
38
38
|
x86_64-linux
|
|
@@ -17,39 +17,25 @@ class Indocker::ContainerDeployer
|
|
|
17
17
|
def deploy(container, force_restart, skip_force_restart, progress)
|
|
18
18
|
return if @deployed_containers[container]
|
|
19
19
|
|
|
20
|
-
container
|
|
20
|
+
# Deploy the same container to all of its servers in parallel.
|
|
21
|
+
#
|
|
22
|
+
# Each thread opens its OWN ssh connection (create_connection!), so no
|
|
23
|
+
# net-ssh session is shared between threads. We join all threads before
|
|
24
|
+
# returning, so container dependency ordering (depends_on) is preserved:
|
|
25
|
+
# a dependent container never starts deploying until every server of its
|
|
26
|
+
# dependency has finished.
|
|
27
|
+
threads = container.servers.map do |server|
|
|
21
28
|
progress.start_deploying_container(container, server)
|
|
22
29
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
block.call
|
|
26
|
-
end
|
|
27
|
-
else
|
|
28
|
-
Proc.new do |&block|
|
|
29
|
-
block.call
|
|
30
|
-
end
|
|
30
|
+
Thread.new do
|
|
31
|
+
deploy_to_server(container, server, force_restart, skip_force_restart, progress)
|
|
31
32
|
end
|
|
33
|
+
end
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
deploy_server = @server_pool.create_connection!(server)
|
|
35
|
-
@logger.info("Deploying container: #{container.name.to_s.green} to #{server.user}@#{server.host}")
|
|
36
|
-
|
|
37
|
-
result = deploy_server
|
|
38
|
-
.run_container_remotely(
|
|
39
|
-
configuration_name: Indocker.configuration_name,
|
|
40
|
-
container_name: container.name,
|
|
41
|
-
force_restart: force_restart && !skip_force_restart.include?(container.name)
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
if result.exit_code != 0
|
|
45
|
-
exit 1
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
@logger.info("Container deployment to #{server.user}@#{server.host} finished: #{container.name.to_s.green}")
|
|
35
|
+
results = threads.map(&:value)
|
|
49
36
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
end
|
|
37
|
+
if results.any? { |exit_code| exit_code != 0 }
|
|
38
|
+
exit 1
|
|
53
39
|
end
|
|
54
40
|
|
|
55
41
|
@deployed_containers[container] = true
|
|
@@ -60,4 +46,31 @@ class Indocker::ContainerDeployer
|
|
|
60
46
|
rescue => e
|
|
61
47
|
@logger.error("error during closing sessions #{e.inspect}")
|
|
62
48
|
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
# Runs a single container deployment on a single server. Returns the remote
|
|
53
|
+
# exit code (0 on success). Runs inside its own thread with a dedicated ssh
|
|
54
|
+
# connection, so it must not touch shared mutable state except the
|
|
55
|
+
# thread-safe `progress`.
|
|
56
|
+
def deploy_to_server(container, server, force_restart, skip_force_restart, progress)
|
|
57
|
+
deploy_server = @server_pool.create_connection!(server)
|
|
58
|
+
@logger.info("Deploying container: #{container.name.to_s.green} to #{server.user}@#{server.host}")
|
|
59
|
+
|
|
60
|
+
result = deploy_server
|
|
61
|
+
.run_container_remotely(
|
|
62
|
+
configuration_name: Indocker.configuration_name,
|
|
63
|
+
container_name: container.name,
|
|
64
|
+
force_restart: force_restart && !skip_force_restart.include?(container.name)
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if result.exit_code == 0
|
|
68
|
+
@logger.info("Container deployment to #{server.user}@#{server.host} finished: #{container.name.to_s.green}")
|
|
69
|
+
progress.finish_deploying_container(container, server)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
deploy_server.close_session
|
|
73
|
+
|
|
74
|
+
result.exit_code
|
|
75
|
+
end
|
|
63
76
|
end
|
|
@@ -69,8 +69,10 @@ class Indocker::DeployContext
|
|
|
69
69
|
container.before_start_proc.call(container, number)
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
+
stop_timeout = container.get_start_option(:stop_timeout)
|
|
73
|
+
|
|
72
74
|
if container_id
|
|
73
|
-
Indocker::Docker.stop(hostname, skip_errors: true)
|
|
75
|
+
Indocker::Docker.stop(hostname, time: stop_timeout, skip_errors: true)
|
|
74
76
|
else
|
|
75
77
|
Indocker::Docker.rm(hostname, skip_errors: true)
|
|
76
78
|
end
|
|
@@ -97,4 +99,4 @@ class Indocker::DeployContext
|
|
|
97
99
|
|
|
98
100
|
nil
|
|
99
101
|
end
|
|
100
|
-
end
|
|
102
|
+
end
|
data/lib/indocker/docker.rb
CHANGED
|
@@ -18,7 +18,8 @@ class Indocker::Docker
|
|
|
18
18
|
Indocker::Shell.command("docker pull #{url}", Indocker.logger)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def stop(container_name, time
|
|
21
|
+
def stop(container_name, time: nil, skip_errors: false)
|
|
22
|
+
time ||= 10 # default timeout for Linux
|
|
22
23
|
Indocker::Shell.command("docker stop --time=#{time} #{container_name}", Indocker.logger, skip_errors: skip_errors)
|
|
23
24
|
rm(container_name, skip_errors: skip_errors)
|
|
24
25
|
end
|
data/lib/indocker/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: indocker
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ruslan Gatiyatov
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2026-07-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: net-ssh
|