kitchen-qemu 0.2.0 → 0.2.1

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: a4524644c5f8decc92563913b719bed878cb8481
4
- data.tar.gz: 48e60f381449ce1e9b9b123d7874d24b4d5b67c2
3
+ metadata.gz: 4e90136f51889ebc9d9061dbbe2211746ef3d1f6
4
+ data.tar.gz: 3cc82a8034acdc525ae04d017b74f7aecc5a1fa3
5
5
  SHA512:
6
- metadata.gz: 82fe2072030831acf5700f87178a8a889485dc949c8254540306dd9e290be1b657fd609688765ef85e548bfde5f1c9fb47a9df7cd26686035dac62639dccc244
7
- data.tar.gz: 43b5e78b3dfb446405e0f2d809b33db8281fc44636851782c421d82321bbbbef755ea60149d0e4007e14c78ef4ea1c3293d3ddd961891a96622a7163a4251797
6
+ metadata.gz: d93624e70a7c938103cab552902e656f7ff0f0e81f16d5c2a35a1bdb2eaeb69924d6548b6f0c03cff6acda2d9ba4c278118153f4ae60ebe8476eef8224d45c56
7
+ data.tar.gz: 81e0ed59f7c674b6d8feeb65cd3cf27b560491a08d054f310c6945381c91d3c4a105bb4eb796cb73a1db01a50cba84f895f2cee0cbd67b21088fc881d652ac55
@@ -15,6 +15,7 @@
15
15
  # along with kitchen-qemu. If not, see <http://www.gnu.org/licenses/>.
16
16
 
17
17
  require 'open3'
18
+ require 'socket'
18
19
 
19
20
  require 'kitchen'
20
21
  require 'kitchen/driver/qemu_version'
@@ -36,7 +37,8 @@ module Kitchen
36
37
  default_config :arch, 'x86_64'
37
38
  default_config :username, 'kitchen'
38
39
  default_config :password, 'kitchen'
39
- default_config :port, 2222
40
+ default_config :port_min, 1025
41
+ default_config :port_max, 65535
40
42
  default_config :display, 'none'
41
43
  default_config :memory, '512'
42
44
  default_config :nic_model, 'virtio'
@@ -134,12 +136,6 @@ module Kitchen
134
136
  fqdn = config[:hostname] || instance.name
135
137
  hostname = fqdn.match(/^([^.]+)/)[0]
136
138
 
137
- state[:hostname] = 'localhost'
138
- state[:port] = config[:port]
139
- state[:username] = config[:username]
140
- state[:password] = config[:password]
141
- state[:acpi_poweroff] = config[:acpi_poweroff]
142
-
143
139
  cmd = [
144
140
  config[:binary], '-daemonize',
145
141
  '-display', config[:display].to_s,
@@ -147,8 +143,6 @@ module Kitchen
147
143
  '-mon', 'chardev=mon-qmp,mode=control,default',
148
144
  '-serial', "mon:unix:path=#{serial_path},server,nowait",
149
145
  '-m', config[:memory].to_s,
150
- '-net', "nic,model=#{config[:nic_model]}",
151
- '-net', "user,net=192.168.1.0/24,hostname=#{hostname},hostfwd=tcp::#{state[:port]}-:22",
152
146
  ]
153
147
 
154
148
  kvm = config[:kvm]
@@ -193,6 +187,13 @@ module Kitchen
193
187
  '-device', "virtio-9p-pci,fsdev=fsdev#{i},mount_tag=path#{i}")
194
188
  end
195
189
 
190
+ port = config[:port]
191
+ port = random_free_port('127.0.0.1', config[:port_min], config[:port_max]) if port.nil?
192
+ cmd.push(
193
+ '-net', "nic,model=#{config[:nic_model]}",
194
+ '-net', "user,net=192.168.1.0/24,hostname=#{hostname},hostfwd=tcp::#{port}-:22",
195
+ )
196
+
196
197
  info 'Spawning QEMU..'
197
198
  error = nil
198
199
  Open3.popen3({ 'QEMU_AUDIO_DRV' => 'none' }, *cmd) do |_, _, err, thr|
@@ -205,6 +206,12 @@ module Kitchen
205
206
  raise ActionFailed, error
206
207
  end
207
208
 
209
+ state[:hostname] = '127.0.0.1'
210
+ state[:port] = port
211
+ state[:username] = config[:username]
212
+ state[:password] = config[:password]
213
+ state[:acpi_poweroff] = config[:acpi_poweroff]
214
+
208
215
  if hostname == fqdn
209
216
  names = fqdn
210
217
  else
@@ -318,6 +325,20 @@ tY4IM9IaSC2LuPFVc0Kx6TwObdeQScOokIxL3HfayfLKieTLC+w2
318
325
  File.open(path, File::CREAT|File::TRUNC|File::RDWR, 0600) { |f| f.write(@@PRIVKEY) }
319
326
  end
320
327
 
328
+ def random_free_port(host, min, max)
329
+ loop do
330
+ port = rand(max - min) + min
331
+ begin
332
+ serv = TCPServer.new(host, port)
333
+ rescue Errno::EADDRINUSE
334
+ # do nothing
335
+ else
336
+ serv.close
337
+ return port
338
+ end
339
+ end
340
+ end
341
+
321
342
  def cleanup!
322
343
  begin
323
344
  File.delete(monitor_path)
@@ -17,6 +17,6 @@
17
17
  module Kitchen
18
18
  module Driver
19
19
  # Version string for the QEMU Kitchen driver
20
- QEMU_VERSION = '0.2.0'
20
+ QEMU_VERSION = '0.2.1'
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-qemu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Renner Berthing
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-07 00:00:00.000000000 Z
11
+ date: 2016-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen