Ravi Nori has uploaded a new change for review.

Change subject: restapi : Placement policy template properties should be 
listed(#949285)
......................................................................

restapi : Placement policy template properties should be listed(#949285)

Templates placement policy properties host id and affinity should
be displayed on /api/templates/xxx and should be editable via
update

Change-Id: I3ecaca8e07bed62861f8e1d3fa5a92071d06693d
Bug-Url: https://bugzilla.redhat.com/949285
Signed-off-by: Ravi Nori <[email protected]>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
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/resource/BackendTemplateResource.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
5 files changed, 103 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/15620/1

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 06af2de..32aa4ba 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
@@ -1928,6 +1928,7 @@
           <xs:element ref="domain" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="usb" minOccurs="0" maxOccurs="1"/>
           <xs:element name="tunnel_migration" type="xs:boolean" minOccurs="0" 
maxOccurs="1"/>
+          <xs:element name="placement_policy" type="VmPlacementPolicy" 
minOccurs="0" maxOccurs="1"/>
           <!-- also rel="cdroms/disks/nics" links, see Devices below -->
         </xs:sequence>
       </xs:extension>
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 99a56b9..abdf565 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
@@ -2381,6 +2381,7 @@
           template.stateless: 'xs:boolean'
           template.delete_protected: xs:boolean
           template.placement_policy.affinity: xs:string
+          template.placement_policy.host.id|name: xs:string
           template.description: xs:string
           template.custom_properties.custom_property--COLLECTION: 
{custom_property.name: 'xs:string', custom_property.value: 'xs:string'}
           template.os.type: xs:string
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 416a9eb..ba787b5 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
@@ -6,6 +6,7 @@
 import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.api.model.CdRom;
 import org.ovirt.engine.api.model.CdRoms;
+import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.NIC;
 import org.ovirt.engine.api.model.Nics;
 import org.ovirt.engine.api.model.Template;
@@ -49,6 +50,12 @@
     @Override
     public Template update(Template incoming) {
         validateEnums(Template.class, incoming);
+        if (incoming.isSetPlacementPolicy() && 
incoming.getPlacementPolicy().isSetHost()) {
+            Host host = incoming.getPlacementPolicy().getHost();
+            if (host.isSetName() && !host.isSetId()) {
+                host.setId(getHostId(host).toString());
+            }
+        }
         return performUpdate(incoming,
                              new 
QueryIdResolver<Guid>(VdcQueryType.GetVmTemplate, 
GetVmTemplateParameters.class),
                              VdcActionType.UpdateVmTemplate,
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
index dadee58..660d4ef 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
@@ -9,15 +9,19 @@
 import org.ovirt.engine.api.model.DisplayType;
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.model.HighAvailability;
+import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.OperatingSystem;
 import org.ovirt.engine.api.model.OsType;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.TemplateStatus;
 import org.ovirt.engine.api.model.Usb;
 import org.ovirt.engine.api.model.UsbType;
+import org.ovirt.engine.api.model.VmAffinity;
+import org.ovirt.engine.api.model.VmPlacementPolicy;
 import org.ovirt.engine.api.model.VmType;
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.api.restapi.utils.UsbMapperUtils;
+import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
@@ -129,6 +133,9 @@
         if (model.isSetTunnelMigration()) {
             entity.setTunnelMigration(model.isTunnelMigration());
         }
+        if (model.isSetPlacementPolicy()) {
+            map(model.getPlacementPolicy(), entity);
+        }
         return entity;
     }
 
@@ -234,6 +241,9 @@
         if (model.isSetTunnelMigration()) {
             staticVm.setTunnelMigration(model.isTunnelMigration());
         }
+        if (model.isSetPlacementPolicy()) {
+            map(model.getPlacementPolicy(), staticVm);
+        }
         return staticVm;
     }
 
@@ -315,11 +325,78 @@
             }
             model.setUsb(usb);
         }
+        model.setPlacementPolicy(new VmPlacementPolicy());
+        if (entity.getDedicatedVmForVds() != null) {
+            model.getPlacementPolicy().setHost(new Host());
+            
model.getPlacementPolicy().getHost().setId(entity.getDedicatedVmForVds().toString());
+        }
+        VmAffinity vmAffinity = map(entity.getMigrationSupport(), null);
+        if (vmAffinity != null) {
+            model.getPlacementPolicy().setAffinity(vmAffinity.value());
+        }
         model.setTimezone(entity.getTimeZone());
         model.setTunnelMigration(entity.getTunnelMigration());
         return model;
     }
 
