kontena-cli 0.16.1.rc1 → 0.16.1.rc2

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