indocker 0.1.10 → 0.1.11

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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/example/indocker/bounded_contexts/shared/{container_failing_build → bad_container_build}/Dockerfile +0 -1
  4. data/example/indocker/bounded_contexts/shared/bad_container_build/container.rb +5 -0
  5. data/example/indocker/bounded_contexts/shared/bad_container_build/image.rb +3 -0
  6. data/example/indocker/bounded_contexts/shared/bad_container_start/Dockerfile +8 -0
  7. data/example/indocker/bounded_contexts/shared/bad_container_start/build_context/bin/run +3 -0
  8. data/example/indocker/bounded_contexts/shared/bad_container_start/container.rb +5 -0
  9. data/example/indocker/bounded_contexts/shared/bad_container_start/image.rb +3 -0
  10. data/example/indocker/bounded_contexts/shared/good_container/Dockerfile +4 -0
  11. data/example/indocker/bounded_contexts/shared/good_container/container.rb +5 -0
  12. data/example/indocker/bounded_contexts/shared/good_container/image.rb +3 -0
  13. data/example/indocker/configurations/external.rb +7 -1
  14. data/example/spec/indocker_spec.rb +11 -3
  15. data/lib/indocker.rb +0 -1
  16. data/lib/indocker/build_context.rb +3 -4
  17. data/lib/indocker/build_context_pool.rb +2 -4
  18. data/lib/indocker/configuration_deployer.rb +13 -7
  19. data/lib/indocker/container_deployer.rb +13 -6
  20. data/lib/indocker/images_compiler.rb +1 -2
  21. data/lib/indocker/ssh_session.rb +21 -10
  22. data/lib/indocker/version.rb +1 -1
  23. metadata +12 -6
  24. data/example/indocker/bounded_contexts/shared/container_failing_build/container.rb +0 -5
  25. data/example/indocker/bounded_contexts/shared/container_failing_build/image.rb +0 -3
  26. data/lib/indocker/ssh_result_logger.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5cc8ce4873ccea152495206a220d2bd9cd382c4046fea21490787ebd10b87f84
4
- data.tar.gz: 83453296afe65dae6146b35b50317f5b720eadc0a19d941d9dad2c8617087dfb
3
+ metadata.gz: 8625d37ada817f2f83c30f154bd2ed9a104a023e5b554f4c91f3708ed4aa2770
4
+ data.tar.gz: 24950eb94bd956f7f10ad81da4330bffa78495a4852733a1bec5d0713cce4896
5
5
  SHA512:
6
- metadata.gz: 2322d367c0d236ccc4e6abab8b5d4c73a2a0ea40a9c29936d986ccd2c0d1249676c11100071ab385f676abf56310c934b0dca99cfa0c8f90619e46c9a29a6726
7
- data.tar.gz: 6183205fcf0cf0dbfc05194e9d81a4e4f768a9a8b7ae631c0ced837190de55c7eac93844b5830fa6c1009966991a1dde9af4c5df92a1027d3f21de0440ce6672
6
+ metadata.gz: e50ef7ed88a688bb1119e55b1d1662d6827e5667cc66c61dc85933687e9d4834c785c03c7fb917a2709adf04d909f7e611f8c844741b1532211dddad340dc149
7
+ data.tar.gz: 1e52f25fff3bf09ddb7f1d097b46ad0e858555892d3b4721a628c8817a16e165694dbf3650e940eb83cb6ac05d8ded47c6359ada9d3cba39d3885ff95e9e88d0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- indocker (0.1.10)
4
+ indocker (0.1.11)
5
5
  net-ssh
6
6
 
7
7
  GEM
@@ -1,4 +1,3 @@
1
1
  FROM ruby:2.5.0
2
2
 
3
3
  RUN some-unexisting-command
4
- WORKDIR /app
@@ -0,0 +1,5 @@
1
+ Indocker
2
+ .define_container(:bad_container_build)
3
+ .tags('bad_container_build', 'console=true')
4
+ .image(:bad_container_build)
5
+ .networks(:app_net)
@@ -0,0 +1,3 @@
1
+ Indocker
2
+ .define_image(:bad_container_build)
3
+ .registry(:default)
@@ -0,0 +1,8 @@
1
+ FROM ruby:2.5.0
2
+
3
+ RUN mkdir /app
4
+ WORKDIR /app
5
+
6
+ COPY bin bin
7
+
8
+ CMD ["bin/run"]
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ raise "Some error"
@@ -0,0 +1,5 @@
1
+ Indocker
2
+ .define_container(:bad_container_start)
3
+ .tags('bad_container_start', 'console=true')
4
+ .image(:bad_container_start)
5
+ .networks(:app_net)
@@ -0,0 +1,3 @@
1
+ Indocker
2
+ .define_image(:bad_container_start)
3
+ .registry(:default)
@@ -0,0 +1,4 @@
1
+ FROM ruby:2.5.0
2
+
3
+ RUN mkdir /app
4
+ WORKDIR /app
@@ -0,0 +1,5 @@
1
+ Indocker
2
+ .define_container(:good_container)
3
+ .tags('good_container', 'console=true')
4
+ .image(:good_container)
5
+ .networks(:app_net)
@@ -0,0 +1,3 @@
1
+ Indocker
2
+ .define_image(:good_container)
3
+ .registry(:default)
@@ -6,7 +6,13 @@ Indocker
6
6
  ruby: {
7
7
  servers: [:external],
8
8
  },
9
- container_failing_build: {
9
+ good_container: {
10
+ servers: [:external],
11
+ },
12
+ bad_container_build: {
13
+ servers: [:external],
14
+ },
15
+ bad_container_start: {
10
16
  servers: [:external],
11
17
  }
12
18
  )
@@ -8,14 +8,14 @@ RSpec.describe Indocker do
8
8
  describe "successful deployment" do
9
9
  it "doesn't raise any error" do
10
10
  expect{
11
- launch_deployment(containers: [:ruby])
11
+ launch_deployment(containers: [:good_container])
12
12
  }.to_not raise_error
13
13
  end
14
14
 
15
15
  it "shows a message about successful deploy" do
16
16
  allow(Indocker.global_logger).to receive(:info).at_least(:once)
17
17
 
18
- launch_deployment(containers: [:ruby])
18
+ launch_deployment(containers: [:good_container])
19
19
 
20
20
  expect(Indocker.global_logger).to have_received(:info).at_least(:once).with(/Deployment finished/)
21
21
  end
@@ -24,8 +24,16 @@ RSpec.describe Indocker do
24
24
  describe "failed build" do
25
25
  it "exits with an error" do
26
26
  expect{
27
- launch_deployment(containers: [:container_failing_build])
27
+ launch_deployment(containers: [:bad_container_build])
28
28
  }.to raise_error(SystemExit)
29
29
  end
30
30
  end
31
+
32
+ describe "failed start" do
33
+ it "exits without error" do
34
+ expect{
35
+ launch_deployment(containers: [:bad_container_start])
36
+ }.to_not raise_error(SystemExit)
37
+ end
38
+ end
31
39
  end
@@ -85,7 +85,6 @@ module Indocker
85
85
  autoload :IndockerHelper, 'indocker_helper'
86
86
  autoload :ImagesCompiler, 'images_compiler'
87
87
  autoload :ContainerRunner, 'container_runner'
88
- autoload :SshResultLogger, 'ssh_result_logger'
89
88
  autoload :DeploymentProgress, 'deployment_progress'
90
89
  autoload :DeploymentChecker, 'deployment_checker'
91
90
  autoload :DeploymentPolicy, 'deployment_policy'
@@ -3,12 +3,11 @@ require 'fileutils'
3
3
  class Indocker::BuildContext
4
4
  attr_reader :session, :server, :configuration, :helper, :logger
5
5
 
6
- def initialize(configuration:, build_server:, logger:, global_logger:)
6
+ def initialize(configuration:, build_server:, logger:)
7
7
  @configuration = configuration
8
8
  @logger = logger
9
9
  @helper = Indocker::BuildContextHelper.new(@configuration, @build_server)
10
10
  @server = build_server
11
- @global_logger = global_logger
12
11
  @compiled_images = Hash.new(false)
13
12
  end
14
13
 
@@ -73,8 +72,8 @@ class Indocker::BuildContext
73
72
  res = Indocker::Docker.build(image.local_registry_url, build_args)
74
73
 
75
74
  if res.exit_status != 0
76
- @global_logger.error("image compilation :#{image.name} failed")
77
- @global_logger.error(res.stdout)
75
+ puts "image compilation :#{image.name} failed"
76
+ puts res.stdout
78
77
  exit 1
79
78
  end
80
79
 
@@ -1,15 +1,13 @@
1
1
  class Indocker::BuildContextPool
2
- def initialize(configuration:, logger:, global_logger:)
2
+ def initialize(configuration:, logger:)
3
3
  @logger = logger
4
4
  @configuration = configuration
5
- @global_logger = global_logger
6
5
 
7
6
  @contexts = configuration.build_servers.map do |build_server|
