Tomas Jelinek has uploaded a new change for review.

Change subject: restapi: introducint the instance types rest part
......................................................................

restapi: introducint the instance types rest part

WIP, not prepared for review yet

Change-Id: I45f464339e30258860f100240f34d1aa51e533ee
Bug-Url: https://bugzilla.redhat.com/??????
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypeResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypesResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
A 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/InstanceTypeMapper.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
18 files changed, 501 insertions(+), 21 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/27776/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypeResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypeResource.java
new file mode 100644
index 0000000..c39b234
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypeResource.java
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*           http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.resource;
+
+import org.ovirt.engine.api.model.InstanceType;
+import org.ovirt.engine.api.model.NIC;
+import org.ovirt.engine.api.model.Nics;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+@Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
+public interface InstanceTypeResource extends UpdatableResource<InstanceType>, 
AsynchronouslyCreatedResource {
+
+    @Path("{action: (export)}/{oid}")
+    public ActionResource getActionSubresource(@PathParam("action") String 
action, @PathParam("oid") String oid);
+
+
+    @Path("nics")
+    public DevicesResource<NIC, Nics> getNicsResource();
+
+    @Path("watchdogs")
+    public WatchdogsResource getWatchdogsResource();
+
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypesResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypesResource.java
new file mode 100644
index 0000000..8d3d62b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/InstanceTypesResource.java
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2010 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*           http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.resource;
+
+import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
+import org.ovirt.engine.api.model.InstanceType;
+import org.ovirt.engine.api.model.InstanceTypes;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+
+@Path("/instance_types")
+@Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
+public interface InstanceTypesResource {
+
+    @GET
+    @Formatted
+    public InstanceTypes list();
+
+    @POST
+    @Formatted
+    @Consumes({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
+    public Response add(InstanceType template);
+
+    @DELETE
+    @Path("{id}")
+    public Response remove(@PathParam("id") String id);
+
+    @Path("{id}")
+    public InstanceTypeResource getInstanceTypeSubResource(@PathParam("id") 
String id);
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
index 572a152..46c5667 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
@@ -42,6 +42,7 @@
         links.add(createLink("tags", baseUri));
         links.add(createLink("bookmarks", baseUri));
         links.add(createLink("templates", LinkFlags.SEARCHABLE, baseUri));
+        links.add(createLink("instance_types", LinkFlags.SEARCHABLE, baseUri));
         links.add(createLink("users", LinkFlags.SEARCHABLE, baseUri));
         links.add(createLink("groups", LinkFlags.SEARCHABLE, baseUri));
         links.add(createLink("domains", baseUri));
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
index e2450cb..ea8fd49 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
@@ -51,6 +51,7 @@
 import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.HostNIC;
 import org.ovirt.engine.api.model.Image;
+import org.ovirt.engine.api.model.InstanceType;
 import org.ovirt.engine.api.model.Job;
 import org.ovirt.engine.api.model.Label;
 import org.ovirt.engine.api.model.Link;
@@ -126,6 +127,8 @@
 import org.ovirt.engine.api.resource.HostsResource;
 import org.ovirt.engine.api.resource.ImageResource;
 import org.ovirt.engine.api.resource.ImagesResource;
+import org.ovirt.engine.api.resource.InstanceTypeResource;
+import org.ovirt.engine.api.resource.InstanceTypesResource;
 import org.ovirt.engine.api.resource.JobResource;
 import org.ovirt.engine.api.resource.JobsResource;
 import org.ovirt.engine.api.resource.LabelResource;
@@ -330,6 +333,9 @@
         map.add(StorageDomainContentResource.class, 
StorageDomainContentsResource.class, StorageDomain.class);
         TYPES.put(Template.class, map);
 
+        map = new ParentToCollectionMap(InstanceTypeResource.class, 
InstanceTypesResource.class);
+        TYPES.put(InstanceType.class, map);
+
         map = new ParentToCollectionMap(UserResource.class, 
UsersResource.class);
         map.add(DomainUserResource.class, DomainUsersResource.class, 
Domain.class);
         TYPES.put(User.class, map);
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 103211d..a6d30ec 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
@@ -2395,9 +2395,33 @@
   </xs:complexType>
 
   <!-- Virtual Machine Templates -->
-
   <xs:element name="templates" type="Templates"/>
   <xs:element name="template" type="Template"/>
+
+    <xs:complexType name="InstanceTypes">
+        <xs:complexContent>
+            <xs:extension base="BaseResources">
+                <xs:sequence>
+                    <xs:annotation>
+                        <xs:appinfo>
+                            <jaxb:property name="InstanceTypes"/>
+                        </xs:appinfo>
+                    </xs:annotation>
+                    <xs:element ref="instance_type" minOccurs="0" 
maxOccurs="unbounded"/>
+                </xs:sequence>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType name="InstanceType">
+        <xs:complexContent>
+            <xs:extension base="Template">
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+  <xs:element name="instance_types" type="InstanceTypes"/>
+  <xs:element name="instance_type" type="InstanceType"/>
 
   <xs:complexType name="Template">
     <xs:complexContent>
@@ -2781,6 +2805,7 @@
           <xs:element ref="host" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="cluster" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="template" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="instance_type" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="storage_domain" minOccurs="0" maxOccurs="1"/>
           <xs:element name="start_time" type="xs:dateTime" minOccurs="0"/>
           <xs:element name="stop_time" type="xs:dateTime" minOccurs="0"/>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
index e97869c..cdb940b 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
@@ -76,6 +76,8 @@
   bookmarks: org.ovirt.engine.api.models.Bookmarks
   template: org.ovirt.engine.api.model.Template
   templates: org.ovirt.engine.api.model.Templates
+  instance_type: org.ovirt.engine.api.model.InstanceType
+  instance_types: org.ovirt.engine.api.model.InstanceTypes
   ticket: org.ovirt.engine.api.model.Ticket
   transparent_hugepages: org.ovirt.engine.api.model.TransparentHugePages
   user: org.ovirt.engine.api.model.User
@@ -168,6 +170,8 @@
   org.ovirt.engine.api.model.Tags: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
   org.ovirt.engine.api.model.Template: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
   org.ovirt.engine.api.model.Templates: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
+  org.ovirt.engine.api.model.InstanceType: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
+  org.ovirt.engine.api.model.InstanceTypes: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
   org.ovirt.engine.api.model.Ticket: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
   org.ovirt.engine.api.model.TransparentHugePages: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
   org.ovirt.engine.api.model.User: 
org.ovirt.engine.api.resteasy.yaml.CustomBeanWrapper
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 1bf1216..065da83 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -50,6 +50,7 @@
       signatures:
       - mandatoryArguments: {}
         optionalArguments:
+          vm.instance_type.id: 'xs:string'
           vm.name: xs:string
           vm.cluster.id|name: xs:string
           vm.timezone: xs:string
@@ -126,6 +127,7 @@
       signatures:
       - mandatoryArguments: {vm.name: 'xs:string', vm.template.id|name: 
'xs:string', vm.cluster.id|name: 'xs:string'}
         optionalArguments:
+          vm.instance_type.id: 'xs:string'
           vm.quota.id: xs:string
           vm.timezone: xs:string
           vm.os.boot--COLLECTION: {boot.dev: 'xs:string'}
@@ -4876,6 +4878,92 @@
       Content-Type: {value: application/xml|json, required: true}
       Expect: {value: 201-created, required: false}
       Correlation-Id: {value: 'any string', required: false}
+
+- name: /instance_types|rel=get
+  description: get the list of instance types on the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      max: {context: matrix, type: 'xs:int', value: 'max results', required: 
false}
+    headers: {}
+- name: /instance_types/{instance_type:id}|rel=get
+  description: get the details of the instance type on the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    headers: {}
+- name: /instance_types/{instance_type:id}|rel=delete
+  description: delete the instance type from the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
+    headers:
+      Correlation-Id: {value: 'any string', required: false}
+- name: /instance_types|rel=add
+  description: add a new instance type to the system
+  request:
+    body:
+      parameterType: InstanceType
+      signatures:
+      - mandatoryArguments: {template.vm.id|name: 'xs:string', template.name: 
'xs:string'}
+        optionalArguments:
+          template.memory: xs:long
+          template.cpu.topology.cores: xs:int
+          template.high_availability.enabled: 'xs:boolean'
+          template.os.cmdline: xs:string
+          template.origin: xs:string
+          template.high_availability.priority: 'xs:int'
+          template.timezone: xs:string
+          template.domain.name: xs:string
+          template.type: xs:string
+          template.stateless: 'xs:boolean'
+          template.delete_protected: xs:boolean
+          template.sso.methods.method--COLLECTION: {method.id: 'xs:string'}
+          template.console.enabled: xs:boolean
+          template.placement_policy.affinity: xs:string
+          template.description: xs:string
+          template.comment: xs:string
+          template.custom_properties.custom_property--COLLECTION: 
{custom_property.name: 'xs:string', custom_property.value: 'xs:string'}
+          template.os.type: xs:string
+          template.os.boot--COLLECTION: {boot.dev: 'xs:string'}
+          template.cpu.topology.sockets: xs:int
+          template.cpu_shares: xs:int
+          template.cpu.architecture: xs:string
+          template.os.kernel: xs:string
+          template.display.type: xs:string
+          template.display.monitors: xs:int
+          vm.display.single_qxl_pci: xs:boolean
+          template.display.allow_override: xs:boolean
+          template.display.smartcard_enabled: xs:boolean
+          template.display.keyboard_layout: xs:string
+          template.os.initRd: xs:string
+          template.usb.enabled: xs:boolean
+          template.usb.type: xs:string
+          template.tunnel_migration: xs:boolean
+          template.migration_downtime: xs:int
+          template.virtio_scsi.enabled: xs:boolean
+          template.vm.disks.disk--COLLECTION: {disk.id: 'xs:string', 
storage_domains.storage_domain--COLLECTION: {storage_domain.id: 'xs:string'}}
+          template.permissions.clone: xs:boolean
+          template.version.version_name: xs:string
+          template.version.base_template.id: xs:string
+          template.cpu.cpu_tune.vcpu_pin--COLLECTION: {vcpu_pin.vcpu: 
'xs:int', vcpu_pin.cpu_set: 'xs:string'}
+          template.serial_number.policy: xs:string
+          template.serial_number.value: xs:string
+          template.bios.boot_menu.enabled: xs:boolean
+        description: add a new template to the system
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Expect: {value: 201-created, required: false}
+      Correlation-Id: {value: 'any string', required: false}
+
 - name: /clusters/{cluster:id}/affinitygroups|rel=get
   description: get the list of affinity groups in the cluster
   request:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
index accabcb..5af0863 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
@@ -44,6 +44,7 @@
 import org.ovirt.engine.api.restapi.resource.BackendEventsResource;
 import org.ovirt.engine.api.restapi.resource.BackendGroupsResource;
 import org.ovirt.engine.api.restapi.resource.BackendHostsResource;
+import org.ovirt.engine.api.restapi.resource.BackendInstanceTypesResource;
 import org.ovirt.engine.api.restapi.resource.BackendJobsResource;
 import org.ovirt.engine.api.restapi.resource.BackendNetworksResource;
 import org.ovirt.engine.api.restapi.resource.BackendResource;
@@ -129,6 +130,7 @@
         addResource(new BackendDataCentersResource());
         addResource(new BackendStorageDomainsResource());
         addResource(new BackendTemplatesResource());
+        addResource(new BackendInstanceTypesResource());
         addResource(new BackendNetworksResource());
         addResource(new BackendVmPoolsResource());
         addResource(new BackendDisksResource());
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
new file mode 100644
index 0000000..cb9d01f
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
@@ -0,0 +1,96 @@
+package org.ovirt.engine.api.restapi.resource;
+
+
+import org.ovirt.engine.api.model.Console;
+import org.ovirt.engine.api.model.InstanceType;
+import org.ovirt.engine.api.model.NIC;
+import org.ovirt.engine.api.model.Nics;
+import org.ovirt.engine.api.model.VirtIOSCSI;
+import org.ovirt.engine.api.resource.CreationResource;
+import org.ovirt.engine.api.resource.DevicesResource;
+import org.ovirt.engine.api.resource.InstanceTypeResource;
+import org.ovirt.engine.api.resource.WatchdogsResource;
+import org.ovirt.engine.api.restapi.types.VmMapper;
+import org.ovirt.engine.api.restapi.util.VmHelper;
+import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.Version;
+
+import java.util.List;
+
+public class BackendInstanceTypeResource
+    extends AbstractBackendActionableResource<InstanceType, 
org.ovirt.engine.core.common.businessentities.InstanceType>
+    implements InstanceTypeResource {
+
+    static final String[] SUB_COLLECTIONS = { "nics", "watchdogs" };
+
+    public BackendInstanceTypeResource(String id) {
+        super(id, InstanceType.class, 
org.ovirt.engine.core.common.businessentities.InstanceType.class, 
SUB_COLLECTIONS);
+    }
+
+    @Override
+    public InstanceType get() {
+        return performGet(VdcQueryType.GetVmTemplate, new 
GetVmTemplateParameters(guid));
+    }
+
+    @Override
+    public InstanceType update(InstanceType incoming) {
+        return performUpdate(incoming,
+                             new 
QueryIdResolver<Guid>(VdcQueryType.GetVmTemplate, 
GetVmTemplateParameters.class),
+                             VdcActionType.UpdateVmTemplate,
+                             new UpdateParametersProvider());
+    }
+
+    @Override
+    protected InstanceType doPopulate(InstanceType model, 
org.ovirt.engine.core.common.businessentities.InstanceType entity) {
+        if (!model.isSetConsole()) {
+            model.setConsole(new Console());
+        }
+        
model.getConsole().setEnabled(!getConsoleDevicesForEntity(entity.getId()).isEmpty());
+        if (!model.isSetVirtioScsi()) {
+            model.setVirtioScsi(new VirtIOSCSI());
+        }
+        
model.getVirtioScsi().setEnabled(!VmHelper.getInstance().getVirtioScsiControllersForEntity(entity.getId()).isEmpty());
+        return model;
+    }
+
+    @Override
+    public DevicesResource<NIC, Nics> getNicsResource() {
+        return inject(new BackendTemplateNicsResource(guid));
+    }
+
+    @Override
+    public WatchdogsResource getWatchdogsResource() {
+        return inject(new BackendTemplateWatchdogsResource(guid,
+                VdcQueryType.GetWatchdog,
+                new IdQueryParameters(guid)));
+    }
+
+    @Override
+    public CreationResource getCreationSubresource(String oid) {
+        return inject(new BackendCreationResource(oid));
+    }
+
+    private List<String> getConsoleDevicesForEntity(Guid id) {
+        return getEntity(List.class,
+                VdcQueryType.GetConsoleDevices,
+                new IdQueryParameters(id),
+                "GetConsoleDevices", true);
+    }
+
+    protected class UpdateParametersProvider implements 
ParametersProvider<InstanceType, 
org.ovirt.engine.core.common.businessentities.InstanceType> {
+        @Override
+        public VdcActionParametersBase getParameters(InstanceType incoming, 
org.ovirt.engine.core.common.businessentities.InstanceType entity) {
+            org.ovirt.engine.core.common.businessentities.InstanceType updated 
= getMapper(modelType, 
org.ovirt.engine.core.common.businessentities.InstanceType.class).map(incoming, 
entity);
+            
updated.setUsbPolicy(VmMapper.getUsbPolicyOnUpdate(incoming.getUsb(), 
entity.getUsbPolicy(), Version.getLast()));
+
+            return getMapper(modelType, 
UpdateVmTemplateParameters.class).map(incoming, new 
UpdateVmTemplateParameters((VmTemplate) updated));
+        }
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
new file mode 100644
index 0000000..eac2d48
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
@@ -0,0 +1,117 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.Console;
+import org.ovirt.engine.api.model.InstanceType;
+import org.ovirt.engine.api.model.InstanceTypes;
+import org.ovirt.engine.api.model.Template;
+import org.ovirt.engine.api.model.VirtIOSCSI;
+import org.ovirt.engine.api.resource.InstanceTypeResource;
+import org.ovirt.engine.api.resource.InstanceTypesResource;
+import org.ovirt.engine.api.restapi.util.VmHelper;
+import org.ovirt.engine.core.common.action.AddVmTemplateParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VmTemplateParametersBase;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmEntityType;
+import org.ovirt.engine.core.common.businessentities.VmStatic;
+import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+public class BackendInstanceTypesResource
+    extends AbstractBackendCollectionResource<InstanceType, 
org.ovirt.engine.core.common.businessentities.InstanceType>
+    implements InstanceTypesResource {
+
+    static final String[] SUB_COLLECTIONS = {"nics", "watchdogs" };
+
+    public BackendInstanceTypesResource() {
+        super(InstanceType.class, 
org.ovirt.engine.core.common.businessentities.InstanceType.class, 
SUB_COLLECTIONS);
+    }
+
+    @Override
+    public InstanceTypes list() {
+        return 
mapCollection(getBackendCollection(VdcQueryType.GetAllInstanceTypes,
+                new VdcQueryParametersBase()));
+    }
+
+    @Override
+    public Response add(InstanceType instanceType) {
+        validateParameters(instanceType, "name");
+        validateEnums(InstanceType.class, instanceType);
+
+        VmStatic vmStatic = getMapper(Template.class, 
VmStatic.class).map(instanceType, new VmStatic());
+        VM vm = new VM();
+        vm.setStaticData(vmStatic);
+
+        String name = instanceType.getName();
+        String description = "";
+
+        if (instanceType.isSetDescription()) {
+            description = instanceType.getDescription();
+        }
+
+        vm.setVmDescription(description);
+
+        AddVmTemplateParameters addInstanceTypeParameters =
+                new AddVmTemplateParameters(vm, name, description);
+        addInstanceTypeParameters.setTemplateType(VmEntityType.INSTANCE_TYPE);
+        addInstanceTypeParameters.setVmTemplateId(null);
+        addInstanceTypeParameters.setPublicUse(true);
+
+        addInstanceTypeParameters.setConsoleEnabled(instanceType.getConsole() 
!= null && instanceType.getConsole().isSetEnabled() ?
+                        instanceType.getConsole().isEnabled() :
+                        false);
+        
addInstanceTypeParameters.setVirtioScsiEnabled(instanceType.isSetVirtioScsi() 
&& instanceType.getVirtioScsi().isSetEnabled() ?
+                instanceType.getVirtioScsi().isEnabled() : null);
+
+
+        return performCreate(VdcActionType.AddVmTemplate,
+                               addInstanceTypeParameters,
+                               new 
QueryIdResolver<Guid>(VdcQueryType.GetVmTemplate,
+                                                   
GetVmTemplateParameters.class));
+    }
+
+    @Override
+    public InstanceTypeResource getInstanceTypeSubResource(String id) {
+        return inject(new BackendInstanceTypeResource(id));
+    }
+
+    @Override
+    public Response performRemove(String id) {
+        return performAction(VdcActionType.RemoveVmTemplate, new 
VmTemplateParametersBase(asGuid(id)));
+    }
+
+    protected InstanceTypes 
mapCollection(List<org.ovirt.engine.core.common.businessentities.InstanceType> 
entities) {
+        InstanceTypes collection = new InstanceTypes();
+        for (org.ovirt.engine.core.common.businessentities.InstanceType entity 
: entities) {
+            collection.getInstanceTypes().add(addLinks(populate(map(entity), 
entity)));
+        }
+        return collection;
+    }
+
+    @Override
+    protected InstanceType doPopulate(InstanceType model, 
org.ovirt.engine.core.common.businessentities.InstanceType entity) {
+        if (!model.isSetConsole()) {
+            model.setConsole(new Console());
+        }
+        
model.getConsole().setEnabled(!getConsoleDevicesForEntity(entity.getId()).isEmpty());
+        if (!model.isSetVirtioScsi()) {
+            model.setVirtioScsi(new VirtIOSCSI());
+        }
+        
model.getVirtioScsi().setEnabled(!VmHelper.getInstance().getVirtioScsiControllersForEntity(entity.getId()).isEmpty());
+        return model;
+    }
+
+    private List<String> getConsoleDevicesForEntity(Guid id) {
+        return getEntity(List.class,
+                VdcQueryType.GetConsoleDevices,
+                new IdQueryParameters(id),
+                "GetConsoleDevices", true);
+    }
+
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
index d18ec1a..d9e251b 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
@@ -124,7 +124,7 @@
         public VdcActionParametersBase getParameters(Template incoming, 
VmTemplate entity) {
             VmTemplate updated = getMapper(modelType, 
VmTemplate.class).map(incoming, entity);
             
updated.setUsbPolicy(VmMapper.getUsbPolicyOnUpdate(incoming.getUsb(), 
entity.getUsbPolicy(),
-                    lookupCluster(updated.getVdsGroupId())));
+                    
lookupCluster(updated.getVdsGroupId()).getcompatibility_version()));
 
             return getMapper(modelType, 
UpdateVmTemplateParameters.class).map(incoming, new 
UpdateVmTemplateParameters(updated));
         }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
index 41b50c6..1caa9dc 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
@@ -81,7 +81,7 @@
         }
 
         staticVm.setUsbPolicy(VmMapper.getUsbPolicyOnCreate(template.getUsb(),
-                cluster != null ? cluster : 
lookupCluster(staticVm.getVdsGroupId())));
+                cluster != null ? cluster.getcompatibility_version() : 
lookupCluster(staticVm.getVdsGroupId()).getcompatibility_version()));
 
         // REVISIT: powershell has a IsVmTemlateWithSameNameExist safety check
         AddVmTemplateParameters params = new AddVmTemplateParameters(staticVm,
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
index 1f4880d..2b228c6 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
@@ -480,7 +480,7 @@
                     entity.getStaticData());
 
             
updated.setUsbPolicy(VmMapper.getUsbPolicyOnUpdate(incoming.getUsb(), 
entity.getUsbPolicy(),
-                    lookupCluster(updated.getVdsGroupId())));
+                    
lookupCluster(updated.getVdsGroupId()).getcompatibility_version()));
 
             VmManagementParametersBase params = new 
