Daniel Erez has uploaded a new change for review. Change subject: core: allow read-only for VirtIO-SCSI DirectLUN disks ......................................................................
core: allow read-only for VirtIO-SCSI DirectLUN disks In order to support read-only property for VirtIO-SCSI DirectLUN disks, the device type for such disks should be 'disk' (SCSI emulation) instead of 'lun' (SCSI passthrough). I.e. representation in the domain xml sent to libvirt should look like [1] instead of [2]. Note that this limitation (enabling passthrough for read-only VirtIO-SCSI DirectLUN disks) could be removed once 'Support read only VirtIO-SCSI direct LUNs in QEMU' bug [3] is resolved. [1] <disk type='block' device='disk'>...</disk> [2] <disk type='block' device='lun'>...</disk> [3] https://bugzilla.redhat.com/1110396 Change-Id: Ic317722be9ef8978b50352c12bc06ea8c906dcd0 Bug-Url: https://bugzilla.redhat.com/1118847 Signed-off-by: Daniel Erez <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 12 files changed, 73 insertions(+), 25 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/30123/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java index 772d6d1..2eb1a40 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java @@ -8,6 +8,7 @@ import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.DiskInterface; +import org.ovirt.engine.core.common.businessentities.ScsiGenericIO; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDevice; @@ -42,6 +43,11 @@ if (disk.getSgio() != null) { if (DiskStorageType.IMAGE == disk.getDiskStorageType()) { return new ValidationResult(VdcBllMessages.SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK); + } + + // Unfiltered SCSI Generic IO is not supported for read-only disks + if (disk.getSgio() == ScsiGenericIO.UNFILTERED && Boolean.TRUE.equals(disk.getReadOnly())) { + return new ValidationResult(VdcBllMessages.UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK); } } @@ -102,8 +108,7 @@ public ValidationResult isReadOnlyPropertyCompatibleWithInterface() { if (Boolean.TRUE.equals(disk.getReadOnly())) { DiskInterface diskInterface = disk.getDiskInterface(); - if (diskInterface == DiskInterface.IDE || - (diskInterface == DiskInterface.VirtIO_SCSI && disk.getDiskStorageType() == DiskStorageType.LUN )) { + if (diskInterface == DiskInterface.IDE) { return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_DOES_NOT_SUPPORT_READ_ONLY_ATTR, String.format("$interface %1$s", diskInterface)); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java index f14691b..313ede0 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java @@ -769,6 +769,32 @@ } @Test + public void testReadOnlyDiskWithUnfilteredSgioCantBeAdded() { + LunDisk disk = createISCSILunDisk(); + disk.setDiskInterface(DiskInterface.VirtIO_SCSI); + disk.setSgio(ScsiGenericIO.UNFILTERED); + disk.setReadOnly(true); + + AddDiskParameters parameters = createParameters(); + parameters.setDiskInfo(disk); + + Guid storageId = Guid.newGuid(); + initializeCommand(storageId, parameters); + mockStorageDomain(storageId); + mockStoragePoolIsoMap(); + + VM vm = mockVm(); + vm.setVdsGroupCompatibilityVersion(Version.v3_3); + mockMaxPciSlots(); + + DiskValidator diskValidator = spyDiskValidator(disk); + doReturn(true).when(diskValidator).isVirtioScsiControllerAttached(any(Guid.class)); + + CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, + VdcBllMessages.UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK); + } + + @Test public void testLunDiskWithSgioCanBeAdded() { LunDisk disk = createISCSILunDisk(); disk.setDiskInterface(DiskInterface.VirtIO_SCSI); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java index dee52b2..6ef3c1f 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java @@ -164,14 +164,6 @@ assertThat(validator.isReadOnlyPropertyCompatibleWithInterface(), both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_DOES_NOT_SUPPORT_READ_ONLY_ATTR)). and(replacements(hasItem(String.format("$interface %1$s", DiskInterface.IDE))))); - - - setupForLun(); - lunDisk.setReadOnly(true); - lunDisk.setDiskInterface(DiskInterface.VirtIO_SCSI); - assertThat(lunValidator.isReadOnlyPropertyCompatibleWithInterface(), - both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_DOES_NOT_SUPPORT_READ_ONLY_ATTR)). - and(replacements(hasItem(String.format("$interface %1$s", DiskInterface.VirtIO_SCSI))))); } @Test diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index 910f1bd..69714fa 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -776,6 +776,7 @@ DISK_IS_ALREADY_SHARED_BETWEEN_VMS(ErrorType.CONFLICT), VM_CANNOT_RUN_FROM_DISK_WITHOUT_PLUGGED_DISK(ErrorType.CONFLICT), SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK(ErrorType.NOT_SUPPORTED), + UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK(ErrorType.NOT_SUPPORTED), VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL(ErrorType.INCOMPATIBLE_VERSION), CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED(ErrorType.CONFLICT), CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS(ErrorType.CONFLICT), diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index d9184d7..e163734 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -962,6 +962,7 @@ ERROR_CANNOT_DETACH_DISK_WITH_SNAPSHOT=Cannot ${action} ${type}. The disk is already configured in a snapshot. In order to detach it, remove the disk's snapshots. DISK_IS_ALREADY_SHARED_BETWEEN_VMS=Cannot ${action} ${type}. Disk is shared between vms and cannot become unshareable . Detach the disk from the rest of the vms it is attached to and then update the disk to be unshareable. SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK="Cannot ${action} ${type}. SCSI Generic IO is not supported for image disk." +UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK="Cannot ${action} ${type}. Unfiltered SCSI Generic IO is not applicable for a read-only disk." VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL=Virtio-SCSI interface is only available on cluster level 3.3 or higher. CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED=Cannot ${action} ${type}. VirtIO-SCSI is disabled for the VM CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS=Cannot disable VirtIO-SCSI when disks with a VirtIO-SCSI interface are plugged into the VM. diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java index 9f92325..f26f360 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java @@ -68,7 +68,10 @@ drive.put(VdsProperties.PropagateErrors, disk.getPropagateErrors().toString().toLowerCase()); } else { LunDisk lunDisk = (LunDisk) disk; - drive.put(VdsProperties.Device, VmDeviceType.LUN.getName()); + boolean isVirtioScsi = getParameters().getDisk().getDiskInterface() == DiskInterface.VirtIO_SCSI; + boolean isReadonly = Boolean.TRUE.equals(vmDevice.getIsReadOnly()); + drive.put(VdsProperties.Device, isVirtioScsi && isReadonly ? + VmDeviceType.DISK.getName(): VmDeviceType.LUN.getName()); drive.put(VdsProperties.Guid, lunDisk.getLun().getLUN_id()); drive.put(VdsProperties.Format, VolumeFormat.RAW.toString().toLowerCase()); drive.put(VdsProperties.PropagateErrors, PropagateErrors.Off.toString() diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java index 4896f77..4d9306b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java @@ -286,7 +286,9 @@ break; case VirtIO_SCSI: struct.put(VdsProperties.INTERFACE, VdsProperties.Scsi); - if (disk.getDiskStorageType() == DiskStorageType.LUN) { + // Enabling SCSI pass-through (by using 'lun' tag) only for read/write disks + // to avoid conflict with read-only disks. + if (disk.getDiskStorageType() == DiskStorageType.LUN && !Boolean.TRUE.equals(vmDevice.getIsReadOnly())) { struct.put(VdsProperties.Device, VmDeviceType.LUN.getName()); struct.put(VdsProperties.Sgio, disk.getSgio().toString().toLowerCase()); } diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index b5e2f02..fe4e2d1 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -2619,6 +2619,9 @@ @DefaultStringValue("Cannot ${action} ${type}. SCSI Generic IO is not supported for image disk.") String SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK(); + @DefaultStringValue("Cannot ${action} ${type}. Unfiltered SCSI Generic IO is not applicable for a read-only disk.") + String UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK(); + @DefaultStringValue("VirtIO-SCSI interface is only available on cluster level 3.3 or higher.") String VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java index 68cf26a..2ed642f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java @@ -284,9 +284,11 @@ setIsReadOnly(new EntityModel<Boolean>()); getIsReadOnly().setEntity(false); + getIsReadOnly().getEntityChangedEvent().addListener(this); setIsSgIoUnfiltered(new EntityModel<Boolean>()); getIsSgIoUnfiltered().setIsAvailable(false); + getIsSgIoUnfiltered().getEntityChangedEvent().addListener(this); setIsDirectLunDiskAvaialable(new EntityModel<Boolean>()); getIsDirectLunDiskAvaialable().setEntity(true); @@ -655,8 +657,14 @@ DiskInterface diskInterface = getDiskInterface().getSelectedItem(); getIsSgIoUnfiltered().setIsAvailable(!isInternal && DiskInterface.VirtIO_SCSI.equals(diskInterface)); + updateSgIoUnfilteredChangeability(); updateReadOnlyChangeability(); updatePlugChangeability(); + } + + protected void updateSgIoUnfilteredChangeability() { + getIsSgIoUnfiltered().setIsChangable(!getIsReadOnly().getEntity()); + getIsSgIoUnfiltered().setChangeProhibitionReason(CONSTANTS.cannotEnableUnfilteredSGIOForLunReadOnlyDisk()); } protected void updateReadOnlyChangeability() { @@ -670,7 +678,8 @@ } boolean isDirectLUN = Boolean.FALSE.equals(getIsInternal().getEntity()); - if (diskInterface == DiskInterface.VirtIO_SCSI && isDirectLUN) { + boolean isSgIoUnfiltered = Boolean.TRUE.equals(getIsSgIoUnfiltered().getEntity()); + if (diskInterface == DiskInterface.VirtIO_SCSI && isDirectLUN && isSgIoUnfiltered) { getIsReadOnly().setChangeProhibitionReason(CONSTANTS.cannotEnableVirtIoScsiInterfaceForLunReadOnlyDisk()); getIsReadOnly().setIsChangable(false); getIsReadOnly().setEntity(false); @@ -898,17 +907,18 @@ public void eventRaised(Event ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); - if (ev.matchesDefinition(EntityModel.entityChangedEventDefinition) && sender == getIsWipeAfterDelete()) - { - wipeAfterDelete_EntityChanged(args); - } - else if (ev.matchesDefinition(EntityModel.entityChangedEventDefinition) && sender == getIsAttachDisk()) - { - attachDisk_EntityChanged(args); - } - else if (ev.matchesDefinition(ListModel.entityChangedEventDefinition) && sender == getIsInternal()) - { - isInternal_EntityChanged(); + if (ev.matchesDefinition(EntityModel.entityChangedEventDefinition)) { + if (sender == getIsWipeAfterDelete()) { + wipeAfterDelete_EntityChanged(args); + } else if (sender == getIsAttachDisk()) { + attachDisk_EntityChanged(args); + } else if (sender == getIsReadOnly()) { + updateSgIoUnfilteredChangeability(); + } else if (sender == getIsSgIoUnfiltered()) { + updateReadOnlyChangeability(); + } else if (sender == getIsInternal()) { + isInternal_EntityChanged(); + } } else if (ev.matchesDefinition(ListModel.selectedItemChangedEventDefinition) && sender == getVolumeType()) { diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index ab3bfbb..98f61af 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -2254,9 +2254,12 @@ @DefaultStringValue("An IDE disk can't be read-only.") String cannotEnableIdeInterfaceForReadOnlyDisk(); - @DefaultStringValue("A VirtIO-ISCSI direct LUN disk can't be read-only.") + @DefaultStringValue("A VirtIO-ISCSI direct LUN disk can't be set as read-only when privileged SCSI I/O is allowed.") String cannotEnableVirtIoScsiInterfaceForLunReadOnlyDisk(); + @DefaultStringValue("Privileged SCSI I/O is not supported for read-only disks.") + String cannotEnableUnfilteredSGIOForLunReadOnlyDisk(); + @DefaultStringValue("Global Maintenance Enabled") String haGlobalMaintenance(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 66de685..ac216f9 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -922,6 +922,7 @@ ERROR_CANNOT_DETACH_DISK_WITH_SNAPSHOT=Cannot ${action} ${type}. The disk is already configured in a snapshot. In order to detach it, remove the disk's snapshots. DISK_IS_ALREADY_SHARED_BETWEEN_VMS=Cannot ${action} ${type}. Disk is shared between vms and cannot become unshareable . Detach the disk from the rest of the vms it is attached to and then update the disk to be unshareable. SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK="Cannot ${action} ${type}. SCSI Generic IO is not supported for image disk." +UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK="Cannot ${action} ${type}. Unfiltered SCSI Generic IO is not applicable for a read-only disk." VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL=Virtio-SCSI interface is only available on cluster level 3.3 or higher. CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED=Cannot ${action} ${type}. VirtIO-SCSI is disabled for the VM CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS=Cannot disable VirtIO-SCSI when disks with a VirtIO-SCSI interface are plugged into the VM. diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 70b292d..260ffab 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -962,6 +962,7 @@ ERROR_CANNOT_DETACH_DISK_WITH_SNAPSHOT=Cannot ${action} ${type}. The disk is already configured in a snapshot. In order to detach it, remove the disk's snapshots. DISK_IS_ALREADY_SHARED_BETWEEN_VMS=Cannot ${action} ${type}. Disk is shared between vms and cannot become unshareable . Detach the disk from the rest of the vms it is attached to and then update the disk to be unshareable. SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK="Cannot ${action} ${type}. SCSI Generic IO is not supported for image disk." +UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK="Cannot ${action} ${type}. Unfiltered SCSI Generic IO is not applicable for a read-only disk." VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL=Virtio-SCSI interface is only available on cluster level 3.3 or higher. CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED=Cannot ${action} ${type}. VirtIO-SCSI is disabled for the VM CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS=Cannot disable VirtIO-SCSI when disks with a VirtIO-SCSI interface are plugged into the VM. -- To view, visit http://gerrit.ovirt.org/30123 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic317722be9ef8978b50352c12bc06ea8c906dcd0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
