Martin Betak has uploaded a new change for review.

Change subject: restapi: Add Vm power-down options
......................................................................

restapi: Add Vm power-down options

Added new complex type to the VM and Template entities representing
various power down options used during shutdown/reboot.

<vm>
  <power_down>
    <force>true|false</force>
    <timeout>[seconds]</timeout>
    <user_delay>[seconds]</timeout>
  </power_down>
</vm>

timeout and user_delay are optional overrides of global settings so to
set make VM use the global value set them to null (represented as -1 in
the API)

Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=751854
Change-Id: I1249f97c77a979466d4295f83bfb72f27ff630e3
Signed-off-by: Martin Betak <[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/utils/FeaturesHelper.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/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/TemplateMapperTest.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
7 files changed, 96 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/27047/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 87d5ca1..d1dfc1d 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
@@ -2406,6 +2406,7 @@
           <!-- also rel="cdroms/disks/nics/watchdogs" links, see Devices below 
-->
           <xs:element name="version" type="TemplateVersion" minOccurs="0" 
maxOccurs="1"/>
           <xs:element ref="serial_number" minOccurs="0" maxOccurs="1" />
+          <xs:element ref="power_down" minOccurs="0" maxOccurs="1" />
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -2708,6 +2709,16 @@
     </xs:sequence>
   </xs:complexType>
 
+  <xs:element name="power_down" type="PowerDown" />
+
+  <xs:complexType name="PowerDown">
+    <xs:sequence>
+      <xs:element name="force" type="xs:boolean" minOccurs="0" maxOccurs="1" />
+      <xs:element name="timeout" type="xs:int" minOccurs="0" maxOccurs="1" />
+      <xs:element name="user_delay" type="xs:int" minOccurs="0" maxOccurs="1" 
/>
+    </xs:sequence>
+  </xs:complexType>
+
   <xs:element name="vms" type="VMs"/>
   <xs:element name="vm" type="VM"/>
 
@@ -2781,6 +2792,7 @@
           <xs:element ref="watchdogs" minOccurs="0" maxOccurs="1"/>
           <xs:element name="use_latest_template_version" type="xs:boolean" 
minOccurs="0" maxOccurs="1"/>
           <xs:element ref="serial_number" minOccurs="0" maxOccurs="1" />
+          <xs:element ref="power_down" minOccurs="0" maxOccurs="1" />
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
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 7e5fc87..96c2203 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
@@ -95,6 +95,9 @@
           vm.serial_number.policy: xs:string
           vm.serial_number.value: xs:string
           vm.bios.boot_menu.enabled: xs:boolean
+          vm.power_down.forced: xs:boolean
+          vm.power_down.timeout: xs:int
+          vm.power_dowm.user_delay: xs:int
         description: update the virtual machine in the system for the given 
virtual machine id with the values specified in the request
     urlparams: {}
     headers:
@@ -175,6 +178,9 @@
           vm.serial_number.policy: xs:string
           vm.serial_number.value: xs:string
           vm.bios.boot_menu.enabled: xs:boolean
+          vm.power_down.forced: xs:boolean
+          vm.power_down.timeout: xs:int
+          vm.power_dowm.user_delay: xs:int
         description: add a virtual machine to the system from scratch
       # the following signature is for clone VM from a Snapshot - requires the 
Snapshot ID
       - mandatoryArguments: {vm.name: 'xs:string', vm.template.id|name: 
'xs:string', vm.cluster.id|name: 'xs:string',
@@ -223,6 +229,9 @@
           vm.serial_number.policy: xs:string
           vm.serial_number.value: xs:string
           vm.bios.boot_menu.enabled: xs:boolean
+          vm.power_down.forced: xs:boolean
+          vm.power_down.timeout: xs:int
+          vm.power_dowm.user_delay: xs:int
         description: add a virtual machine to the system by cloning from a 
snapshot
       # the following signature is for adding VM from a configuration - 
requires the configuration type and the configuration data
       - mandatoryArguments: {vm.initialization.configuration.type: 
'xs:string', vm.initialization.configuration.data: 'xs:string'}
@@ -273,6 +282,9 @@
                 vm.serial_number.policy: xs:string
                 vm.serial_number.value: xs:string
                 vm.bios.boot_menu.enabled: xs:boolean
+                vm.power_down.forced: xs:boolean
+                vm.power_down.timeout: xs:int
+                vm.power_dowm.user_delay: xs:int
         description: add a virtual machine to the system from a configuration 
- requires the configuration type and the configuration data
     urlparams: {}
     headers:
@@ -3499,6 +3511,9 @@
           template.serial_number.policy: xs:string
           template.serial_number.value: xs:string
           template.bios.boot_menu.enabled: xs:boolean
+          template.power_down.forced: xs:boolean
+          template.power_down.timeout: xs:int
+          template.power_dowm.user_delay: xs:int
         description: update the specified template in the system
     urlparams: {}
     headers:
@@ -3555,6 +3570,9 @@
           template.serial_number.policy: xs:string
           template.serial_number.value: xs:string
           template.bios.boot_menu.enabled: xs:boolean
+          template.power_down.forced: xs:boolean
+          template.power_down.timeout: xs:int
+          template.power_dowm.user_delay: xs:int
         description: add a new template to the system
     urlparams: {}
     headers:
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 adb04af..a95556b 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
@@ -81,10 +81,18 @@
         }
         if (VersionUtils.greaterOrEqual(version, 
BackendCapabilitiesResource.VERSION_3_5)) {
             addBookmarksFeature(features);
+            addPowerDownOptionsFeatuer(features);
         }
         return features;
     }
 
+    private void addPowerDownOptionsFeatuer(Features features) {
+        Feature feature = new Feature();
+        feature.setName("VM PowerDown Options");
+        feature.setDescription("Ability to specify force, timeout and 
user-delay options for VM shutdown/reboot");
+        features.getFeature().add(feature);
+    }
+
     private void addRebootFeature(Features features) {
         Feature feature = new Feature();
         feature.setName("Reboot VM");
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 e7b791a..14fc9c3 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
@@ -14,6 +14,7 @@
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.model.HighAvailability;
 import org.ovirt.engine.api.model.OperatingSystem;
+import org.ovirt.engine.api.model.PowerDown;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.TemplateStatus;
 import org.ovirt.engine.api.model.TemplateVersion;
@@ -187,6 +188,18 @@
             SerialNumberMapper.copySerialNumber(model.getSerialNumber(), 
entity);
         }
 
+        if (model.isSetPowerDown()) {
+            if (model.getPowerDown().isSetForce()) {
+                entity.setPowerDownForced(model.getPowerDown().isForce());
+            }
+            if (model.getPowerDown().isSetTimeout()) {
+                
entity.setGracefulTimeout(IntegerMapper.mapMinusOneToNull(model.getPowerDown().getTimeout()));
+            }
+            if (model.getPowerDown().isSetUserDelay()) {
+                
entity.setUserDelay(IntegerMapper.mapMinusOneToNull(model.getPowerDown().getUserDelay()));
+            }
+        }
+
         return entity;
     }
 
@@ -310,6 +323,18 @@
         if (model.isSetSerialNumber()) {
             SerialNumberMapper.copySerialNumber(model.getSerialNumber(), 
staticVm);
         }
+
+        if (model.isSetPowerDown()) {
+            if (model.getPowerDown().isSetForce()) {
+                staticVm.setPowerDownForced(model.getPowerDown().isForce());
+            }
+            if (model.getPowerDown().isSetTimeout()) {
+                
staticVm.setGracefulTimeout(IntegerMapper.mapMinusOneToNull(model.getPowerDown().getTimeout()));
+            }
+            if (model.getPowerDown().isSetUserDelay()) {
+                
staticVm.setUserDelay(IntegerMapper.mapMinusOneToNull(model.getPowerDown().getUserDelay()));
+            }
+        }
         return staticVm;
     }
 
@@ -418,6 +443,11 @@
             model.setSerialNumber(SerialNumberMapper.map(entity, null));
         }
 