VmManagementParametersBase(updated);
 
@@ -500,6 +500,9 @@
             if (incoming.isSetVirtioScsi()) {
                 
params.setVirtioScsiEnabled(incoming.getVirtioScsi().isEnabled());
             }
+            if (incoming.isSetInstanceType() && 
incoming.getInstanceType().isSetId()) {
+                
updated.setInstanceTypeId(asGuid(incoming.getInstanceType().getId()));
+            }
             return params;
         }
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
index 5de80ae..11c0aeb 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
@@ -121,7 +121,7 @@
                 }
 
                 
staticVm.setUsbPolicy(VmMapper.getUsbPolicyOnCreate(vm.getUsb(),
-                        cluster));
+                        cluster.getcompatibility_version()));
 
                 if (!isFiltered()) {
                     // if the user set the host-name within placement-policy, 
rather than the host-id (legal) -
@@ -138,6 +138,11 @@
                         (vm.isSetStorageDomain() && 
vm.getStorageDomain().isSetId()) ? asGuid(vm.getStorageDomain()
                                 .getId())
                                 : Guid.Empty;
+
+                if (vm.isSetInstanceType() && vm.getInstanceType().isSetId()) {
+                    
staticVm.setInstanceTypeId(asGuid(vm.getInstanceType().getId()));
+                }
+
                 if (vm.isSetDisks() && vm.getDisks().isSetClone() && 
vm.getDisks().isClone()) {
                     response = cloneVmFromTemplate(staticVm, vm, templateId);
                 } else if (Guid.Empty.equals(templateId)) {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
index 56f271a..a5ef93b 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
@@ -84,6 +84,7 @@
             addNetworkCustomPropertiesFeature(features);
             addFeatureRemoveDiskFromVmSnapshot(features);
             addFeatureDiskSnapshotsResourceInStorageDomainContext(features);
+            addInstanceTypesFeature(features);
         }
         return features;
     }
