vagrant-openstack-provider 0.10.0 → 0.11.0

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: 8ee292bbda02fdc4f61b3d79ef0275edf0df7735
4
- data.tar.gz: a0299d495eb5cb64c3d7dfc47690340ad2eb4ccf
3
+ metadata.gz: 4ec695cee7421bdd2633f9e39de360d75183671c
4
+ data.tar.gz: 2281efcfe75b63a318220e301c84fbdbd58ac0dd
5
5
  SHA512:
6
- metadata.gz: f55aa6db29a728c9f5cd0e9940ca9b1697dc900925f5a444c1eb397b4dd1bd9d734f4c6b0f32470964ac1d56dc458a445b01049b3e7c79032595e85dc42a4db3
7
- data.tar.gz: bf8c6aceaa67d1f65c458168191e5ec26ca1e7c4f8bb4ee00acc9e4d816306746bb22ce4d032723d65289f827fea4858baf011a61da6743a728e5b93bd420ffd
6
+ metadata.gz: 8dd4123bdabf397a9f566b12cbf5a7111b3540b5c79d113566f8ae9c60e9d723e430abed459af0896e7b3b5f9d564de9e45efd29d0fffd1badcb8e964309fe22
7
+ data.tar.gz: 649d676242e35f639e9932c525647e1d5c25ec41fd08ea6b04fb5d43fbe93329b15f54d1c6f6256d6c8cc9aef88c2412a6efdfa95b02e2497045c3a85bfacd12
data/.rubocop.yml CHANGED
@@ -25,7 +25,7 @@ Metrics/CyclomaticComplexity:
25
25
  Max: 15
26
26
 
27
27
  Metrics/MethodLength:
28
- Max: 60
28
+ Max: 65
29
29
 
30
30
  Metrics/LineLength:
31
31
  Max: 150
data/CHANGELOG.md CHANGED
@@ -1,4 +1,23 @@
1
- # 0.10.0 ( April 11, 2017)
1
+ # 0.11.0 (August 5, 2017)
2
+
3
+ IMPROVEMENTS:
4
+
5
+ - Implement a test suite running all samples #331
6
+ - Add test for config.ssh.insert_key = false #332
7
+
8
+ FEATURES:
9
+
10
+ - Add "ssl_verify_peer" in config for self-signed certs #85 #320
11
+ - Add "ssl_ca_file" in config for self-signed certs #329
12
+
13
+ BUG FIXES:
14
+
15
+ - Handling of asynchronous floating IP assignment #324
16
+ - Fix floating IP assignement #330
17
+ - Respect config.ssh.insert_key #328
18
+
19
+
20
+ # 0.10.0 (April 11, 2017)
2
21
 
3
22
  IMPROVEMENTS:
4
23
 
@@ -50,6 +50,7 @@ module VagrantPlugins
50
50
 
51
51
  waiting_for_server_to_be_built(env, server_id)
52
52
  assign_floating_ip(env, server_id)
53
+ waiting_for_floating_ip_to_be_assigned(env, server_id)
53
54
  attach_volumes(env, server_id, options[:volumes]) unless options[:volumes].empty?
54
55
 
55
56
  @app.call(env)
@@ -72,7 +73,7 @@ module VagrantPlugins
72
73
  env[:ui].info(" -- ImageRef : #{options[:image].id}")
73
74
  end
74
75
  env[:ui].info(" -- Boot volume : #{options[:volume_boot][:id]} (#{options[:volume_boot][:device]})") unless options[:volume_boot].nil?
75
- env[:ui].info(" -- KeyPair : #{options[:keypair_name]}")
76
+ env[:ui].info(" -- KeyPair : #{options[:keypair_name]}") unless options[:keypair_name].nil?
76
77
 
77
78
  unless options[:networks].empty?
78
79
  formated_networks = ' -- '
@@ -104,7 +105,9 @@ module VagrantPlugins
104
105
  unless options[:image].nil?
105
106
  log << "image '#{options[:image].name}' (#{options[:image].id}) "
106
107
  end
107
- log << "and keypair '#{options[:keypair_name]}'"
108
+ unless options[:keypair_name].nil?
109
+ log << "and keypair '#{options[:keypair_name]}'"
110
+ end
108
111
 
109
112
  @logger.info(log)
110
113
 