8
7
  Indocker::BuildContext.new(
9
8
  logger: @logger,
10
9
  configuration: configuration,
11
- build_server: build_server,
12
- global_logger: @global_logger,
10
+ build_server: build_server
13
11
  )
14
12
  end
15
13
  end
@@ -46,7 +46,7 @@ class Indocker::ConfigurationDeployer
46
46
  containers = find_containers_to_deploy(configuration, deployment_policy)
47
47
 
48
48
  clonner = Indocker::Repositories::Clonner.new(configuration, @logger)
49
- build_context_pool = Indocker::BuildContextPool.new(configuration: configuration, logger: @logger, global_logger: @global_logger)
49
+ build_context_pool = Indocker::BuildContextPool.new(configuration: configuration, logger: @logger)
50
50
  deployer = Indocker::ContainerDeployer.new(configuration: configuration, logger: @logger)
51
51
 
52
52
  @global_logger.info("Establishing ssh sessions to all servers...")
@@ -290,15 +290,21 @@ class Indocker::ConfigurationDeployer
290
290
  result = build_context
291
291
  .session
292
292
  .exec!(
293
- "cd #{Indocker::IndockerHelper.indocker_dir} && ./bin/remote/compile -C #{Indocker.configuration_name} -i #{image.name} -s #{@logger.debug? ? '-d' : ''}"
293
+ "cd #{Indocker::IndockerHelper.indocker_dir} && ./bin/remote/compile -C #{Indocker.configuration_name} -i #{image.name} -s #{@logger.debug? ? '-d' : ''}",
294
+ on_stdout: proc { |data|
295
+ @logger.info("[compile] #{data}")
296
+ },
297
+ on_stderr: proc { |data|
298
+ @logger.error("[compile] #{data}")
299
+ }
294
300
  )
295
301
  end
296
302
 
297
- Indocker::SshResultLogger
298
- .new(@logger)
299
- .log(result, "#{image.name.to_s.green} image compilation failed")
300
-
301
- exit 1 if result.exit_code != 0
303
+ if result.exit_code != 0
304
+ @global_logger.error("[compile] #{image.name.to_s.green} image compilation failed")
305
+ puts result.stdout_data
306
+ exit 1
307
+ end
302
308
 
303
309
  @logger.info("Image compilation completed #{image.name.to_s.green}. Time taken: #{time}")
304
310
 
@@ -50,14 +50,21 @@ class Indocker::ContainerDeployer
50
50
  result = deploy_context
51
51
  .session
52
52
  .exec!(
53
- "cd #{Indocker::IndockerHelper.indocker_dir} && ./bin/remote/run -C #{Indocker.configuration_name} -c #{container.name} #{debug_options} #{command_output} #{force_restart_options}"
53
+ "cd #{Indocker::IndockerHelper.indocker_dir} && ./bin/remote/run -C #{Indocker.configuration_name} -c #{container.name} #{debug_options} #{command_output} #{force_restart_options}",
54
+ on_stdout: proc { |data|
55
+ @logger.info("[deploy] #{data}")
56
+ },
57
+ on_stderr: proc { |data|
58
+ @logger.error("[deploy] #{data}")
59
+ }
54
60
  )
61
+
62
+ if result.exit_code != 0
63
+ @global_logger.error("[deploy] #{container.name.to_s.green} deployment for server #{server.name} failed")
64
+ puts result.stdout_data
65
+ exit 1
66
+ end
55
67
 
56
- Indocker::SshResultLogger
57
- .new(@logger)
58
- .log(result, "#{container.name.to_s.green} deployment for server #{server.name} failed")
59
-
60
- exit 1 if result.exit_code != 0
61
68
  @logger.info("Container deployment to #{server.user}@#{server.host} finished: #{container.name.to_s.green}")
62
69
 
63
70
  deploy_context.close_session
@@ -9,8 +9,7 @@ class Indocker::ImagesCompiler
9
9
  build_context = Indocker::BuildContext.new(
10
10
  configuration: configuration,
11
11
  build_server: nil,
12
- logger: @logger,
13
- global_logger: Indocker.global_logger
12
+ logger: @logger
14
13
  )
15
14
 
16
15
  image_compiler = Indocker::Images::ImageCompiler.new
@@ -37,11 +37,27 @@ class Indocker::SshSession
37
37
  !@ssh
38
38
  end
39
39
 
