indocker 0.1.9 → 0.1.14

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/Gemfile +0 -1
  4. data/Gemfile.lock +10 -4
  5. data/example/indocker/bounded_contexts/shared/{container_failing_build → bad_container_build}/Dockerfile +0 -1
  6. data/example/indocker/bounded_contexts/shared/bad_container_build/container.rb +6 -0
  7. data/example/indocker/bounded_contexts/shared/bad_container_build/image.rb +3 -0
  8. data/example/indocker/bounded_contexts/shared/bad_container_start/Dockerfile +8 -0
  9. data/example/indocker/bounded_contexts/shared/bad_container_start/build_context/bin/run +3 -0
  10. data/example/indocker/bounded_contexts/shared/bad_container_start/container.rb +6 -0
  11. data/example/indocker/bounded_contexts/shared/bad_container_start/image.rb +3 -0
  12. data/example/indocker/bounded_contexts/shared/daemon_container/Dockerfile +4 -0
  13. data/example/indocker/bounded_contexts/shared/daemon_container/container.rb +6 -0
  14. data/example/indocker/bounded_contexts/shared/daemon_container/image.rb +3 -0
  15. data/example/indocker/bounded_contexts/shared/good_container/Dockerfile +4 -0
  16. data/example/indocker/bounded_contexts/shared/good_container/container.rb +6 -0
  17. data/example/indocker/bounded_contexts/shared/good_container/image.rb +3 -0
  18. data/example/indocker/bounded_contexts/shared/ruby/container.rb +2 -1
  19. data/example/indocker/configurations/external.rb +13 -2
  20. data/example/indocker/infrastructure/artifacts.rb +10 -0
  21. data/example/indocker/setup.rb +1 -0
  22. data/indocker.gemspec +2 -1
  23. data/lib/indocker.rb +24 -12
  24. data/lib/indocker/build_context.rb +6 -41
  25. data/lib/indocker/container_deployer.rb +12 -23
  26. data/lib/indocker/crontab_redeploy_rules_builder.rb +2 -1
  27. data/lib/indocker/deploy_context.rb +4 -32
  28. data/lib/indocker/docker_run_args.rb +2 -2
  29. data/lib/indocker/images/image_compiler.rb +0 -1
  30. data/lib/indocker/{configuration_deployer.rb → launchers/configuration_deployer.rb} +29 -30
  31. data/lib/indocker/{container_runner.rb → launchers/container_runner.rb} +2 -3
  32. data/lib/indocker/{images_compiler.rb → launchers/images_compiler.rb} +3 -3
  33. data/lib/indocker/{network.rb → networks/network.rb} +1 -1
  34. data/lib/indocker/{network_helper.rb → networks/network_helper.rb} +1 -1
  35. data/lib/indocker/server_pools/build_server_connection.rb +15 -0
  36. data/lib/indocker/server_pools/build_server_pool.rb +40 -0
  37. data/lib/indocker/server_pools/deploy_server_connection.rb +17 -0
  38. data/lib/indocker/server_pools/deploy_server_pool.rb +41 -0
  39. data/lib/indocker/server_pools/server_connection.rb +36 -0
  40. data/lib/indocker/ssh_session.rb +18 -9
  41. data/lib/indocker/version.rb +1 -1
  42. data/lib/indocker/{volume_helper.rb → volumes/volume_helper.rb} +1 -1
  43. metadata +44 -17
  44. data/example/indocker/bounded_contexts/shared/container_failing_build/container.rb +0 -5
  45. data/example/indocker/bounded_contexts/shared/container_failing_build/image.rb +0 -3
  46. data/example/spec/indocker_spec.rb +0 -31
  47. data/example/spec/spec_helper.rb +0 -39
  48. data/lib/indocker/build_context_pool.rb +0 -42
  49. data/lib/indocker/server_pool.rb +0 -38
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0356e417ece7294e5a5185f7cf17313d3b8f47c74895fdf0323989da110d5569
4
- data.tar.gz: a2c04c1b66f98aa172b758be94e522901dffb2bef4d472602d70742fd93d80be
3
+ metadata.gz: cacf753d2ac5b563b097493cdb495f76b2d1aef8f758dea6d84a3791e36ab0aa
4
+ data.tar.gz: bbd59aec061d7358c3d5a579615547c3a3c097219069d93bbd7e78563f31b091
5
5
  SHA512:
6
- metadata.gz: 38376ede23d5ce780f0234ec01f473d673b4bdfe5a2ef4e893fcf867420ae8a11bbe57df6f010d1f87289f2c970328f8bc86f1b0cde929c73c1129b4bfb0d591
7
- data.tar.gz: 93bb3bb739fbc427e8c688e7da395088d6e60fafa68c0741d91706bc2ac50bee9fae80b7ff240be16f4c4b5e7985b9f8fa4b56c9e1e74ccd6aa036f8d9bad021
6
+ metadata.gz: f57b65eb2d10ae48aef8295db38822e3d2f55f11d04e912628884b8bbf3e88ff60d95453c086ea4352e1cd0c3d35e4c51682e1dda7bf3e7826502e36c0b27ec9
7
+ data.tar.gz: a3732e6bc974c22b3dd5f856c593054d300d1d6244ac5399cb43d9cdd896940aa9089d0240ce5c8f83481a9e3b51507227d1c4510b66563025b6b5266f56491c
@@ -0,0 +1 @@
1
+ 2.5.0
data/Gemfile CHANGED
@@ -6,6 +6,5 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
6
6
  gemspec
7
7
 
8
8
  group :test do
9
- gem 'rspec'
10
9
  gem 'pry'
11
10
  end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- indocker (0.1.9)
4
+ indocker (0.1.14)
5
5
  net-ssh
6
6
 
7
7
  GEM
@@ -9,12 +9,13 @@ GEM
9
9
  specs:
10
10
  coderay (1.1.3)
11
11
  diff-lcs (1.3)
12
+ docile (1.3.2)
12
13
  method_source (1.0.0)
13
14
  net-ssh (6.1.0)
14
15
  pry (0.13.1)
15
16
  coderay (~> 1.1)
16
17
  method_source (~> 1.0)
17
- rake (10.5.0)
18
+ rake (12.3.3)
18
19
  rspec (3.9.0)
19
20
  rspec-core (~> 3.9.0)
20
21
  rspec-expectations (~> 3.9.0)
@@ -28,6 +29,10 @@ GEM
28
29
  diff-lcs (>= 1.2.0, < 2.0)
29
30
  rspec-support (~> 3.9.0)
30
31
  rspec-support (3.9.2)
32
+ simplecov (0.18.5)
33
+ docile (~> 1.1)
34
+ simplecov-html (~> 0.11)
35
+ simplecov-html (0.12.2)
31
36
 
32
37
  PLATFORMS
33
38
  ruby
@@ -36,8 +41,9 @@ DEPENDENCIES
36
41
  bundler (~> 1.17)
37
42
  indocker!
38
43
  pry
39
- rake (~> 10.0)
40
- rspec
44
+ rake (~> 12.3.3)
45
+ rspec (~> 3.0)
46
+ simplecov (~> 0.18.5)
41
47
 
42
48
  BUNDLED WITH
43
49
  1.17.3
@@ -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,6 @@
1
+ Indocker
2
+ .define_container(:bad_container_build)
3
+ .tags('bad_container_build', 'console=true')
4
+ .image(:bad_container_build)
5
+ .networks(:app_net)
6
+ .daemonize(false)
@@ -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,6 @@
1
+ Indocker
2
+ .define_container(:bad_container_start)
3
+ .tags('bad_container_start', 'console=true')
4
+ .image(:bad_container_start)
5
+ .networks(:app_net)
6
+ .daemonize(false)
@@ -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,6 @@
1
+ Indocker
2
+ .define_container(:daemon_container)
3
+ .tags('daemon_container', 'console=true')
4
+ .image(:daemon_container)
5
+ .networks(:app_net)
6
+ .daemonize(true)
@@ -0,0 +1,3 @@
1
+ Indocker
2
+ .define_image(:daemon_container)
3
+ .registry(:default)
@@ -0,0 +1,4 @@
1
+ FROM ruby:2.5.0
2
+
3
+ RUN mkdir /app
4
+ WORKDIR /app
@@ -0,0 +1,6 @@
1
+ Indocker
2
+ .define_container(:good_container)
3
+ .tags('good_container', 'console=true')
4
+ .image(:good_container)
5
+ .networks(:app_net)
6
+ .daemonize(false)
@@ -0,0 +1,3 @@
1
+ Indocker
2
+ .define_image(:good_container)
3
+ .registry(:default)
@@ -2,4 +2,5 @@ Indocker
2
2
  .define_container(:ruby)
3
3
  .tags('ruby', 'console=true')
4
4
  .image(:ruby)
5
- .networks(:app_net)
5
+ .networks(:app_net)
6
+ .daemonize(false)
@@ -6,7 +6,18 @@ 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: {
16
+ servers: [:external],
17
+ },
18
+ daemon_container: {
10
19
  servers: [:external],
11
20
  }
12
- )
21
+ ).artifacts(
22
+ indocker_readme: [:external],
23
+ )
@@ -0,0 +1,10 @@
1
+ Indocker.add_artifact(
2
+ Indocker::Artifacts::Git.new(
3
+ name: :indocker_readme,
4
+ remote_name: 'origin',
5
+ remote_url: 'https://github.com/ArtStation/indocker.git',
6
+ branch: :master,
7
+ source_path: './README.md',
8
+ target_path: File.join(Indocker.deploy_dir, 'README.md'),
9
+ )
10
+ )
@@ -18,6 +18,7 @@ require_relative 'infrastructure/registries'
18
18
  require_relative 'infrastructure/servers'
19
19
  require_relative 'infrastructure/build_servers'
20
20
  require_relative 'infrastructure/networks'
21
+ require_relative 'infrastructure/artifacts'
21
22
 
22
23
  Indocker.set_bounded_contexts_dir(File.join(__dir__, 'bounded_contexts'))
23
24
 
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency "net-ssh"
27
27
  spec.add_development_dependency "bundler", "~> 1.17"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rake", "~> 12.3.3"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
+ spec.add_development_dependency "simplecov", "~> 0.18.5"
30
31
  end
@@ -50,6 +50,7 @@ module Indocker
50
50
  autoload :Local, 'volumes/local'
51
51
  autoload :External, 'volumes/external'
52
52
  autoload :Repository, 'volumes/repository'
53
+ autoload :VolumeHelper, 'volumes/volume_helper'
53
54
  end
54
55
 
55
56
  module EnvFiles
@@ -61,30 +62,41 @@ module Indocker
61
62
  autoload :Git, 'artifacts/git'
62
63
  end
63
64
 
65
+ module Networks
66
+ autoload :Network, 'networks/network'
67
+ autoload :NetworkHelper, 'networks/network_helper'
68
+ end
69
+
70
+ module Launchers
71
+ autoload :ConfigurationDeployer, 'launchers/configuration_deployer'
72
+ autoload :ImagesCompiler, 'launchers/images_compiler'
73
+ autoload :ContainerRunner, 'launchers/container_runner'
74
+ end
75
+
76
+ module ServerPools
77
+ autoload :ServerConnection, 'server_pools/server_connection'
78
+ autoload :DeployServerPool, 'server_pools/deploy_server_pool'
79
+ autoload :DeployServerConnection, 'server_pools/deploy_server_connection'
80
+ autoload :BuildServerPool, 'server_pools/build_server_pool'
81
+ autoload :BuildServerConnection, 'server_pools/build_server_connection'
82
+ end
83
+
64
84
  autoload :HashMerger, 'hash_merger'
65
85
  autoload :BuildServer, 'build_server'
66
86
  autoload :Server, 'server'
67
- autoload :ConfigurationDeployer, 'configuration_deployer'
68
87
  autoload :SshSession, 'ssh_session'
69
- autoload :BuildContextPool, 'build_context_pool'
70
88
  autoload :BuildContext, 'build_context'
71
89
  autoload :BuildContextHelper, 'build_context_helper'
72
90
  autoload :Shell, 'shell'
73
91
  autoload :Docker, 'docker'
74
92
  autoload :ContextArgs, 'context_args'
75
- autoload :Network, 'network'
76
93
  autoload :ContainerDeployer, 'container_deployer'
77
- autoload :ServerPool, 'server_pool'
78
94
  autoload :DeployContext, 'deploy_context'
79
95
  autoload :ContainerHelper, 'container_helper'
80
96
  autoload :DockerRunArgs, 'docker_run_args'
81
- autoload :VolumeHelper, 'volume_helper'
82
- autoload :NetworkHelper, 'network_helper'
83
97
  autoload :Rsync, 'rsync'
84
98
  autoload :EnvFileHelper, 'env_file_helper'
85
99
  autoload :IndockerHelper, 'indocker_helper'
86
- autoload :ImagesCompiler, 'images_compiler'
87
- autoload :ContainerRunner, 'container_runner'
88
100
  autoload :SshResultLogger, 'ssh_result_logger'
89
101
  autoload :DeploymentProgress, 'deployment_progress'
90
102
  autoload :DeploymentChecker, 'deployment_checker'
@@ -172,7 +184,7 @@ module Indocker
172
184
  raise ArgumentError.new("network :#{name} was already defined")
173
185
  end
174
186
 
175
- networks.push(Indocker::Network.new(name))
187
+ networks.push(Indocker::Networks::Network.new(name))
176
188
  end
177
189
 
178
190
  def container_files
@@ -340,7 +352,7 @@ module Indocker
340
352
  require_confirmation: require_confirmation,
341
353
  )
342
354
 
343
- Indocker::ConfigurationDeployer
355
+ Indocker::Launchers::ConfigurationDeployer
344
356
  .new(logger: Indocker.logger, global_logger: Indocker.global_logger)