+        model.setPowerDown(new PowerDown());
+        model.getPowerDown().setForce(entity.isPowerDownForced());
+        
model.getPowerDown().setTimeout(IntegerMapper.mapNullToMinusOne(entity.getGracefulTimeout()));
+        
model.getPowerDown().setUserDelay(IntegerMapper.mapNullToMinusOne(entity.getUserDelay()));
+
         return model;
     }
 
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..720850d 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
@@ -44,6 +44,7 @@
 import org.ovirt.engine.api.model.OperatingSystem;
 import org.ovirt.engine.api.model.OsType;
 import org.ovirt.engine.api.model.Payload;
+import org.ovirt.engine.api.model.PowerDown;
 import org.ovirt.engine.api.model.Quota;
 import org.ovirt.engine.api.model.Session;
 import org.ovirt.engine.api.model.Sessions;
@@ -128,6 +129,9 @@
         staticVm.setVmInit(entity.getVmInit());
         staticVm.setSerialNumberPolicy(entity.getSerialNumberPolicy());
         staticVm.setCustomSerialNumber(entity.getCustomSerialNumber());
+        staticVm.setPowerDownForced(entity.isPowerDownForced());
+        staticVm.setGracefulTimeout(entity.getGracefulTimeout());
+        staticVm.setUserDelay(entity.getUserDelay());
         return staticVm;
     }
 
@@ -314,6 +318,18 @@
 
         if (vm.isSetSerialNumber()) {
             SerialNumberMapper.copySerialNumber(vm.getSerialNumber(), 
staticVm);
+        }
+
+        if (vm.isSetPowerDown()) {
+            if (vm.getPowerDown().isSetForce()) {
+                staticVm.setPowerDownForced(vm.getPowerDown().isForce());
+            }
+            if (vm.getPowerDown().isSetTimeout()) {
+                
staticVm.setGracefulTimeout(IntegerMapper.mapMinusOneToNull(vm.getPowerDown().getTimeout()));
+            }
+            if (vm.getPowerDown().isSetUserDelay()) {
+                
staticVm.setUserDelay(IntegerMapper.mapMinusOneToNull(vm.getPowerDown().getUserDelay()));
+            }
         }
 
         return staticVm;
@@ -553,6 +569,12 @@
         if (entity.getSerialNumberPolicy() != null) {
             
model.setSerialNumber(SerialNumberMapper.map(entity.getStaticData(), null));
         }
+
+        model.setPowerDown(new PowerDown());
+        model.getPowerDown().setForce(entity.isPowerDownForced());
+        
model.getPowerDown().setTimeout(IntegerMapper.mapNullToMinusOne(entity.getGracefulTimeout()));
+        
model.getPowerDown().setUserDelay(IntegerMapper.mapNullToMinusOne(entity.getUserDelay()));
+
         return model;
     }
 
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 8bde853..02240cf 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
@@ -86,5 +86,8 @@
         assertEquals(model.getVersion().getBaseTemplate().getId(), 
transform.getVersion().getBaseTemplate().getId());
         assertEquals(model.getSerialNumber().getPolicy(), 
transform.getSerialNumber().getPolicy());
         assertEquals(model.getSerialNumber().getValue(), 
transform.getSerialNumber().getValue());
+        assertEquals(model.getPowerDown().isForce(), 
transform.getPowerDown().isForce());
+        assertEquals(model.getPowerDown().getTimeout(), 
transform.getPowerDown().getTimeout());
+        assertEquals(model.getPowerDown().getUserDelay(), 
transform.getPowerDown().getUserDelay());
     }
 }
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..52e627e 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
@@ -147,6 +147,9 @@
         assertEquals(model.getMigrationDowntime(), 
transform.getMigrationDowntime());
         assertEquals(model.getSerialNumber().getPolicy(), 
transform.getSerialNumber().getPolicy());
         assertEquals(model.getSerialNumber().getValue(), 
transform.getSerialNumber().getValue());
+        assertEquals(model.getPowerDown().isForce(), 
transform.getPowerDown().isForce());
+        assertEquals(model.getPowerDown().getTimeout(), 
transform.getPowerDown().getTimeout());
+        assertEquals(model.getPowerDown().getUserDelay(), 
transform.getPowerDown().getUserDelay());
     }
 
     @Test


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

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

Reply via email to