kontena-cli 0.16.1.rc1 → 0.16.1.rc2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a140696639e10214728770220b852bd2c1278bb0
4
- data.tar.gz: 4493f5eda8a877cde4e939041982b5f902df3b45
3
+ metadata.gz: be3c8f5234712118a790b7f856228bb23ffbf71f
4
+ data.tar.gz: 7ecf734b79afacd69b7e627d76d39713f72f42dc
5
5
  SHA512:
6
- metadata.gz: 35927d1ad63168a93767327ecb4a781c9367b06d5649e68986f89bc454bd4f011ec6151d82bfd4cf1d7a706508ab7ba0d7a6d7c70cd96f1e04a8863a00058efc
7
- data.tar.gz: 9f403db6a2463f36ed270c49ce1867b4de8e77f4b8ed75e3abe3d8e10422f0a41e719ae5f641b9f1606d20eba4e0e6c042dd631fc276fe536c77b7eb8ef707d0
6
+ metadata.gz: c100040a30909a54ce1c780f0a18702a318f18bdf17e0c478ca41caf7b1cdac0f6a7a49e86608a65d86d02b4d5a382212ac98e561bad3267bced1c0980754a20
7
+ data.tar.gz: c9c71d667d60fa94d37fc73c87008d57e6e44d391e67f23805e932148db29d86437ef69377eaab0bc379523f634aad1faae36c3bc22265deae746e71223b49f8
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.16.1.rc1
1
+ 0.16.1.rc2
@@ -34,8 +34,8 @@ module Kontena::Cli::Cloud::Master
34
34
 
35
35
  response = cloud_client.post('user/masters', { data: { attributes: attributes } })
36
36
  exit_with_error "Failed (invalid response)" unless response.kind_of?(Hash)
37
- exit_with_error "Failed (no data)" unless response['data']
38
37
  exit_with_error "Failed: #{response['error']}" if response['error']
38
+ exit_with_error "Failed (no data)" unless response['data']
39
39
  response
40
40
  end
41
41
 
@@ -100,13 +100,14 @@ module Kontena::Cli::Cloud::Master
100
100
  args = []
101
101
  args << "--provider #{self.provider.shellescape}" if self.provider
102
102
  args << "--version #{self.version.shellescape}" if self.version
103
+ args << self.cloud_master_id
103
104
  Kontena.run("cloud master update #{args.join(' ')}")
104
105
  end
105
106
  end
106
107
  end
107
108
  else
108
109
  response = spinner "Registering current Kontena Master '#{current_master.name}' #{" as '#{new_name}' " unless new_name == current_master.name}to Kontena Cloud" do
109
- register(new_name, current_master.url)
110
+ register(new_name, current_master.url, self.provider, nil, self.version)
110
111
  end
111
112
  end
112
113
 
@@ -98,7 +98,7 @@ module Kontena::Cli::Master
98
98
  config.current_server = existing_server.name
99
99
  existing_server
100
100
  else
101
- new_server = Kontena::Cli::Config::Server.new(url: self.url, name: self.name)
101
+ new_server = Kontena::Cli::Config::Server.new(url: url, name: self.name)
102
102
  config.servers << new_server
103
103
  config.current_server = new_server.name
104
104
  new_server
@@ -127,17 +127,19 @@ module Kontena::Cli::Master
127
127
 
128
128
  if response['server'] && response['server']['name']
129
129
  server.name ||= response['server']['name']
130
+ end
131
+
132
+ if response['user']
130
133
  server.username = response['user']['name'] || response['user']['email']
131
- config.current_server = server.name
132
- else
133
- raise Kontena::Errors::StandardError.new(500, 'Code exchange invalid response')
134
134
  end
135
135
 
136
136
  server.token = Kontena::Cli::Config::Token.new(
137
137
  access_token: response['access_token'],
138
138
  refresh_token: response['refresh_token'],
139
- expires_at: response['expires_in'].to_i > 0 ? Time.now.utc.to_i + response['expires_in'].to_i : nil,
139
+ expires_at: in_to_at(response['expires_in']),
140
140
  )
141
+
142
+ config.current_server = server.name
141
143
  end
142
144
  true
143
145
  end
@@ -200,7 +202,7 @@ module Kontena::Cli::Master
200
202
  sputs url
201
203
  else
