kitchen-openstack 1.8.1 → 1.9.0.dev

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: cb6b914b94611866e422dabc3cf49b12b27a669e
4
- data.tar.gz: 8afa9715342e7030ef1ff79502f52ee903093380
3
+ metadata.gz: 7d16c235a1abe82961c4184bf0e91329fc09257e
4
+ data.tar.gz: 7d4dabf334f8c74f5101e8aae6514734fc33ccc3
5
5
  SHA512:
6
- metadata.gz: 50a5e198899b658931381439aace29a5f745c64e76ffe9e9db64a227aac60157fe1fd3836b956f09eda16f471b4b8f72662e93b27ad64f9db642896bc8c981a9
7
- data.tar.gz: 31181fa626deffd2467bcf84ebb5e49b1545d70169feebd9687f99000494457268af995964116e5bfac1921b559010136a6ec3364b4a52d04e4a2d02516d4a9d
6
+ metadata.gz: f671a2b04efe4191d91dcc92f9639cb736e02d5207afd8d2ef5e3f3f00573e97f9024ccf4f5e4e2f08f4147f3a211e175378cac7d8c415b346af04b6f730a853
7
+ data.tar.gz: e294a4581e4d42042856e147546739ada5f3510b34b861da514f50d784c5866637ba6107b387f9b10218af12360592fc7c5e0a289c83e263529a1ec9be1c364b
@@ -1,3 +1,5 @@
1
+ # ?.?.? / ????-??-??
2
+
1
3
  # 1.8.1 / 2015-07-22
2
4
 
3
5
  ### Bug Fixes
data/README.md CHANGED
@@ -105,6 +105,28 @@ Test Kitchen's SSH calls to the node.
105
105
  floating_ip: [A SPECIFIC FLOATING IP TO ASSIGN]
106
106
  floating_ip_pool: [AN OPENSTACK POOL NAME TO ASSIGN THE NEXT IP FROM]
107
107
 
108
+ In some complex network scenarios you can have several IP addresses designated
109
+ as public or private. Use `public_ip_order` or `private_ip_order` to control
110
+ which one to use for further SSH connection. Default is 0 (first one)
111
+
112
+ For example if you have openstack istance that has network with several IPs assigned like
113
+
114
+ ```
115
+ +--------------------------------------+------------+--------+------------+-------------+----------------------------------+
116
+ | ID | Name | Status | Task State | Power State | Networks |
117
+ +--------------------------------------+------------+--------+------------+-------------+----------------------------------+
118
+ | 31c98de4-026f-4d12-b03f-a8a35c6e730b | kitchen | ACTIVE | None | Running | test=10.0.0.1, 10.0.1.1 |
119
+
120
+ ```
121
+
122
+ to use second `10.0.1.1` IP address you need to specify
123
+
124
+ ```yaml
125
+ private_ip_order: 1
126
+
127
+ ```
128
+ assuming that test network is configured as private.
129
+
108
130
  The `network_ref` option can be specified as an exact id, an exact name,
109
131
  or as a regular expression matching the name of the network. You can pass one
110
132
 
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  # Encoding: UTF-8
2
2
 
3
3
  require 'bundler/setup'
4
+ require 'bundler/gem_tasks'
4
5
  require 'rubocop/rake_task'
5
6
  require 'cane/rake_task'
6
7
  require 'rspec/core/rake_task'
@@ -17,4 +18,4 @@ end
17
18
 
18
19
  RSpec::Core::RakeTask.new(:spec)
19
20
 
20
- task default: [:cane, :rubocop, :loc, :spec]
21
+ task default: [:rubocop, :loc, :spec]
@@ -1,4 +1,4 @@
1
- # Encoding: UTF-8
1
+ # Encoding: utf-8
2
2
  #
3
3
  # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
4
  #
@@ -30,7 +30,7 @@ module Kitchen
30
30
  # Openstack driver for Kitchen.
31
31
  #
32
32
  # @author Jonathan Hartman <j@p4nt5.com>
33
- class Openstack < Kitchen::Driver::SSHBase
33
+ class Openstack < Kitchen::Driver::SSHBase # rubocop:disable Metrics/ClassLength, Metrics/LineLength
34
34
  @@ip_pool_lock = Mutex.new
35
35
 
36
36
  default_config :server_name, nil
@@ -55,6 +55,8 @@ module Kitchen
55
55
  default_config :openstack_network_name, nil
56
56
  default_config :floating_ip_pool, nil
57
57
  default_config :floating_ip, nil
58
+ default_config :private_ip_order, 0
59
+ default_config :public_ip_order, 0
58
60
  default_config :availability_zone, nil
59
61
  default_config :security_groups, nil
60
62
  default_config :network_ref, nil
@@ -96,6 +98,7 @@ module Kitchen
96
98
  end
97
99
  state[:hostname] = get_ip(server)
98
100
  setup_ssh(server, state)
101
+ wait_for_ssh_key_access(state)
99
102
  add_ohai_hint(state)
100
103
  rescue Fog::Errors::Error, Excon::Errors::Error => ex
101
104
  raise ActionFailed, ex.message
@@ -114,6 +117,25 @@ module Kitchen
114
117
 
115
118
  private
116
119
 
120
+ def wait_for_ssh_key_access(state)
121
+ new_state = build_ssh_args(state)
122
+ new_state[2][:number_of_password_prompts] = 0
123
+ info 'Checking ssh key authentication'
124
+ 30.times do
125
+ ssh = Fog::SSH.new(*new_state)
126
+ begin
127
+ ssh.run([%(uname -a)])
128
+ rescue => e
129
+ info "Server not yet accepting SSH key: #{e.message}"
130
+ sleep 1
131
+ else
132
+ info 'SSH key authetication successful'
133
+ return
134
+ end
135
+ end
136
+ fail "30 seconds went by and we couldn't connect, somethings broken"
137
+ end
138
+
117
139
  def openstack_server
118
140
  server_def = {
119
141
  provider: 'OpenStack'
@@ -305,7 +327,9 @@ module Kitchen
305
327
  pub, priv = get_public_private_ips(server)
306
328
  priv ||= server.ip_addresses unless pub
307
329
  pub, priv = parse_ips(pub, priv)
308
- pub.first || priv.first || fail(ActionFailed, 'Could not find an IP')
330
+ pub[config[:public_ip_order].to_i] ||
331
+ priv[config[:private_ip_order].to_i] ||
332
+ fail(ActionFailed, 'Could not find an IP')
309
333
  end
310
334
 
311
335
  def parse_ips(pub, priv)
@@ -21,6 +21,6 @@ module Kitchen
21
21
  #
22
22
  # @author Jonathan Hartman <j@p4nt5.com>
23
23
  module Driver
24
- OPENSTACK_VERSION = '1.8.1'
24
+ OPENSTACK_VERSION = '1.9.0.dev'
25
25
  end
26
26
  end
@@ -196,35 +196,6 @@ describe Kitchen::Driver::Openstack do
196
196
  openstack_tenant: 'www'
197
197
  }
198
198
  end
199
-
200
- it 'generates a server name in the absence of one' do
201
- driver.create(state)
202
- expect(driver[:server_name]).to eq('a_monkey!')
203
- end
204
-
205
- it 'gets a proper server ID' do
206
- driver.create(state)
207
- expect(state[:server_id]).to eq('test123')
208
- end
209
-
210
- it 'gets a proper hostname (IP)' do
211
- driver.create(state)
212
- expect(state[:hostname]).to eq('1.2.3.4')
213
- end
214
-
215
- it 'does not disable SSL validation' do
216
- expect(driver).to_not receive(:disable_ssl_validation)
217
- driver.create(state)
218
- end
219
- end
220
-
221
- context 'SSL validation disabled' do
222
- let(:config) { { disable_ssl_validation: true } }
223
-
224
- it 'disables SSL cert validation' do
225
- expect(driver).to receive(:disable_ssl_validation)
226
- driver.create(state)
227
- end
228
199
  end
229
200
  end
230
201
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-openstack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.1
4
+ version: 1.9.0.dev
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Hartman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-22 00:00:00.000000000 Z
11
+ date: 2015-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
@@ -230,12 +230,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
230
230
  version: 1.9.3
231
231
  required_rubygems_version: !ruby/object:Gem::Requirement
232
232
  requirements:
233
- - - ">="
233
+ - - ">"
234
234
  - !ruby/object:Gem::Version
235
- version: '0'
235
+ version: 1.3.1
236
236
  requirements: []
237
237
  rubyforge_project:
238
- rubygems_version: 2.4.8
238
+ rubygems_version: 2.2.2
239
239
  signing_key:
240
240
  specification_version: 4
241
241
  summary: A Test Kitchen OpenStack Nova driver
@@ -243,4 +243,3 @@ test_files:
243
243
  - spec/kitchen/driver/openstack/volume_spec.rb
244
244
  - spec/kitchen/driver/openstack_spec.rb
245
245
  - spec/spec_helper.rb
246
- has_rdoc: