vagrant-libvirt 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -6
  3. data/lib/vagrant-libvirt/action/create_domain.rb +19 -91
  4. data/lib/vagrant-libvirt/action/destroy_domain.rb +20 -4
  5. data/lib/vagrant-libvirt/action/destroy_networks.rb +1 -1
  6. data/lib/vagrant-libvirt/action/handle_box_image.rb +2 -0
  7. data/lib/vagrant-libvirt/action/resolve_disk_settings.rb +174 -0
  8. data/lib/vagrant-libvirt/action/start_domain.rb +41 -1
  9. data/lib/vagrant-libvirt/action.rb +14 -6
  10. data/lib/vagrant-libvirt/config.rb +12 -4
  11. data/lib/vagrant-libvirt/templates/domain.xml.erb +13 -8
  12. data/lib/vagrant-libvirt/util/domain_flags.rb +15 -0
  13. data/lib/vagrant-libvirt/util.rb +1 -0
  14. data/lib/vagrant-libvirt/version +1 -1
  15. data/locales/en.yml +4 -2
  16. data/spec/support/libvirt_context.rb +4 -0
  17. data/spec/unit/action/cleanup_on_failure_spec.rb +0 -2
  18. data/spec/unit/action/create_domain_spec.rb +113 -147
  19. data/spec/unit/action/create_domain_volume_spec.rb +0 -3
  20. data/spec/unit/action/destroy_domain_spec.rb +43 -10
  21. data/spec/unit/action/handle_box_image_spec.rb +13 -13
  22. data/spec/unit/action/package_domain_spec.rb +0 -5
  23. data/spec/unit/action/resolve_disk_settings_spec/default_domain.xml +43 -0
  24. data/spec/unit/action/resolve_disk_settings_spec/default_no_aliases.xml +42 -0
  25. data/spec/unit/action/{create_domain_spec → resolve_disk_settings_spec}/default_system_storage_pool.xml +0 -0
  26. data/spec/unit/action/resolve_disk_settings_spec/multi_volume_box.xml +55 -0
  27. data/spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_and_custom_no_aliases.xml +67 -0
  28. data/spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_storage.xml +67 -0
  29. data/spec/unit/action/resolve_disk_settings_spec.rb +361 -0
  30. data/spec/unit/action/start_domain_spec/existing_added_nvram.xml +62 -0
  31. data/spec/unit/action/start_domain_spec/nvram_domain.xml +64 -0
  32. data/spec/unit/action/start_domain_spec/nvram_domain_other_setting.xml +64 -0
  33. data/spec/unit/action/start_domain_spec/nvram_domain_removed.xml +64 -0
  34. data/spec/unit/action/start_domain_spec.rb +64 -6
  35. data/spec/unit/action/wait_till_up_spec.rb +0 -2
  36. data/spec/unit/action_spec.rb +0 -3
  37. data/spec/unit/config_spec.rb +18 -0
  38. data/spec/unit/driver_spec.rb +2 -0
  39. data/spec/unit/templates/domain_all_settings.xml +8 -2
  40. data/spec/unit/templates/domain_spec.rb +3 -2
  41. metadata +38 -16
@@ -13,19 +13,19 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
13
13
  include_context 'unit'
14
14
  include_context 'libvirt'
15
15
 
16
- let(:libvirt_domain) { double('libvirt_domain') }
17
- let(:libvirt_client) { double('libvirt_client') }
18
16
  let(:servers) { double('servers') }
19
17
 
20
18
  let(:domain_xml) { File.read(File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), test_file)) }
21
19
  let(:updated_domain_xml) { File.read(File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), updated_test_file)) }
22
20
 
21
+ before do
22
+ allow(driver).to receive(:created?).and_return(true)
23
+ end
24
+
23
25
  describe '#call' do
24
26
  let(:test_file) { 'default.xml' }
25
27
 
26
28
  before do
27
- allow_any_instance_of(VagrantPlugins::ProviderLibvirt::Driver)
28
- .to receive(:connection).and_return(connection)
29
29
  allow(connection).to receive(:client).and_return(libvirt_client)
30
30
  allow(libvirt_client).to receive(:lookup_domain_by_uuid).and_return(libvirt_domain)
31
31
 
@@ -43,7 +43,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
43
43
  end
44
44
 
45
45
  it 'should execute without changing' do
46
- allow(libvirt_domain).to receive(:undefine)
46
+ expect(libvirt_domain).to_not receive(:undefine)
47
47
  expect(libvirt_domain).to receive(:autostart=)
48
48
  expect(domain).to receive(:start)
49
49
 
@@ -54,7 +54,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
54
54
  let(:test_file) { 'existing.xml' }
55
55
 
56
56
  it 'should execute without changing' do
57
- allow(libvirt_domain).to receive(:undefine)
57
+ expect(libvirt_domain).to_not receive(:undefine)
58
58
  expect(libvirt_domain).to receive(:autostart=)
59
59
  expect(domain).to receive(:start)
60
60
 
@@ -62,6 +62,64 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
62
62
  end
63
63
  end
64
64
 
65
+ context 'nvram' do
66
+ context 'when being added to existing' do
67
+ let(:vagrantfile_providerconfig) do
68
+ <<-EOF
69
+ libvirt.loader = "/path/to/loader/file"
70
+ libvirt.nvram = "/path/to/nvram/file"
71
+ EOF
72
+ end
73
+ let(:test_file) { 'existing.xml' }
74
+ let(:updated_test_file) { 'existing_added_nvram.xml' }
75
+
76
+ it 'should undefine without passing flags' do
77
+ expect(libvirt_domain).to receive(:undefine).with(0)
78
+ expect(servers).to receive(:create).with(xml: updated_domain_xml)
79
+ expect(libvirt_domain).to receive(:autostart=)
80
+ expect(domain).to receive(:start)
81
+
82
+ expect(subject.call(env)).to be_nil
83
+ end
84
+ end
85
+
86
+ context 'when it was already in use' do
87
+ let(:vagrantfile_providerconfig) do
88
+ <<-EOF
89
+ libvirt.loader = "/path/to/loader/file"
90
+ libvirt.nvram = "/path/to/nvram/file"
91
+ # change another setting to trigger the undefine/create
92
+ libvirt.cpus = 4
93
+ EOF
94
+ end
95
+ let(:test_file) { 'nvram_domain.xml' }
96
+ let(:updated_test_file) { 'nvram_domain_other_setting.xml' }
97
+
98
+ it 'should set the flag to keep nvram' do
99
+ expect(libvirt_domain).to receive(:undefine).with(VagrantPlugins::ProviderLibvirt::Util::DomainFlags::VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)
100
+ expect(servers).to receive(:create).with(xml: updated_domain_xml)
101
+ expect(libvirt_domain).to receive(:autostart=)
102
+ expect(domain).to receive(:start)
103
+
104
+ expect(subject.call(env)).to be_nil
105
+ end
106
+
107
+ context 'when it is being disabled' do
108
+ let(:vagrantfile_providerconfig) { }
109
+ let(:updated_test_file) { 'nvram_domain_removed.xml' }
110
+
111
+ it 'should set the flag to remove nvram' do
112
+ expect(libvirt_domain).to receive(:undefine).with(VagrantPlugins::ProviderLibvirt::Util::DomainFlags::VIR_DOMAIN_UNDEFINE_NVRAM)
113
+ expect(servers).to receive(:create).with(xml: updated_domain_xml)
114
+ expect(libvirt_domain).to receive(:autostart=)
115
+ expect(domain).to receive(:start)
116
+
117
+ expect(subject.call(env)).to be_nil
118
+ end
119
+ end
120
+ end
121
+ end
122
+
65
123
  context 'tpm' do
66
124
  context 'passthrough tpm added' do
67
125
  let(:updated_test_file) { 'default_added_tpm_path.xml' }
@@ -18,8 +18,6 @@ describe VagrantPlugins::ProviderLibvirt::Action::WaitTillUp do
18
18
 
19
19
  describe '#call' do
20
20
  before do
21
- allow_any_instance_of(VagrantPlugins::ProviderLibvirt::Provider).to receive(:driver)
22
- .and_return(driver)
23
21
  allow(driver).to receive(:get_domain).and_return(domain)
24
22
  allow(driver).to receive(:state).and_return(:running)
25
23
  # return some information for domain when needed
@@ -14,13 +14,10 @@ describe VagrantPlugins::ProviderLibvirt::Action do
14
14
  include_context 'libvirt'
15
15
  include_context 'unit'
16
16
 
17
- let(:libvirt_domain) { double('libvirt_domain') }
18
17
  let(:runner) { Vagrant::Action::Runner.new(env) }
19
18
  let(:state) { double('state') }
20
19
 
21
20
  before do
22
- allow_any_instance_of(VagrantPlugins::ProviderLibvirt::Driver)
23
- .to receive(:connection).and_return(connection)
24
21
  allow(machine).to receive(:id).and_return('test-machine-id')
25
22
  allow(machine).to receive(:state).and_return(state)
26
23
 
@@ -630,6 +630,24 @@ describe VagrantPlugins::ProviderLibvirt::Config do
630
630
  end
631
631
  end
632
632
 
633
+ context 'with nvram defined' do
634
+ before do
635
+ subject.nvram = '/path/to/some/nvram'
636
+ end
637
+
638
+ it 'should be invalid as loader not set' do
639
+ assert_invalid
640
+ end
641
+
642
+ context 'with loader defined' do
643
+ it 'should be valid' do
644
+ subject.loader = '/path/to/some/loader'
645
+
646
+ assert_valid
647
+ end
648
+ end
649
+ end
650
+
633
651
  context 'with cpu_mode and cpu_model defined' do
634
652
  it 'should discard model if mode is passthrough' do
635
653
  subject.cpu_mode = 'host-passthrough'
@@ -46,6 +46,8 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
46
46
  allow(machine.provider_config).to receive(:qemu_use_session).and_return(false)
47
47
  allow(logger).to receive(:info)
48
48
  allow(logger).to receive(:debug)
49
+ allow(machine.provider).to receive('driver').and_call_original
50
+ allow(machine2.provider).to receive('driver').and_call_original
49
51
  end
50
52
 
51
53
  describe '#connection' do
@@ -107,14 +107,20 @@
107
107
  </rng>
108
108
  <hostdev mode='subsystem' type='pci' managed='yes'>
109
109
  <source>
110
- <address domain='0x0000' bus='0x06' slot='0x12' function='0x5'/>
110
+ <address domain='0x0000' bus='0x06' slot='0x12' function='0x5'/>
111
111
  </source>
112
112
  </hostdev>
113
113
  <hostdev mode='subsystem' type='pci' managed='yes'>
114
114
  <source>
115
- <address domain='0x0001' bus='0x03' slot='0x00' function='0x0'/>
115
+ <address domain='0x0001' bus='0x03' slot='0x00' function='0x0'/>
116
116
  </source>
117
117
  </hostdev>
118
+ <hostdev mode='subsystem' type='pci' managed='yes'>
119
+ <source>
120
+ <address domain='0x0002' bus='0x04' slot='0x00' function='0x0'/>
121
+ </source>
122
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
123
+ </hostdev>
118
124
  <hostdev mode='subsystem' type='usb'>
119
125
  <source startupPolicy='mandatory'>
120
126
  <vendor id='0x1234'/>
@@ -62,13 +62,13 @@ describe 'templates/domain' do
62
62
  :dev => 'vda',
63
63
  :cache => 'unsafe',
64
64
  :bus => domain.disk_bus,
65
- :path => '/var/lib/libvirt/images/test.qcow2'
65
+ :absolute_path => '/var/lib/libvirt/images/test.qcow2'
66
66
  })
67
67
  domain.domain_volumes.push({
68
68
  :dev => 'vdb',
69
69
  :cache => 'unsafe',
70
70
  :bus => domain.disk_bus,
71
- :path => '/var/lib/libvirt/images/test2.qcow2'
71
+ :absolute_path => '/var/lib/libvirt/images/test2.qcow2'
72
72
  })
73
73
  domain.storage(:file, path: 'test-disk1.qcow2')
74
74
  domain.storage(:file, path: 'test-disk2.qcow2', io: 'threads', copy_on_read: 'on', discard: 'unmap', detect_zeroes: 'on')
@@ -92,6 +92,7 @@ describe 'templates/domain' do
92
92
  domain.serial(:type => 'file', :source => {:path => '/var/log/vm_consoles/machine.log'})
93
93
  domain.pci(bus: '0x06', slot: '0x12', function: '0x5')
94
94
  domain.pci(domain: '0x0001', bus: '0x03', slot: '0x00', function: '0x0')
95
+ domain.pci(domain: '0x0002', bus: '0x04', slot: '0x00', function: '0x0', guest_domain: '0x0000', guest_bus: '0x01', guest_slot: '0x01', guest_function: '0x0')
95
96
  domain.usb_controller(model: 'nec-xhci', ports: '4')
96
97
  domain.usb(bus: '1', device: '2', vendor: '0x1234', product: '0xabcd')
97
98
  domain.redirdev(type: 'tcp', host: 'localhost', port: '4000')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-libvirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Stanek
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-04-13 00:00:00.000000000 Z
14
+ date: 2022-06-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec-core
@@ -75,14 +75,14 @@ dependencies:
75
75
  requirements:
76
76
  - - "~>"
77
77
  - !ruby/object:Gem::Version
78
- version: '2.1'
78
+ version: '2'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - "~>"
84
84
  - !ruby/object:Gem::Version
85
- version: '2.1'
85
+ version: '2'
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rexml
88
88
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +166,7 @@ files:
166
166
  - lib/vagrant-libvirt/action/read_mac_addresses.rb
167
167
  - lib/vagrant-libvirt/action/remove_libvirt_image.rb
168
168
  - lib/vagrant-libvirt/action/remove_stale_volume.rb
169
+ - lib/vagrant-libvirt/action/resolve_disk_settings.rb
169
170
  - lib/vagrant-libvirt/action/resume_domain.rb
170
171
  - lib/vagrant-libvirt/action/set_boot_order.rb
171
172
  - lib/vagrant-libvirt/action/set_name_of_domain.rb
@@ -192,6 +193,7 @@ files:
192
193
  - lib/vagrant-libvirt/util.rb
193
194
  - lib/vagrant-libvirt/util/byte_number.rb
194
195
  - lib/vagrant-libvirt/util/collection.rb
196
+ - lib/vagrant-libvirt/util/domain_flags.rb
195
197
  - lib/vagrant-libvirt/util/erb_template.rb
196
198
  - lib/vagrant-libvirt/util/error_codes.rb
197
199
  - lib/vagrant-libvirt/util/network_util.rb
@@ -216,7 +218,6 @@ files:
216
218
  - spec/unit/action/create_domain_spec/additional_disks_domain.xml
217
219
  - spec/unit/action/create_domain_spec/custom_disk_settings.xml
218
220
  - spec/unit/action/create_domain_spec/default_domain.xml
219
- - spec/unit/action/create_domain_spec/default_system_storage_pool.xml
220
221
  - spec/unit/action/create_domain_spec/default_user_storage_pool.xml
221
222
  - spec/unit/action/create_domain_spec/two_disk_settings.xml
222
223
  - spec/unit/action/create_domain_volume_spec.rb
@@ -236,6 +237,13 @@ files:
236
237
  - spec/unit/action/handle_box_image_spec.rb
237
238
  - spec/unit/action/package_domain_spec.rb
238
239
  - spec/unit/action/prepare_nfs_settings_spec.rb
240
+ - spec/unit/action/resolve_disk_settings_spec.rb
241
+ - spec/unit/action/resolve_disk_settings_spec/default_domain.xml
242
+ - spec/unit/action/resolve_disk_settings_spec/default_no_aliases.xml
243
+ - spec/unit/action/resolve_disk_settings_spec/default_system_storage_pool.xml
244
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box.xml
245
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_and_custom_no_aliases.xml
246
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_storage.xml
239
247
  - spec/unit/action/set_name_of_domain_spec.rb
240
248
  - spec/unit/action/shutdown_domain_spec.rb
241
249
  - spec/unit/action/start_domain_spec.rb
@@ -244,6 +252,10 @@ files:
244
252
  - spec/unit/action/start_domain_spec/default_added_tpm_path.xml
245
253
  - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
246
254
  - spec/unit/action/start_domain_spec/existing.xml
255
+ - spec/unit/action/start_domain_spec/existing_added_nvram.xml
256
+ - spec/unit/action/start_domain_spec/nvram_domain.xml
257
+ - spec/unit/action/start_domain_spec/nvram_domain_other_setting.xml
258
+ - spec/unit/action/start_domain_spec/nvram_domain_removed.xml
247
259
  - spec/unit/action/wait_till_up_spec.rb
248
260
  - spec/unit/action_spec.rb
249
261
  - spec/unit/config_spec.rb
@@ -286,10 +298,9 @@ test_files:
286
298
  - spec/support/matchers/have_file_content.rb
287
299
  - spec/support/binding_proc.rb
288
300
  - spec/support/environment_helper.rb
289
- - spec/support/libvirt_context.rb
290
- - spec/support/sharedcontext.rb
291
301
  - spec/support/temporary_dir.rb
292
- - spec/unit/action/create_domain_spec/default_system_storage_pool.xml
302
+ - spec/support/sharedcontext.rb
303
+ - spec/support/libvirt_context.rb
293
304
  - spec/unit/action/create_domain_spec/default_user_storage_pool.xml
294
305
  - spec/unit/action/create_domain_spec/additional_disks_domain.xml
295
306
  - spec/unit/action/create_domain_spec/custom_disk_settings.xml
@@ -304,26 +315,37 @@ test_files:
304
315
  - spec/unit/action/start_domain_spec/default_added_tpm_path.xml
305
316
  - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
306
317
  - spec/unit/action/start_domain_spec/existing.xml
318
+ - spec/unit/action/start_domain_spec/existing_added_nvram.xml
319
+ - spec/unit/action/start_domain_spec/nvram_domain.xml
320
+ - spec/unit/action/start_domain_spec/nvram_domain_other_setting.xml
321
+ - spec/unit/action/start_domain_spec/nvram_domain_removed.xml
307
322
  - spec/unit/action/clean_machine_folder_spec.rb
308
- - spec/unit/action/cleanup_on_failure_spec.rb
309
- - spec/unit/action/destroy_domain_spec.rb
323
+ - spec/unit/action/set_name_of_domain_spec.rb
310
324
  - spec/unit/action/destroy_domain_spec/additional_disks_domain.xml
311
325
  - spec/unit/action/destroy_domain_spec/box_multiple_disks.xml
312
326
  - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml
313
327
  - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks_no_aliases.xml
314
328
  - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_disks.xml
315
329
  - spec/unit/action/destroy_domain_spec/cdrom_domain.xml
330
+ - spec/unit/action/forward_ports_spec.rb
316
331
  - spec/unit/action/halt_domain_spec.rb
317
- - spec/unit/action/handle_box_image_spec.rb
318
- - spec/unit/action/package_domain_spec.rb
319
332
  - spec/unit/action/prepare_nfs_settings_spec.rb
320
- - spec/unit/action/set_name_of_domain_spec.rb
321
333
  - spec/unit/action/shutdown_domain_spec.rb
322
- - spec/unit/action/start_domain_spec.rb
323
- - spec/unit/action/create_domain_spec.rb
334
+ - spec/unit/action/cleanup_on_failure_spec.rb
324
335
  - spec/unit/action/create_domain_volume_spec.rb
336
+ - spec/unit/action/package_domain_spec.rb
337
+ - spec/unit/action/start_domain_spec.rb
325
338
  - spec/unit/action/wait_till_up_spec.rb
326
- - spec/unit/action/forward_ports_spec.rb
339
+ - spec/unit/action/create_domain_spec.rb
340
+ - spec/unit/action/destroy_domain_spec.rb
341
+ - spec/unit/action/handle_box_image_spec.rb
342
+ - spec/unit/action/resolve_disk_settings_spec.rb
343
+ - spec/unit/action/resolve_disk_settings_spec/default_domain.xml
344
+ - spec/unit/action/resolve_disk_settings_spec/default_no_aliases.xml
345
+ - spec/unit/action/resolve_disk_settings_spec/default_system_storage_pool.xml
346
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box.xml
347
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_and_custom_no_aliases.xml
348
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_storage.xml
327
349
  - spec/unit/templates/tpm/version_1.2.xml
328
350
  - spec/unit/templates/tpm/version_2.0.xml
329
351
  - spec/unit/templates/domain_all_settings.xml