345
357
  .run(
346
358
  configuration: configuration,
@@ -369,7 +381,7 @@ module Indocker
369
381
  end
370
382
 
371
383
  def compile(images:, skip_dependent:)
372
- Indocker::ImagesCompiler
384
+ Indocker::Launchers::ImagesCompiler
373
385
  .new(Indocker.logger)
374
386
  .compile(
375
387
  configuration: configuration,
@@ -379,7 +391,7 @@ module Indocker
379
391
  end
380
392
 
381
393
  def run(container_name, force_restart)
382
- Indocker::ContainerRunner
394
+ Indocker::Launchers::ContainerRunner
383
395
  .new(Indocker.logger)
384
396
  .run(
385
397
  configuration: configuration,
@@ -1,55 +1,18 @@
1
1
  require 'fileutils'
2
2
 
3
3
  class Indocker::BuildContext
4
- attr_reader :session, :server, :configuration, :helper, :logger
4
+ attr_reader :configuration, :logger, :global_logger, :helper
5
5
 
6
- def initialize(configuration:, build_server:, logger:, global_logger:)
6
+ def initialize(configuration:, logger:, global_logger:)
7
7
  @configuration = configuration
8
8
  @logger = logger
9
9
  @helper = Indocker::BuildContextHelper.new(@configuration, @build_server)
10
- @server = build_server
11
10
  @global_logger = global_logger
12
- @compiled_images = Hash.new(false)
13
- end
14
-
15
- def create_session!
16
- return unless @server
17
-
18
- @session = Indocker::SshSession.new(
19
- host: @server.host,
20
- user: @server.user,
21
- port: @server.port,
22
- logger: @logger
23
- )
24
- end
25
-
26
- def exec!(command)
27
- @session.exec!(command)
28
- end
29
-
30
- def close_session
31
- @session.close if @session
32
- end
33
-
34
- def image_compiled?(image)
35
- @compiled_images[image]
36
- end
37
-
38
- def set_busy(flag)
39
- @busy = !!flag
40
- end
41
-
42
- def busy?
43
- !!@busy
44
- end
45
-
46
- def set_compiled(image)
47
- @compiled_images[image] = true
48
11
  end
49
12
 
50
13
  def build_image(image, build_dir, args: [])
51
14
  image_name = image.image_name
52
- registry = image.registry
15
+ registry = image.registry
53
16
  tag = image.tag
54
17
 
55
18
  FileUtils.cd(build_dir) do
@@ -79,7 +42,9 @@ class Indocker::BuildContext
79
42
  end
80
43
 
81
44
  Indocker::Docker.tag(image.local_registry_url, image.registry_url)
82
- Indocker::Docker.tag(image.local_registry_url, image.local_registry_url)
45
+ if image.registry_url != image.local_registry_url
46
+ Indocker::Docker.tag(image.local_registry_url, image.local_registry_url)
47
+ end
83
48
 
84
49
  if !image.registry.is_local?
85
50
  Indocker::Docker.push(image.registry_url)
@@ -5,7 +5,7 @@ class Indocker::ContainerDeployer
5
5
  @configuration = configuration
6
6
  @logger = logger
7
7
 
8
- @server_pool = Indocker::ServerPool.new(
8
+ @server_pool = Indocker::ServerPools::DeployServerPool.new(
9
9
  configuration: @configuration,
10
10
  logger: logger
11
11
  )
@@ -14,10 +14,6 @@ class Indocker::ContainerDeployer
14
14
  @deployed_servers = {}
15
15
  end
16
16
 
17
- def create_sessions!
18
- @server_pool.create_sessions!
19
- end
20
-
21
17
  def deploy(container, force_restart, skip_force_restart, progress)
22
18
  return if @deployed_containers[container]
23
19
 
@@ -37,30 +33,23 @@ class Indocker::ContainerDeployer
37
33
  end
38
34
 
39
35
  exec_proc.call do
40
- deploy_context = @server_pool.get(server)
36
+ deploy_server = @server_pool.create_connection!(server)
41
37
  @logger.info("Deploying container: #{container.name.to_s.green} to #{server.user}@#{server.host}")
42
38
 
43
- command_output = @logger.debug? ? "" : " > /dev/null"
44
- debug_options = @logger.debug? ? "-d" : ""
45
-
46
- if force_restart && !skip_force_restart.include?(container.name)
47
- force_restart_options = force_restart ? "-f" : ""
48
- end
49
-
50
- result = deploy_context
51
- .session
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}"
39
+ result = deploy_server
40
+ .run_container_remotely(
41
+ configuration_name: Indocker.configuration_name,
42
+ container_name: container.name,
43
+ force_restart: force_restart && !skip_force_restart.include?(container.name)
54
44
  )
55
45
 
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
46
+ if result.exit_code != 0
47
+ exit 1
48
+ end
49
+
61
50
  @logger.info("Container deployment to #{server.user}@#{server.host} finished: #{container.name.to_s.green}")
62
51
 
63
- deploy_context.close_session
52
+ deploy_server.close_session
64
53
  progress.finish_deploying_container(container, server)
65
54
  end
66
55
  end
@@ -8,7 +8,7 @@ PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sb
8
8
  CRONTAB
9
9
 
10
10
  LOG_FILE = "/var/log/indocker-redeploy-%{env}.log"
11
- COMMAND = "export TERM=xterm;#{Indocker.deploy_dir}/indocker/bin/deploy -C %{env} -f -B -y -c %{container_name}"
11
+ COMMAND = "export TERM=xterm;%{deploy_dir}/indocker/bin/deploy -C %{env} -f -B -y -c %{container_name}"
12
12
  REDEPLOY_RULE = %Q{%{schedule} echo `date` "- %{command}..." >> %{log_file}; %{command} 1>/dev/null 2>>%{log_file}; echo `date` "- done, exitcode = $?" >> %{log_file}}
13
13
 
14
14
  def initialize(configuration:, logger:)
@@ -41,6 +41,7 @@ PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sb
41
41
  COMMAND % {
42
42
  env: env,
43
43
  container_name: container.name,
44
+ deploy_dir: Indocker.deploy_dir
44
45
  }
45
46
  end
46
47