Moti Asayag has uploaded a new change for review. Change subject: restapi,engine: Support network name in update nic ......................................................................
restapi,engine: Support network name in update nic The network name and the port mirroring flag provided by the restapi for updating a vnic name should be respected. In this case the vnic profile id will be ignored. In addition, the patch allows to set 'null' value for the vnic profile id, which is treated as unlinking the nic from the network: <nic> <vnic_profile/> </nic> This patch designed for backward compatibility only of the add/update vm nic. Change-Id: I1f5c96daf64f6e14cc76bfb12daf89618f656b3d Bug-Url: https://bugzilla.redhat.com/1011116 Signed-off-by: Moti Asayag <masa...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/VmTemplateInterfaceCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/VnicProfileHelper.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmInterfaceParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateInterfaceParameters.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NicMapper.java 8 files changed, 112 insertions(+), 14 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/03/19903/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/VmTemplateInterfaceCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/VmTemplateInterfaceCommandBase.java index c8b090c..1c069c2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/VmTemplateInterfaceCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/VmTemplateInterfaceCommandBase.java @@ -49,6 +49,8 @@ protected boolean updateVnicForBackwardCompatibility() { if (!validate(VnicProfileHelper.updateNicForBackwardCompatibility(getParameters().getInterface(), + getParameters().getNetworkName(), + getParameters().isPortMirroring(), getVmTemplate(), getCurrentUser().getUserId()))) { return false; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java index 6b07345..f4abe73 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java @@ -96,6 +96,8 @@ protected boolean updateVnicForBackwardCompatibility() { if (!validate(VnicProfileHelper.updateNicForBackwardCompatibility(getParameters().getInterface(), + getParameters().getNetworkName(), + getParameters().isPortMirroring(), getVm().getStaticData(), getCurrentUser().getUserId()))) { return false; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/VnicProfileHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/VnicProfileHelper.java index ecfdde9..95b241b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/VnicProfileHelper.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/VnicProfileHelper.java @@ -15,6 +15,7 @@ import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; +import org.ovirt.engine.core.common.businessentities.network.VmNic; import org.ovirt.engine.core.common.businessentities.network.VnicProfile; import org.ovirt.engine.core.common.businessentities.network.VnicProfileView; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -149,27 +150,34 @@ } } - public static ValidationResult updateNicForBackwardCompatibility(VmNetworkInterface nic, VmBase vm, Guid userId) { - if (nic.getVnicProfileId() != null) { + public static ValidationResult updateNicForBackwardCompatibility(VmNic nic, + String networkName, + boolean portMirroring, + VmBase vm, + Guid userId) { + + if (networkName == null) { return ValidationResult.VALID; } - if (nic.getNetworkName() == null) { - if (nic.isPortMirroring()) { + // empty network name is considered as an empty network + if ("".equals(networkName)) { + if (portMirroring) { return new ValidationResult(VdcBllMessages.PORT_MIRRORING_REQUIRES_NETWORK); } else { + nic.setVnicProfileId(null); return ValidationResult.VALID; } } - Network network = getNetworkDao().getByNameAndCluster(nic.getNetworkName(), vm.getVdsGroupId()); + Network network = getNetworkDao().getByNameAndCluster(networkName, vm.getVdsGroupId()); if (network == null) { return new ValidationResult(VdcBllMessages.NETWORK_NOT_EXISTS_IN_CLUSTER); } List<VnicProfile> vnicProfiles = getVnicProfileDao().getAllForNetwork(network.getId()); for (VnicProfile profile : vnicProfiles) { - if (isVnicProfilePermitted(userId, profile, nic.isPortMirroring())) { + if (isVnicProfilePermitted(userId, profile, portMirroring)) { nic.setVnicProfileId(profile.getId()); return ValidationResult.VALID; } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmInterfaceParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmInterfaceParameters.java index 84f47dd..1dd036d 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmInterfaceParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmInterfaceParameters.java @@ -12,6 +12,9 @@ @Valid private VmNetworkInterface nic; + private String networkName; + private boolean portMirroring; + public AddVmInterfaceParameters() { } @@ -20,7 +23,36 @@ nic = iface; } + /** + * This c'tor is used only for backward compatibility of the rest api for adding or updating vnic, where the old api + * expects network name and optionally port mirroring which were replaced by the vnic profile id in the new API. + * + * @param vmId + * the VM's ID + * @param iface + * the interface entity to add/update + * @param networkName + * the network name which a vnic profile will be searched for. {@code ""} represents an empty network. + * @param portMirroring + * indicates if port mirroring should be set for the network + */ + @Deprecated + public AddVmInterfaceParameters(Guid vmId, VmNetworkInterface nic, String networkName, boolean portMirroring) { + super(vmId); + this.nic = nic; + this.networkName = networkName; + this.portMirroring = portMirroring; + } + public VmNetworkInterface getInterface() { return nic; } + + public String getNetworkName() { + return networkName; + } + + public boolean isPortMirroring() { + return portMirroring; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateInterfaceParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateInterfaceParameters.java index 4c70bdc..436cb6b 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateInterfaceParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateInterfaceParameters.java @@ -11,6 +11,9 @@ @Valid private VmNetworkInterface nic; + private String networkName; + private boolean portMirroring; + public AddVmTemplateInterfaceParameters() { } @@ -19,7 +22,39 @@ this.nic = nic; } + /** + * This c'tor is used only for backward compatibility of the rest api for adding or updating vnic, where the old api + * expects network name and optionally port mirroring which were replaced by the vnic profile id in the new API. + * + * @param templateId + * the template's ID + * @param iface + * the interface entity to add/update + * @param networkName + * the network name which a vnic profile will be searched for. {@code ""} represents an empty network. + * @param portMirroring + * indicates if port mirroring should be set for the network + */ + @Deprecated + public AddVmTemplateInterfaceParameters(Guid templateId, + VmNetworkInterface nic, + String networkName, + boolean portMirroring) { + super(templateId); + this.nic = nic; + this.networkName = networkName; + this.portMirroring = portMirroring; + } + public VmNetworkInterface getInterface() { return nic; } + + public String getNetworkName() { + return networkName; + } + + public boolean isPortMirroring() { + return portMirroring; + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResource.java index 315651e..3f85778 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResource.java @@ -39,13 +39,21 @@ protected class UpdateParametersProvider implements ParametersProvider<NIC, VmNetworkInterface> { @Override public VdcActionParametersBase getParameters(NIC incoming, VmNetworkInterface entity) { - return new AddVmTemplateInterfaceParameters(parentId, map(incoming, entity)); + VmNetworkInterface nic = map(incoming, entity); + return new AddVmTemplateInterfaceParameters(parentId, + nic, + incoming.isSetNetwork() ? (incoming.getNetwork().isSetName() ? nic.getNetworkName() : "") : null, + incoming.isSetPortMirroring() ? nic.isPortMirroring() : false); } } @Override protected VdcActionParametersBase getAddParameters(VmNetworkInterface entity, NIC nic) { - return new AddVmTemplateInterfaceParameters(parentId, setNetwork(nic, entity)); + VmNetworkInterface iface = setNetwork(nic, entity); + return new AddVmTemplateInterfaceParameters(parentId, + iface, + nic.isSetNetwork() ? iface.getNetworkName() : null, + nic.isSetPortMirroring() ? iface.isPortMirroring() : false); } @Override @@ -79,7 +87,7 @@ ni.setNetworkName(net.getName()); } } else { - ni.setNetworkName(null); + ni.setNetworkName(""); } } return ni; diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java index 1459473..7280de2 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java @@ -53,7 +53,11 @@ protected class UpdateParametersProvider implements ParametersProvider<NIC, VmNetworkInterface> { @Override public VdcActionParametersBase getParameters(NIC incoming, VmNetworkInterface entity) { - return new AddVmInterfaceParameters(parentId, map(incoming, entity)); + VmNetworkInterface nic = map(incoming, entity); + return new AddVmInterfaceParameters(parentId, + nic, + incoming.isSetNetwork() ? (incoming.getNetwork().isSetName() ? nic.getNetworkName() : "") : null, + incoming.isSetPortMirroring() ? nic.isPortMirroring() : false); } } @@ -170,7 +174,10 @@ @Override protected VdcActionParametersBase getAddParameters(VmNetworkInterface entity, NIC nic) { - return new AddVmInterfaceParameters(parentId, setNetwork(nic, entity)); + return new AddVmInterfaceParameters(parentId, + setNetwork(nic, entity), + nic.isSetNetwork() ? entity.getNetworkName() : null, + nic.isSetPortMirroring() ? entity.isPortMirroring() : false); } @Override @@ -201,7 +208,7 @@ ni.setNetworkName(net.getName()); } } else { - ni.setNetworkName(null); + ni.setNetworkName(""); } } return ni; diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NicMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NicMapper.java index 28dee96..aa3a893 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NicMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NicMapper.java @@ -53,8 +53,12 @@ } } - if (model.isSetVnicProfile() && model.getVnicProfile().isSetId()) { - entity.setVnicProfileId(GuidUtils.asGuid(model.getVnicProfile().getId())); + if (model.isSetVnicProfile()) { + if (model.getVnicProfile().isSetId()) { + entity.setVnicProfileId(GuidUtils.asGuid(model.getVnicProfile().getId())); + } else { + entity.setVnicProfileId(null); + } } return entity; -- To view, visit http://gerrit.ovirt.org/19903 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1f5c96daf64f6e14cc76bfb12daf89618f656b3d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Moti Asayag <masa...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches