[Kimchi-devel] [PATCH] Reject cdrom update when protocol is not supported by libvirt
Christy Perez
christy at linux.vnet.ibm.com
Tue Aug 12 20:15:45 UTC 2014
Tested-by: Christy Perez <christy at linux.vnet.ibm.com>
According to the test output, update isn't supported by my libvirt
version (libvirt-1.1.3.5-2.fc20.x86_64 on Fedora 20).
I tested this with copy/paste against v4 of my patchset, since git am
wasn't going to work with my updates.
Regards,
- Christy
On 08/12/2014 04:53 AM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> Based on Christy's patchset:
> [Kimchi-devel] [PATCH v3 1/3] Fix Key Error when editing CD ROM path
>
> When remote iso protocol is not supported by libvirt,
> even if we work around by qemu command,
> it will mess up device list logic.
> So reject this use case.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
> src/kimchi/i18n.py | 1 +
> src/kimchi/model/vmstorages.py | 5 ++++-
> tests/test_model.py | 13 +++++++++++++
> 3 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> index 2eae7e8..f5ef275 100644
> --- a/src/kimchi/i18n.py
> +++ b/src/kimchi/i18n.py
> @@ -255,6 +255,7 @@ messages = {
> "KCHVMSTOR0015E": _("Cannot lookup disk path information by given pool/volume: %(error)s"),
> "KCHVMSTOR0016E": _("Volume already been used by other vm"),
> "KCHVMSTOR0017E": _("Only one of path or pool/volume can be specified to add a new virtual machine disk"),
> + "KCHVMSTOR0018E": _("Remote ISO update/attach is not supported by your libvirt version"),
>
> "KCHREPOS0001E": _("YUM Repository ID must be one word only string."),
> "KCHREPOS0002E": _("Repository URL must be an http://, ftp:// or file:// URL."),
> diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py
> index e5be17c..7dc8800 100644
> --- a/src/kimchi/model/vmstorages.py
> +++ b/src/kimchi/model/vmstorages.py
> @@ -29,6 +29,7 @@ from lxml.builder import E
>
> from kimchi.exception import InvalidOperation, InvalidParameter, NotFoundError
> from kimchi.exception import OperationFailed
> +from kimchi.model.config import CapabilitiesModel
> from kimchi.model.vms import DOM_STATE_MAP, VMModel
> from kimchi.model.storagevolumes import StorageVolumeModel
> from kimchi.model.utils import get_vm_config_flag
> @@ -38,7 +39,7 @@ from kimchi.vmdisks import get_device_xml, get_vm_disk, get_vm_disk_list
> from kimchi.vmdisks import DEV_TYPE_SRC_ATTR_MAP
>
> HOTPLUG_TYPE = ['scsi', 'virtio']
> -
> +caps = CapabilitiesModel()
>
> def _get_device_bus(dev_type, dom):
> try:
> @@ -69,6 +70,8 @@ def _get_storage_xml(params, ignore_source=False):
> output = urlparse.urlparse(params.get('path'))
> port = str(output.port or socket.getservbyname(output.scheme))
> host = E.host(name=output.hostname, port=port)
> + if output.scheme not in caps.libvirt_stream_protocols:
> + raise InvalidOperation("KCHVMSTOR0018E")
> source = E.source(protocol=output.scheme, name=output.path)
> source.append(host)
> disk.append(source)
> diff --git a/tests/test_model.py b/tests/test_model.py
> index 7fd0f00..dc56676 100644
> --- a/tests/test_model.py
> +++ b/tests/test_model.py
> @@ -29,6 +29,7 @@ import tempfile
> import threading
> import time
> import unittest
> +import urlparse
> import uuid
>
>
> @@ -38,6 +39,7 @@ import utils
> from kimchi import netinfo
> from kimchi.exception import InvalidOperation, InvalidParameter
> from kimchi.exception import NotFoundError, OperationFailed
> +from kimchi.featuretests import FeatureTests
> from kimchi.iscsi import TargetClient
> from kimchi.model import model
> from kimchi.rollbackcontext import RollbackContext
> @@ -397,11 +399,22 @@ class ModelTests(unittest.TestCase):
> valid_remote_iso_path = utils.get_remote_iso_path()
> cdrom_args = {"type": "cdrom",
> "path": valid_remote_iso_path}
> + protocol = urlparse.urlparse(valid_remote_iso_path).scheme
> + if not FeatureTests.libvirt_supports_iso_stream(protocol):
> + self.assertRaises(InvalidOperation, inst.vmstorages_create,
> + vm_name, cdrom_args)
> + return
> +
> cdrom_dev = inst.vmstorages_create(vm_name, cdrom_args)
> storage_list = inst.vmstorages_get_list(vm_name)
> self.assertEquals(prev_count + 1, len(storage_list))
>
> # Update remote-backed cdrom with the same ISO
> + protocol = urlparse.urlparse(valid_remote_iso_path).scheme
> + if not FeatureTests.libvirt_supports_iso_stream(protocol):
> + self.assertRaises(InvalidOperation, inst.vmstorage_update,
> + vm_name, cdrom_dev, {'path': valid_remote_iso_path})
> + return
> inst.vmstorage_update(vm_name, cdrom_dev,
> {'path': valid_remote_iso_path})
> cdrom_info = inst.vmstorage_lookup(vm_name, cdrom_dev)
>
More information about the Kimchi-devel
mailing list