vagrant-libvirt 0.10.7 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +44 -7
- data/lib/vagrant-libvirt/action/create_domain.rb +45 -22
- data/lib/vagrant-libvirt/action/create_domain_volume.rb +3 -0
- data/lib/vagrant-libvirt/action/create_network_interfaces.rb +15 -5
- data/lib/vagrant-libvirt/action/create_networks.rb +2 -6
- data/lib/vagrant-libvirt/action/destroy_domain.rb +2 -10
- data/lib/vagrant-libvirt/action/forward_ports.rb +1 -1
- data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +7 -5
- data/lib/vagrant-libvirt/action/resolve_disk_settings.rb +2 -0
- data/lib/vagrant-libvirt/action/snapshot_delete.rb +1 -1
- data/lib/vagrant-libvirt/action/snapshot_restore.rb +1 -1
- data/lib/vagrant-libvirt/action/snapshot_save.rb +1 -2
- data/lib/vagrant-libvirt/action/start_domain.rb +161 -63
- data/lib/vagrant-libvirt/action/wait_till_up.rb +2 -2
- data/lib/vagrant-libvirt/action.rb +18 -13
- data/lib/vagrant-libvirt/cap/mount_9p.rb +9 -1
- data/lib/vagrant-libvirt/cap/snapshots.rb +1 -1
- data/lib/vagrant-libvirt/config.rb +198 -26
- data/lib/vagrant-libvirt/driver.rb +95 -56
- data/lib/vagrant-libvirt/provider.rb +4 -4
- data/lib/vagrant-libvirt/templates/domain.xml.erb +73 -27
- data/lib/vagrant-libvirt/templates/public_interface.xml.erb +6 -3
- data/lib/vagrant-libvirt/util/compat.rb +1 -1
- data/lib/vagrant-libvirt/util/network_util.rb +5 -10
- data/lib/vagrant-libvirt/version +1 -1
- data/locales/en.yml +2 -0
- data/spec/acceptance/additional_storage_spec.rb +1 -4
- data/spec/acceptance/networking_spec.rb +41 -0
- data/spec/acceptance/package_domain_spec.rb +2 -2
- data/spec/acceptance/provider_settings_spec.rb +1 -1
- data/spec/acceptance/simple_vm_provision_via_shell_spec.rb +1 -1
- data/spec/acceptance/snapshots_spec.rb +1 -1
- data/spec/acceptance/support-skeletons/package_complex/scripts/sysprep.sh +0 -0
- data/spec/acceptance/two_disks_spec.rb +1 -1
- data/spec/acceptance/use_qemu_agent_for_connectivity_spec.rb +1 -1
- data/spec/spec_helper.rb +37 -8
- data/spec/support/acceptance/isolated_environment.rb +1 -1
- data/spec/support/environment_helper.rb +1 -1
- data/spec/support/libvirt_acceptance_context.rb +15 -1
- data/spec/support/{sharedcontext.rb → unit_context.rb} +20 -5
- data/spec/unit/action/clean_machine_folder_spec.rb +1 -2
- data/spec/unit/action/cleanup_on_failure_spec.rb +1 -2
- data/spec/unit/action/create_domain_spec/additional_disks_domain.xml +4 -2
- data/spec/unit/action/create_domain_spec/custom_disk_settings.xml +4 -2
- data/spec/unit/action/create_domain_spec/default_domain.xml +4 -2
- data/spec/unit/action/create_domain_spec/sysinfo.xml +4 -2
- data/spec/unit/action/create_domain_spec/sysinfo_only_required.xml +4 -2
- data/spec/unit/action/create_domain_spec/two_disk_settings.xml +4 -2
- data/spec/unit/action/create_domain_spec.rb +51 -3
- data/spec/unit/action/create_domain_volume_spec.rb +2 -4
- data/spec/unit/action/destroy_domain_spec/additional_disks_domain.xml +1 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks.xml +1 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml +1 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks_no_aliases.xml +1 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_disks.xml +1 -0
- data/spec/unit/action/destroy_domain_spec/cdrom_domain.xml +1 -0
- data/spec/unit/action/destroy_domain_spec.rb +1 -18
- data/spec/unit/action/forward_ports_spec.rb +1 -3
- data/spec/unit/action/halt_domain_spec.rb +2 -3
- data/spec/unit/action/handle_box_image_spec.rb +3 -4
- data/spec/unit/action/package_domain_spec.rb +2 -3
- data/spec/unit/action/prepare_nfs_settings_spec.rb +25 -9
- data/spec/unit/action/remove_libvirt_image_spec.rb +1 -2
- data/spec/unit/action/resolve_disk_settings_spec/default_domain.xml +1 -0
- data/spec/unit/action/resolve_disk_settings_spec/default_no_aliases.xml +1 -0
- data/spec/unit/action/resolve_disk_settings_spec/multi_volume_box.xml +1 -0
- data/spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_and_custom_no_aliases.xml +1 -0
- data/spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_storage.xml +1 -0
- data/spec/unit/action/resolve_disk_settings_spec.rb +1 -1
- data/spec/unit/action/set_boot_order_spec/default.xml +1 -0
- data/spec/unit/action/set_boot_order_spec/explicit_boot_order.xml +1 -0
- data/spec/unit/action/set_boot_order_spec.rb +1 -3
- data/spec/unit/action/set_name_of_domain_spec.rb +3 -1
- data/spec/unit/action/shutdown_domain_spec.rb +4 -3
- data/spec/unit/action/start_domain_spec/clock_timer_removed.xml +1 -1
- data/spec/unit/action/start_domain_spec/clock_timer_rtc.xml +1 -1
- data/spec/unit/action/start_domain_spec/clock_timer_rtc_tsc.xml +1 -1
- data/spec/unit/action/start_domain_spec/default.xml +1 -1
- data/spec/unit/action/start_domain_spec/default_added_tpm_path.xml +1 -1
- data/spec/unit/action/start_domain_spec/default_added_tpm_version.xml +1 -1
- data/spec/unit/action/start_domain_spec/default_with_different_formatting.xml +1 -1
- data/spec/unit/action/start_domain_spec/existing.xml +2 -1
- data/spec/unit/action/start_domain_spec/existing_added_nvram.xml +2 -1
- data/spec/unit/action/start_domain_spec/existing_reordered.xml +63 -0
- data/spec/unit/action/start_domain_spec/nvram_domain.xml +1 -0
- data/spec/unit/action/start_domain_spec/nvram_domain_other_setting.xml +2 -1
- data/spec/unit/action/start_domain_spec/nvram_domain_removed.xml +2 -1
- data/spec/unit/action/start_domain_spec.rb +226 -17
- data/spec/unit/action/wait_till_up_spec.rb +3 -5
- data/spec/unit/action_spec.rb +403 -10
- data/spec/unit/cap/mount_9p_spec.rb +75 -0
- data/spec/unit/cap/synced_folder_9p_spec.rb +1 -2
- data/spec/unit/cap/synced_folder_virtiofs_spec.rb +1 -2
- data/spec/unit/config_spec.rb +365 -25
- data/spec/unit/driver_spec.rb +217 -80
- data/spec/unit/plugin_spec.rb +6 -3
- data/spec/unit/templates/domain_all_settings.xml +26 -4
- data/spec/unit/templates/domain_cpu_mode_passthrough.xml +4 -2
- data/spec/unit/templates/domain_custom_cpu_model.xml +4 -2
- data/spec/unit/templates/domain_defaults.xml +4 -2
- data/spec/unit/templates/domain_scsi_bus_storage.xml +4 -2
- data/spec/unit/templates/domain_scsi_device_storage.xml +4 -2
- data/spec/unit/templates/domain_scsi_multiple_controllers_storage.xml +4 -2
- data/spec/unit/templates/domain_spec.rb +11 -3
- data/spec/unit/templates/tpm/version_1.2.xml +4 -2
- data/spec/unit/templates/tpm/version_2.0.xml +4 -2
- data/spec/unit/util/byte_number_spec.rb +1 -1
- data/spec/unit/util/network_util_spec/default.xml +16 -0
- data/spec/unit/util/network_util_spec/hostdev.xml +6 -0
- data/spec/unit/util/network_util_spec/vagrant-libvirt.xml +16 -0
- data/spec/unit/util/network_util_spec.rb +59 -0
- data/spec/unit/util/resolvers_spec.rb +1 -1
- metadata +95 -81
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require 'support/sharedcontext'
|
3
|
+
require_relative '../../spec_helper'
|
5
4
|
|
6
5
|
require 'vagrant-libvirt/action/prepare_nfs_settings'
|
7
6
|
|
@@ -35,7 +34,6 @@ describe VagrantPlugins::ProviderLibvirt::Action::PrepareNFSSettings do
|
|
35
34
|
let(:udp_socket) { double('udp_socket') }
|
36
35
|
|
37
36
|
before do
|
38
|
-
allow(::TCPSocket).to receive(:new).and_return(socket)
|
39
37
|
allow(socket).to receive(:close)
|
40
38
|
|
41
39
|
allow(::UDPSocket).to receive(:open).and_return(udp_socket)
|
@@ -43,17 +41,35 @@ describe VagrantPlugins::ProviderLibvirt::Action::PrepareNFSSettings do
|
|
43
41
|
end
|
44
42
|
|
45
43
|
it 'should retrieve the guest IP address' do
|
46
|
-
|
47
|
-
expect(::TCPSocket).to receive(:new)
|
48
|
-
# force reaching later code
|
49
|
-
times_called += 1
|
50
|
-
times_called < 2 ? raise("StandardError") : socket
|
51
|
-
end
|
44
|
+
expect(::TCPSocket).to receive(:new).with('192.168.1.2', 'ssh').and_raise(StandardError)
|
45
|
+
expect(::TCPSocket).to receive(:new).with('192.168.2.2', 'ssh').and_return(socket)
|
52
46
|
expect(machine).to receive(:ssh_info).and_return({:host => '192.168.1.2'})
|
53
47
|
expect(communicator).to receive(:execute).and_yield(:stdout, "192.168.1.2\n192.168.2.2")
|
54
48
|
|
55
49
|
expect(subject.call(env)).to be_nil
|
56
50
|
end
|
51
|
+
|
52
|
+
it 'should use the ip if connection refused' do
|
53
|
+
expect(::TCPSocket).to receive(:new).with('192.168.1.2', 'ssh').and_raise(Errno::ECONNREFUSED)
|
54
|
+
expect(machine).to receive(:ssh_info).and_return({:host => '192.168.1.2'})
|
55
|
+
|
56
|
+
expect(subject.call(env)).to be_nil
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should use the ssh port defined' do
|
60
|
+
expect(::TCPSocket).to receive(:new).with('192.168.1.2', '2022').and_return(socket)
|
61
|
+
expect(machine).to receive(:ssh_info).and_return({:host => '192.168.1.2', :port => '2022'})
|
62
|
+
|
63
|
+
expect(subject.call(env)).to be_nil
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should raise an exception if machine ip not found' do
|
67
|
+
expect(::TCPSocket).to receive(:new).with('192.168.1.2', 'ssh').and_raise(StandardError)
|
68
|
+
expect(machine).to receive(:ssh_info).and_return({:host => '192.168.1.2'})
|
69
|
+
expect(communicator).to receive(:execute).and_yield(:stdout, "192.168.1.2")
|
70
|
+
|
71
|
+
expect { subject.call(env) }.to raise_error(::Vagrant::Errors::NFSNoHostonlyNetwork)
|
72
|
+
end
|
57
73
|
end
|
58
74
|
end
|
59
75
|
end
|
@@ -1,6 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../spec_helper'
|
4
|
+
|
4
5
|
require 'vagrant-libvirt/action/shutdown_domain'
|
5
6
|
|
6
7
|
describe VagrantPlugins::ProviderLibvirt::Action::StartShutdownTimer do
|
@@ -30,7 +30,7 @@
|
|
30
30
|
<target port='0'/>
|
31
31
|
</console>
|
32
32
|
<input bus='ps2' type='mouse'/>
|
33
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
33
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'/>
|
34
34
|
<video>
|
35
35
|
<model heads='1' type='cirrus' vram='16384'/>
|
36
36
|
</video>
|
@@ -30,7 +30,7 @@
|
|
30
30
|
<target port='0'/>
|
31
31
|
</console>
|
32
32
|
<input bus='ps2' type='mouse'/>
|
33
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
33
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'/>
|
34
34
|
<video>
|
35
35
|
<model heads='1' type='cirrus' vram='16384'/>
|
36
36
|
</video>
|
@@ -31,7 +31,7 @@
|
|
31
31
|
<target port='0'/>
|
32
32
|
</console>
|
33
33
|
<input bus='ps2' type='mouse'/>
|
34
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
34
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'/>
|
35
35
|
<video>
|
36
36
|
<model heads='1' type='cirrus' vram='16384'/>
|
37
37
|
</video>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
<target port='0'/>
|
29
29
|
</console>
|
30
30
|
<input bus='ps2' type='mouse'/>
|
31
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
31
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'/>
|
32
32
|
<video>
|
33
33
|
<model heads='1' type='cirrus' vram='16384'/>
|
34
34
|
</video>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
<target port='0'/>
|
29
29
|
</console>
|
30
30
|
<input bus='ps2' type='mouse'/>
|
31
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
31
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'/>
|
32
32
|
<video>
|
33
33
|
<model heads='1' type='cirrus' vram='16384'/>
|
34
34
|
</video>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
<target port='0'/>
|
29
29
|
</console>
|
30
30
|
<input bus='ps2' type='mouse'/>
|
31
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
31
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'/>
|
32
32
|
<video>
|
33
33
|
<model heads='1' type='cirrus' vram='16384'/>
|
34
34
|
</video>
|
@@ -29,7 +29,7 @@
|
|
29
29
|
<target port='0'/>
|
30
30
|
</console>
|
31
31
|
<input bus='ps2' type='mouse'/>
|
32
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
32
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'/>
|
33
33
|
<video>
|
34
34
|
<model heads='1' type='cirrus' vram='16384'/>
|
35
35
|
</video>
|
@@ -7,6 +7,7 @@
|
|
7
7
|
<vcpu placement='static'>2</vcpu>
|
8
8
|
<os>
|
9
9
|
<type arch='x86_64' machine='pc-i440fx-6.0'>hvm</type>
|
10
|
+
<bootmenu enable='no'/>
|
10
11
|
<boot dev='hd'/>
|
11
12
|
</os>
|
12
13
|
<features>
|
@@ -47,7 +48,7 @@
|
|
47
48
|
</console>
|
48
49
|
<input type='mouse' bus='ps2'/>
|
49
50
|
<input type='keyboard' bus='ps2'/>
|
50
|
-
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us'>
|
51
|
+
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us' websocket='-1'>
|
51
52
|
<listen type='address' address='127.0.0.1'/>
|
52
53
|
</graphics>
|
53
54
|
<audio id='1' type='none'/>
|
@@ -7,6 +7,7 @@
|
|
7
7
|
<vcpu placement='static'>2</vcpu>
|
8
8
|
<os>
|
9
9
|
<type arch='x86_64' machine='pc-i440fx-6.0'>hvm</type><loader type='pflash'>/path/to/loader/file</loader><nvram>/path/to/nvram/file</nvram>
|
10
|
+
<bootmenu enable='no'/>
|
10
11
|
<boot dev='hd'/>
|
11
12
|
</os>
|
12
13
|
<features>
|
@@ -47,7 +48,7 @@
|
|
47
48
|
</console>
|
48
49
|
<input bus='ps2' type='mouse'/>
|
49
50
|
<input bus='ps2' type='keyboard'/>
|
50
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'>
|
51
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'>
|
51
52
|
<listen address='127.0.0.1' type='address'/>
|
52
53
|
</graphics>
|
53
54
|
<audio id='1' type='none'/>
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<domain type='qemu'>
|
2
|
+
<name>vagrant-libvirt_default</name>
|
3
|
+
<uuid>881a931b-0110-4d10-81aa-47a1a19f5726</uuid>
|
4
|
+
<description>Source: /home/test/vagrant-libvirt/Vagrantfile</description>
|
5
|
+
<memory unit='KiB'>2097152</memory>
|
6
|
+
<currentMemory unit='KiB'>2097152</currentMemory>
|
7
|
+
<vcpu placement='static'>2</vcpu>
|
8
|
+
<os>
|
9
|
+
<type arch='x86_64' machine='pc-i440fx-6.0'>hvm</type>
|
10
|
+
<bootmenu enable='no'/>
|
11
|
+
<boot dev='hd'/>
|
12
|
+
</os>
|
13
|
+
<features>
|
14
|
+
<acpi/>
|
15
|
+
<apic/>
|
16
|
+
<pae/>
|
17
|
+
</features>
|
18
|
+
<cpu check='partial' mode='host-passthrough'/>
|
19
|
+
<clock offset='utc'/>
|
20
|
+
<on_poweroff>destroy</on_poweroff>
|
21
|
+
<on_reboot>restart</on_reboot>
|
22
|
+
<on_crash>destroy</on_crash>
|
23
|
+
<devices>
|
24
|
+
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
25
|
+
<disk device='disk' type='file'>
|
26
|
+
<driver name='qemu' type='qcow2'/>
|
27
|
+
<source file='/var/lib/libvirt/images/vagrant-libvirt_default.img'/>
|
28
|
+
<target bus='virtio' dev='vda'/>
|
29
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x03' type='pci'/>
|
30
|
+
</disk>
|
31
|
+
<controller index='0' model='pci-root' type='pci'/>
|
32
|
+
<controller index='0' model='piix3-uhci' type='usb'>
|
33
|
+
<address bus='0x00' domain='0x0000' function='0x2' slot='0x01' type='pci'/>
|
34
|
+
</controller>
|
35
|
+
<interface type='network'>
|
36
|
+
<mac address='52:54:00:7d:14:0e'/>
|
37
|
+
<source network='vagrant-libvirt'/>
|
38
|
+
<model type='virtio'/>
|
39
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x05' type='pci'/>
|
40
|
+
</interface>
|
41
|
+
<serial type='pty'>
|
42
|
+
<target port='0' type='isa-serial'>
|
43
|
+
<model name='isa-serial'/>
|
44
|
+
</target>
|
45
|
+
</serial>
|
46
|
+
<console type='pty'>
|
47
|
+
<target port='0' type='serial'/>
|
48
|
+
</console>
|
49
|
+
<input bus='ps2' type='mouse'/>
|
50
|
+
<input bus='ps2' type='keyboard'/>
|
51
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket="-1">
|
52
|
+
<listen address='127.0.0.1' type='address'/>
|
53
|
+
</graphics>
|
54
|
+
<audio id='1' type='none'/>
|
55
|
+
<video>
|
56
|
+
<model heads='1' primary='yes' type='cirrus' vram='16384'/>
|
57
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x02' type='pci'/>
|
58
|
+
</video>
|
59
|
+
<memballoon model='virtio'>
|
60
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x04' type='pci'/>
|
61
|
+
</memballoon>
|
62
|
+
</devices>
|
63
|
+
</domain>
|
@@ -7,6 +7,7 @@
|
|
7
7
|
<vcpu placement='static'>2</vcpu>
|
8
8
|
<os>
|
9
9
|
<type arch='x86_64' machine='pc-i440fx-6.0'>hvm</type>
|
10
|
+
<bootmenu enable='no'/>
|
10
11
|
<loader type='pflash'>/path/to/loader/file</loader>
|
11
12
|
<nvram>/path/to/nvram/file1</nvram>
|
12
13
|
<boot dev='hd'/>
|
@@ -49,7 +50,7 @@
|
|
49
50
|
</console>
|
50
51
|
<input bus='ps2' type='mouse'/>
|
51
52
|
<input bus='ps2' type='keyboard'/>
|
52
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'>
|
53
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'>
|
53
54
|
<listen address='127.0.0.1' type='address'/>
|
54
55
|
</graphics>
|
55
56
|
<audio id='1' type='none'/>
|
@@ -7,6 +7,7 @@
|
|
7
7
|
<vcpu placement='static'>2</vcpu>
|
8
8
|
<os>
|
9
9
|
<type arch='x86_64' machine='pc-i440fx-6.0'>hvm</type>
|
10
|
+
<bootmenu enable='no'/>
|
10
11
|
|
11
12
|
|
12
13
|
<boot dev='hd'/>
|
@@ -49,7 +50,7 @@
|
|
49
50
|
</console>
|
50
51
|
<input bus='ps2' type='mouse'/>
|
51
52
|
<input bus='ps2' type='keyboard'/>
|
52
|
-
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'>
|
53
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc' websocket='-1'>
|
53
54
|
<listen address='127.0.0.1' type='address'/>
|
54
55
|
</graphics>
|
55
56
|
<audio id='1' type='none'/>
|