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

Reply via email to