kontena-cli 1.4.0.pre6 → 1.4.0.pre7

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 (181) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/VERSION +1 -1
  4. data/bin/kontena +1 -1
  5. data/kontena-cli.gemspec +3 -3
  6. data/lib/kontena/cli/certificate/authorize_command.rb +67 -6
  7. data/lib/kontena/cli/certificate/get_command.rb +7 -0
  8. data/lib/kontena/cli/certificate/list_command.rb +75 -0
  9. data/lib/kontena/cli/certificate/register_command.rb +13 -2
  10. data/lib/kontena/cli/certificate/request_command.rb +20 -0
  11. data/lib/kontena/cli/certificate/show_command.rb +19 -0
  12. data/lib/kontena/cli/certificate_command.rb +4 -1
  13. data/lib/kontena/cli/cloud/master/add_command.rb +1 -1
  14. data/lib/kontena/cli/common.rb +21 -33
  15. data/lib/kontena/cli/etcd/health_command.rb +21 -27
  16. data/lib/kontena/cli/helpers/exec_helper.rb +15 -6
  17. data/lib/kontena/cli/helpers/health_helper.rb +12 -0
  18. data/lib/kontena/cli/helpers/log_helper.rb +2 -2
  19. data/lib/kontena/cli/helpers/time_helper.rb +29 -0
  20. data/lib/kontena/cli/master/init_cloud_command.rb +19 -0
  21. data/lib/kontena/cli/master/list_command.rb +1 -1
  22. data/lib/kontena/cli/master/ssh_command.rb +3 -1
  23. data/lib/kontena/cli/master/use_command.rb +1 -2
  24. data/lib/kontena/cli/node_command.rb +1 -0
  25. data/lib/kontena/cli/nodes/health_command.rb +28 -13
  26. data/lib/kontena/cli/nodes/list_command.rb +19 -3
  27. data/lib/kontena/cli/nodes/show_command.rb +4 -2
  28. data/lib/kontena/cli/nodes/ssh_command.rb +5 -2
  29. data/lib/kontena/cli/nodes/update_command.rb +2 -0
  30. data/lib/kontena/cli/plugins/install_command.rb +11 -8
  31. data/lib/kontena/cli/plugins/list_command.rb +5 -3
  32. data/lib/kontena/cli/plugins/search_command.rb +4 -2
  33. data/lib/kontena/cli/plugins/show_command.rb +17 -0
  34. data/lib/kontena/cli/plugins/uninstall_command.rb +9 -13
  35. data/lib/kontena/cli/registry/create_command.rb +1 -1
  36. data/lib/kontena/cli/services/create_command.rb +6 -0
  37. data/lib/kontena/cli/services/services_helper.rb +33 -6
  38. data/lib/kontena/cli/services/update_command.rb +6 -0
  39. data/lib/kontena/cli/stacks/build_command.rb +3 -3
  40. data/lib/kontena/cli/stacks/common.rb +105 -90
  41. data/lib/kontena/cli/stacks/deploy_command.rb +7 -3
  42. data/lib/kontena/cli/stacks/install_command.rb +39 -6
  43. data/lib/kontena/cli/stacks/list_command.rb +36 -4
  44. data/lib/kontena/cli/stacks/logs_command.rb +9 -2
  45. data/lib/kontena/cli/stacks/registry/pull_command.rb +2 -2
  46. data/lib/kontena/cli/stacks/registry/push_command.rb +20 -9
  47. data/lib/kontena/cli/stacks/registry/remove_command.rb +4 -4
  48. data/lib/kontena/cli/stacks/registry/show_command.rb +4 -4
  49. data/lib/kontena/cli/stacks/remove_command.rb +27 -1
  50. data/lib/kontena/cli/stacks/service_generator.rb +12 -2
  51. data/lib/kontena/cli/stacks/show_command.rb +35 -5
  52. data/lib/kontena/cli/stacks/stack_name.rb +71 -0
  53. data/lib/kontena/cli/stacks/upgrade_command.rb +127 -14
  54. data/lib/kontena/cli/stacks/validate_command.rb +38 -10
  55. data/lib/kontena/cli/stacks/yaml/custom_validators/certificates_validator.rb +22 -0
  56. data/lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb +1 -2
  57. data/lib/kontena/cli/stacks/yaml/reader.rb +211 -185
  58. data/lib/kontena/cli/stacks/yaml/service_extender.rb +6 -12
  59. data/lib/kontena/cli/stacks/yaml/stack_file_loader.rb +97 -0
  60. data/lib/kontena/cli/stacks/yaml/stack_file_loader/file_loader.rb +41 -0
  61. data/lib/kontena/cli/stacks/yaml/stack_file_loader/registry_loader.rb +24 -0
  62. data/lib/kontena/cli/stacks/yaml/stack_file_loader/uri_loader.rb +23 -0
  63. data/lib/kontena/cli/stacks/yaml/validations.rb +16 -0
  64. data/lib/kontena/cli/stacks/yaml/validator_v3.rb +25 -8
  65. data/lib/kontena/client.rb +2 -2
  66. data/lib/kontena/command.rb +11 -0
  67. data/lib/kontena/main_command.rb +3 -1
  68. data/lib/kontena/plugin_manager.rb +11 -198
  69. data/lib/kontena/plugin_manager/cleaner.rb +33 -0
  70. data/lib/kontena/plugin_manager/common.rb +86 -0
  71. data/lib/kontena/plugin_manager/installer.rb +54 -0
  72. data/lib/kontena/plugin_manager/loader.rb +93 -0
  73. data/lib/kontena/plugin_manager/rubygems_client.rb +42 -23
  74. data/lib/kontena/plugin_manager/uninstaller.rb +34 -0
  75. data/lib/kontena/util.rb +24 -0
  76. data/lib/kontena_cli.rb +1 -0
  77. data/omnibus/config/projects/kontena.rb +7 -1
  78. data/omnibus/config/software/{kontena.rb → kontena-cli.rb} +2 -0
  79. data/spec/fixtures/api/node.json +2 -1
  80. data/spec/fixtures/stack-internal-extend.yml +6 -1
  81. data/spec/fixtures/stack-with-dependencies-dep-1-1.yml +8 -0
  82. data/spec/fixtures/stack-with-dependencies-dep-1.yml +17 -0
  83. data/spec/fixtures/stack-with-dependencies-dep-2.yml +8 -0
  84. data/spec/fixtures/stack-with-dependencies-dep-3.yml +5 -0
  85. data/spec/fixtures/stack-with-dependencies-dep_2-removed.yml +17 -0
  86. data/spec/fixtures/stack-with-dependencies-dep_3-added.yml +25 -0
  87. data/spec/fixtures/stack-with-dependencies.yml +22 -0
  88. data/spec/fixtures/stack-with-variables.yml +3 -0
  89. data/spec/kontena/cli/etcd/health_command_spec.rb +45 -33
  90. data/spec/kontena/cli/helpers/exec_helper_spec.rb +2 -1
  91. data/spec/kontena/cli/master/init_cloud_command_spec.rb +14 -0
  92. data/spec/kontena/cli/nodes/health_command_spec.rb +74 -10
  93. data/spec/kontena/cli/nodes/list_command_spec.rb +381 -232
  94. data/spec/kontena/cli/nodes/show_command_spec.rb +31 -0
  95. data/spec/kontena/cli/nodes/ssh_command_spec.rb +18 -3
  96. data/spec/kontena/cli/plugins/install_command_spec.rb +1 -1
  97. data/spec/kontena/cli/stacks/build_command_spec.rb +6 -12
  98. data/spec/kontena/cli/stacks/common_spec.rb +42 -69
  99. data/spec/kontena/cli/stacks/install_command_spec.rb +57 -31
  100. data/spec/kontena/cli/stacks/list_command_spec.rb +44 -0
  101. data/spec/kontena/cli/stacks/logs_command_spec.rb +12 -1
  102. data/spec/kontena/cli/stacks/remove_command_spec.rb +39 -0
  103. data/spec/kontena/cli/stacks/show_command_spec.rb +16 -0
  104. data/spec/kontena/cli/stacks/stack_name_spec.rb +21 -0
  105. data/spec/kontena/cli/stacks/upgrade_command_spec.rb +73 -56
  106. data/spec/kontena/cli/stacks/validate_command_spec.rb +81 -0
  107. data/spec/kontena/cli/stacks/yaml/custom_validators/affinities_validator_spec.rb +22 -0
  108. data/spec/kontena/cli/stacks/yaml/reader_spec.rb +173 -169
  109. data/spec/kontena/cli/stacks/yaml/service_extender_spec.rb +12 -3
  110. data/spec/kontena/cli/stacks/yaml/stack_file_loader/file_loader_spec.rb +47 -0
  111. data/spec/kontena/cli/stacks/yaml/stack_file_loader/registry_loader_spec.rb +53 -0
  112. data/spec/kontena/cli/stacks/yaml/stack_file_loader/uri_loader_spec.rb +53 -0
  113. data/spec/kontena/cli/stacks/yaml/stack_file_loader_spec.rb +104 -0
  114. data/spec/kontena/cli/stacks/yaml/validator_v3_spec.rb +19 -0
  115. data/spec/kontena/plugin_manager/cleaner_spec.rb +20 -0
  116. data/spec/kontena/plugin_manager/common_spec.rb +39 -0
  117. data/spec/kontena/plugin_manager/installer_spec.rb +50 -0
  118. data/spec/kontena/plugin_manager/loader_spec.rb +5 -0
  119. data/spec/kontena/plugin_manager/rubygems_client_spec.rb +11 -25
  120. data/spec/kontena/plugin_manager/uninstaller_spec.rb +19 -0
  121. data/spec/kontena/plugin_manager_spec.rb +7 -7
  122. metadata +64 -97
  123. data/lib/kontena/cli/app_command.rb +0 -22
  124. data/lib/kontena/cli/apps/build_command.rb +0 -28
  125. data/lib/kontena/cli/apps/common.rb +0 -172
  126. data/lib/kontena/cli/apps/config_command.rb +0 -25
  127. data/lib/kontena/cli/apps/deploy_command.rb +0 -137
  128. data/lib/kontena/cli/apps/docker_compose_generator.rb +0 -61
  129. data/lib/kontena/cli/apps/docker_helper.rb +0 -80
  130. data/lib/kontena/cli/apps/dockerfile_generator.rb +0 -16
  131. data/lib/kontena/cli/apps/init_command.rb +0 -89
  132. data/lib/kontena/cli/apps/kontena_yml_generator.rb +0 -105
  133. data/lib/kontena/cli/apps/list_command.rb +0 -59
  134. data/lib/kontena/cli/apps/logs_command.rb +0 -37
  135. data/lib/kontena/cli/apps/monitor_command.rb +0 -93
  136. data/lib/kontena/cli/apps/remove_command.rb +0 -74
  137. data/lib/kontena/cli/apps/restart_command.rb +0 -39
  138. data/lib/kontena/cli/apps/scale_command.rb +0 -33
  139. data/lib/kontena/cli/apps/service_generator.rb +0 -114
  140. data/lib/kontena/cli/apps/service_generator_v2.rb +0 -27
  141. data/lib/kontena/cli/apps/show_command.rb +0 -23
  142. data/lib/kontena/cli/apps/start_command.rb +0 -40
  143. data/lib/kontena/cli/apps/stop_command.rb +0 -40
  144. data/lib/kontena/cli/apps/yaml/custom_validators/affinities_validator.rb +0 -19
  145. data/lib/kontena/cli/apps/yaml/custom_validators/build_validator.rb +0 -22
  146. data/lib/kontena/cli/apps/yaml/custom_validators/extends_validator.rb +0 -20
  147. data/lib/kontena/cli/apps/yaml/custom_validators/hooks_validator.rb +0 -54
  148. data/lib/kontena/cli/apps/yaml/custom_validators/secrets_validator.rb +0 -22
  149. data/lib/kontena/cli/apps/yaml/reader.rb +0 -213
  150. data/lib/kontena/cli/apps/yaml/service_extender.rb +0 -77
  151. data/lib/kontena/cli/apps/yaml/validations.rb +0 -71
  152. data/lib/kontena/cli/apps/yaml/validator.rb +0 -38
  153. data/lib/kontena/cli/apps/yaml/validator_v2.rb +0 -53
  154. data/spec/fixtures/app.json +0 -42
  155. data/spec/fixtures/health.yml +0 -26
  156. data/spec/fixtures/kontena-build.yml +0 -16
  157. data/spec/fixtures/kontena-internal-extend.yml +0 -8
  158. data/spec/fixtures/kontena-invalid.yml +0 -4
  159. data/spec/fixtures/kontena-with-env-file.yml +0 -18
  160. data/spec/fixtures/kontena-with-variables.yml +0 -19
  161. data/spec/fixtures/kontena.yml +0 -17
  162. data/spec/fixtures/kontena_build_v2.yml +0 -26
  163. data/spec/fixtures/kontena_numeric_version.yml +0 -9
  164. data/spec/fixtures/kontena_v2.yml +0 -35
  165. data/spec/fixtures/mysql.yml +0 -3
  166. data/spec/fixtures/wordpress-scaled.yml +0 -3
  167. data/spec/fixtures/wordpress.yml +0 -2
  168. data/spec/kontena/cli/app/build_command_spec.rb +0 -55
  169. data/spec/kontena/cli/app/common_spec.rb +0 -110
  170. data/spec/kontena/cli/app/config_command_spec.rb +0 -78
  171. data/spec/kontena/cli/app/deploy_command_spec.rb +0 -217
  172. data/spec/kontena/cli/app/docker_helper_spec.rb +0 -155
  173. data/spec/kontena/cli/app/init_command_spec.rb +0 -109
  174. data/spec/kontena/cli/app/logs_command_spec.rb +0 -131
  175. data/spec/kontena/cli/app/scale_spec.rb +0 -51
  176. data/spec/kontena/cli/app/service_generator_spec.rb +0 -384
  177. data/spec/kontena/cli/app/service_generator_v2_spec.rb +0 -73
  178. data/spec/kontena/cli/app/yaml/reader_spec.rb +0 -457
  179. data/spec/kontena/cli/app/yaml/service_extender_spec.rb +0 -127
  180. data/spec/kontena/cli/app/yaml/validator_spec.rb +0 -380
  181. data/spec/kontena/cli/app/yaml/validator_v2_spec.rb +0 -301
