kontena-cli 0.11.7 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/kontena +2 -4
  4. data/kontena-cli.gemspec +1 -0
  5. data/lib/kontena/cli/app_command.rb +1 -1
  6. data/lib/kontena/cli/apps/common.rb +30 -3
  7. data/lib/kontena/cli/apps/deploy_command.rb +1 -0
  8. data/lib/kontena/cli/apps/list_command.rb +1 -0
  9. data/lib/kontena/cli/apps/logs_command.rb +9 -3
  10. data/lib/kontena/cli/apps/monitor_command.rb +1 -0
  11. data/lib/kontena/cli/apps/remove_command.rb +2 -0
  12. data/lib/kontena/cli/apps/scale_command.rb +2 -1
  13. data/lib/kontena/cli/apps/show_command.rb +1 -0
  14. data/lib/kontena/cli/apps/start_command.rb +1 -0
  15. data/lib/kontena/cli/apps/stop_command.rb +1 -0
  16. data/lib/kontena/cli/common.rb +5 -1
  17. data/lib/kontena/cli/containers/exec_command.rb +1 -0
  18. data/lib/kontena/cli/containers/inspect_command.rb +1 -0
  19. data/lib/kontena/cli/etcd/get_command.rb +2 -1
  20. data/lib/kontena/cli/etcd/list_command.rb +1 -0
  21. data/lib/kontena/cli/etcd/mkdir_command.rb +2 -1
  22. data/lib/kontena/cli/etcd/remove_command.rb +2 -1
  23. data/lib/kontena/cli/etcd/set_command.rb +2 -1
  24. data/lib/kontena/cli/etcd_command.rb +2 -2
  25. data/lib/kontena/cli/external_registries/add_command.rb +1 -0
  26. data/lib/kontena/cli/external_registries/delete_command.rb +2 -0
  27. data/lib/kontena/cli/external_registries/list_command.rb +1 -0
  28. data/lib/kontena/cli/external_registries/remove_command.rb +13 -0
  29. data/lib/kontena/cli/external_registry_command.rb +4 -3
  30. data/lib/kontena/cli/grid_command.rb +5 -1
  31. data/lib/kontena/cli/grid_options.rb +12 -0
  32. data/lib/kontena/cli/grids/add_user_command.rb +1 -0
  33. data/lib/kontena/cli/grids/cloud_config_command.rb +41 -0
  34. data/lib/kontena/cli/grids/common.rb +65 -4
  35. data/lib/kontena/cli/grids/logs_command.rb +9 -4
  36. data/lib/kontena/cli/grids/remove_user_command.rb +1 -0
  37. data/lib/kontena/cli/grids/update_command.rb +27 -0
  38. data/lib/kontena/cli/master/use_command.rb +12 -2
  39. data/lib/kontena/cli/master/users/add_role_command.rb +26 -0
  40. data/lib/kontena/cli/master/users/invite_command.rb +24 -0
  41. data/lib/kontena/cli/master/users/list_command.rb +18 -0
  42. data/lib/kontena/cli/master/users/remove_role_command.rb +26 -0
  43. data/lib/kontena/cli/master/users_command.rb +14 -0
  44. data/lib/kontena/cli/master_command.rb +2 -1
  45. data/lib/kontena/cli/node_command.rb +7 -1
  46. data/lib/kontena/cli/nodes/add_label_command.rb +19 -0
  47. data/lib/kontena/cli/nodes/aws/create_command.rb +2 -1
  48. data/lib/kontena/cli/nodes/aws/restart_command.rb +1 -0
  49. data/lib/kontena/cli/nodes/aws/terminate_command.rb +1 -0
  50. data/lib/kontena/cli/nodes/azure/create_command.rb +1 -0
  51. data/lib/kontena/cli/nodes/azure/restart_command.rb +1 -0
  52. data/lib/kontena/cli/nodes/azure/terminate_command.rb +1 -0
  53. data/lib/kontena/cli/nodes/digital_ocean/create_command.rb +1 -0
  54. data/lib/kontena/cli/nodes/digital_ocean/restart_command.rb +1 -0
  55. data/lib/kontena/cli/nodes/digital_ocean/terminate_command.rb +1 -0
  56. data/lib/kontena/cli/nodes/list_command.rb +10 -14
  57. data/lib/kontena/cli/nodes/remove_command.rb +1 -0
  58. data/lib/kontena/cli/nodes/remove_label_command.rb +23 -0
  59. data/lib/kontena/cli/nodes/show_command.rb +1 -0
  60. data/lib/kontena/cli/nodes/ssh_command.rb +1 -0
  61. data/lib/kontena/cli/nodes/update_command.rb +1 -0
  62. data/lib/kontena/cli/nodes/vagrant/create_command.rb +1 -0
  63. data/lib/kontena/cli/nodes/vagrant/restart_command.rb +1 -0
  64. data/lib/kontena/cli/nodes/vagrant/ssh_command.rb +1 -0
  65. data/lib/kontena/cli/nodes/vagrant/start_command.rb +1 -0
  66. data/lib/kontena/cli/nodes/vagrant/stop_command.rb +1 -0
  67. data/lib/kontena/cli/nodes/vagrant/terminate_command.rb +1 -0
  68. data/lib/kontena/cli/registry/create_command.rb +80 -30
  69. data/lib/kontena/cli/registry/delete_command.rb +3 -0
  70. data/lib/kontena/cli/registry/remove_command.rb +15 -0
  71. data/lib/kontena/cli/registry_command.rb +3 -1
  72. data/lib/kontena/cli/service_command.rb +20 -4
  73. data/lib/kontena/cli/services/add_env_command.rb +1 -0
  74. data/lib/kontena/cli/services/add_secret_command.rb +24 -0
  75. data/lib/kontena/cli/services/containers_command.rb +1 -0
  76. data/lib/kontena/cli/services/create_command.rb +3 -2
  77. data/lib/kontena/cli/services/delete_command.rb +2 -0
  78. data/lib/kontena/cli/services/deploy_command.rb +1 -0
  79. data/lib/kontena/cli/services/envs_command.rb +1 -0
  80. data/lib/kontena/cli/services/link_command.rb +26 -0
  81. data/lib/kontena/cli/services/list_command.rb +13 -10
  82. data/lib/kontena/cli/services/logs_command.rb +13 -5
  83. data/lib/kontena/cli/services/monitor_command.rb +1 -0
  84. data/lib/kontena/cli/services/remove_command.rb +17 -0
  85. data/lib/kontena/cli/services/remove_env_command.rb +1 -0
  86. data/lib/kontena/cli/services/remove_secret_command.rb +28 -0
  87. data/lib/kontena/cli/services/restart_command.rb +1 -0
  88. data/lib/kontena/cli/services/scale_command.rb +2 -1
  89. data/lib/kontena/cli/services/show_command.rb +1 -0
  90. data/lib/kontena/cli/services/start_command.rb +1 -0
  91. data/lib/kontena/cli/services/stats_command.rb +5 -4
  92. data/lib/kontena/cli/services/stop_command.rb +1 -0
  93. data/lib/kontena/cli/services/unlink_command.rb +25 -0
  94. data/lib/kontena/cli/services/update_command.rb +4 -3
  95. data/lib/kontena/cli/users_command.rb +15 -0
  96. data/lib/kontena/cli/vault/list_command.rb +1 -0
  97. data/lib/kontena/cli/vault/read_command.rb +1 -0
  98. data/lib/kontena/cli/vault/remove_command.rb +1 -0
  99. data/lib/kontena/cli/vault/write_command.rb +1 -0
  100. data/lib/kontena/cli/version_command.rb +9 -1
  101. data/lib/kontena/cli/vpn/config_command.rb +1 -0
  102. data/lib/kontena/cli/vpn/create_command.rb +1 -0
  103. data/lib/kontena/cli/vpn/delete_command.rb +2 -0
  104. data/lib/kontena/cli/vpn/remove_command.rb +15 -0
  105. data/lib/kontena/cli/vpn_command.rb +3 -1
  106. data/lib/kontena/machine/aws/node_destroyer.rb +1 -1
  107. data/lib/kontena/machine/cloud_config/cloudinit.yml +70 -0
  108. data/lib/kontena/machine/cloud_config/node_generator.rb +28 -0
  109. data/lib/kontena/machine/digital_ocean/cloudinit.yml +22 -0
  110. data/lib/kontena/machine/digital_ocean/node_destroyer.rb +4 -2
  111. data/lib/kontena/machine/random_name.rb +3 -3
  112. data/lib/kontena/scripts/completer +7 -3
  113. data/spec/fixtures/docker-compose.yml +8 -0
  114. data/spec/fixtures/kontena.yml +17 -0
  115. data/spec/fixtures/mysql.yml +3 -0
  116. data/spec/fixtures/wordpress-scaled.yml +3 -0
  117. data/spec/fixtures/wordpress.yml +2 -0
  118. data/spec/kontena/cli/app/common_spec.rb +42 -0
  119. data/spec/kontena/cli/app/deploy_command_spec.rb +4 -31
  120. data/spec/kontena/cli/app/scale_spec.rb +4 -23
  121. data/spec/kontena/cli/master/use_command_spec.rb +12 -3
  122. data/spec/kontena/cli/master/users/add_role_command_spec.rb +35 -0
  123. data/spec/kontena/cli/master/users/invite_command_spec.rb +35 -0
  124. data/spec/kontena/cli/master/users/remove_role_command_spec.rb +35 -0
  125. data/spec/kontena/cli/services/add_secret_command_spec.rb +61 -0
  126. data/spec/kontena/cli/services/link_command_spec.rb +43 -0
  127. data/spec/kontena/cli/services/remove_secret_command_spec.rb +48 -0
  128. data/spec/kontena/cli/services/restart_command_spec.rb +1 -23
  129. data/spec/kontena/cli/services/unlink_command_spec.rb +43 -0
  130. data/spec/kontena/cli/version_command_spec.rb +17 -0
  131. data/spec/spec_helper.rb +6 -1
  132. data/spec/support/client_helpers.rb +31 -0
  133. data/spec/support/fixtures_helpers.rb +7 -0
  134. metadata +67 -6
  135. data/lib/kontena/cli/deploy_command.rb +0 -164
  136. data/lib/kontena/cli/invite_command.rb +0 -13
  137. data/spec/kontena/cli/deploy_command_spec.rb +0 -239
@@ -1,13 +0,0 @@
1
- class Kontena::Cli::InviteCommand < Clamp::Command
2
- include Kontena::Cli::Common
3
-
4
- parameter "EMAIL", "Invited email"
5
-
6
- def execute
7
- require_api_url
8
- token = require_token
9
- data = { email: email }
10
- response = client(token).post('users', data)
11
- puts 'User invited' if response
12
- end
13
- end
@@ -1,239 +0,0 @@
1
- require_relative "../../spec_helper"
2
- require "kontena/cli/deploy_command"
3
-
4
- describe Kontena::Cli::DeployCommand do
5
-
6
- let(:subject) do
7
- described_class.new(File.basename($0))
8
- end
9
-
10
- let(:settings) do
11
- {'current_server' => 'alias',
12
- 'servers' => [
13
- {'name' => 'some_master', 'url' => 'some_master'},
14
- {'name' => 'alias', 'url' => 'someurl', 'token' => token}
15
- ]
16
- }
17
- end
18
-
19
- let(:settings_without_api_url) do
20
- {'current_server' => 'alias',
21
- 'servers' => [
22
- {'name' => 'alias', 'token' => token}
23
- ]
24
- }
25
- end
26
-
27
- let(:settings_without_token) do
28
- {'current_server' => 'alias',
29
- 'servers' => [
30
- {'name' => 'alias', 'url' => 'url'}
31
- ]
32
- }
33
- end
34
-
35
-
36
- let(:token) do
37
- '1234567'
38
- end
39
-
40
- let(:yml) do
41
- yml_content = <<yml
42
- wordpress:
43
- image: wordpress:4.1
44
- stateful: true
45
- ports:
46
- - 80:80
47
- links:
48
- - mysql:mysql
49
- environment:
50
- - WORDPRESS_DB_PASSWORD=%{prefix}_secret
51
- instances: 2
52
- deploy:
53
- strategy: ha
54
- mysql:
55
- image: mysql:5.6
56
- stateful: true
57
- environment:
58
- - MYSQL_ROOT_PASSWORD=%{prefix}_secret
59
- yml
60
- yml_content
61
- end
62
-
63
- let(:services) do
64
- {
65
- 'wordpress' => {
66
- 'image' => 'wordpress:latest',
67
- 'links' => ['mysql:db'],
68
- 'ports' => ['80:80'],
69
- 'instances' => 2,
70
- 'deploy' => {
71
- 'strategy' => 'ha'
72
- }
73
- },
74
- 'mysql' => {
75
- 'image' => 'mysql:5.6',
76
- 'stateful' => true
77
- }
78
- }
79
- end
80
-
81
- let(:client) do
82
- double
83
- end
84
-
85
- let(:options) do
86
- double({prefix: false, file: false, service: nil})
87
- end
88
-
89
- let(:env_vars) do
90
- ["#comment line", "TEST_ENV_VAR=test", "MYSQL_ADMIN_PASSWORD=abcdef"]
91
- end
92
-
93
- let(:dot_env) do
94
- ["TEST_ENV_VAR=test2","", "TEST_ENV_VAR2=test3"]
95
- end
96
-
97
- describe '#deploy' do
98
- context 'when api_url is nil' do
99
- it 'raises error' do
100
- allow(subject).to receive(:settings).and_return(settings_without_api_url)
101
- expect{subject.run([])}.to raise_error(ArgumentError)
102
- end
103
- end
104
-
105
- context 'when token is nil' do
106
- it 'raises error' do
107
- allow(subject).to receive(:settings).and_return(settings_without_token)
108
- expect{subject.run([])}.to raise_error(ArgumentError)
109
- end
110
- end
111
-
112
- context 'when api url and token are valid' do
113
- before(:each) do
114
- allow(subject).to receive(:settings).and_return(settings)
115
- allow(File).to receive(:exists?).and_return(true)
116
- allow(File).to receive(:read).and_return(yml)
117
- allow(subject).to receive(:get_service).and_raise(Kontena::Errors::StandardError.new(404, 'Not Found'))
118
- allow(subject).to receive(:create_service).and_return({'id' => 'kontena-test-mysql'},{'id' => 'kontena-test-wordpress'})
119
- allow(subject).to receive(:current_grid).and_return('1')
120
- allow(subject).to receive(:deploy_service).and_return(nil)
121
- end
122
-
123
- it 'reads ./kontena.yml file by default' do
124
- allow(subject).to receive(:settings).and_return(settings)
125
- expect(File).to receive(:read).with('./kontena.yml').and_return(yml)
126
- subject.run([])
127
- end
128
-
129
- it 'reads given yml file' do
130
- expect(subject).to receive(:file).once.and_return('custom.yml')
131
- expect(File).to receive(:read).with('custom.yml').and_return(yml)
132
- subject.run([])
133
- end
134
-
135
- it 'uses current directory as service name prefix by default' do
136
- current_dir = '/kontena/tests/stacks'
137
- allow(Dir).to receive(:getwd).and_return(current_dir)
138
- expect(File).to receive(:basename).with(current_dir).and_return('stacks')
139
- subject.run([])
140
- end
141
-
142
- context 'when yml file has multiple env files' do
143
- before(:each) do
144
- allow(subject).to receive(:settings).and_return(settings)
145
- end
146
-
147
- it 'merges environment variables correctly' do
148
- allow(subject).to receive(:current_dir).and_return("kontena-test")
149
- allow(YAML).to receive(:load).and_return(services)
150
- services['wordpress']['environment'] = ['MYSQL_ADMIN_PASSWORD=password']
151
- services['wordpress']['env_file'] = %w(/path/to/env_file .env)
152
-
153
- expect(File).to receive(:readlines).with('/path/to/env_file').and_return(env_vars)
154
- expect(File).to receive(:readlines).with('.env').and_return(dot_env)
155
-
156
- data = {
157
- :name =>"kontena-test-wordpress",
158
- :image=>"wordpress:latest",
159
- :env=>["MYSQL_ADMIN_PASSWORD=password", "TEST_ENV_VAR=test", "TEST_ENV_VAR2=test3"],
160
- :container_count=>2,
161
- :stateful=>false,
162
- :links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
163
- :ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
164
- }
165
-
166
- expect(subject).to receive(:create_service).with('1234567', '1', data)
167
- subject.run([])
168
- end
169
- end
170
-
171
- context 'when yml file has one env file' do
172
- it 'merges environment variables correctly' do
173
- allow(subject).to receive(:current_dir).and_return("kontena-test")
174
- allow(YAML).to receive(:load).and_return(services)
175
- services['wordpress']['environment'] = ['MYSQL_ADMIN_PASSWORD=password']
176
- services['wordpress']['env_file'] = '/path/to/env_file'
177
-
178
- expect(File).to receive(:readlines).with('/path/to/env_file').and_return(env_vars)
179
-
180
- data = {
181
- :name =>"kontena-test-wordpress",
182
- :image=>"wordpress:latest",
183
- :env=>["MYSQL_ADMIN_PASSWORD=password", "TEST_ENV_VAR=test"],
184
- :container_count=>2,
185
- :stateful=>false,
186
- :links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
187
- :ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
188
- }
189
-
190
- expect(subject).to receive(:create_service).with('1234567', '1', data)
191
- subject.run([])
192
- end
193
- end
194
-
195
- it 'creates mysql service before wordpress' do
196
- allow(subject).to receive(:current_dir).and_return("kontena-test")
197
- data = {:name =>"kontena-test-mysql", :image=>'mysql:5.6', :env=>["MYSQL_ROOT_PASSWORD=kontena-test_secret"], :container_count=>nil, :stateful=>true}
198
- expect(subject).to receive(:create_service).with('1234567', '1', data)
199
-
200
- subject.run([])
201
- end
202
-
203
- it 'creates wordpress service' do
204
- allow(subject).to receive(:current_dir).and_return("kontena-test")
205
-
206
- data = {
207
- :name =>"kontena-test-wordpress",
208
- :image=>"wordpress:4.1",
209
- :env=>["WORDPRESS_DB_PASSWORD=kontena-test_secret"],
210
- :container_count=>2,
211
- :stateful=>true,
212
- :links=>[{:name=>"kontena-test-mysql", :alias=>"mysql"}],
213
- :ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
214
- }
215
- expect(subject).to receive(:create_service).with('1234567', '1', data)
216
-
217
- subject.run([])
218
- end
219
-
220
- it 'deploys services' do
221
- allow(subject).to receive(:current_dir).and_return("kontena-test")
222
- expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-mysql', {})
223
- expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-wordpress', {:strategy => 'ha'})
224
- subject.run([])
225
- end
226
-
227
- context 'when giving service option' do
228
- it 'deploys only given services' do
229
- allow(subject).to receive(:current_dir).and_return("kontena-test")
230
- allow(subject).to receive(:deploy_services).and_return({})
231
- expect(subject).to receive(:create).once.with('wordpress', anything).and_return({})
232
- expect(subject).not_to receive(:create).with('mysql', services['mysql'])
233
-
234
- subject.run(['--service', 'wordpress'])
235
- end
236
- end
237
- end
238
- end
239
- end