202
204
  puts "Visit this URL in a browser:"
203
- puts "<#{url}>"
205
+ puts "#{url}"
204
206
  puts
205
207
  puts "Then complete the authentication by using:"
206
208
  puts "kontena master login --code <CODE FROM BROWSER>"
@@ -269,10 +271,12 @@ module Kontena::Cli::Master
269
271
  server.name = self.name
270
272
  elsif response['server'] && response['server']['name']
271
273
  server.name = response['server']['name']
272
- elsif config.find_server('default')
273
- server.name = "default-#{SecureRandom.hex(2)}"
274
+ elsif config.find_server('kontena-master')
275
+ new_name = "kontena-master-2"
276
+ new_name.succ! until config.find_server(new_name).nil?
277
+ server.name = new_name
274
278
  else
275
- server.name = "default"
279
+ server.name = "kontena-master"
276
280
  end
277
281
  end
278
282
 
@@ -0,0 +1,121 @@
1
+ require_relative "../../../../spec_helper"
2
+ require 'kontena/cli/cloud/master/add_command'
3
+
4
+ describe Kontena::Cli::Cloud::Master::AddCommand do
5
+
6
+ include ClientHelpers
7
+
8
+ let(:subject) do
9
+ described_class.new(File.basename($0))
10
+ end
11
+
12
+ let(:client) { double }
13
+
14
+ before(:each) do
15
+ allow(subject).to receive(:cloud_client).and_return(client)
16
+ end
17
+
18
+ describe "#register" do
19
+ it 'posts valid data to cloud' do
20
+ expect(client).to receive(:post).with(
21
+ 'user/masters',
22
+ hash_including(
23
+ data: {
24
+ attributes: {
25
+ 'name' => 'name',
26
+ 'url' => 'url',
27
+ 'provider' => 'provider',
28
+ 'redirect-uri' => 'redirect-uri',
29
+ 'version' => 'version',
30
+ 'owner' => 'owner',
31
+ }
32
+ }
33
+ )
34
+ ).and_return({'data' => { attributes: {}}})
35
+ subject.register("name", "url", "provider", "redirect-uri", "version", "owner")
36
+ end
37
+
38
+ it 'raises if cloud respons with error' do
39
+ expect(client).to receive(:post).and_return({'error' => 'foofoo'})
40
+ expect(subject).to receive(:exit_with_error).at_least(:once)
41
+ subject.register("name", "url", "provider", "redirect-uri", "version", "owner")
42
+ end
43
+ end
44
+
45
+ describe "#new_cloud_master_name" do
46
+ it 'returns a suffixed name if duplicates exist' do
47
+ allow(subject).to receive(:cloud_masters).and_return(
48
+ [
49
+ {
50
+ "attributes" => {
51
+ "name" => "foofoo"
52
+ }
53
+ }
54
+ ]
55
+ )
56
+
57
+ expect(subject.new_cloud_master_name("foofoo2")).to eq "foofoo2"
58
+ expect(subject.new_cloud_master_name("foofoo")).to eq "foofoo-2"
59
+ end
60
+ end
61
+
62
+ describe '#register_current' do
63
+ let(:current_master) { Kontena::Cli::Config::Server.new(name: 'foofoo', url: 'foofoofoo') }
64
+ let(:success_response) {
65
+ {
66
+ 'data' => {
67
+ 'attributes' => {
68
+ 'client-id' => '123',
69
+ 'client-secret' => '345',
70
+ 'provider' => 'foo',
71
+ 'version' => '0.0.0',
72
+ 'owner' => 'pwner'
73
+ }
74
+ }
75
+ }
76
+ }
77
+
78
+ before(:each) do
79
+ allow(subject).to receive(:require_api_url).and_return(true)
80
+ allow(subject).to receive(:require_token).and_return(true)
81
+ allow(subject).to receive(:force?).and_return(true)
82
+ allow(subject).to receive(:current_master).and_return(current_master)
83
+ allow(subject).to receive(:cloud_masters).and_return([])
84
+ allow(client).to receive(:post).and_return(success_response)
85
+ end
86
+
87
+ it 'calls register with proper arguments without cloud-master-id' do
88
+ expect(subject).to receive(:register) do |name, url, provider, redirect_uri, version|
89
+ expect(name).to eq current_master.name
90
+ expect(url).to eq current_master.url
91
+ expect(provider).to eq 'provider'
92
+ expect(version).to eq '10.10.10'
93
+ expect(redirect_uri).to be_nil
94
+ end.and_return(success_response)
95
+
96
+ subject.provider = 'provider'
97
+ subject.version = '10.10.10'
98
+
99
+ expect(Kontena).to receive(:run).with('master config import --force --preset kontena_auth_provider')
100
+ expect(Kontena).to receive(:run).with('master config set oauth2.client_id=123 oauth2.client_secret=345 server.root_url=foofoofoo server.name=foofoo cloud.provider_is_kontena=true')
101
+
102
+ subject.register_current
103
+ end
104
+
105
+ it 'calls register with proper arguments with cloud-master-id' do
106
+ expect(subject).to receive(:get_existing).with('abcd').and_return(success_response)
107
+
108
+ subject.provider = 'provider'
109
+ subject.version = '10.10.10'
110
+ subject.cloud_master_id = 'abcd'
111
+
112
+ expect(Kontena).to receive(:run).with('cloud master update --provider provider --version 10.10.10 abcd').and_return(true)
113
+ expect(Kontena).to receive(:run).with('master config import --force --preset kontena_auth_provider').and_return(true)
114
+ expect(Kontena).to receive(:run).with('master config set oauth2.client_id=123 oauth2.client_secret=345 server.root_url=foofoofoo server.name=foofoo cloud.provider_is_kontena=true').and_return(true)
115
+
116
+ subject.register_current
117
+ end
118
+
119
+ end
120
+ end
121
+
@@ -0,0 +1,215 @@
1
+ require_relative "../../../spec_helper"
2
+ require 'kontena/cli/master/login_command'
3
+
4
+ describe Kontena::Cli::Master::LoginCommand do
5
+
6
+ include ClientHelpers
7
+
8
+ let(:subject) do
9
+ described_class.new(File.basename($0))
10
+ end
11
+
12
+ let(:config) { double }
13
+
14
+ before(:each) do
15
+ allow(subject).to receive(:config).and_return(config)
16
+ end
17
+
18
+ describe '#use_current_master_if_available' do
19
+ context 'url not given' do
20
+ it 'sets local url current master url if defined' do
21
+ expect(config).to receive(:current_master).twice.and_return(Kontena::Cli::Config::Server.new(url: 'foo'))
22
+ expect(subject).to receive(:url=).with('foo')
23
+ expect(subject.use_current_master_if_available).to be_truthy
24
+ end
25
+
26
+ it 'raises if no current master and no url' do
27
+ subject.url = nil
28
+ expect(config).to receive(:current_master).and_return(nil)
29
+ expect(subject).to receive(:exit_with_error)
30
+ subject.use_current_master_if_available
31
+ end
32
+ end
33
+
34
+ context 'url given' do
35
+ it 'returns nil' do
36
+ subject.url = 'foofoo'
37
+ expect(subject.use_current_master_if_available).to be_nil
38
+ end
39
+ end
40
+ end
41
+
42
+ describe '#use_master_by_name' do
43
+ context 'url given' do
44
+ it 'should return nil when url looks like an url' do
45
+ subject.url = 'http://foo'
46
+ expect(subject).not_to receive(:config)
47
+ expect(subject.use_master_by_name).to be_nil
48
+ end
49
+ end
50
+
51
+ context 'name given' do
52
+ it 'should try to look for servers by name' do
53
+ expect(config).to receive(:find_server).and_return(Kontena::Cli::Config::Server.new(url: 'https://foo'))
54
+ subject.url = 'foomaster'
55
+ expect(subject).to receive(:url=).with('https://foo')
56
+ subject.use_master_by_name
57
+ end
58
+ end
59
+ end
60
+
61
+ describe '#find_server_or_create_new' do
62
+
63
+ let(:existing_server) { Kontena::Cli::Config::Server.new(url: 'https://foo', name: 'existing') }
64
+
65
+ it 'should try to pick up an existing server from config' do
66
+ subject.name = 'name'
67
+ expect(config).to receive(:find_server_by).with(url: 'foo', name: 'name').and_return(existing_server)
68
+ expect(config).to receive(:current_server=).with(existing_server.name)
69
+ expect(subject.find_server_or_create_new('foo')).to eq existing_server
70
+ end
71
+
72
+ it 'should create a new server instance if existing not found' do
73
+ expect(config).to receive(:find_server_by).and_return(nil)
74
+ subject.name = "foofoo1"
75
+ servers = []
76
+ expect(config).to receive(:servers).and_return(servers)
77
+ expect(config).to receive(:current_server=).with('foofoo1')
78
+ expect(subject.find_server_or_create_new('http://foo').name).to eq 'foofoo1'
79
+ expect(servers.first.url).to eq 'http://foo'
80
+ expect(servers.first.name).to eq 'foofoo1'
81
+ end
82
+ end
83
+
84
+ describe '#set_server_token' do
85
+ let(:server) { Kontena::Cli::Config::Server.new(name: 'some_server') }
86
+ let(:token) { Kontena::Cli::Config::Token.new(access_token: 'bartoken') }
87
+
88
+ it 'should set token from parameters as the servers access token' do
89
+ subject.token = 'footoken'
90
+ expect(server).to receive(:token=) do |token|
91
+ expect(token.access_token).to eq 'footoken'
92
+ end
93
+ subject.set_server_token(server)
94
+ end
95
+
96
+ it 'should clear servers existing token when forced' do
97
+ subject.force = true
98
+ server.token = token
99
+ subject.set_server_token(server)
100
+ expect(server.access_token).to be_nil
101
+ end
102
+
103
+ it 'should add a blank token if server has none' do
104
+ server.token = nil
105
+ subject.set_server_token(server)
106
+ expect(server.access_token).to be_nil
107
+ expect(server.token.parent_name).to eq 'some_server'
108
+ end
109
+
110
+ it 'should keep the existing token unless a new one is supplied' do
111
+ server.token = token
112
+ subject.token = nil
113
+ subject.force = false
114
+ subject.set_server_token(server)
115
+ expect(server.token).to eq token
116
+ end
117
+ end
118
+
119
+ describe '#use_authorization_code' do
120
+ let(:client) { double }
121
+
122
+ before(:each) do
123
+ allow(subject.config).to receive(:current_server=)
124
+ end
125
+
126
+ it 'should set the local name to name provided from server if no name was set' do
127
+ expect(Kontena::Client).to receive(:new).and_return(client)
128
+ expect(client).to receive(:exchange_code).with('abcd1234').and_return(
129
+ {
130
+ 'access_token' => 'token',
131
+ 'refresh_token' => 'refresh_token',
132
+ 'expires_in' => 1000,
133
+ 'server' => {
134
+ 'name' => 'foofoo1'
135
+ }
136
+ }
137
+ )
138
+
139
+ server = Kontena::Cli::Config::Server.new(name: nil, url: 'http://foo')
140
+ subject.use_authorization_code(server, 'abcd1234')
141
+ expect(server.token.access_token).to eq 'token'
142
+ expect(server.name).to eq 'foofoo1'
143
+ end
144
+
145
+ it 'should not touch the local name if the server already has a name' do
146
+ expect(Kontena::Client).to receive(:new).and_return(client)
147
+ expect(client).to receive(:exchange_code).with('abcd1234').and_return(
148
+ {
149
+ 'access_token' => 'token',
150
+ 'refresh_token' => 'refresh_token',
151
+ 'expires_in' => 1000,
152
+ 'server' => {
153
+ 'name' => 'foofoo1'
154
+ }
155
+ }
156
+ )
157
+
158
+ server = Kontena::Cli::Config::Server.new(name: 'foofoo2', url: 'http://foo')
159
+ subject.use_authorization_code(server, 'abcd1234')
160
+ expect((Time.now.utc.to_i+800..Time.now.utc.to_i+1100).cover?(server.token.expires_at.to_i)).to be_truthy
161
+ expect(server.name).to eq 'foofoo2'
162
+ end
163
+ end
164
+
165
+ describe '#in_to_at' do
166
+ it 'should return nil when expires_in is <0 or nil' do
167
+ expect(subject.in_to_at(0)).to be_nil
168
+ expect(subject.in_to_at(-1)).to be_nil
169
+ expect(subject.in_to_at(nil)).to be_nil
170
+ end
171
+
172
+ it 'should return a timestamp when expires_in is >0' do
173
+ time = Time.now.utc.to_i
174
+ expect((time + 80..time + 120).cover?(subject.in_to_at(100))).to be_truthy
175
+ end
176
+ end
177
+
178
+ describe '#update_server_name' do
179
+ let(:server) { Kontena::Cli::Config::Server.new }
180
+ let(:response) { { 'access_token' => 'token', 'server' => { 'name' => 'foo2' } } }
181
+
182
+ it 'should do nothing if server already has a name' do
183
+ server.name = 'foofoofoo'
184
+ subject.update_server_name(server, response)
185
+ expect(server.name).to eq 'foofoofoo'
186
+ end
187
+
188
+ it 'should set the name from name parameter if set' do
189
+ subject.name = 'abcd'
190
+ subject.update_server_name(server, response)
191
+ expect(server.name).to eq 'abcd'
192
+ end
193
+
194
+ it 'should set the name from server response if returned' do
195
+ subject.update_server_name(server, response)
196
+ expect(server.name).to eq 'foo2'
197
+ end
198
+
199
+ it 'should use a default name if no other can be figured out' do
200
+ expect(subject.config).to receive(:find_server).with('kontena-master').and_return(nil)
201
+ subject.update_server_name(server, response.reject{|k,v| k=='server'})
202
+ expect(server.name).to eq 'kontena-master'
203
+ end
204
+
205
+ it 'should use a default name with suffix if one already exists' do
206
+ expect(subject.config).to receive(:find_server).with('kontena-master').and_return(true)
207
+ expect(subject.config).to receive(:find_server).with('kontena-master-2').and_return(true)
208
+ expect(subject.config).to receive(:find_server).with('kontena-master-3').and_return(nil)
209
+ subject.update_server_name(server, response.reject{|k,v| k=='server'})
210
+ expect(server.name).to eq 'kontena-master-3'
211
+ end
212
+
213
+ end
214
+
215
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kontena-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.1.rc1
4
+ version: 0.16.1.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kontena, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-28 00:00:00.000000000 Z
11
+ date: 2016-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -416,6 +416,7 @@ files:
416
416
  - spec/kontena/cli/app/yaml/validator_spec.rb