@@ -458,4 +459,11 @@
         feature.setDescription("Configure custom properties when provisioning 
networks on hosts.");
         features.getFeature().add(feature);
     }
+
+    private void addInstanceTypesFeature(Features features) {
+        Feature feature = new Feature();
+        feature.setName("Instance Types");
+        feature.setDescription("Add/modify/remove instance types.");
+        features.getFeature().add(feature);
+    }
 }
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/InstanceTypeMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/InstanceTypeMapper.java
new file mode 100644
index 0000000..447d0f0
--- /dev/null
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/InstanceTypeMapper.java
@@ -0,0 +1,34 @@
+package org.ovirt.engine.api.restapi.types;
+
+import org.ovirt.engine.api.model.InstanceType;
+import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters;
+import org.ovirt.engine.core.common.businessentities.VmStatic;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
+
+public class InstanceTypeMapper extends TemplateMapper {
+
+    @Mapping(from = InstanceType.class, to = 
org.ovirt.engine.core.common.businessentities.InstanceType.class)
+    public static org.ovirt.engine.core.common.businessentities.InstanceType 
map(
+            InstanceType model,
+            org.ovirt.engine.core.common.businessentities.InstanceType 
incoming) {
+        return TemplateMapper.map(model, (VmTemplate) incoming);
+    }
+
+    @Mapping(from = InstanceType.class, to = VmStatic.class)
+    public static VmStatic map(InstanceType model, VmStatic incoming) {
+        return TemplateMapper.map(model, incoming);
+    }
+
+    @Mapping(from = 
org.ovirt.engine.core.common.businessentities.InstanceType.class, to = 
InstanceType.class)
+    public static InstanceType 
map(org.ovirt.engine.core.common.businessentities.InstanceType entity, 
InstanceType incoming) {
+        InstanceType res = incoming != null ? incoming : new InstanceType();
+        TemplateMapper.map((VmTemplate) entity, res);
+        return res;
+    }
+
+    @Mapping(from = InstanceType.class, to = UpdateVmTemplateParameters.class)
+    public static UpdateVmTemplateParameters map(InstanceType template, 
UpdateVmTemplateParameters paramsTemplate) {
+        return TemplateMapper.map(template, paramsTemplate);
+    }
+
+}
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
index 5f75b41..bd7a595c 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
@@ -66,7 +66,6 @@
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
-import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmInit;
 import org.ovirt.engine.core.common.businessentities.VmInitNetwork;
