indocker 0.0.6 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +10 -2
  3. data/.rspec +2 -0
  4. data/.travis.yml +7 -0
  5. data/Gemfile +5 -2
  6. data/Gemfile.lock +19 -49
  7. data/LICENSE.txt +17 -18
  8. data/README.md +20 -1
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/example/indocker/bin/deploy +120 -0
  13. data/example/indocker/bin/remote/compile +72 -0
  14. data/example/indocker/bin/remote/run +66 -0
  15. data/example/indocker/bin/utils/configurations.rb +3 -0
  16. data/example/indocker/bounded_contexts/shared/ruby/Dockerfile +10 -0
  17. data/example/indocker/bounded_contexts/shared/ruby/container.rb +5 -0
  18. data/example/indocker/bounded_contexts/shared/ruby/image.rb +3 -0
  19. data/example/indocker/configurations/dev.rb +9 -0
  20. data/example/indocker/infrastructure/build_servers.rb +8 -0
  21. data/example/indocker/infrastructure/networks.rb +1 -0
  22. data/example/indocker/infrastructure/registries.rb +3 -0
  23. data/example/indocker/infrastructure/servers.rb +8 -0
  24. data/example/indocker/setup.rb +24 -0
  25. data/indocker.gemspec +27 -25
  26. data/lib/indocker.rb +437 -130
  27. data/lib/indocker/artifacts/git.rb +25 -0
  28. data/lib/indocker/build_context.rb +87 -0
  29. data/lib/indocker/build_context_helper.rb +109 -0
  30. data/lib/indocker/build_context_pool.rb +36 -0
  31. data/lib/indocker/build_server.rb +2 -0
  32. data/lib/indocker/colored_string.rb +33 -0
  33. data/lib/indocker/concerns/inspectable.rb +12 -0
  34. data/lib/indocker/configuration_deployer.rb +525 -0
  35. data/lib/indocker/configurations/configuration.rb +122 -0
  36. data/lib/indocker/configurations/configuration_builder.rb +250 -0
  37. data/lib/indocker/configurations/formatters/stdout.rb +36 -0
  38. data/lib/indocker/container_deployer.rb +73 -0
  39. data/lib/indocker/container_helper.rb +13 -0
  40. data/lib/indocker/container_runner.rb +23 -0
  41. data/lib/indocker/containers/container.rb +118 -0
  42. data/lib/indocker/containers/container_builder.rb +186 -0
  43. data/lib/indocker/containers/restart_policy.rb +36 -0
  44. data/lib/indocker/context_args.rb +43 -0
  45. data/lib/indocker/crontab_redeploy_rules_builder.rb +54 -0
  46. data/lib/indocker/deploy_context.rb +126 -0
  47. data/lib/indocker/deployment_checker.rb +121 -0
  48. data/lib/indocker/deployment_progress.rb +495 -0
  49. data/lib/indocker/docker.rb +87 -0
  50. data/lib/indocker/docker_run_args.rb +183 -0
  51. data/lib/indocker/env_file_helper.rb +13 -0
  52. data/lib/indocker/env_files/local.rb +8 -0
  53. data/lib/indocker/env_files/remote.rb +8 -0
  54. data/lib/indocker/hash_merger.rb +9 -0
  55. data/lib/indocker/images/image.rb +86 -0
  56. data/lib/indocker/images/image_builder.rb +98 -0
  57. data/lib/indocker/images/image_compiler.rb +68 -0
  58. data/lib/indocker/images/template_compiler.rb +15 -0
  59. data/lib/indocker/images/templates_compiler.rb +28 -0
  60. data/lib/indocker/images_compiler.rb +38 -0
  61. data/lib/indocker/indocker_helper.rb +9 -0
  62. data/lib/indocker/network.rb +12 -0
  63. data/lib/indocker/network_helper.rb +7 -0
  64. data/lib/indocker/registries/abstract.rb +17 -0
  65. data/lib/indocker/registries/local.rb +5 -0
  66. data/lib/indocker/registries/remote.rb +12 -0
  67. data/lib/indocker/repositories/abstract.rb +25 -0
  68. data/lib/indocker/repositories/clonner.rb +17 -0
  69. data/lib/indocker/repositories/git.rb +24 -0
  70. data/lib/indocker/repositories/local.rb +20 -0
  71. data/lib/indocker/repositories/no_sync.rb +20 -0
  72. data/lib/indocker/rsync.rb +52 -0
  73. data/lib/indocker/server.rb +20 -0
  74. data/lib/indocker/server_pool.rb +30 -0
  75. data/lib/indocker/shell.rb +60 -0
  76. data/lib/indocker/ssh_result_logger.rb +18 -0
  77. data/lib/indocker/ssh_session.rb +92 -0
  78. data/lib/indocker/version.rb +1 -1
  79. data/lib/indocker/volume_helper.rb +7 -0
  80. data/lib/indocker/volumes/external.rb +8 -0
  81. data/lib/indocker/volumes/local.rb +9 -0
  82. data/lib/indocker/volumes/repository.rb +9 -0
  83. metadata +107 -222
  84. data/bin/indocker +0 -9
  85. data/lib/indocker/application_initializer.rb +0 -19
  86. data/lib/indocker/cli.rb +0 -27
  87. data/lib/indocker/configs/config.rb +0 -147
  88. data/lib/indocker/configs/config_factory.rb +0 -37
  89. data/lib/indocker/configs/config_initializer.rb +0 -9
  90. data/lib/indocker/configs/locator.rb +0 -23
  91. data/lib/indocker/container/container_builder.rb +0 -29
  92. data/lib/indocker/container/container_directives_runner.rb +0 -54
  93. data/lib/indocker/container/container_dsl.rb +0 -83
  94. data/lib/indocker/container/container_evaluator.rb +0 -13
  95. data/lib/indocker/container/container_inspector.rb +0 -26
  96. data/lib/indocker/container/container_manager.rb +0 -122
  97. data/lib/indocker/container/container_metadata.rb +0 -112
  98. data/lib/indocker/container/container_metadata_factory.rb +0 -30
  99. data/lib/indocker/container/container_metadata_repository.rb +0 -27
  100. data/lib/indocker/directives/base.rb +0 -17
  101. data/lib/indocker/directives/container_directives/base.rb +0 -23
  102. data/lib/indocker/directives/container_directives/cmd.rb +0 -7
  103. data/lib/indocker/directives/container_directives/depends_on.rb +0 -7
  104. data/lib/indocker/directives/container_directives/env.rb +0 -7
  105. data/lib/indocker/directives/container_directives/env_file.rb +0 -7
  106. data/lib/indocker/directives/container_directives/expose.rb +0 -7
  107. data/lib/indocker/directives/container_directives/from.rb +0 -14
  108. data/lib/indocker/directives/container_directives/network.rb +0 -12
  109. data/lib/indocker/directives/container_directives/ports.rb +0 -15
  110. data/lib/indocker/directives/container_directives/ready.rb +0 -16
  111. data/lib/indocker/directives/container_directives/volume.rb +0 -23
  112. data/lib/indocker/directives/image_directives/base.rb +0 -27
  113. data/lib/indocker/directives/image_directives/cmd.rb +0 -19
  114. data/lib/indocker/directives/image_directives/copy.rb +0 -32
  115. data/lib/indocker/directives/image_directives/docker_cp.rb +0 -20
  116. data/lib/indocker/directives/image_directives/entrypoint.rb +0 -19
  117. data/lib/indocker/directives/image_directives/env.rb +0 -9
  118. data/lib/indocker/directives/image_directives/env_file.rb +0 -19
  119. data/lib/indocker/directives/image_directives/expose.rb +0 -9
  120. data/lib/indocker/directives/image_directives/from.rb +0 -36
  121. data/lib/indocker/directives/image_directives/registry.rb +0 -30
  122. data/lib/indocker/directives/image_directives/run.rb +0 -17
  123. data/lib/indocker/directives/image_directives/workdir.rb +0 -9
  124. data/lib/indocker/directives/partial.rb +0 -21
  125. data/lib/indocker/docker_api/container_config.rb +0 -121
  126. data/lib/indocker/docker_api/docker_api.rb +0 -207
  127. data/lib/indocker/dsl_context.rb +0 -21
  128. data/lib/indocker/envs/env_metadata.rb +0 -39
  129. data/lib/indocker/envs/loader.rb +0 -19
  130. data/lib/indocker/errors.rb +0 -21
  131. data/lib/indocker/git/git_api.rb +0 -32
  132. data/lib/indocker/git/git_helper.rb +0 -34
  133. data/lib/indocker/git/git_service.rb +0 -21
  134. data/lib/indocker/handlers/container_run.rb +0 -20
  135. data/lib/indocker/handlers/container_stop.rb +0 -17
  136. data/lib/indocker/handlers/performable.rb +0 -22
  137. data/lib/indocker/image/image_builder.rb +0 -54
  138. data/lib/indocker/image/image_dependencies_manager.rb +0 -47
  139. data/lib/indocker/image/image_directives_runner.rb +0 -99
  140. data/lib/indocker/image/image_dockerfile_builder.rb +0 -24
  141. data/lib/indocker/image/image_dsl.rb +0 -89
  142. data/lib/indocker/image/image_evaluator.rb +0 -21
  143. data/lib/indocker/image/image_helper.rb +0 -9
  144. data/lib/indocker/image/image_metadata.rb +0 -50
  145. data/lib/indocker/image/image_metadata_factory.rb +0 -31
  146. data/lib/indocker/image/image_metadata_repository.rb +0 -29
  147. data/lib/indocker/networks/network_metadata.rb +0 -9
  148. data/lib/indocker/networks/network_metadata_factory.rb +0 -9
  149. data/lib/indocker/networks/network_metadata_repository.rb +0 -34
  150. data/lib/indocker/partial/partial_metadata.rb +0 -8
  151. data/lib/indocker/partial/partial_metadata_repository.rb +0 -26
  152. data/lib/indocker/registry/registry_api.rb +0 -46
  153. data/lib/indocker/registry/registry_helper.rb +0 -20
  154. data/lib/indocker/registry/registry_service.rb +0 -28
  155. data/lib/indocker/utils/ioc_container.rb +0 -17
  156. data/lib/indocker/utils/logger.rb +0 -62
  157. data/lib/indocker/utils/logger_factory.rb +0 -13
  158. data/lib/indocker/utils/registry_authenticator.rb +0 -19
  159. data/lib/indocker/utils/render_namespace.rb +0 -11
  160. data/lib/indocker/utils/render_util.rb +0 -15
  161. data/lib/indocker/utils/string_utils.rb +0 -11
  162. data/lib/indocker/utils/tar_helper.rb +0 -40
  163. data/lib/indocker/utils/test_logger_factory.rb +0 -9
  164. data/lib/indocker/volumes/volume_metadata.rb +0 -9
  165. data/lib/indocker/volumes/volume_metadata_factory.rb +0 -9
  166. data/lib/indocker/volumes/volume_metadata_repository.rb +0 -34
  167. data/spec/example/.indocker/config.rb +0 -30
  168. data/spec/example/.indocker/images_and_containers.rb +0 -25
  169. data/spec/example/assets/index.css +0 -1
  170. data/spec/example/assets/index.js +0 -1
  171. data/spec/fixtures/spec.env +0 -2
  172. data/spec/indocker/configs/config_factory_spec.rb +0 -18
  173. data/spec/indocker/configs/config_spec.rb +0 -88
  174. data/spec/indocker/container/container_builder_spec.rb +0 -67
  175. data/spec/indocker/container/container_manager_spec.rb +0 -278
  176. data/spec/indocker/docker_api/container_config_spec.rb +0 -64
  177. data/spec/indocker/docker_api/docker_api_spec.rb +0 -112
  178. data/spec/indocker/handlers/container_run_spec.rb +0 -60
  179. data/spec/indocker/image/image_builder_spec.rb +0 -153
  180. data/spec/indocker/image/image_directives_runner_spec.rb +0 -141
  181. data/spec/indocker/image/image_dockerfile_builder_spec.rb +0 -25
  182. data/spec/indocker/image/image_evaluator_spec.rb +0 -85
  183. data/spec/spec_helper.rb +0 -68
@@ -1,9 +0,0 @@
1
- module Indocker::Networks
2
- class NetworkMetadata
3
- attr_reader :name
4
-
5
- def initialize(name)
6
- @name = name
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- class Indocker::Networks::NetworkMetadataFactory
2
- include SmartIoC::Iocify
3
-
4
- bean :network_metadata_factory
5
-
6
- def create(name)
7
- Indocker::Networks::NetworkMetadata.new(name.to_s)
8
- end
9
- end
@@ -1,34 +0,0 @@
1
- class Indocker::Networks::NetworkMetadataRepository
2
- include SmartIoC::Iocify
3
-
4
- bean :network_metadata_repository
5
-
6
- def put(network_metadata)
7
- if all.any? {|n| n.name == network_metadata.name}
8
- raise Indocker::Errors::NetworkAlreadyDefined, network_metadata.name
9
- end
10
-
11
- all.push(network_metadata)
12
- end
13
-
14
- def find_by_name(name)
15
- network_metadata = @all.detect {|network| network.name == name.to_s}
16
- raise Indocker::Errors::NetworkIsNotDefined unless network_metadata
17
-
18
- network_metadata
19
- end
20
-
21
- def clear
22
- @all = []
23
- end
24
-
25
- def all
26
- @all ||= []
27
- end
28
-
29
- def method_missing(method)
30
- find_by_name(method)
31
- rescue
32
- super
33
- end
34
- end
@@ -1,8 +0,0 @@
1
- class Indocker::PartialMetadata
2
- attr_reader :name, :definition
3
-
4
- def initialize(name, &definition)
5
- @name = name
6
- @definition = definition
7
- end
8
- end
@@ -1,26 +0,0 @@
1
- class Indocker::PartialMetadataRepository
2
- include SmartIoC::Iocify
3
-
4
- bean :partial_metadata_repository
5
-
6
- def put(partial_metadata)
7
- all.push(partial_metadata)
8
- end
9
-
10
- def find_by_name(name)
11
- partial = all.detect do |p|
12
- p.name == name
13
- end
14
- raise Indocker::Errors::PartialIsNotDefined, name if partial.nil?
15
-
16
- partial
17
- end
18
-
19
- def clear
20
- @all = []
21
- end
22
-
23
- def all
24
- @all ||= []
25
- end
26
- end
@@ -1,46 +0,0 @@
1
- require 'docker_registry2'
2
-
3
- class Indocker::Registry::RegistryAPIBuilder
4
- include SmartIoC::Iocify
5
-
6
- bean :registry_api
7
-
8
- inject :config
9
-
10
- def get(registry_name)
11
- registry = config.docker.send(registry_name)
12
-
13
- Indocker::Registry::RegistryAPI.new(
14
- serveraddress: registry.serveraddress,
15
- username: registry.username,
16
- password: registry.password
17
- )
18
- end
19
- end
20
-
21
- class Indocker::Registry::RegistryAPI
22
- def initialize(serveraddress:, username:, password:)
23
- @serveraddress = serveraddress
24
- @username = username
25
- @password = password
26
- end
27
-
28
- def rmtag(repo, tag: nil)
29
- tag ||= 'latest'
30
-
31
- registry.rmtag(repo, tag)
32
- end
33
-
34
- private
35
-
36
- def registry
37
- @registry ||= DockerRegistry2.connect(@serveraddress, connection_options)
38
- end
39
-
40
- def connection_options
41
- {
42
- username: @username,
43
- password: @password
44
- }.delete_if {|_, value| value.to_s.empty?}
45
- end
46
- end
@@ -1,20 +0,0 @@
1
- module Indocker::Registry
2
- class RegistryHelper
3
- include Indocker::ImageHelper
4
-
5
- attr_reader :push, :registry
6
-
7
- def initialize(registry:, push: false)
8
- @registry = registry
9
- @push = push
10
- end
11
-
12
- def to_s
13
- registry
14
- end
15
-
16
- def get(repository, tag: nil)
17
- "#{registry}/#{full_name(repository, tag)}"
18
- end
19
- end
20
- end
@@ -1,28 +0,0 @@
1
- class Indocker::Registry::RegistryService
2
- include SmartIoC::Iocify
3
-
4
- bean :registry_service
5
-
6
- inject :config
7
-
8
- def method_missing(method, *args)
9
- if !config.docker.respond_to?(method)
10
- raise ArgumentError, "Registry #{method} is not defined. Add it to config.docker section"
11
- end
12
-
13
- registry_config = config.docker.send(method)
14
-
15
- Indocker::Registry::RegistryHelper.new(
16
- registry: registry_config.serveraddress,
17
- push: args.first[:push]
18
- )
19
- end
20
-
21
- def get(registry)
22
- if !config.docker.respond_to?(method)
23
- raise ArgumentError, "Registry #{method} is not defined. Add it to config.docker section"
24
- end
25
-
26
- config.docker.send(method).serveraddress
27
- end
28
- end
@@ -1,17 +0,0 @@
1
- require 'smart_ioc'
2
-
3
- class IocContainer
4
- class << self
5
- def [](meth, *args)
6
- SmartIoC::Container.get_instance.get_bean(meth, *args)
7
- end
8
- end
9
-
10
- def self.method_missing(meth, *args, &block)
11
- SmartIoC::Container.get_instance.get_bean(meth, *args)
12
- end
13
- end
14
-
15
- def ioc
16
- IocContainer
17
- end
@@ -1,62 +0,0 @@
1
- require 'logger'
2
- require 'colorize'
3
-
4
- class Indocker::Logger < Logger
5
- def initialize(*)
6
- super
7
- @formatter = IndockerLoggerFormatter.new
8
- end
9
-
10
- def clear
11
- # do nothing
12
- end
13
- end
14
-
15
-
16
- class Indocker::TestLogger < Indocker::Logger
17
- attr_reader :strio
18
-
19
- def initialize
20
- @strio = StringIO.new
21
- super(@strio)
22
- end
23
-
24
- def messages
25
- @strio.string.split("\n")
26
- end
27
-
28
- def clear
29
- @strio.string.clear
30
- end
31
- end
32
-
33
- class IndockerLoggerFormatter
34
- DEBUG = 'DEBUG'
35
- ERROR = 'ERROR'
36
- FATAL = 'FATAL'
37
- WARN = 'WARN'
38
- INFO = 'INFO'
39
-
40
- def call(severity, datetime, progname, msg)
41
- "#{colorize_log_level(severity)}: #{msg}\n"
42
- end
43
-
44
- private
45
-
46
- def colorize_log_level(severity)
47
- case severity
48
- when DEBUG
49
- severity.colorize(:grey)
50
- when ERROR
51
- severity.colorize(:red)
52
- when FATAL
53
- severity.colorize(:dark_red)
54
- when WARN
55
- severity.colorize(:white)
56
- when INFO
57
- severity.colorize(:green)
58
- else
59
- severity.colorize(:white)
60
- end
61
- end
62
- end
@@ -1,13 +0,0 @@
1
- class Indocker::LoggerFactory
2
- include SmartIoC::Iocify
3
-
4
- bean :logger, factory_method: :build
5
-
6
- def build
7
- STDOUT.sync = true
8
- Indocker::Logger.new(STDOUT)
9
- end
10
- end
11
-
12
-
13
-
@@ -1,19 +0,0 @@
1
- class Indocker::RegistryAvaliabilityChecker
2
- include SmartIoC::Iocify
3
-
4
- bean :registry_authenticator
5
-
6
- inject :config
7
- inject :docker_api
8
-
9
- def authenticate!(serveraddress:, username:, email:, password:)
10
- docker_api.authenticate!(
11
- serveraddress: serveraddress,
12
- username: username,
13
- email: email,
14
- password: password
15
- )
16
- rescue Docker::Error::AuthenticationError
17
- raise Indocker::Errors::DockerRegistryAuthenticationError
18
- end
19
- end
@@ -1,11 +0,0 @@
1
- class Indocker::Utils::RenderNamespace
2
- def initialize(hash)
3
- hash.each do |key, value|
4
- singleton_class.send(:define_method, key) { value }
5
- end
6
- end
7
-
8
- def get_binding
9
- binding
10
- end
11
- end
@@ -1,15 +0,0 @@
1
- require 'erb'
2
-
3
- module Indocker::Utils
4
- class RenderUtil
5
- include SmartIoC::Iocify
6
-
7
- bean :render_util
8
-
9
- def render(template, locals)
10
- namespace = Indocker::Utils::RenderNamespace.new(locals)
11
-
12
- ERB.new(template).result(namespace.get_binding)
13
- end
14
- end
15
- end
@@ -1,11 +0,0 @@
1
- class Indocker::StringUtils
2
- def self.underscore(word)
3
- word = word.dup
4
- word.gsub!(/::/, '/')
5
- word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
6
- word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
7
- word.tr!("-", "_")
8
- word.downcase!
9
- word
10
- end
11
- end
@@ -1,40 +0,0 @@
1
- require 'rubygems'
2
- require 'rubygems/package'
3
- require 'zlib'
4
- require 'fileutils'
5
-
6
- class Indocker::TarHelper
7
- include SmartIoC::Iocify
8
-
9
- bean :tar_helper
10
-
11
- def untar(io:, destination:, ignore_wrap_directory: false)
12
- files_list = []
13
-
14
- Gem::Package::TarReader.new io do |tar|
15
- tar.each do |tarfile|
16
- if ignore_wrap_directory
17
- tarfile_full_name = tarfile.full_name.split('/')[1..-1].join('/')
18
- else
19
- tarfile_full_name = tarfile.full_name
20
- end
21
-
22
- destination_file = File.join(destination, tarfile_full_name)
23
-
24
- if tarfile.directory?
25
- FileUtils.mkdir_p destination_file
26
- else
27
- files_list.push(tarfile_full_name)
28
-
29
- if !File.directory?(destination)
30
- FileUtils.mkdir_p destination
31
- end
32
-
33
- File.open(destination_file, "wb") {|f| f.print tarfile.read}
34
- end
35
- end
36
- end
37
-
38
- files_list
39
- end
40
- end
@@ -1,9 +0,0 @@
1
- class Indocker::TestLoggerFactory
2
- include SmartIoC::Iocify
3
-
4
- bean :logger, context: :test, factory_method: :build
5
-
6
- def build
7
- Indocker::TestLogger.new
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Indocker::Volumes
2
- class VolumeMetadata
3
- attr_reader :name
4
-
5
- def initialize(name)
6
- @name = name
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- class Indocker::Volumes::VolumeMetadataFactory
2
- include SmartIoC::Iocify
3
-
4
- bean :volume_metadata_factory
5
-
6
- def create(name)
7
- Indocker::Volumes::VolumeMetadata.new(name.to_s)
8
- end
9
- end
@@ -1,34 +0,0 @@
1
- class Indocker::Volumes::VolumeMetadataRepository
2
- include SmartIoC::Iocify
3
-
4
- bean :volume_metadata_repository
5
-
6
- def put(volume_metadata)
7
- if all.any? {|n| n.name == volume_metadata.name}
8
- raise Indocker::Errors::VolumeAlreadyDefined, volume_metadata.name
9
- end
10
-
11
- all.push(volume_metadata)
12
- end
13
-
14
- def find_by_name(name)
15
- volume_metadata = all.detect {|volume| volume.name == name.to_s}
16
- raise Indocker::Errors::VolumeIsNotDefined unless volume_metadata
17
-
18
- volume_metadata
19
- end
20
-
21
- def clear
22
- @all = []
23
- end
24
-
25
- def all
26
- @all ||= []
27
- end
28
-
29
- def method_missing(method)
30
- find_by_name(method)
31
- rescue
32
- super
33
- end
34
- end