@@ -152,6 +155,22 @@ module VagrantPlugins
152
155
  @logger.info 'Vagrant was unable to resolve FloatingIP, continue assuming it is not necessary'
153
156
  end
154
157
 
158
+ def waiting_for_floating_ip_to_be_assigned(env, server_id, retry_interval = 3)
159
+ floating_ip = @resolver.resolve_floating_ip(env)
160
+ return if !floating_ip || floating_ip.empty?
161
+ @logger.info "Waiting for floating IP #{floating_ip} to be assigned"
162
+ env[:ui].info(I18n.t('vagrant_openstack.waiting_for_floating_ip', floating_ip: floating_ip))
163
+ config = env[:machine].provider_config
164
+ Timeout.timeout(config.floating_ip_assign_timeout, Errors::Timeout) do
165
+ until env[:openstack_client].nova.check_assigned_floating_ip(env, server_id, floating_ip)
166
+ sleep retry_interval
167
+ end
168
+ return
169
+ end
170
+ rescue Errors::UnableToResolveFloatingIP
171
+ @logger.info 'Vagrant was unable to resolve FloatingIP, not waiting for assignment'
172
+ end
173
+
155
174
  def attach_volumes(env, server_id, volumes)
156
175
  @logger.info("Attaching volumes #{volumes} to server #{server_id}")
157
176
  volumes.each do |volume|
@@ -40,7 +40,9 @@ module VagrantPlugins
40
40
  port: @resolver.resolve_ssh_port(env),
41
41
  username: @resolver.resolve_ssh_username(env)
42
42
  }
43
- hash[:private_key_path] = "#{env[:machine].data_dir}/#{get_keypair_name(env)}" unless config.keypair_name || config.public_key_path
43
+ if env[:machine].config.ssh.insert_key
44
+ hash[:private_key_path] = "#{env[:machine].data_dir}/#{get_keypair_name(env)}" unless config.keypair_name || config.public_key_path
45
+ end
44
46
  # Should work silently when https://github.com/mitchellh/vagrant/issues/4637 is fixed
45
47
  hash[:log_level] = 'ERROR'
46
48
  hash
@@ -86,7 +86,7 @@ module VagrantPlugins
86
86
  s['imageRef'] = options[:image_ref]
87
87
  end
88
88
  s['flavorRef'] = options[:flavor_ref]
89
- s['key_name'] = options[:keypair]
89
+ s['key_name'] = options[:keypair] unless options[:keypair].nil?
90
90
  s['availability_zone'] = options[:availability_zone] unless options[:availability_zone].nil?
91
91
  s['security_groups'] = options[:security_groups] unless options[:security_groups].nil?
92
92
  s['user_data'] = Base64.encode64(options[:user_data]) unless options[:user_data].nil?
@@ -145,6 +145,19 @@ module VagrantPlugins
145
145
  end
146
146
  end
147
147
 
148
+ def check_assigned_floating_ip(env, server_id, floating_ip)
149
+ instance_exists do
150
+ addresses = get_server_details(env, server_id)['addresses']
151
+ addresses.each do |_, network|
152
+ network.each do |network_detail|
153
+ return true if network_detail['addr'] == floating_ip
154
+ end
155
+ end
156
+
157
+ return false
158
+ end
159
+ end
160
+
148
161
  def import_keypair(env, public_key)
149
162
  keyname = "vagrant-generated-#{Kernel.rand(36**8).to_s(36)}"
150
163
 
@@ -6,19 +6,22 @@ module VagrantPlugins
6
6
  def self.get(env, url, headers = {}, &block)
7
7
  config = env[:machine].provider_config
8
8
  RestClient::Request.execute(method: :get, url: url, headers: headers,
9
- timeout: config.http.read_timeout, open_timeout: config.http.open_timeout, &block)
9
+ timeout: config.http.read_timeout, open_timeout: config.http.open_timeout,
10
+ ssl_ca_file: config.ssl_ca_file, verify_ssl: config.ssl_verify_peer, &block)
10
11
  end
11
12
 
12
13
  def self.post(env, url, payload, headers = {}, &block)
13
14
  config = env[:machine].provider_config
14
15
  RestClient::Request.execute(method: :post, url: url, payload: payload, headers: headers,
15
- timeout: config.http.read_timeout, open_timeout: config.http.open_timeout, &block)
16
+ timeout: config.http.read_timeout, open_timeout: config.http.open_timeout,
17
+ ssl_ca_file: config.ssl_ca_file, verify_ssl: config.ssl_verify_peer, &block)
16
18
  end
17
19
 
18
20
  def self.delete(env, url, headers = {}, &block)
19
21
  config = env[:machine].provider_config
20
22
  RestClient::Request.execute(method: :delete, url: url, headers: headers,
21
- timeout: config.http.read_timeout, open_timeout: config.http.open_timeout, &block)
23
+ timeout: config.http.read_timeout, open_timeout: config.http.open_timeout,
24
+ ssl_ca_file: config.ssl_ca_file, verify_ssl: config.ssl_verify_peer, &block)
22
25
  end
23
26
  end
24
27
  end
@@ -217,6 +217,10 @@ module VagrantPlugins
217
217
  # @return [Integer]
218
218
  attr_accessor :stack_delete_timeout
219
219
 
220
+ #
221
+ # @return [Integer]
222
+ attr_accessor :floating_ip_assign_timeout
223
+
220
224
  #
221
225
  # @return [HttpConfig]
222
226
  attr_accessor :http
@@ -239,6 +243,16 @@ module VagrantPlugins
239
243
  # @return [Boolean]
240
244
  attr_accessor :use_legacy_synced_folders
241
245
 
246
+ # Specify the certificate to use.
247
+ #
248
+ # @return [String]
249
+ attr_accessor :ssl_ca_file
250
+
251
+ # Verify ssl peer certificate when connecting. Set to false (! unsecure) to disable
252
+ #
253
+ # @return [Boolean]
254
+ attr_accessor :ssl_verify_peer
255
+
242
256
  def initialize
243
257
  @password = UNSET_VALUE
244
258
  @openstack_compute_url = UNSET_VALUE
@@ -282,9 +296,12 @@ module VagrantPlugins
282
296
  @server_delete_timeout = UNSET_VALUE
283
297
  @stack_create_timeout = UNSET_VALUE
284
298
  @stack_delete_timeout = UNSET_VALUE
299
+ @floating_ip_assign_timeout = UNSET_VALUE
285
300
  @meta_args_support = UNSET_VALUE
286
301
  @http = HttpConfig.new
287
302
  @use_legacy_synced_folders = UNSET_VALUE
303
+ @ssl_ca_file = UNSET_VALUE
304
+ @ssl_verify_peer = UNSET_VALUE
288
305
  end
289
306
 
290
307
  def merge(other)
@@ -390,11 +407,14 @@ module VagrantPlugins
390
407
  @server_delete_timeout = 200 if @server_delete_timeout == UNSET_VALUE
391
408
  @stack_create_timeout = 200 if @stack_create_timeout == UNSET_VALUE
392
409
  @stack_delete_timeout = 200 if @stack_delete_timeout == UNSET_VALUE
410
+ @floating_ip_assign_timeout = 200 if @floating_ip_assign_timeout == UNSET_VALUE
393
411
  @meta_args_support = false if @meta_args_support == UNSET_VALUE
394
412
  @networks = nil if @networks.empty?
395
413
  @volumes = nil if @volumes.empty?
396
414
  @stacks = nil if @stacks.empty?
397
415
  @http.finalize!
416
+ @ssl_ca_file = nil if @ssl_ca_file == UNSET_VALUE
417
+ @ssl_verify_peer = true if @ssl_verify_peer == UNSET_VALUE
398
418
  end
399
419
  # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
400
420
 
@@ -416,10 +436,12 @@ module VagrantPlugins
416
436
  validate_stack_config(errors)
417
437
  validate_ssh_timeout(errors)
418
438
 
419
- if machine.config.ssh.private_key_path
420
- puts I18n.t('vagrant_openstack.config.keypair_name_required').yellow unless @keypair_name || @public_key_path
421
- else
422
- errors << I18n.t('vagrant_openstack.config.private_key_missing') if @keypair_name || @public_key_path
439
+ if machine.config.ssh.insert_key
440
+ if machine.config.ssh.private_key_path
441
+ puts I18n.t('vagrant_openstack.config.keypair_name_required').yellow unless @keypair_name || @public_key_path
442
+ else
443
+ errors << I18n.t('vagrant_openstack.config.private_key_missing') if @keypair_name || @public_key_path
444
+ end
423
445
  end
424
446
 
425
447
  {
@@ -37,18 +37,25 @@ module VagrantPlugins
37
37
  config = env[:machine].provider_config
38
38
  nova = env[:openstack_client].nova
39
39
  return config.floating_ip if config.floating_ip
40
+
40
41
  fail Errors::UnableToResolveFloatingIP if config.floating_ip_pool.nil? || config.floating_ip_pool.empty?
42
+
41
43
  @logger.debug 'Searching for available ips'
42
44
  free_ip = search_free_ip(config, nova, env)
45
+ config.floating_ip = free_ip
43
46
  return free_ip unless free_ip.nil?
47
+
44
48
  @logger.debug 'Allocate new ip anyway'
45
49
  allocated_ip = allocate_ip(config, nova, env)
50
+ config.floating_ip = allocated_ip
46
51
  return allocated_ip unless allocated_ip.nil?
47
52
  end
48
53
 
49
54
  def resolve_keypair(env)
50
55
  config = env[:machine].provider_config
56
+ machine_config = env[:machine].config
51
57
  nova = env[:openstack_client].nova
58
+ return nil unless machine_config.ssh.insert_key
52
59
  return config.keypair_name if config.keypair_name
53
60
  return nova.import_keypair_from_file(env, config.public_key_path) if config.public_key_path
54
61
  generate_keypair(env)
@@ -4,7 +4,7 @@ module VagrantPlugins
4
4
  # Stable versions must respect the pattern given
5
5
  # by VagrantPlugins::Openstack::VERSION_PATTERN
6
6
  #
7
- VERSION = '0.10.0'
7
+ VERSION = '0.11.0'
8
8
 
9
9
  #
10
10
  # Stable version must respect the naming convention 'x.y.z'
data/locales/en.yml CHANGED
@@ -69,6 +69,8 @@ en:
69
69
  Rsyncing folder: %{hostpath} => %{guestpath}
70
70
  using_floating_ip: |-
71
71
  Using floating IP %{floating_ip}
72
+ waiting_for_floating_ip: |-
73
+ Waiting for floating IP %{floating_ip} to be assigned...
72
74
  waiting_for_build: |-
73
75
  Waiting for the server to be built...
74
76
  waiting_for_ssh: |-
@@ -109,10 +109,12 @@ describe VagrantPlugins::Openstack::Action::CreateServer do
109
109
  allow(@action).to receive(:waiting_for_server_to_be_built)
110
110
  allow(@action).to receive(:attach_volumes)
111
111
  allow(@action).to receive(:waiting_for_server_to_be_reachable)
112
+ allow(@action).to receive(:waiting_for_floating_ip_to_be_assigned)
112
113
 
113
114
  expect(@action).to receive(:waiting_for_server_to_be_built).with(env, '45678')
114
115
  expect(@action).to receive(:assign_floating_ip).with(env, '45678').and_return('1.2.3.4')
115
116
  expect(@action).to receive(:attach_volumes).with(env, '45678', [{ id: 'vol-01', device: nil }])
117
+ expect(@action).to receive(:waiting_for_floating_ip_to_be_assigned).with(env, '45678')
116
118
 
117
119
  @action.call(env)
118
120
  end
@@ -43,6 +43,7 @@ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
43
43
  double('ssh_config').tap do |config|
44
44
  config.stub(:username) { 'sshuser' }
45
45
  config.stub(:port) { nil }
46
+ config.stub(:insert_key) { true }
46
47
  end
47
48
  end
48
49
 
@@ -166,6 +167,16 @@ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
166
167
  log_level: 'ERROR')
167
168
  end
168
169
  end
170
+
171
+ context 'with neither keypair_name nor public_key_path specified and ssh.insert_key is false' do
172
+ it 'does not return private_key_path' do
173
+ ssh_config.stub(:insert_key) { false }
174
+ config.stub(:floating_ip) { '80.80.80.80' }
175
+ config.stub(:keypair_name) { nil }
176
+ config.stub(:public_key_path) { nil }
177
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
178
+ end
179
+ end
169
180
  end
170
181
 
171
182
  context 'without config.floating_ip specified' do
@@ -11,6 +11,8 @@ describe VagrantPlugins::Openstack::CinderClient do
11
11
  let(:config) do
12
12
  double('config').tap do |config|
13
13
  config.stub(:http) { http }
14
+ config.stub(:ssl_ca_file) { nil }
15
+ config.stub(:ssl_verify_peer) { true }
14
16
  end
15
17
  end
16
18
 
@@ -11,6 +11,8 @@ describe VagrantPlugins::Openstack::GlanceClient do
11
11
  let(:config) do
12
12
  double('config').tap do |config|
13
13
  config.stub(:http) { http }
14
+ config.stub(:ssl_ca_file) { nil }
15
+ config.stub(:ssl_verify_peer) { true }
14
16
  end
15
17
  end
16
18
 
@@ -18,6 +18,8 @@ describe VagrantPlugins::Openstack::NovaClient do
18
18
  config.stub(:username) { 'username' }
19
19
  config.stub(:password) { 'password' }
20
20
  config.stub(:http) { http }
21
+ config.stub(:ssl_ca_file) { nil }
22
+ config.stub(:ssl_verify_peer) { true }
21
23
  end
22
24
  end
23
25
 
@@ -20,6 +20,8 @@ describe VagrantPlugins::Openstack::KeystoneClient do
20
20
  config.stub(:interface_type) { 'public' }
21
21
  config.stub(:identity_api_version) { '2' }
22
22
  config.stub(:project_name) { 'testTenant' }
23
+ config.stub(:ssl_ca_file) { nil }
24
+ config.stub(:ssl_verify_peer) { true }
23
25
  end
24
26
  end
25
27
 
@@ -11,6 +11,8 @@ describe VagrantPlugins::Openstack::NeutronClient do
11
11
  let(:config) do
12
12
  double('config').tap do |config|
13
13
  config.stub(:http) { http }
14
+ config.stub(:ssl_ca_file) { nil }
15
+ config.stub(:ssl_verify_peer) { true }
14
16
  end
15
17
  end
16
18
 
@@ -21,6 +21,8 @@ describe VagrantPlugins::Openstack::NovaClient do
21
21
  config.stub(:username) { 'username' }
22
22
  config.stub(:password) { 'password' }
23
23
  config.stub(:http) { http }
24
+ config.stub(:ssl_ca_file) { nil }
25
+ config.stub(:ssl_verify_peer) { true }
24
26
  end
25
27
  end
26
28
 
@@ -93,6 +93,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
93
93
  double('ssh_config').tap do |config|
94
94
  config.stub(:username) { nil }
95
95
  config.stub(:port) { nil }
96
+ config.stub(:insert_key) { true }
96
97
  end
97
98
  end
98
99
 
@@ -249,6 +250,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
249
250
  FloatingIP.new('80.81.82.85', 'pool-1', nil)
250
251
  end
251
252
  config.stub(:floating_ip_pool) { ['pool-1'] }
253
+ config.stub(:floating_ip=) { nil }
252
254
  @action.resolve_floating_ip(env).should eq('80.81.82.85')
253
255
  end
254
256
  end
@@ -261,6 +263,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
261
263
  FloatingIP.new('80.81.82.83', 'pool-1', nil)]
262
264
  end
263
265
  config.stub(:floating_ip_pool) { ['pool-1'] }
266
+ config.stub(:floating_ip=) { nil }
264
267
  @action.resolve_floating_ip(env).should eq('80.81.82.83')
265
268
  end
266
269
  end
@@ -275,6 +278,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
275
278
  FloatingIP.new('80.81.82.84', 'pool-1', nil)
276
279
  end
277
280
  config.stub(:floating_ip_pool) { ['pool-1'] }
281
+ config.stub(:floating_ip=) { nil }
278
282
  @action.resolve_floating_ip(env).should eq('80.81.82.84')
279
283
  end
280
284
  end
@@ -294,6 +298,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
294
298
  FloatingIP.new('80.81.82.85', 'pool-1', nil)
295
299
  end
296
300
  config.stub(:floating_ip_pool) { %w(pool-1 pool-2) }
301
+ config.stub(:floating_ip=) { nil }
297
302
  @action.resolve_floating_ip(env).should eq('80.81.82.85')
298
303
  end
299
304
  end
@@ -306,6 +311,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
306
311
  FloatingIP.new('80.81.82.83', 'pool-2', nil)]
307
312
  end
308
313
  config.stub(:floating_ip_pool) { %w(pool-1 pool-2) }
314
+ config.stub(:floating_ip=) { nil }
309
315
  @action.resolve_floating_ip(env).should eq('80.81.82.83')
310
316
  end
311
317
  end
@@ -322,6 +328,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
322
328
  FloatingIP.new('80.81.82.84', 'pool-1', nil)
323
329
  end
324
330
  config.stub(:floating_ip_pool) { %w(pool-1 pool-2) }
331
+ config.stub(:floating_ip=) { nil }
325
332
  @action.resolve_floating_ip(env).should eq('80.81.82.84')
326
333
  end
327
334
  end
@@ -337,6 +344,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
337
344
  FloatingIP.new('80.81.82.84', 'pool-2', nil)
338
345
  end
339
346
  config.stub(:floating_ip_pool) { %w(pool-1 pool-2) }
347
+ config.stub(:floating_ip=) { nil }
340
348
  @action.resolve_floating_ip(env).should eq('80.81.82.84')
341
349
  end
342
350
  end
@@ -350,6 +358,7 @@ describe VagrantPlugins::Openstack::ConfigResolver do
350
358
  nova.stub(:allocate_floating_ip).with(env, 'pool-1').and_raise Errors::VagrantOpenstackError, message: 'error', code: 404
351
359
  nova.stub(:allocate_floating_ip).with(env, 'pool-2').and_raise Errors::VagrantOpenstackError, message: 'error', code: 404
352
360
  config.stub(:floating_ip_pool) { %w(pool-1 pool-2) }
361
+ config.stub(:floating_ip=) { nil }
353
362
  expect { @action.resolve_floating_ip(env) }.to raise_error(Errors::VagrantOpenstackError)
354
363
  end
355
364
  end
@@ -397,6 +406,16 @@ describe VagrantPlugins::Openstack::ConfigResolver do
397
406
  @action.resolve_keypair(env).should eq('my-keypair-imported')
398
407
  end
399
408
  end
409
+
410
+ context 'with insert_key false' do
411
+ it 'does nothing and return nil' do
412
+ config.stub(:keypair_name) { 'my-keypair' }
413
+ ssh_config.stub(:insert_key) { false }
414
+ nova.should_not_receive(:import_keypair_from_file)
415
+ @action.should_not_receive(:generate_keypair)
416
+ @action.resolve_keypair(env).should be_nil
417
+ end
418
+ end
400
419
  end
401
420
 
402
421
  describe 'generate_keypair' do
@@ -29,6 +29,7 @@ describe VagrantPlugins::Openstack::Config do
29
29
  its(:security_groups) { should be_nil }
30
30
  its(:user_data) { should be_nil }
31
31
  its(:metadata) { should be_nil }
32
+ its(:ssl_ca_file) { should eq nil }
32
33
  end
33
34
 
34
35
  describe 'overriding defaults' do
@@ -50,7 +51,8 @@ describe VagrantPlugins::Openstack::Config do
50
51
  :user_data,
51
52
  :metadata,
52
53
  :availability_zone,
53
- :public_key_path].each do |attribute|
54
+ :public_key_path,
55
+ :ssl_ca_file].each do |attribute|
54
56
  it "should not default #{attribute} if overridden" do
55
57
  subject.send("#{attribute}=".to_sym, 'foo')
56
58
  subject.finalize!
@@ -270,6 +272,7 @@ describe VagrantPlugins::Openstack::Config do
270
272
  machine.stub_chain(:env, :root_path).and_return '/'
271
273
  ssh.stub(:private_key_path) { 'private key path' }
272
274
  ssh.stub(:username) { 'ssh username' }
275
+ ssh.stub(:insert_key) { true }
273
276
  config.stub(:ssh) { ssh }
274
277
  machine.stub(:config) { config }
275
278
  subject.username = 'foo'
@@ -348,6 +351,16 @@ describe VagrantPlugins::Openstack::Config do
348
351
  validation_errors.first.should == error_message
349
352
  end
350
353
  end
354
+
355
+ context 'keypair_name or public_key_path is set and ssh.insert_key is false' do
356
+ it 'should not error' do
357
+ ssh.stub(:private_key_path) { nil }
358
+ ssh.stub(:insert_key) { false }
359
+ subject.public_key_path = 'public_key'
360
+ I18n.should_not_receive(:t)
361
+ validation_errors.should be_empty
362
+ end
363
+ end
351
364
  end
352
365
 
353
366
  context 'the password' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-openstack-provider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Giamarchi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-04-11 00:00:00.000000000 Z
12
+ date: 2017-08-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json