@@ -1351,21 +1350,21 @@
         return pin;
     }
 
-    public static UsbPolicy getUsbPolicyOnCreate(Usb usb, VDSGroup vdsGroup) {
+    public static UsbPolicy getUsbPolicyOnCreate(Usb usb, Version 
vdsGroupVersion) {
         if (usb == null || !usb.isSetEnabled() || !usb.isEnabled()) {
             return UsbPolicy.DISABLED;
         }
         else {
             UsbType usbType = getUsbType(usb);
             if (usbType == null) {
-                return getUsbPolicyAccordingToClusterVersion(vdsGroup);
+                return getUsbPolicyAccordingToClusterVersion(vdsGroupVersion);
             } else {
                 return getUsbPolicyAccordingToUsbType(usbType);
             }
         }
     }
 
-    public static UsbPolicy getUsbPolicyOnUpdate(Usb usb, UsbPolicy 
currentPolicy, VDSGroup vdsGroup) {
+    public static UsbPolicy getUsbPolicyOnUpdate(Usb usb, UsbPolicy 
currentPolicy, Version vdsGroupVersion) {
         if (usb == null)
             return currentPolicy;
 
@@ -1379,7 +1378,7 @@
                 }
                 else {
                     return currentPolicy == UsbPolicy.DISABLED ?
-                            getUsbPolicyAccordingToClusterVersion(vdsGroup)
+                            
getUsbPolicyAccordingToClusterVersion(vdsGroupVersion)
                             : currentPolicy;
                 }
             }
@@ -1402,8 +1401,8 @@
         return usb.isSetType() ? UsbType.fromValue(usb.getType()) : null;
     }
 
-    private static UsbPolicy getUsbPolicyAccordingToClusterVersion(VDSGroup 
vdsGroup) {
-        return vdsGroup.getcompatibility_version().compareTo(Version.v3_1) >= 
0 ?
+    private static UsbPolicy getUsbPolicyAccordingToClusterVersion(Version 
vdsGroupVersion) {
+        return vdsGroupVersion.compareTo(Version.v3_1) >= 0 ?
                 UsbPolicy.ENABLED_NATIVE : UsbPolicy.ENABLED_LEGACY;
     }
 
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
index a63e2a4..7f49428 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
@@ -330,14 +330,14 @@
     public void getUsbPolicyNullUsb() {
         Usb usb = null;
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.DISABLED);
+        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, 
vdsGroup.getcompatibility_version()), UsbPolicy.DISABLED);
     }
 
     @Test
     public void getUsbPolicyIsSetDisabled() {
         Usb usb = new Usb();
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.DISABLED);
+        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, 
vdsGroup.getcompatibility_version()), UsbPolicy.DISABLED);
     }
 
     @Test
@@ -345,7 +345,7 @@
         Usb usb = new Usb();
         usb.setEnabled(false);
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.DISABLED);
+        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, 
vdsGroup.getcompatibility_version()), UsbPolicy.DISABLED);
     }
 
     @Test