@@ -1,131 +0,0 @@
1
- require "kontena/cli/apps/logs_command"
2
-
3
- describe Kontena::Cli::Apps::LogsCommand do
4
- include FixturesHelpers
5
-
6
- let(:subject) do
7
- described_class.new(File.basename($0))
8
- end
9
-
10
- let(:client) do
11
- double("client")
12
- end
13
-
14
- let(:token) do
15
- "testtoken"
16
- end
17
-
18
- let(:current_grid) do
19
- 'test-grid'
20
- end
21
-
22
- let(:service_prefix) do
23
- 'test'
24
- end
25
-
26
- before (:each) do
27
- allow(subject).to receive(:token) { token }
28
- allow(subject).to receive(:client) { client }
29
- allow(subject).to receive(:service_prefix) { service_prefix }
30
- allow(subject).to receive(:current_grid) { current_grid }
31
- end
32
-
33
- context 'with multiple services' do
34
- let(:kontena_yml) do
35
- fixture('kontena.yml')
36
- end
37
-
38
- let(:docker_compose_yml) do
39
- fixture('docker-compose.yml')
40
- end
41
-
42
- # globally ordered logs across multiple services
43
- let (:logs) do
44
- [
45
- {
46
- 'id' => '57cff2e8cfee65c8b6efc8bd',
47
- 'name' => 'test-mysql-1',
48
- 'created_at' => '2016-09-07T15:19:04.362690',
49
- 'data' => "mysql log message 1",
50
- },
51
- {
52
- 'id' => '57cff2e8cfee65c8b6efc8be',
53
- 'name' => 'test-mysql-1',
54
- 'created_at' => '2016-09-07T15:19:04.500000',
55
- 'data' => "mysql log message 2",
56
- },
57
- {
58
- 'id' => '57cff2e8cfee65c8b6efc8bf',
59
- 'name' => 'test-wordpress-1',
60
- 'created_at' => '2016-09-07T15:19:05.362690',
61
- 'data' => "wordpress log message 1-1",
62
- },
63
- {
64
- 'id' => '57cff2e8cfee65c8b6efc8c1',
65
- 'name' => 'test-mysql-1',
66
- 'created_at' => '2016-09-07T15:19:06.100000',
67
- 'data' => "mysql log message 3",
68
- },
69
- {
70
- 'id' => '57cff2e8cfee65c8b6efc8c2',
71
- 'name' => 'test-wordpress-1',
72
- 'created_at' => '2016-09-07T15:19:07.100000',
73
- 'data' => "wordpress log message 1-2",
74
- },
75
- ]
76
- end
77
-
78
- before (:each) do
79
- # mock kontena.yml services
80
- expect(subject).to receive(:require_config_file).with("kontena.yml")
81
- allow(File).to receive(:read).with("#{Dir.getwd}/kontena.yml").and_return(kontena_yml)
82
- allow(File).to receive(:read).with("#{Dir.getwd}/docker-compose.yml").and_return(docker_compose_yml)
83
-
84
- # collect show_log() output
85
- @logs = []
86
-
87
- allow(subject).to receive(:show_log) do |log|
88
- @logs << log
89
- end
90
- end
91
-
92
- it "shows all service logs" do
93
- expect(client).to receive(:get).with('grids/test-grid/container_logs', {
94
- services: 'test-wordpress,test-mysql',
95
- limit: 100,
96
- }) { { 'logs' => logs } }
97
-
98
- subject.run([])
99
-
100
- expect(@logs).to eq logs
101
- end
102
-
103
- it "shows logs for one service" do
104
- mysql_logs = logs.select{|log| log['name'] =~ /test-mysql-/ }
105
-
106
- expect(client).to receive(:get).with('grids/test-grid/container_logs', {
107
- services: 'test-mysql',
108
- limit: 100,
109
- }) { { 'logs' => mysql_logs } }
110
-
111
- subject.run(["mysql"])
112
-
113
- expect(@logs).to eq mysql_logs
114
- end
115
-
116
- it "shows logs since time" do
117
- since = '2016-09-07T15:19:05.362690'
118
- since_logs = logs.select{|log| log['created_at'] > since }
119
-
120
- expect(client).to receive(:get).with('grids/test-grid/container_logs', {
121
- services: 'test-wordpress,test-mysql',
122
- limit: 100,
123
- since: since,
124
- }) { { 'logs' => since_logs } }
125
-
126
- subject.run(["--since=#{since}"])
127
-
128
- expect(@logs).to eq since_logs
129
- end
130
- end
131
- end
@@ -1,51 +0,0 @@
1
- require "kontena/cli/apps/scale_command"
2
-
3
- describe Kontena::Cli::Apps::ScaleCommand do
4
- include FixturesHelpers
5
- include ClientHelpers
6
-
7
- let(:subject) do
8
- described_class.new(File.basename($0))
9
- end
10
-
11
- let(:kontena_yml) do
12
- fixture('wordpress-scaled.yml')
13
- end
14
-
15
- let(:kontena_yml_no_instances) do
16
- fixture('wordpress.yml')
17
- end
18
-
19
- describe '#execute' do
20
- before(:each) do
21
- allow(subject).to receive(:current_dir).and_return("kontena-test")
22
- allow(File).to receive(:exists?).and_return(true)
23
- allow(File).to receive(:read).with("#{Dir.getwd}/kontena.yml").and_return(kontena_yml)
24
- end
25
-
26
- context 'when service already contains instances property' do
27
- it 'aborts execution' do
28
- expect{
29
- subject.run(['wordpress', 3])
30
- }.to exit_with_error
31
- end
32
- end
33
-
34
- context 'when service not found in YML' do
35
- it 'aborts execution' do
36
- expect{
37
- subject.run(['mysql', 3])
38
- }.to exit_with_error
39
- end
40
- end
41
-
42
- it 'scales given service' do
43
- allow(File).to receive(:read).with("#{Dir.getwd}/kontena.yml").and_return(kontena_yml_no_instances)
44
- allow(subject).to receive(:wait_for_deploy_to_finish).and_return(true)
45
- expect(subject).to receive(:scale_service).with(duck_type(:access_token), 'kontena-test-wordpress', 3)
46
-
47
- subject.run(['wordpress', 3])
48
- end
49
-
50
- end
51
- end
@@ -1,384 +0,0 @@
1
- require "kontena/cli/apps/service_generator"
2
-
3
- describe Kontena::Cli::Apps::ServiceGenerator do
4
- let(:subject) do
5
- described_class.new({})
6
- end
7
-
8
- describe '#parse_data' do
9
- context 'volumes' do
10
- it 'returns volumes if set' do
11
- data = {
12
- 'image' => 'foo/bar:latest',
13
- 'volumes' => [
14
- 'mongodb-1'
15
- ]
16
- }
17
- result = subject.send(:parse_data, data)
18
- expect(result['volumes']).to eq(data['volumes'])
19
- end
20
-
21
- it 'returns empty volumes if not set' do
22
- data = {
23
- 'image' => 'foo/bar:latest'
24
- }
25
- result = subject.send(:parse_data, data)
26
- expect(result['volumes']).to eq([])
27
- end
28
- end
29
-
30
- context 'volumes_from' do
31
- it 'returns volumes_from if set' do
32
- data = {
33
- 'image' => 'foo/bar:latest',
34
- 'volumes_from' => [
35
- 'mongodb-1'
36
- ]
37
- }
38
- result = subject.send(:parse_data, data)
39
- expect(result['volumes_from']).to eq(data['volumes_from'])
40
- end
41
-
42
- it 'returns empty volumes_from if not set' do
43
- data = {
44
- 'image' => 'foo/bar:latest'
45
- }
46
- result = subject.send(:parse_data, data)
47
- expect(result['volumes_from']).to eq([])
48
- end
49
- end
50
-
51
- context 'command' do
52
- it 'returns cmd array if set' do
53
- data = {
54
- 'image' => 'foo/bar:latest',
55
- 'command' => 'ls -la'
56
- }
57
- result = subject.send(:parse_data, data)
58
- expect(result['cmd']).to eq(data['command'].split(' '))
59
- end
60
-
61
- it 'does not return cmd if not set' do
62
- data = {
63
- 'image' => 'foo/bar:latest'
64
- }
65
- result = subject.send(:parse_data, data)
66
- expect(result.has_key?('cmd')).to be_falsey
67
- end
68
- end
69
-
70
- context 'affinity' do
71
- it 'returns affinity if set' do
72
- data = {
73
- 'image' => 'foo/bar:latest',
74
- 'affinity' => [
75
- 'label==az=b'
76
- ]
77
- }
78
- result = subject.send(:parse_data, data)
79
- expect(result['affinity']).to eq(data['affinity'])
80
- end
81
-
82
- it 'returns affinity as empty array if not set' do
83
- data = {
84
- 'image' => 'foo/bar:latest'
85
- }
86
- result = subject.send(:parse_data, data)
87
- expect(result.has_key?('affinity')).to be_truthy
88
- expect(result['affinity']).to eq([])
89
- end
90
- end
91
-
92
- context 'user' do
93
- it 'returns user if set' do
94
- data = {
95
- 'image' => 'foo/bar:latest',
96
- 'user' => 'user'
97
- }
98
- result = subject.send(:parse_data, data)
99
- expect(result['user']).to eq('user')
100
- end
101
-
102
- it 'does not return user if not set' do
103
- data = {
104
- 'image' => 'foo/bar:latest'
105
- }
106
- result = subject.send(:parse_data, data)
107
- expect(result.has_key?('user')).to be_falsey
108
- end
109
- end
110
-
111
- context 'stateful' do
112
- it 'returns stateful if set' do
113
- data = {
114
- 'image' => 'foo/bar:latest',
115
- 'stateful' => true
116
- }
117
- result = subject.send(:parse_data, data)
118
- expect(result['stateful']).to eq(true)
119
- end
120
-
121
- it 'returns stateful as false if not set' do
122
- data = {
123
- 'image' => 'foo/bar:latest'
124
- }
125
- result = subject.send(:parse_data, data)
126
- expect(result['stateful']).to eq(false)
127
- end
128
- end
129
-
130
- context 'links' do
131
- it 'returns empty array if links not set' do
132
- data = {
133
- 'image' => 'wordpress:latest'
134
- }
135
- result = subject.send(:parse_data, data)
136
- expect(result['links']).to eq([])
137
- end
138
-
139
- it 'returns parsed links array' do
140
- data = {
141
- 'image' => 'wordpress:latest',
142
- 'links' => ['mysql:db']
143
- }
144
- result = subject.send(:parse_data, data)
145
- expect(result['links']).to eq([{
146
- 'name' => 'mysql',
147
- 'alias' => 'db'
148
- }])
149
- end
150
- end
151
- context 'privileged' do
152
- it 'returns privileged if set' do
153
- data = {
154
- 'image' => 'foo/bar:latest',
155
- 'privileged' => false
156
- }
157
- result = subject.send(:parse_data, data)
158
- expect(result['privileged']).to eq(false)
159
- end
160
-
161
- it 'does not return privileged if not set' do
162
- data = {
163
- 'image' => 'foo/bar:latest'
164
- }
165
- result = subject.send(:parse_data, data)
166
- expect(result['privileged']).to be_nil
167
- end
168
- end
169
-
170
- context 'cap_add' do
171
- it 'returns cap_drop if set' do
172
- data = {
173
- 'image' => 'foo/bar:latest',
174
- 'cap_add' => [
175
- 'NET_ADMIN'
176
- ]
177
- }
178
- result = subject.send(:parse_data, data)
179
- expect(result['cap_add']).to eq(data['cap_add'])
180
- end
181
-
182
- it 'does not return cap_add if not set' do
183
- data = {
184
- 'image' => 'foo/bar:latest'
185
- }
186
- result = subject.send(:parse_data, data)
187
- expect(result['cap_add']).to be_nil
188
- end
189
- end
190
-
191
- context 'cap_drop' do
192
- it 'returns cap_drop if set' do
193
- data = {
194
- 'image' => 'foo/bar:latest',
195
- 'cap_drop' => [
196
- 'NET_ADMIN'
197
- ]
198
- }
199
- result = subject.send(:parse_data, data)
200
- expect(result['cap_drop']).to eq(data['cap_drop'])
201
- end
202
-
203
- it 'does not return cap_drop if not set' do
204
- data = {
205
- 'image' => 'foo/bar:latest'
206
- }
207
- result = subject.send(:parse_data, data)
208
- expect(result['cap_drop']).to be_nil
209
- end
210
- end
211
-
212
- context 'net' do
213
- it 'returns net if set' do
214
- data = {
215
- 'image' => 'foo/bar:latest',
216
- 'net' => 'host'
217
- }
218
- result = subject.send(:parse_data, data)
219
- expect(result['net']).to eq('host')
220
- end
221
-
222
- it 'does not return pid if not set' do
223
- data = {
224
- 'image' => 'foo/bar:latest'
225
- }
226
- result = subject.send(:parse_data, data)
227
- expect(result['net']).to be_nil
228
- end
229
- end
230
-
231
- context 'pid' do
232
- it 'returns pid if set' do
233
- data = {
234
- 'image' => 'foo/bar:latest',
235
- 'pid' => 'host'
236
- }
237
- result = subject.send(:parse_data, data)
238
- expect(result['pid']).to eq('host')
239
- end
240
-
241
- it 'does not return pid if not set' do
242
- data = {
243
- 'image' => 'foo/bar:latest'
244
- }
245
- result = subject.send(:parse_data, data)
246
- expect(result['pid']).to be_nil
247
- end
248
- end
249
-
250
- context 'log_driver' do
251
- it 'returns log_driver if set' do
252
- data = {
253
- 'image' => 'foo/bar:latest',
254
- 'log_driver' => 'syslog'
255
- }
256
- result = subject.send(:parse_data, data)
257
- expect(result['log_driver']).to eq('syslog')
258
- end
259
-
260
- it 'does not return log_driver if not set' do
261
- data = {
262
- 'image' => 'foo/bar:latest'
263
- }
264
- result = subject.send(:parse_data, data)
265
- expect(result['log_driver']).to be_nil
266
- end
267
- end
268
-
269
- context 'log_opt' do
270
- it 'returns log_opts hash if log_opt is set' do
271
- data = {
272
- 'image' => 'foo/bar:latest',
273
- 'log_driver' => 'fluentd',
274
- 'log_opt' => {
275
- 'fluentd-address' => '192.168.99.1:24224',
276
- 'fluentd-tag' => 'docker.{{.Name}}'
277
- }
278
- }
279
- result = subject.send(:parse_data, data)
280
- expect(result['log_opts']).to eq(data['log_opt'])
281
- end
282
-
283
- it 'does not return log_opts if log_opt is not set' do
284
- data = {
285
- 'image' => 'foo/bar:latest'
286
- }
287
- result = subject.send(:parse_data, data)
288
- expect(result['log_opts']).to be_nil
289
- end
290
- end
291
-
292
- context 'deploy_opts' do
293
- it 'returns deploy_opts if deploy.wait_for_port is defined' do
294
- data = {
295
- 'image' => 'foo/bar:latest',
296
- 'deploy' => {
297
- 'wait_for_port' => '8080'
298
- }
299
- }
300
- result = subject.send(:parse_data, data)
301
- expect(result['deploy_opts']['wait_for_port']).to eq('8080')
302
- end
303
-
304
- it 'returns deploy_opts if deploy.min_health is defined' do
305
- data = {
306
- 'image' => 'foo/bar:latest',
307
- 'deploy' => {
308
- 'min_health' => '0.5'
309
- }
310
- }
311
- result = subject.send(:parse_data, data)
312
- expect(result['deploy_opts']['min_health']).to eq('0.5')
313
- end
314
-
315
- it 'sets strategy if deploy.strategy is defined' do
316
- data = {
317
- 'image' => 'foo/bar:latest',
318
- 'deploy' => {
319
- 'strategy' => 'daemon'
320
- }
321
- }
322
- result = subject.send(:parse_data, data)
323
- expect(result['strategy']).to eq('daemon')
324
- end
325
-
326
- it 'sets interval if deploy.interval is defined' do
327
- data = {
328
- 'image' => 'foo/bar:latest',
329
- 'deploy' => {
330
- 'interval' => '1min'
331
- }
332
- }
333
- result = subject.send(:parse_data, data)
334
- expect(result['deploy_opts']['interval']).to eq(60)
335
- end
336
-
337
- it 'does not return deploy_opts if no deploy options are defined' do
338
- data = {
339
- 'image' => 'foo/bar:latest'
340
- }
341
- result = subject.send(:parse_data, data)
342
- expect(result['deploy_opts']).to be_nil
343
- end
344
- end
345
-
346
- context 'hooks' do
347
- it 'returns hooks hash if defined' do
348
- data = {
349
- 'image' => 'foo/bar:latest',
350
- 'hooks' => {
351
- 'post_start' => []
352
- }
353
- }
354
- result = subject.send(:parse_data, data)
355
- expect(result['hooks']).to eq(data['hooks'])
356
- end
357
-
358
- it 'does returns empty hook hash if not defined' do
359
- data = {'image' => 'foo/bar:latest'}
360
- result = subject.send(:parse_data, data)
361
- expect(result['hooks']).to eq({})
362
- end
363
- end
364
-
365
- context 'secrets' do
366
- it 'returns secrets array if defined' do
367
- data = {
368
- 'image' => 'foo/bar:latest',
369
- 'secrets' => [
370
- {'secret' => 'MYSQL_ADMIN_PASSWORD', 'name' => 'WORDPRESS_DB_PASSWORD', 'type' => 'env'}
371
- ]
372
- }
373
- result = subject.send(:parse_data, data)
374
- expect(result['secrets']).to eq(data['secrets'])
375
- end
376
-
377
- it 'does not return secrets if not defined' do
378
- data = {'image' => 'foo/bar:latest'}
379
- result = subject.send(:parse_data, data)
380
- expect(result['secrets']).to be_nil
381
- end
382
- end
383
- end
384
- end