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,30 +0,0 @@
1
- Idocker.setup do
2
- namespace 'indocker_example'
3
-
4
- load_env_file '.indocker/env_files'
5
- load_docker_items [
6
- '.indocker/images_and_containers.rb'
7
- ]
8
-
9
- docker do
10
- registry :indocker do
11
- serveraddress: 'localhost:1000'
12
- end
13
- end
14
-
15
- git do
16
- cache_dir '/tmp/indocker'
17
-
18
- repo :indocker do
19
- repository 'https://github.com/droidlabs/indocker'
20
- branch 'master'
21
- end
22
- end
23
-
24
- docker do
25
- registry 'localhost:1000'
26
- skip_push true
27
- end
28
-
29
- build_server :build_server
30
- end
@@ -1,25 +0,0 @@
1
- Indocker.define_image 'sample_package' do
2
- before_build do
3
- docker_cp 'assets_compiler' do
4
- copy 'assets' => 'assets'
5
- end
6
- end
7
-
8
- from 'ubuntu'
9
-
10
- run 'mkdir /app'
11
- workdir 'app'
12
- entrypoint 'ls > ls.txt'
13
-
14
- cmd 'pwd'
15
- end
16
-
17
- Indocker.define_container 'assets_compiler' do
18
- use images.assets_compiler
19
- end
20
-
21
- Indocker.define_image 'assets_compiler' do
22
- from 'ubuntu'
23
-
24
- copy 'assets/.', '/assets'
25
- end
@@ -1 +0,0 @@
1
- * { display: <%= display %>; }
@@ -1 +0,0 @@
1
- <% if use_strict %>'use strict';<% end %>
@@ -1,2 +0,0 @@
1
- RUBY_ENV=development
2
- RAILS_ENV=development
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Indocker::Configs::ConfigFactory do
4
- subject { ioc.config }
5
-
6
- it 'returns Indocker::Configs::Config object' do
7
- expect(subject).to be_a(Indocker::Configs::Config)
8
- end
9
-
10
- context '#option' do
11
- it 'pass method to Indocker::Configs::Config object' do
12
- subject.option(:example_method)
13
- subject.example_method('example_value')
14
-
15
- expect(subject.example_method).to eq('example_value')
16
- end
17
- end
18
- end
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Indocker::Configs::Config do
4
- subject { described_class.new }
5
-
6
- context 'restricts to use reserved keywords' do
7
- it 'raise Indocker::Errors::ReservedKeywordUsed "option" name' do
8
- expect{
9
- subject.option(:config)
10
- }.to raise_error(Indocker::Errors::ReservedKeywordUsed)
11
- end
12
-
13
- it 'restrict to use "config" name' do
14
- expect{
15
- subject.config('hash_config')
16
- }.to raise_error(Indocker::Errors::ReservedKeywordUsed)
17
- end
18
-
19
- it 'restrict to use "hash_config" name' do
20
- expect{
21
- subject.hash_config(:option)
22
- }.to raise_error(Indocker::Errors::ReservedKeywordUsed)
23
- end
24
- end
25
-
26
- describe '#option' do
27
- it 'creates setter and getter methods with the same name' do
28
- subject.option(:some_key, group: :default, type: :string)
29
- subject.some_key('some_value')
30
-
31
- expect(subject.some_key).to eq('some_value')
32
- end
33
-
34
- it 'validates setter value with :type attribute' do
35
- subject.option(:some_key, group: :default, type: :boolean)
36
-
37
- expect{
38
- subject.some_key('test')
39
- }.to raise_error(Indocker::Errors::ConfigOptionTypeMismatch, 'Expected option :some_key => "test" to be a :boolean, not a :string')
40
- end
41
- end
42
-
43
- describe '#config' do
44
- it 'creates getter and subconfiguration object for single option' do
45
- subject.config(:example_config) do
46
- option(:key1)
47
- option(:key2, type: :array)
48
- end
49
-
50
- subject.example_config.key1('value1')
51
- subject.example_config.key2(['value2'])
52
-
53
- expect(subject.example_config.key1).to eq('value1')
54
- expect(subject.example_config.key2).to match(['value2'])
55
- end
56
-
57
- it 'creates getter and subconfig for subconfiguration' do
58
- subject.config(:parent_config) do
59
- config(:child_config) do
60
- option(:child_option)
61
- end
62
- end
63
-
64
- subject.parent_config.child_config.child_option('Hello World')
65
-
66
- expect(subject.parent_config.child_config.child_option).to eq('Hello World')
67
- end
68
- end
69
-
70
- describe '#hash_config' do
71
- it 'create subconfiguration for each hash_config key' do
72
- subject.hash_config(:multi) do
73
- option(:key1)
74
- end
75
-
76
- subject.multi(:config1) do
77
- key1('value 1')
78
- end
79
-
80
- subject.multi(:config2) do
81
- key1('value 2')
82
- end
83
-
84
- expect(subject.config1.key1).to eq('value 1')
85
- expect(subject.config2.key1).to eq('value 2')
86
- end
87
- end
88
- end
@@ -1,67 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # TODO: rename to ContainerConfigBuilder
4
- describe Indocker::ContainerBuilder do
5
- describe '#build' do
6
- subject { ioc.container_builder }
7
-
8
- before(:all) do
9
- Indocker.define_image :indocker_image do
10
- from 'ruby:2.3.1'
11
- workdir '/app'
12
- cmd 'ls'
13
- end
14
-
15
- Indocker.define_network :indocker_network
16
- Indocker.define_volume :indocker_volume
17
-
18
- Indocker.define_container :indocker_container do
19
- use images.find_by_repo(:indocker_image, tag: :latest)
20
- use networks.find_by_name(:indocker_network)
21
-
22
- mount volumes.find_by_name(:indocker_volume), to: '/tmp'
23
-
24
- env_file File.join(__dir__, '../../fixtures/spec.env')
25
- ports '2000:3000'
26
- cmd '/bin/bash'
27
- end
28
- end
29
-
30
- after(:all) { truncate_docker_items }
31
-
32
- it 'returns instance of Indocker::DockerAPI::ContainerConfig' do
33
- expect(
34
- subject.build(:indocker_container)
35
- ).to be_a(Indocker::DockerAPI::ContainerConfig)
36
- end
37
-
38
- it 'returns config with valid params' do
39
- result = subject.build(:indocker_container)
40
-
41
- expect(result.image).to eq('indocker_image:latest')
42
- expect(result.name).to eq(:indocker_container)
43
- expect(result.cmd).to eq('/bin/bash')
44
- expect(result.env).to match(['RUBY_ENV=development', 'RAILS_ENV=development'])
45
-
46
- expect(result.exposed_ports).to be_a(Indocker::DockerAPI::ContainerConfig::ExposedPortsConfig)
47
- expect(result.exposed_ports.ports).to eq(['2000'])
48
-
49
- expect(result.host_config).to be_a(Indocker::DockerAPI::ContainerConfig::HostConfig)
50
- expect(result.host_config.port_bindings).to match([
51
- {
52
- container_port: '2000',
53
- host_port: '3000'
54
- }
55
- ])
56
- expect(result.host_config.binds).to match([
57
- {
58
- name: 'indocker_volume',
59
- to: '/tmp'
60
- }
61
- ])
62
-
63
- expect(result.volumes_config).to be_a(Indocker::DockerAPI::ContainerConfig::VolumesConfig)
64
- expect(result.volumes_config.volumes).to eq(['/indocker_volume'])
65
- end
66
- end
67
- end
@@ -1,278 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Indocker::ContainerManager do
4
- before(:all) do
5
- Indocker.define_image 'indocker_image' do
6
- from 'alpine:latest'
7
- cmd %w(ls)
8
- end
9
-
10
- ioc.image_builder.build('indocker_image')
11
-
12
- Indocker.define_container 'indocker_container' do
13
- use images.find_by_repo(:indocker_image)
14
- end
15
- end
16
-
17
- after(:all) { truncate_docker_items }
18
-
19
- describe '#run' do
20
- before(:all) { ioc.container_manager.run('indocker_container') }
21
- after(:all) { ioc.docker_api.delete_container('indocker_container') }
22
-
23
- it 'creates container' do
24
- expect(
25
- ioc.docker_api.container_exists?('indocker_container')
26
- ).to be true
27
- end
28
-
29
- it 'starts container' do
30
- sleep 1 # wait when container stops
31
-
32
- expect(
33
- ioc.docker_api.get_container_state('indocker_container')
34
- ).to eq(Indocker::ContainerMetadata::States::EXITED)
35
- end
36
- end
37
-
38
- describe '#create' do
39
- before(:all) { ioc.container_manager.create('indocker_container') }
40
- after(:all) { ioc.docker_api.delete_container('indocker_container') }
41
-
42
- it 'creates container' do
43
- expect(
44
- ioc.docker_api.container_exists?('indocker_container')
45
- ).to be true
46
- end
47
- end
48
-
49
- describe '#start' do
50
- context 'with ready timeout' do
51
- context 'if ready returns true' do
52
- before(:all) do
53
- Indocker.define_container 'indocker_timeout_container' do
54
- use images.find_by_repo(:indocker_image)
55
-
56
- ready sleep: 0.1, timeout: 1 do
57
- sleep 0.5
58
- true
59
- end
60
- end
61
-
62
- ioc.container_manager.create('indocker_timeout_container')
63
- end
64
-
65
- it 'starts container if ready_block returns true' do
66
- ioc.container_manager.start('indocker_timeout_container')
67
-
68
- sleep 1 # wait when container stops
69
-
70
- expect(
71
- ioc.docker_api.get_container_state('indocker_timeout_container')
72
- ).to eq(Indocker::ContainerMetadata::States::EXITED)
73
- end
74
- end
75
-
76
- context 'if ready returns false' do
77
- before(:all) do
78
- Indocker.define_container 'indocker_timeout_error_container' do
79
- use images.find_by_repo(:indocker_image)
80
-
81
- ready sleep: 0.1, timeout: 1 do
82
- false
83
- end
84
- end
85
-
86
- ioc.container_manager.create('indocker_timeout_error_container')
87
- end
88
-
89
- it 'raises Indocker::Errors::ContainerTimeoutError error if ready_block returns false' do
90
- expect{
91
- ioc.container_manager.start('indocker_timeout_error_container')
92
- }.to raise_error(Indocker::Errors::ContainerTimeoutError)
93
- end
94
- end
95
-
96
- context 'if ready reaches timeout' do
97
- before(:all) do
98
- Indocker.define_container 'indocker_timeout_reached_container' do
99
- use images.find_by_repo(:indocker_image)
100
-
101
- ready sleep: 0.1, timeout: 1 do
102
- sleep 2
103
-
104
- true
105
- end
106
- end
107
-
108
- ioc.container_manager.create('indocker_timeout_reached_container')
109
- end
110
-
111
- it 'raises Indocker::Errors::ContainerTimeoutError error if ready_block returns false' do
112
- expect{
113
- ioc.container_manager.start('indocker_timeout_reached_container')
114
- }.to raise_error(Indocker::Errors::ContainerTimeoutError)
115
- end
116
- end
117
- end
118
-
119
- context 'with container dependencies' do
120
- before(:all) do
121
- Indocker.define_container 'indocker_container_depends_on' do
122
- use images.find_by_repo(:indocker_image)
123
-
124
- depends_on containers.get_by_name('indocker_container')
125
- end
126
-
127
- ioc.container_manager.create('indocker_container_depends_on')
128
- end
129
-
130
- after(:all) { ioc.docker_api.delete_container('indocker_container') }
131
-
132
- it 'starts dependency container before' do
133
- ioc.container_manager.start('indocker_container_depends_on')
134
-
135
- sleep 1 # wait when container stops
136
-
137
- expect(
138
- ioc.docker_api.get_container_state('indocker_container')
139
- ).to eq(Indocker::ContainerMetadata::States::EXITED)
140
- end
141
- end
142
-
143
- context 'with specified volume' do
144
- before(:all) do
145
- Indocker.define_volume 'indocker_volume'
146
-
147
- Indocker.define_container 'indocker_volume_container' do
148
- use images.find_by_repo(:indocker_image)
149
- mount volumes.find_by_name('indocker_volume'), to: '/app'
150
- end
151
-
152
- ioc.container_manager.create('indocker_volume_container')
153
- ioc.container_manager.start('indocker_volume_container')
154
- end
155
-
156
- after(:all) do
157
- ioc.docker_api.delete_container('indocker_volume_container')
158
- ioc.docker_api.delete_volume('indocker_volume')
159
- end
160
-
161
- it 'creates volume before start' do
162
- expect(
163
- ioc.docker_api.volume_exists?('indocker_volume')
164
- ).to be true
165
- end
166
- end
167
-
168
- context 'with specified network' do
169
- before(:all) do
170
- Indocker.define_network 'indocker_network'
171
-
172
- Indocker.define_container 'indocker_network_container' do
173
- use images.find_by_repo(:indocker_image)
174
- use networks.indocker_network
175
- end
176
-
177
- ioc.container_manager.create('indocker_network_container')
178
- ioc.container_manager.start('indocker_network_container')
179
- end
180
-
181
- after(:all) do
182
- ioc.container_manager.delete('indocker_network_container')
183
- ioc.docker_api.delete_network('indocker_network')
184
- end
185
-
186
- context 'creates network before start' do
187
- it 'for new network' do
188
- expect(
189
- ioc.docker_api.get_network_id('indocker_network')
190
- ).to match(/[\w\d]{64}/)
191
-
192
- expect(ioc.docker_api.network_exists?('indocker_network')).to be true
193
- end
194
-
195
- it 'if network already exists' do
196
- ioc.container_manager.stop('indocker_network_container')
197
- ioc.container_manager.start('indocker_network_container')
198
-
199
- expect(
200
- ioc.docker_api.get_network_id('indocker_network')
201
- ).to match(/[\w\d]{64}/)
202
-
203
- expect(ioc.docker_api.network_exists?('indocker_network')).to be true
204
- end
205
- end
206
-
207
- it 'connect container to specified network' do
208
- expect(
209
- ioc.docker_api.inspect_network('indocker_network')['Containers'].keys
210
- ).to include(
211
- ioc.docker_api.get_container_id('indocker_network_container')
212
- )
213
- end
214
-
215
- it 'starts container' do
216
- sleep 1 # wait when container stops
217
-
218
- expect(
219
- ioc.docker_api.get_container_state(
220
- ioc.docker_api.get_container_id('indocker_network_container')
221
- )
222
- ).to eq(Indocker::ContainerMetadata::States::EXITED)
223
- end
224
- end
225
- end
226
-
227
- describe '#copy' do
228
- let(:copy_to_path) { ioc.config.build_dir.join('indocker_list_container_files') }
229
-
230
- before(:all) do
231
- Indocker.define_image 'indocker_copy_image' do
232
- from 'alpine'
233
-
234
- run "mkdir -p /sample/deeper &&
235
- echo 'example1.txt' > /sample/example1.txt &&
236
- echo 'example3.txt' > /sample/deeper/example2.txt"
237
- end
238
-
239
- Indocker.define_container :indocker_copy_container do
240
- use images.find_by_repo('indocker_copy_image')
241
- end
242
-
243
- ioc.image_builder.build('indocker_copy_image')
244
- ioc.container_manager.create('indocker_copy_container')
245
- end
246
-
247
- it 'returns files list' do
248
- expect(
249
- ioc.container_manager.copy(
250
- name: :indocker_copy_container,
251
- copy_from: '/sample/deeper',
252
- copy_to: copy_to_path
253
- )
254
- ).to match(['deeper/example2.txt'])
255
- end
256
-
257
- it 'copies files to output path' do
258
- ioc.container_manager.copy(
259
- name: :indocker_copy_container,
260
- copy_from: '/sample/.',
261
- copy_to: copy_to_path
262
- )
263
-
264
- ensure_content(File.join(copy_to_path, 'example1.txt'), 'example1.txt')
265
- ensure_content(File.join(copy_to_path, 'deeper/example2.txt'), 'example3.txt')
266
- end
267
-
268
- it 'copies single file' do
269
- ioc.container_manager.copy(
270
- name: :indocker_copy_container,
271
- copy_from: '/sample/example1.txt',
272
- copy_to: copy_to_path
273
- )
274
-
275
- ensure_content(File.join(copy_to_path, 'example1.txt'), 'example1.txt')
276
- end
277
- end
278
- end