Alona Kaplan has uploaded a new change for review.

Change subject: restapi: Adding Network Linking
......................................................................

restapi: Adding Network Linking

- Adding new properties under VM NIC:
  * plugged
  * link_state ("up"/ "down")
- Deprecating the active property under VM NIC
- Deprecating activate/deactivate actions
- plug/unplug and changing link_state (up/down) on a vnic, will be done
  via PUT action on the VM NIC
  /api/vms/{vm:id}/nics/{nic:id}/
- Add support to no network ("<network/>")  on the NIC.

There is no reason to have dedicated actions for plug/unplug or changing
link_state. The original reason for having them was that edit VM nic while
the VM was up used to be blocked and now we'll enable doing these actions.

Change-Id: I14394c47284364c87b0304451c1cb6c4504e83a0
Signed-off-by: Alona Kaplan <alkap...@redhat.com>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmNicResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicResource.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/BackendVmNicResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendNicsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResourceTest.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NicMapper.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NicMapperTest.java
15 files changed, 242 insertions(+), 144 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/65/10165/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmNicResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmNicResource.java
index dd2bfac..da559b8 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmNicResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmNicResource.java
@@ -14,12 +14,15 @@
 import org.ovirt.engine.api.model.Actionable;
 import org.ovirt.engine.api.model.NIC;
 
+
 @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, 
MediaType.APPLICATION_X_YAML })
 public interface VmNicResource extends NicResource {
 
     @Path("{action: (activate|deactivate)}/{oid}")
     public ActionResource getActionSubresource(@PathParam("action") String 
action, @PathParam("oid") String oid);
 
+    // TODO remove on 4.1
+    @Deprecated
     @POST
     @Formatted
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, 
MediaType.APPLICATION_X_YAML })
@@ -27,6 +30,8 @@
     @Path("activate")
     public Response activate(Action action);
 
+    // TODO remove on 4.1
+    @Deprecated
     @POST
     @Formatted
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, 
MediaType.APPLICATION_X_YAML })
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index aaa6559..15873d6 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -2255,10 +2255,12 @@
       <xs:extension base="BaseDevice">
         <xs:sequence>
           <xs:element ref="network" minOccurs="0" maxOccurs="1"/>
+          <xs:element name="linkActive" type="xs:boolean" minOccurs="0"/>
           <xs:element name="interface" type="xs:string" minOccurs="0"/>
           <xs:element ref="mac" minOccurs="0"/>
           <xs:element name="statistics" type="Statistics" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="active" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="active" type="xs:boolean" minOccurs="0"/> <!-- 
Deprecated, replaced by 'plugged' -->
+          <xs:element name="plugged" type="xs:boolean" minOccurs="0"/>
           <xs:element ref="port_mirroring" minOccurs="0" maxOccurs="1"/>
         </xs:sequence>
       </xs:extension>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
index 550e6c4..a80437f 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
@@ -389,12 +389,12 @@
       parameterType: NIC
       signatures:
       - mandatoryArguments: {}
-        optionalArguments: {nic.network.id|name: 'xs:string', nic.name: 
'xs:string', nic.mac.address: 'xs:string', nic.interface: 'xs:string', 
nic.port_mirroring.networks.network--COLLECTION: {network.id: 'xs:string'}}
+        optionalArguments: {nic.network.id|name: 'xs:string', nic.linkActive: 
'xs:boolean', nic.name: 'xs:string', nic.mac.address: 'xs:string', 
nic.interface: 'xs:string', nic.port_mirroring.networks.network--COLLECTION: 
{network.id: 'xs:string'}}
     urlparams: {}
     headers:
       Content-Type: {value: application/xml|json, required: true}
       Correlation-Id: {value: 'any string', required: false}
-- name: /api/vms/{vm:id}/nics/{nic:id}/activate|rel=activate
+- name: /api/vms/{vm:id}/nics/{nic:id}/activate|rel=activate #deprecated, 
replaced by 'add/edit'
   request:
     body:
       parameterType: Action
@@ -403,7 +403,7 @@
     headers:
       Content-Type: {value: application/xml|json, required: true}
       Correlation-Id: {value: 'any string', required: false}
-- name: /api/vms/{vm:id}/nics/{nic:id}/deactivate|rel=deactivate
+- name: /api/vms/{vm:id}/nics/{nic:id}/deactivate|rel=deactivate #deprecated, 
replaced by 'add/edit'
   request:
     body:
       parameterType: Action
@@ -417,8 +417,8 @@
     body:
       parameterType: NIC
       signatures:
