indocker 0.0.6 → 0.1.4

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 (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