+    @Mapping(from = MigrationSupport.class, to = VmAffinity.class)
+    public static VmAffinity map(MigrationSupport migrationSupport, VmAffinity 
template) {
+        if (migrationSupport != null) {
+            switch (migrationSupport) {
+                case MIGRATABLE:
+                    return VmAffinity.MIGRATABLE;
+                case IMPLICITLY_NON_MIGRATABLE:
+                    return VmAffinity.USER_MIGRATABLE;
+                case PINNED_TO_HOST:
+                    return VmAffinity.PINNED;
+                default:
+                    return null;
+            }
+        }
+        return null;
+    }
+
+    public static void map(VmPlacementPolicy placementPolicy, VmStatic 
staticVm) {
+        if (placementPolicy.isSetHost() && 
placementPolicy.getHost().isSetId()) {
+            
staticVm.setDedicatedVmForVds(GuidUtils.asGuid(placementPolicy.getHost().getId()));
+        }
+        if (placementPolicy.isSetAffinity()) {
+            MigrationSupport migrationSupport = 
map(VmAffinity.fromValue(placementPolicy.getAffinity()), null);
+            if (migrationSupport != null) {
+                staticVm.setMigrationSupport(migrationSupport);
+            }
+        }
+    }
+
+    public static void map(VmPlacementPolicy placementPolicy, VmTemplate 
vmTemplate) {
+        if (placementPolicy.isSetHost() && 
placementPolicy.getHost().isSetId()) {
+            
vmTemplate.setDedicatedVmForVds(GuidUtils.asGuid(placementPolicy.getHost().getId()));
+        }
+        if (placementPolicy.isSetAffinity()) {
+            MigrationSupport migrationSupport = 
map(VmAffinity.fromValue(placementPolicy.getAffinity()), null);
+            if (migrationSupport != null) {
+                vmTemplate.setMigrationSupport(migrationSupport);
+            }
+        }
+    }
+
+    @Mapping(from = VmAffinity.class, to = MigrationSupport.class)
+    public static MigrationSupport map(VmAffinity affinity, MigrationSupport 
migrationSupport) {
+        if (affinity != null) {
+            switch (affinity) {
+                case MIGRATABLE:
+                    return MigrationSupport.MIGRATABLE;
+                case USER_MIGRATABLE:
+                    return MigrationSupport.IMPLICITLY_NON_MIGRATABLE;
+                case PINNED:
+                    return MigrationSupport.PINNED_TO_HOST;
+                default:
+                    return null;
+            }
+        }
+        return null;
+    }
+
     @Mapping(from = VmTemplateStatus.class, to = TemplateStatus.class)
     public static TemplateStatus map(VmTemplateStatus entityStatus, 
TemplateStatus incoming) {
         switch (entityStatus) {
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
index 72b55b9..ef02586 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
@@ -3,14 +3,20 @@
 import org.ovirt.engine.api.model.Boot;
 import org.ovirt.engine.api.model.BootDevice;
 import org.ovirt.engine.api.model.DisplayType;
+import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.Template;
+import org.ovirt.engine.api.model.VmAffinity;
+import org.ovirt.engine.api.model.VmPlacementPolicy;
 import org.ovirt.engine.api.model.VmType;
 import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.compat.Guid;
 
 public class TemplateMapperTest
     extends AbstractInvertibleMappingTest<Template, VmTemplate, VmTemplate> {
 
+    private static final String HOST_ID = 
Guid.createGuidFromString("99408929-82cf-4dc7-a532-9d998063fa95").toString();
+    private static final String AFFINITY = VmAffinity.MIGRATABLE.toString();
     public TemplateMapperTest() {
         super(Template.class, VmTemplate.class, VmTemplate.class);
     }
@@ -30,6 +36,14 @@
             from.getCpu().getTopology().setCores(MappingTestHelper.rand(100));
         }
         from.setTimezone("Australia/Darwin");
+        if (!from.isSetPlacementPolicy()) {
+            from.setPlacementPolicy(new VmPlacementPolicy());
+        }
+        if (!from.getPlacementPolicy().isSetHost()) {
+            from.getPlacementPolicy().setHost(new Host());
+        }
+        from.getPlacementPolicy().getHost().setId(HOST_ID);
+        from.getPlacementPolicy().setAffinity(AFFINITY);
         return from;
     }
 
@@ -71,5 +85,8 @@
         assertEquals(model.getDisplay().isSmartcardEnabled(), 
transform.getDisplay().isSmartcardEnabled());
         assertEquals(model.isDeleteProtected(), transform.isDeleteProtected());
         assertEquals(model.isTunnelMigration(), transform.isTunnelMigration());
+        assertEquals(model.getPlacementPolicy().getHost().getId(), 
transform.getPlacementPolicy().getHost().getId());
+        
assertEquals(VmAffinity.fromValue(model.getPlacementPolicy().getAffinity()),
+                
VmAffinity.fromValue(transform.getPlacementPolicy().getAffinity()));
     }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3ecaca8e07bed62861f8e1d3fa5a92071d06693d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to