417
417
  - spec/kontena/cli/app/yaml/validator_v2_spec.rb
418
418
  - spec/kontena/cli/cloud/logout_command_spec.rb
419
+ - spec/kontena/cli/cloud/master/add_command_spec.rb
419
420
  - spec/kontena/cli/common_spec.rb
420
421
  - spec/kontena/cli/containers/containers_helper_spec.rb
421
422
  - spec/kontena/cli/containers/logs_command_spec.rb
@@ -426,6 +427,7 @@ files:
426
427
  - spec/kontena/cli/helpers/log_helper_spec.rb
427
428
  - spec/kontena/cli/main_command_spec.rb
428
429
  - spec/kontena/cli/master/current_command_spec.rb
430
+ - spec/kontena/cli/master/login_command_spec.rb
429
431
  - spec/kontena/cli/master/logout_command_spec.rb
430
432
  - spec/kontena/cli/master/use_command_spec.rb
431
433
  - spec/kontena/cli/master/users/invite_command_spec.rb
@@ -509,6 +511,7 @@ test_files:
509
511
  - spec/kontena/cli/app/yaml/validator_spec.rb
510
512
  - spec/kontena/cli/app/yaml/validator_v2_spec.rb
511
513
  - spec/kontena/cli/cloud/logout_command_spec.rb
514
+ - spec/kontena/cli/cloud/master/add_command_spec.rb
512
515
  - spec/kontena/cli/common_spec.rb
513
516
  - spec/kontena/cli/containers/containers_helper_spec.rb
514
517
  - spec/kontena/cli/containers/logs_command_spec.rb
@@ -519,6 +522,7 @@ test_files:
519
522
  - spec/kontena/cli/helpers/log_helper_spec.rb
520
523
  - spec/kontena/cli/main_command_spec.rb
521
524
  - spec/kontena/cli/master/current_command_spec.rb
525
+ - spec/kontena/cli/master/login_command_spec.rb
522
526
  - spec/kontena/cli/master/logout_command_spec.rb
523
527
  - spec/kontena/cli/master/use_command_spec.rb
524
528
  - spec/kontena/cli/master/users/invite_command_spec.rb