@@ -354,7 +354,7 @@
         usb.setEnabled(true);
         usb.setType("native");
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_NATIVE);
+        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, 
vdsGroup.getcompatibility_version()), UsbPolicy.ENABLED_NATIVE);
     }
 
     @Test
@@ -363,7 +363,7 @@
         usb.setEnabled(true);
         usb.setType("legacy");
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_LEGACY);
+        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, 
vdsGroup.getcompatibility_version()), UsbPolicy.ENABLED_LEGACY);
     }
 
     @Test
@@ -372,7 +372,7 @@
         usb.setEnabled(true);
         VDSGroup vdsGroup = new VDSGroup();
         vdsGroup.setcompatibility_version(Version.v3_1);
-        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_NATIVE);
+        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, 
vdsGroup.getcompatibility_version()), UsbPolicy.ENABLED_NATIVE);
     }
 
     @Test
@@ -381,7 +381,7 @@
         usb.setEnabled(true);
         VDSGroup vdsGroup = new VDSGroup();
         vdsGroup.setcompatibility_version(Version.v3_0);
-        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_LEGACY);
+        assertEquals(VmMapper.getUsbPolicyOnCreate(usb, 
vdsGroup.getcompatibility_version()), UsbPolicy.ENABLED_LEGACY);
     }
 
     @Test
@@ -506,7 +506,7 @@
         usb.setEnabled(true);
         VDSGroup vdsGroup = new VDSGroup();
         vdsGroup.setcompatibility_version(Version.v3_0);
-        assertEquals(VmMapper.getUsbPolicyOnUpdate(usb, UsbPolicy.DISABLED, 
vdsGroup), UsbPolicy.ENABLED_LEGACY);
+        assertEquals(VmMapper.getUsbPolicyOnUpdate(usb, UsbPolicy.DISABLED, 
vdsGroup.getcompatibility_version()), UsbPolicy.ENABLED_LEGACY);
     }
 
     @Test
@@ -515,7 +515,7 @@
         usb.setEnabled(true);
         VDSGroup vdsGroup = new VDSGroup();
         vdsGroup.setcompatibility_version(Version.v3_1);
-        assertEquals(VmMapper.getUsbPolicyOnUpdate(usb, UsbPolicy.DISABLED, 
vdsGroup), UsbPolicy.ENABLED_NATIVE);
+        assertEquals(VmMapper.getUsbPolicyOnUpdate(usb, UsbPolicy.DISABLED, 
vdsGroup.getcompatibility_version()), UsbPolicy.ENABLED_NATIVE);
     }
 
     @Test


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

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

Reply via email to