40
- def exec!(command)
41
- if !@ssh
40
+ def exec!(command, on_stdout: nil, on_stderr: nil)
41
+ if local?
42
+ exec_locally!(command)
43
+ else
44
+ exec_remotely!(command, on_stdout: on_stdout, on_stderr: on_stderr)
45
+ end
46
+ end
47
+
48
+ def close
49
+ if @ssh
50
+ @ssh.close
51
+ end
52
+ end
53
+
54
+ private
55
+ def exec_locally!(command)
42
56
  res = Indocker::Shell.command_with_result(command, @logger, skip_logging: false)
43
57
  ExecResult.new(res.stdout, '', res.exit_status, nil)
44
- else
58
+ end
59
+
60
+ def exec_remotely!(command, on_stdout:, on_stderr:)
45
61
  if Indocker.export_command
46
62
  command = "#{Indocker.export_command} && #{command}"
47
63
  end
@@ -62,10 +78,12 @@ class Indocker::SshSession
62
78
 
63
79
  channel.on_data do |ch,data|
64
80
  stdout_data += data
81
+ on_stdout.call(data) if on_stdout
65
82
  end
66
83
 
67
84
  channel.on_extended_data do |ch,type,data|
68
85
  stderr_data += data
86
+ on_stderr.call(data) if on_stderr
69
87
  end
70
88
 
71
89
  channel.on_request('exit-status') do |ch,data|
@@ -82,11 +100,4 @@ class Indocker::SshSession
82
100
 
83
101
  ExecResult.new(stdout_data, stderr_data, exit_code, exit_signal)
84
102
  end
85
- end
86
-
87
- def close
88
- if @ssh
89
- @ssh.close
90
- end
91
- end
92
103
  end
@@ -1,3 +1,3 @@
1
1
  module Indocker
2
- VERSION = "0.1.10"
2
+ VERSION = "0.1.11"
3
3
  end
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.1.10
4
+ version: 0.1.11
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: 2020-08-07 00:00:00.000000000 Z
12
+ date: 2020-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ssh
@@ -88,9 +88,16 @@ files:
88
88
  - example/indocker/bin/remote/compile
89
89
  - example/indocker/bin/remote/run
90
90
  - example/indocker/bin/utils/configurations.rb
91
- - example/indocker/bounded_contexts/shared/container_failing_build/Dockerfile
92
- - example/indocker/bounded_contexts/shared/container_failing_build/container.rb
93
- - example/indocker/bounded_contexts/shared/container_failing_build/image.rb
91
+ - example/indocker/bounded_contexts/shared/bad_container_build/Dockerfile
92
+ - example/indocker/bounded_contexts/shared/bad_container_build/container.rb
93
+ - example/indocker/bounded_contexts/shared/bad_container_build/image.rb
94
+ - example/indocker/bounded_contexts/shared/bad_container_start/Dockerfile
95
+ - example/indocker/bounded_contexts/shared/bad_container_start/build_context/bin/run
96
+ - example/indocker/bounded_contexts/shared/bad_container_start/container.rb
97
+ - example/indocker/bounded_contexts/shared/bad_container_start/image.rb
98
+ - example/indocker/bounded_contexts/shared/good_container/Dockerfile
99
+ - example/indocker/bounded_contexts/shared/good_container/container.rb
100
+ - example/indocker/bounded_contexts/shared/good_container/image.rb
94
101
  - example/indocker/bounded_contexts/shared/ruby/Dockerfile
95
102
  - example/indocker/bounded_contexts/shared/ruby/container.rb
96
103
  - example/indocker/bounded_contexts/shared/ruby/image.rb
@@ -156,7 +163,6 @@ files:
156
163
  - lib/indocker/server.rb
157
164
  - lib/indocker/server_pool.rb
158
165
  - lib/indocker/shell.rb
159
- - lib/indocker/ssh_result_logger.rb
160
166
  - lib/indocker/ssh_session.rb
161
167
  - lib/indocker/version.rb
162
168
  - lib/indocker/volume_helper.rb
@@ -1,5 +0,0 @@
1
- Indocker
2
- .define_container(:container_failing_build)
3
- .tags('container_failing_build', 'console=true')
4
- .image(:container_failing_build)
5
- .networks(:app_net)
@@ -1,3 +0,0 @@
1
- Indocker
2
- .define_image(:container_failing_build)
3
- .registry(:default)
@@ -1,18 +0,0 @@
1
- class Indocker::SshResultLogger
2
- def initialize(logger)
3
- @logger = logger
4
- end
5
-
6
- def log(result, error_message)
7
- if result.exit_code == 0
8
- puts result.stdout_data
9
- else
10
- @logger.error(error_message)
11
- puts result.stdout_data
12
-
13
- result.stderr_data.to_s.split("\n").each do |line|
14
- @logger.error(line)
15
- end
16
- end
17
- end
18
- end