-      - mandatoryArguments: {nic.network.id|name: 'xs:string', nic.name: 
'xs:string'}
-        optionalArguments: {nic.mac.address: 'xs:string', nic.interface: 
'xs:string', nic.port_mirroring.networks.network--COLLECTION: {network.id: 
'xs:string'}}
+      - mandatoryArguments: {nic.name: 'xs:string'}
+        optionalArguments: {nic.network.id|name: 'xs:string', nic.linkActive: 
'xs:boolean', nic.mac.address: 'xs:string', nic.interface: 'xs:string', 
nic.port_mirroring.networks.network--COLLECTION: {network.id: 'xs:string'}}
     urlparams: {}
     headers:
       Content-Type: {value: application/xml|json, required: true}
@@ -2153,7 +2153,7 @@
       parameterType: NIC
       signatures:
       - mandatoryArguments: {nic.network.id|name: 'xs:string', nic.name: 
'xs:string'}
-        optionalArguments: {nic.mac.address: 'xs:string', nic.interface: 
'xs:string', nic.port_mirroring.networks.network--COLLECTION: {network.id: 
'xs:string'}}
+        optionalArguments: {nic.linkActive: 'xs:boolean', nic.mac.address: 
'xs:string', nic.interface: 'xs:string', 
nic.port_mirroring.networks.network--COLLECTION: {network.id: 'xs:string'}}
     urlparams: {}
     headers:
       Content-Type: {value: application/xml|json, required: true}
@@ -2181,7 +2181,7 @@
       parameterType: NIC
       signatures:
       - mandatoryArguments: {}
-        optionalArguments: {nic.network.id|name: 'xs:string', nic.name: 
'xs:string', nic.mac.address: 'xs:string', nic.interface: 'xs:string', 
nic.port_mirroring.networks.network--COLLECTION: {network.id: 'xs:string'}}
+        optionalArguments: {nic.network.id|name: 'xs:string', nic.linkActive: 
'xs:boolean', nic.name: 'xs:string', nic.mac.address: 'xs:string', 
nic.interface: 'xs:string', nic.port_mirroring.networks.network--COLLECTION: 
{network.id: 'xs:string'}}
     urlparams: {}
     headers:
       Content-Type: {value: application/xml|json, required: true}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicResource.java
index 4decc56..2a30bf5 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicResource.java
@@ -7,8 +7,8 @@
 import org.ovirt.engine.api.resource.NicResource;
 import org.ovirt.engine.api.resource.StatisticsResource;
 import org.ovirt.engine.core.common.action.VdcActionType;
-import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.Network;
+import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
 import org.ovirt.engine.core.compat.Guid;
 
 
@@ -54,10 +54,13 @@
     }
 
     protected Network findNetwork(NIC resource) {
-        if (resource.isSetNetwork()) {
-            BackendNicsResource parent = (BackendNicsResource)collection;
+        if (resource.isSetNetwork() && (resource.getNetwork().isSetName() || 
resource.getNetwork().isSetId())) {
+            BackendNicsResource parent = (BackendNicsResource) collection;
             Guid clusterId = parent.getClusterId();
-            Network network = parent.lookupClusterNetwork(clusterId, 
resource.getNetwork().isSetId() ? asGuid(resource.getNetwork().getId()) : null, 
resource.getNetwork().getName());
+            Network network =
+                    parent.lookupClusterNetwork(clusterId,
+                            resource.getNetwork().isSetId() ? 
asGuid(resource.getNetwork().getId()) : null,
+                            resource.getNetwork().getName());
             return network;
         } else {
             return null;
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicsResource.java
index 05f66a4..b67459d 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNicsResource.java
@@ -6,9 +6,9 @@
 import javax.ws.rs.core.Response;
 
 import org.ovirt.engine.api.model.NIC;
-import org.ovirt.engine.api.model.Nics;
 import org.ovirt.engine.api.model.Network;
 import org.ovirt.engine.api.model.Networks;
+import org.ovirt.engine.api.model.Nics;
 import org.ovirt.engine.api.model.PortMirroring;
 import org.ovirt.engine.api.resource.DevicesResource;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -51,12 +51,17 @@
              VdcQueryType.GetAllNetworksByClusterId,
              new VdsGroupQueryParamenters(clusterId));
         for (VmNetworkInterface entity : entities) {
-            org.ovirt.engine.core.common.businessentities.Network network = 
lookupClusterNetwork(clusterId, null, entity.getNetworkName(), networks);
+            org.ovirt.engine.core.common.businessentities.Network network = 
null;
+            if (entity.getNetworkName() != null) {
+                network = lookupClusterNetwork(clusterId, null, 
entity.getNetworkName(), networks);
+            }
+
             NIC nic = populate(map(entity), entity);
-            if (network!=null && network.getId()!=null) {
+            if (network != null && network.getId() != null) {
                 if (entity.isPortMirroring()) {
                     PortMirroring portMirroring = new PortMirroring();
                     Networks nets = new Networks();
+
                     Network net = new Network();
                     net.setId(network.getId().toString());
                     portMirroring.setNetworks(nets);
@@ -92,7 +97,7 @@
 
     @Override
     protected String[] getRequiredAddFields() {
-        return new String[] { "name", "network.name|id" };
+        return new String[] { "name" };
     }
 
     protected org.ovirt.engine.core.common.businessentities.Network 
lookupClusterNetwork(Guid clusterId, Guid id, String name, 
List<org.ovirt.engine.core.common.businessentities.Network> networks) {
@@ -142,7 +147,7 @@
     }
 
     protected void setNetworkId(NIC nic) {
-        if ( (nic.isSetNetwork()) && (!nic.getNetwork().isSetId())) {
+        if (nic.isSetNetwork() && !nic.getNetwork().isSetId() && 
nic.getNetwork().isSetName()) {
             Guid clusterId = getClusterId();
             org.ovirt.engine.core.common.businessentities.Network network = 
lookupClusterNetwork(clusterId, nic.getNetwork().getId()==null ? null : 
asGuid(nic.getNetwork().getId()), nic.getNetwork().getName());
             if (network!=null) {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicResource.java
index ebe6b53..1cffca9 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicResource.java
@@ -4,8 +4,8 @@
 import org.ovirt.engine.api.model.Nics;
 import org.ovirt.engine.api.resource.NicResource;
 import org.ovirt.engine.core.common.action.VdcActionType;
-import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.Network;
+import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
 
 public class BackendTemplateNicResource extends BackendNicResource implements 
NicResource {
 
@@ -21,8 +21,10 @@
     @Override
     protected NIC populate(NIC model, VmNetworkInterface entity) {
         Network network = findNetwork(model);
-        model.getNetwork().setId(network.getId().toString());
-        model.getNetwork().setName(null);
+        if (network != null) {
+            model.getNetwork().setId(network.getId().toString());
+            model.getNetwork().setName(null);
+        }
         return model;
     }
 }
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 28f9c73..531498e 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
@@ -1,22 +1,21 @@
 package org.ovirt.engine.api.restapi.resource;
 
-import org.ovirt.engine.core.common.action.AddVmTemplateInterfaceParameters;
-import org.ovirt.engine.core.common.action.RemoveVmTemplateInterfaceParameters;
-import org.ovirt.engine.core.common.action.VdcActionParametersBase;
-import org.ovirt.engine.core.common.action.VdcActionType;
-import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
-import org.ovirt.engine.core.common.businessentities.VmTemplate;
-import org.ovirt.engine.core.common.businessentities.Network;
-import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
-import org.ovirt.engine.core.common.queries.VdcQueryType;
-import org.ovirt.engine.core.compat.Guid;
-import 
org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider;
-
 import org.ovirt.engine.api.model.NIC;
 import org.ovirt.engine.api.model.Nics;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.resource.DeviceResource;
 import org.ovirt.engine.api.resource.DevicesResource;
+import 
org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider;
+import org.ovirt.engine.core.common.action.AddVmTemplateInterfaceParameters;
+import org.ovirt.engine.core.common.action.RemoveVmTemplateInterfaceParameters;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.Network;
+import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
 
 public class BackendTemplateNicsResource
             extends BackendNicsResource
@@ -67,12 +66,19 @@
     @Override
     protected VmNetworkInterface setNetwork(NIC device, VmNetworkInterface ni) 
{
         if (device.isSetNetwork()) {
-            Guid clusterId = getEntity(VmTemplate.class,
-                                       VdcQueryType.GetVmTemplate,
-                                       new GetVmTemplateParameters(parentId), 
"id").getvds_group_id();
-            Network net = lookupClusterNetwork(clusterId, 
device.getNetwork().isSetId() ? asGuid(device.getNetwork().getId()) : null, 
device.getNetwork().getName());
-            if (net != null) {
-                ni.setNetworkName(net.getname());
+            if (device.getNetwork().getId() != null || 
device.getNetwork().getName() != null) {
+                Guid clusterId = getEntity(VmTemplate.class,
+                        VdcQueryType.GetVmTemplate,
+                        new GetVmTemplateParameters(parentId), 
"id").getvds_group_id();
+                Network net =
+                        lookupClusterNetwork(clusterId, 
device.getNetwork().isSetId() ? asGuid(device.getNetwork()
+                                .getId())
+                                : null, device.getNetwork().getName());
+                if (net != null) {
+                    ni.setNetworkName(net.getname());
+                }
+            } else {
+                ni.setNetworkName(null);
             }
         }
         return ni;
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java
index fae39a3..29bf1a2 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java
@@ -6,7 +6,10 @@
 import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.api.model.Fault;
 import org.ovirt.engine.api.model.NIC;
+import org.ovirt.engine.api.model.Network;
+import org.ovirt.engine.api.model.Networks;
 import org.ovirt.engine.api.model.Nics;
+import org.ovirt.engine.api.model.PortMirroring;
 import org.ovirt.engine.api.resource.ActionResource;
 import org.ovirt.engine.api.resource.VmNicResource;
 import org.ovirt.engine.core.common.action.ActivateDeactivateVmNicParameters;
@@ -14,80 +17,119 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.api.model.Network;
-import org.ovirt.engine.api.model.Networks;
-import org.ovirt.engine.api.model.PortMirroring;
 
 public class BackendVmNicResource extends BackendNicResource implements 
VmNicResource {
 
     protected BackendVmNicResource(String id,
-                                   AbstractBackendReadOnlyDevicesResource<NIC, 
Nics, VmNetworkInterface> collection,
-                                   VdcActionType updateType,
-                                   ParametersProvider<NIC, VmNetworkInterface> 
updateParametersProvider,
-                                   String[] requiredUpdateFields,
-                                   String[] subCollections) {
+            AbstractBackendReadOnlyDevicesResource<NIC, Nics, 
VmNetworkInterface> collection,
+            VdcActionType updateType,
+            ParametersProvider<NIC, VmNetworkInterface> 
updateParametersProvider,
+            String[] requiredUpdateFields,
+            String[] subCollections) {
         super(id, collection, updateType, updateParametersProvider, 
requiredUpdateFields, subCollections);
     }
 
     @Override
     protected NIC populate(NIC model, VmNetworkInterface entity) {
-        BackendVmNicsResource parent = (BackendVmNicsResource)collection;
-        Guid clusterId = parent.getClusterId();
-        org.ovirt.engine.core.common.businessentities.Network network = 
parent.getClusterNetwork(clusterId, null, model.getNetwork().getName());
-        String networkId = network == null ? null : network.getId().toString();
-        model.getNetwork().setId(networkId);
-        model.getNetwork().setName(null);
-        if (entity.isPortMirroring()) {
-            PortMirroring portMirroring = new PortMirroring();
-            Networks networks = new Networks();
-            Network net = new Network();
-            net.setId(networkId);
-            net.setName(network.getname());
-            portMirroring.setNetworks(networks);
-            portMirroring.getNetworks().getNetworks().add(net);
-            model.setPortMirroring(portMirroring);
+        BackendVmNicsResource parent = (BackendVmNicsResource) collection;
+        if (model.getNetwork().isSetName()) {
+            Guid clusterId = parent.getClusterId();
+            org.ovirt.engine.core.common.businessentities.Network network =
+                    parent.getClusterNetwork(clusterId, null, 
model.getNetwork().getName());
+            String networkId = network == null ? null : 
network.getId().toString();
+            model.getNetwork().setId(networkId);
+            model.getNetwork().setName(null);
+
+            if (entity.isPortMirroring()) {
+                PortMirroring portMirroring = new PortMirroring();
+                Networks networks = new Networks();
+                Network net = new Network();
+                net.setId(networkId);
+                net.setName(network.getname());
+                portMirroring.setNetworks(networks);
+                portMirroring.getNetworks().getNetworks().add(net);
+                model.setPortMirroring(portMirroring);
+            }
         }
         return parent.addStatistics(model, entity, uriInfo, httpHeaders);
     }
 
     @Override
     public NIC update(NIC device) {
-        //TODO: this is temporary mapping between engine boolean port 
mirroring parameter, and REST
-        //      port mirroring network collection, next engine version will 
support the network collection
-        //      in port mirroring
+        // TODO: this is temporary mapping between engine boolean port 
mirroring parameter, and REST
+        // port mirroring network collection, next engine version will support 
the network collection
+        // in port mirroring
+        NIC nic = null;
         validateEnums(NIC.class, device);
         boolean fault = false;
         String faultString = "The port mirroring network must match the 
Network set on the NIC";
+        Network pmNetwork = null;
         boolean isPortMirroring = device.isSetPortMirroring() && 
device.getPortMirroring().isSetNetworks();
-        boolean isPortMirroringExceeded =
-                isPortMirroring && 
device.getPortMirroring().getNetworks().getNetworks().size() > 1;
-        isPortMirroring = isPortMirroring && 
device.getPortMirroring().getNetworks().getNetworks().size() == 1;
-        if (isPortMirroringExceeded) {
-            fault = true;
-            faultString = "Cannot set more than one network in port mirroring 
mode";
+        if (isPortMirroring) {
+            boolean isPortMirroringExceeded =
+                    isPortMirroring && 
device.getPortMirroring().getNetworks().getNetworks().size() > 1;
+            isPortMirroring = isPortMirroring && 
device.getPortMirroring().getNetworks().getNetworks().size() == 1;
+            if (isPortMirroring) {
+                pmNetwork = 
device.getPortMirroring().getNetworks().getNetworks().get(0);
+            }
+            if (isPortMirroringExceeded) {
+                fault = true;
+                faultString = "Cannot set more than one network in port 
mirroring mode";
+            }
+        } else {
+            nic = get();
+            isPortMirroring = nic.isSetPortMirroring() && 
nic.getPortMirroring().isSetNetworks();
+            if (isPortMirroring) {
+                pmNetwork = 
nic.getPortMirroring().getNetworks().getNetworks().get(0);
+            }
         }
+
         String networkId =
                 (device.isSetNetwork() && device.getNetwork().isSetId()) ? 
device.getNetwork().getId() : null;
         String networkName =
                 (device.isSetNetwork() && device.getNetwork().isSetName()) ? 
device.getNetwork().getName() : null;
+        String faultStringNoNetwork = "Cannot set port mirroring if there is 
no network on the NIC";
         if (!fault && isPortMirroring) {
-            Network pmNetwork = 
device.getPortMirroring().getNetworks().getNetworks().get(0);
+
             String pmNetworkId = (pmNetwork.isSetId() ? pmNetwork.getId() : 
null);
             String pmNetworkName = (pmNetwork.isSetName() ? 
pmNetwork.getName() : null);
-            if (pmNetworkId != null) {
+            if (device.isSetNetwork() && device.getNetwork().getId() == null 
&& device.getNetwork().getName() == null) {
+                fault = true;
+                faultString = faultStringNoNetwork;
+            }
+            else if (pmNetworkId != null) {
                 if (networkId == null) {
-                    networkId = (networkName != null) ? 
getNetworkId(networkName) : get().getNetwork().getId();
+                    if (networkName != null) {
+                        networkId = getNetworkId(networkName);
+                    } else {
+                        nic = nic != null ? nic : get();
+                        networkId = nic.getNetwork().getId();
+                    }
                 }
-                fault = (!pmNetworkId.equals(networkId));
+                if (networkId != null) {
+                    fault = (!pmNetworkId.equals(networkId));
+                } else {
+                    fault = true;
+                    faultString = faultStringNoNetwork;
+                }
             } else if (pmNetworkName != null) {
                 if (networkName == null) {
                     if (networkId == null) {
-                        networkId = get().getNetwork().getId();
+                        nic = nic != null ? nic : get();
+                        networkId = nic.getNetwork().getId();
                     }
                     pmNetworkId = getNetworkId(pmNetworkName);
-                    fault = (!networkId.equals(pmNetworkId));
+                    if (networkId != null) {
+                        fault = (!pmNetworkId.equals(networkId));
+                    }
                 }
-                fault = fault || (!pmNetworkName.equals(networkName));
+                if (networkId != null || networkName != null) {
+                    fault = fault || (!pmNetworkName.equals(networkName));
+                }
+                else {
+                    fault = true;
+                    faultString = faultStringNoNetwork;
+                }
             } else {
                 fault = true;
                 faultString = "Network must have name or id property for port 
mirroring";
@@ -103,12 +145,14 @@
     }
 
     private String getNetworkId(String networkName) {
-        BackendVmNicsResource parent = (BackendVmNicsResource) collection;
-        Guid clusterId = parent.getClusterId();
-        org.ovirt.engine.core.common.businessentities.Network n =
-                parent.getClusterNetwork(clusterId, null, networkName);
-        if (n != null) {
-            return n.getId().toString();
+        if (networkName != null) {
+            BackendVmNicsResource parent = (BackendVmNicsResource) collection;
+            Guid clusterId = parent.getClusterId();
+            org.ovirt.engine.core.common.businessentities.Network n =
+                    parent.getClusterNetwork(clusterId, null, networkName);
+            if (n != null) {
+                return n.getId().toString();
+            }
         }
         return null;
     }
@@ -135,6 +179,6 @@
 
     @Override
     public NIC get() {
-        return super.get();//explicit call solves REST-Easy confusion
+        return super.get();// explicit call solves REST-Easy confusion
     }
 }
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 89ef3d4..acc3962 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
@@ -7,6 +7,15 @@
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
+import org.ovirt.engine.api.common.util.DetailHelper;
+import org.ovirt.engine.api.common.util.LinkHelper;
+import org.ovirt.engine.api.model.Fault;
+import org.ovirt.engine.api.model.NIC;
+import org.ovirt.engine.api.model.Statistic;
+import org.ovirt.engine.api.model.Statistics;
+import org.ovirt.engine.api.resource.VmNicResource;
+import org.ovirt.engine.api.resource.VmNicsResource;
+import 
org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider;
 import org.ovirt.engine.core.common.action.AddVmInterfaceParameters;
 import org.ovirt.engine.core.common.action.RemoveVmInterfaceParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
@@ -17,28 +26,18 @@
 import org.ovirt.engine.core.common.queries.GetVmByVmIdParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
-import 
org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider;
-
-import org.ovirt.engine.api.common.util.DetailHelper;
-import org.ovirt.engine.api.common.util.LinkHelper;
-import org.ovirt.engine.api.model.Fault;
-import org.ovirt.engine.api.model.NIC;
-import org.ovirt.engine.api.model.Statistic;
-import org.ovirt.engine.api.model.Statistics;
-import org.ovirt.engine.api.resource.VmNicResource;
-import org.ovirt.engine.api.resource.VmNicsResource;
 
 public class BackendVmNicsResource
-             extends BackendNicsResource
+        extends BackendNicsResource
         implements VmNicsResource {
 
     public BackendVmNicsResource(Guid parentId) {
         super(parentId,
-              VdcQueryType.GetVmInterfacesByVmId,
-              new GetVmByVmIdParameters(parentId),
-              VdcActionType.AddVmInterface,
-              VdcActionType.RemoveVmInterface,
-              VdcActionType.UpdateVmInterface);
+                VdcQueryType.GetVmInterfacesByVmId,
+                new GetVmByVmIdParameters(parentId),
+                VdcActionType.AddVmInterface,
+                VdcActionType.RemoveVmInterface,
+                VdcActionType.UpdateVmInterface);
     }
 
     @Override
@@ -55,9 +54,9 @@
 
     @Override
     public Response add(NIC device) {
-        //TODO: this is temporary mapping between engine boolean port 
mirroring parameter, and REST
-        //      port mirroring network collection, next engine version will 
support the network collection
-        //      in port mirroring
+        // TODO: this is temporary mapping between engine boolean port 
mirroring parameter, and REST
+        // port mirroring network collection, next engine version will support 
the network collection
+        // in port mirroring
 
         validateEnums(NIC.class, device);
         boolean fault = false;
@@ -78,18 +77,24 @@
                     (device.isSetNetwork() && device.getNetwork().isSetId()) ? 
device.getNetwork().getId() : null;
             String networkName =
                     (device.isSetNetwork() && device.getNetwork().isSetName()) 
? device.getNetwork().getName() : null;
-            if (pmNetworkId != null) {
-                networkId = (networkId == null) ? getNetworkId(networkName) : 
networkId;
-                fault = (!pmNetworkId.equals(networkId));
-            } else if (pmNetworkName != null) {
-                if (networkName == null && networkId != null) {
-                    pmNetworkId = getNetworkId(pmNetworkName);
+
+            if (networkName != null || networkId != null) {
+                if (pmNetworkId != null) {
+                    networkId = (networkId == null) ? 
getNetworkId(networkName) : networkId;
                     fault = (!pmNetworkId.equals(networkId));
+                } else if (pmNetworkName != null) {
+                    if (networkName == null && networkId != null) {
+                        pmNetworkId = getNetworkId(pmNetworkName);
+                        fault = (!pmNetworkId.equals(networkId));
+                    }
+                    fault = fault || (!pmNetworkName.equals(networkName));
+                } else {
+                    fault = true;
+                    faultString = "Network must have name or id property for 
port mirroring";
                 }
-                fault = fault || (!pmNetworkName.equals(networkName));
             } else {
                 fault = true;
-                faultString = "Network must have name or id property for port 
mirroring";
+                faultString = "Cannot set port mirroring if there is no 
network on the NIC";
             }
         }
         if (fault) {
@@ -102,11 +107,12 @@
     }
 
     private String getNetworkId(String networkName) {
-        Guid clusterId = getClusterId();
-        org.ovirt.engine.core.common.businessentities.Network n =
-                getClusterNetwork(clusterId, null, networkName);
-        if (n != null) {
-            return n.getId().toString();
+        if (networkName != null) {
+            Guid clusterId = getClusterId();
+            org.ovirt.engine.core.common.businessentities.Network n = 
getClusterNetwork(clusterId, null, networkName);
+            if (n != null) {
+                return n.getId().toString();
+            }
         }
         return null;
     }
@@ -143,20 +149,26 @@
     @SingleEntityResource
     public VmNicResource getDeviceSubResource(String id) {
         return inject(new BackendVmNicResource(id,
-                                             this,
-                                             updateType,
-                                             getUpdateParametersProvider(),
-                                             getRequiredUpdateFields(),
-                                             subCollections));
+                this,
+                updateType,
+                getUpdateParametersProvider(),
+                getRequiredUpdateFields(),
+                subCollections));
     }
 
     @Override
     protected VmNetworkInterface setNetwork(NIC device, VmNetworkInterface ni) 
{
         if (device.isSetNetwork()) {
-            Guid clusterId = getClusterId();
-            Network net = lookupClusterNetwork(clusterId, 
device.getNetwork().isSetId() ? asGuid(device.getNetwork().getId()) : null, 
device.getNetwork().getName());
-            if (net != null) {
-                ni.setNetworkName(net.getname());
+            if (device.getNetwork().isSetId() || 
device.getNetwork().isSetName()) {
+                Guid clusterId = getClusterId();
+                Network net =
+                        lookupClusterNetwork(clusterId, 
device.getNetwork().isSetId() ? asGuid(device.getNetwork()
+                                .getId()) : null, 
device.getNetwork().getName());
+                if (net != null) {
+                    ni.setNetworkName(net.getname());
+                }
+            } else {
+                ni.setNetworkName(null);
             }
         }
         return ni;
@@ -165,8 +177,8 @@
     @Override
     protected Guid getClusterId() {
         Guid clusterId = getEntity(VM.class,
-            VdcQueryType.GetVmByVmId,
-            new GetVmByVmIdParameters(parentId), "id").getVdsGroupId();
+                VdcQueryType.GetVmByVmId,
+                new GetVmByVmIdParameters(parentId), "id").getVdsGroupId();
         return clusterId;
     }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendNicsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendNicsResourceTest.java
index 0c69cbd..5647f5e 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendNicsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendNicsResourceTest.java
@@ -3,12 +3,11 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.junit.Test;
-
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
+import org.junit.Test;
 import org.ovirt.engine.api.model.NIC;
 import org.ovirt.engine.api.model.Network;
 import org.ovirt.engine.api.resource.NicResource;
@@ -163,7 +162,7 @@
     @Test
     public void testAddIncompleteParameters() throws Exception {
         NIC model = new NIC();
-        model.setName(NAMES[0]);
+        model.setName(null);
         model.setNetwork(new Network());
 
         setUriInfo(setUpBasicUriExpectations());
@@ -172,7 +171,7 @@
             collection.add(model);
             fail("expected WebApplicationException on incomplete parameters");
         } catch (WebApplicationException wae) {
-             verifyIncompleteException(wae, "NIC", "add", "network.name|id");
+            verifyIncompleteException(wae, "NIC", "add", "name");
         }
     }
 
@@ -204,6 +203,7 @@
         verifyCollection(getCollection());
     }
 
+    @Override
     protected void setUpEntityQueryExpectations(int times) throws Exception {
         while (times-- > 0) {
             setUpEntityQueryExpectations(VdcQueryType.GetVmInterfacesByVmId,
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResourceTest.java
index 1fa0b34..f7fb0a7 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateNicsResourceTest.java
@@ -1,12 +1,11 @@
 package org.ovirt.engine.api.restapi.resource;
 
 
-import org.junit.Test;
-
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
+import org.junit.Test;
 import org.ovirt.engine.api.model.NIC;
 import org.ovirt.engine.api.model.Network;
 import org.ovirt.engine.api.resource.NicResource;
@@ -145,7 +144,7 @@
     @Test
     public void testAddIncompleteParameters() throws Exception {
         NIC model = new NIC();
-        model.setName(NAMES[0]);
+        model.setName(null);
         model.setNetwork(new Network());
 
         setUriInfo(setUpBasicUriExpectations());
@@ -154,7 +153,7 @@
             collection.add(model);
             fail("expected WebApplicationException on incomplete parameters");
         } catch (WebApplicationException wae) {
-             verifyIncompleteException(wae, "NIC", "add", "network.name|id");
+            verifyIncompleteException(wae, "NIC", "add", "name");
         }
     }
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResourceTest.java
index 49a7427..317d96c 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResourceTest.java
@@ -163,6 +163,17 @@
         assertNotNull(nic);
     }
 
+    @Test(expected = WebApplicationException.class)
+    public void testUpdateNoNetworkWithPortMirroringNetwork() throws Exception 
{
+        setUriInfo(setUpBasicUriExpectations());
+        control.replay();
+        NIC nic = getNic(false);
+        nic.setNetwork(new Network());
+        nic = resource.update(nic);
+        assertNotNull(nic);
+    }
+
+
     @Test(expected=WebFaultException.class)
     public void testUpdateWithNonExistingNetwork() throws Exception {
         control.replay();
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResourceTest.java
index 4c5db10..0700621 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResourceTest.java
@@ -2,12 +2,11 @@
 
 import java.util.List;
 
-import org.junit.Test;
-
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
+import org.junit.Test;
 import org.ovirt.engine.api.model.NIC;
 import org.ovirt.engine.api.model.Network;
 import org.ovirt.engine.api.resource.NicResource;
@@ -144,7 +143,7 @@
     @Test
     public void testAddIncompleteParameters() throws Exception {
         NIC model = new NIC();
-        model.setName(NAMES[0]);
+        model.setName(null);
         model.setNetwork(new Network());
 
         setUriInfo(setUpBasicUriExpectations());
@@ -153,7 +152,7 @@
             collection.add(model);
             fail("expected WebApplicationException on incomplete parameters");
         } catch (WebApplicationException wae) {
-             verifyIncompleteException(wae, "NIC", "add", "network.name|id");
+            verifyIncompleteException(wae, "NIC", "add", "name");
         }
     }
 
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 de6b38e..1b189cb 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
@@ -24,8 +24,11 @@
         if (model.isSetMac() && model.getMac().isSetAddress()) {
             entity.setMacAddress(model.getMac().getAddress());
         }
-        if (model.isSetNetwork() && model.getNetwork().isSetName()) {
+        if (model.isSetNetwork()) {
             entity.setNetworkName(model.getNetwork().getName());
+        }
+        if (model.isSetLinkActive()) {
+            entity.setLinked(model.isLinkActive());
         }
         if (model.isSetInterface()) {
             NicInterface nicType = 
NicInterface.fromValue(model.getInterface());
@@ -35,6 +38,9 @@
         }
         if (model.isSetActive()) {
             entity.setActive(model.isActive());
+        }
+        if (model.isSetPlugged()) {
+            entity.setActive(model.isPlugged());
         }
         if (model.isSetPortMirroring() && 
model.getPortMirroring().isSetNetworks() &&
                 model.getPortMirroring().getNetworks().isSetNetworks()) {
@@ -63,12 +69,14 @@
             model.setMac(new MAC());
             model.getMac().setAddress(entity.getMacAddress());
         }
-        if (entity.getNetworkName() != null) {
-            model.setNetwork(new Network());
-            model.getNetwork().setName(entity.getNetworkName());
-        }
+
+        model.setNetwork(new Network());
+        model.getNetwork().setName(entity.getNetworkName());
+
+        model.setLinkActive(entity.isLinked());
         model.setInterface(map(entity.getType()));
         model.setActive(entity.isActive());
+        model.setPlugged(entity.isActive());
         return model;
     }
 
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NicMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NicMapperTest.java
index 2448687..727150c 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NicMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NicMapperTest.java
@@ -33,6 +33,8 @@
         assertNotNull(transform.getMac());
         assertEquals(model.getMac().getAddress(), 
transform.getMac().getAddress());
         assertEquals(model.getInterface(), transform.getInterface());
+        assertEquals(model.isLinkActive(), transform.isLinkActive());
+        assertEquals(model.isPlugged(), transform.isPlugged());
     }
 
     @Test


--
To view, visit http://gerrit.ovirt.org/10165
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I14394c47284364c87b0304451c1cb6c4504e83a0
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alona Kaplan <alkap...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to