Commit acf93f14 authored by Łukasz Nowak's avatar Łukasz Nowak

kvm: Support exporter for disk-type=ide

kvm-exporter supported only disk-type=virtio, as qemuqmpclient.driveBackup
source_drive defaults to virtio0.

For disk-type=ide the source_drive found to be ide0-hd0 by query-block during
runtime, and as it's used, now such disk type is supported.
parent 2048ceb8
Pipeline #18418 failed with stage
in 0 seconds
...@@ -39,11 +39,11 @@ md5sum = cd0008f1689dfca9b77370bc4d275b70 ...@@ -39,11 +39,11 @@ md5sum = cd0008f1689dfca9b77370bc4d275b70
[template-kvm-export] [template-kvm-export]
filename = instance-kvm-export.cfg.jinja2 filename = instance-kvm-export.cfg.jinja2
md5sum = 4c9efdc9ef35d1096173084541be712d md5sum = 09252c282ef86f4bb3a88e91869b0f97
[template-kvm-export-script] [template-kvm-export-script]
filename = template/kvm-export.sh.jinja2 filename = template/kvm-export.sh.jinja2
md5sum = b617d64de73de1eed518185f310bbc82 md5sum = 64aa1ce8785f6b94aabd787fa3443082
[template-nbd] [template-nbd]
filename = instance-nbd.cfg.jinja2 filename = instance-nbd.cfg.jinja2
......
...@@ -24,10 +24,20 @@ rendered = ${directory:bin}/${slap-parameter:namebase}-exporter ...@@ -24,10 +24,20 @@ rendered = ${directory:bin}/${slap-parameter:namebase}-exporter
# Resilient stack wants a "wrapper" parameter # Resilient stack wants a "wrapper" parameter
wrapper = ${:rendered} wrapper = ${:rendered}
mode = 0700 mode = 0700
{%- set disk_type = slapparameter_dict.get('disk-type', 'virtio') %}
{%- if disk_type == "virtio" %}
device = virtio0
{%- elif disk_type == "ide" %}
{#- Manually found device name in case of disk-type == ide #}
device = ide0-hd0
{%- else %}
# unsupported disk-type {{ disk_type }}
{%- endif %}
context = context =
section directory directory section directory directory
section buildout buildout section buildout buildout
key socket_path kvm-instance:socket-path key socket_path kvm-instance:socket-path
key device :device
raw gzip_binary {{ gzip_binary }} raw gzip_binary {{ gzip_binary }}
# Extends publish section with resilient parameters # Extends publish section with resilient parameters
......
...@@ -10,7 +10,7 @@ BACKUP_FILE=virtual.qcow2 ...@@ -10,7 +10,7 @@ BACKUP_FILE=virtual.qcow2
QMP_CLIENT={{ buildout['directory'] }}/software_release/bin/qemu-qmp-client QMP_CLIENT={{ buildout['directory'] }}/software_release/bin/qemu-qmp-client
$QMP_CLIENT --socket {{ socket_path }} --drive-backup $BACKUP_DIR/$BACKUP_FILE $QMP_CLIENT --socket {{ socket_path }} --drive-backup $BACKUP_DIR/$BACKUP_FILE {{ device }}
# Due to the way qmp works, the VM file cannot be compressed on the fly. # Due to the way qmp works, the VM file cannot be compressed on the fly.
# Although the compression step is optional, the importer uses the .gz file # Although the compression step is optional, the importer uses the .gz file
......
...@@ -573,6 +573,25 @@ class TestInstanceResilient(InstanceTestCase, KvmMixin): ...@@ -573,6 +573,25 @@ class TestInstanceResilient(InstanceTestCase, KvmMixin):
def getInstanceSoftwareType(cls): def getInstanceSoftwareType(cls):
return 'kvm-resilient' return 'kvm-resilient'
def test_kvm_exporter(self):
exporter_partition = os.path.join(
self.slap.instance_directory,
self.__partition_reference__ + '2')
backup_path = os.path.join(
exporter_partition, 'srv', 'backup', 'kvm', 'virtual.qcow2.gz')
exporter = os.path.join(exporter_partition, 'bin', 'exporter')
if os.path.exists(backup_path):
os.unlink(backup_path)
def call_exporter():
try:
return (0, subprocess.check_output(
[exporter], stderr=subprocess.STDOUT).decode('utf-8'))
except subprocess.CalledProcessError as e:
return (e.returncode, e.output.decode('utf-8'))
status_code, status_text = call_exporter()
self.assertEqual(0, status_code, status_text)
def test(self): def test(self):
connection_parameter_dict = self\ connection_parameter_dict = self\
.computer_partition.getConnectionParameterDict() .computer_partition.getConnectionParameterDict()
...@@ -646,6 +665,15 @@ ir3:sshd-on-watch RUNNING""", ...@@ -646,6 +665,15 @@ ir3:sshd-on-watch RUNNING""",
) )
@skipUnlessKvm
class TestInstanceResilientDiskTypeIde(InstanceTestCase, KvmMixin):
@classmethod
def getInstanceParameterDict(cls):
return {
'disk-type': 'ide'
}
@skipUnlessKvm @skipUnlessKvm
class TestAccessResilientAdditional(InstanceTestCase): class TestAccessResilientAdditional(InstanceTestCase):
__partition_reference__ = 'ara' __partition_reference__ = 'ara'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment