Eli Mesika has uploaded a new change for review.

Change subject: [WIP] API: [RFE] Add PM Proxy Preferences
......................................................................

[WIP] API: [RFE] Add PM Proxy Preferences

This patch implements API for the following RFE

http://wiki.ovirt.org/Features/Design/DetailedHostPMProxyPreferences

Change-Id: If906312ecf028a5db1c9726a407a1643b6c000b7
Signed-off-by: Eli Mesika <emes...@redhat.com>
---
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PmProxyType.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/BackendCapabilitiesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
8 files changed, 126 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/74/9674/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PmProxyType.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PmProxyType.java
new file mode 100644
index 0000000..645b698
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PmProxyType.java
@@ -0,0 +1,33 @@
+package org.ovirt.engine.api.model;
+
+public enum PmProxyType {
+
+    CLUSTER("cluster"), DC("dc");
+
+    private String value;
+
+    PmProxyType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static PmProxyType fromValue(String v) {
+        try {
+            if (v==null) {
+                return null;
+            }
+            if (v.equals("cluster")) {
+                return CLUSTER;
+            } else if (v.equals("dc")) {
+                return DC;
+            } else {
+                return valueOf(v.toUpperCase());
+            }
+        } catch (IllegalArgumentException e) {
+            return null;
+        }
+    }
+}
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 a6a2b48..63a88ef 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
@@ -1063,6 +1063,8 @@
       <xs:element name="password" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
       <xs:element name="options" type="Options" minOccurs="0"/>
       <xs:element ref="status" minOccurs="0" maxOccurs="1"/>
+      <xs:element ref="pm_proxies" minOccurs="0" maxOccurs="1"/>
+      
     </xs:sequence>
     <xs:attribute name="type" type="xs:string"/>
   </xs:complexType>
@@ -2775,4 +2777,25 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
-</xs:schema>
+  
+  <xs:element name="pm_proxies" type="PmProxies"/>
+  <xs:complexType name="PmProxies">
+    <xs:sequence>
+      <xs:element name="pm_proxy" type="PmProxy" minOccurs="0" 
maxOccurs="unbounded">
+       <xs:annotation>
+          <xs:appinfo>
+            <jaxbroperty name="PmProxies"/>
+          </xs:appinfo>
+        </xs:annotation>
+     </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="pm_proxy" type="PmProxy"/>
+  <xs:complexType name="PmProxy">
+   <xs:sequence>
+       <xs:element name="propietary" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
+   </xs:sequence>
+  </xs:complexType>
+  
+  </xs:schema>
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 671922b..7d57672 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
@@ -1462,7 +1462,7 @@
         optionalArguments: {host.name: 'xs:string', host.address: 'xs:string', 
host.root_password: 'xs:string', host.cluster.id: 'xs:string',
           host.port: 'xs:int', host.storage_manager.priority: 'xs:int', 
host.power_management.type: 'xs:string',
           host.power_management.enabled: 'xs:boolean', 
host.power_management.address: 'xs:string', host.power_management.user_name: 
'xs:string',
-          host.power_management.password: 'xs:string', 
host.power_management.options.option--COLLECTION: {option.name: 'xs:string', 
option.value: 'xs:string'}}
+          host.power_management.password: 'xs:string', 
host.power_management.options.option--COLLECTION: {option.name: 'xs:string', 
option.value: 'xs:string'}, host.power_management.pm_proxy--COLLECTION: 
{propietary : 'xs:string'}}
     urlparams:
       async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
     headers:
@@ -1476,8 +1476,7 @@
       - mandatoryArguments: {host.name: 'xs:string', host.address: 
'xs:string', host.root_password: 'xs:string', host.cluster.id: 'xs:string'}
         optionalArguments: {host.port: 'xs:int', 
host.storage_manager.priority: 'xs:int', host.power_management.type: 
'xs:string',
           host.power_management.enabled: 'xs:boolean', 
host.power_management.address: 'xs:string', host.power_management.user_name: 
'xs:string',
-          host.power_management.password: 'xs:string', 
host.power_management.options.option--COLLECTION: {option.name: 'xs:string', 
option.value: 'xs:string'},
-          host.reboot_after_installation: 'xs:boolean'}
+          host.power_management.password: 'xs:string', 
host.power_management.options.option--COLLECTION: {option.name: 'xs:string', 
option.value: 'xs:string'},host.power_management.pm_proxy--COLLECTION: 
{propietary : 'xs:string'}, host.reboot_after_installation: 'xs:boolean'}
     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/BackendCapabilitiesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
index 7e41f0d..9446f83 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
@@ -49,6 +49,7 @@
 import org.ovirt.engine.api.model.Permit;
 import org.ovirt.engine.api.model.PermitType;
 import org.ovirt.engine.api.model.Permits;
+import org.ovirt.engine.api.model.PmProxyType;
 import org.ovirt.engine.api.model.PowerManagement;
 import org.ovirt.engine.api.model.PowerManagementStates;
 import org.ovirt.engine.api.model.PowerManagementStatus;
@@ -114,6 +115,12 @@
         {
             major = 3;
             minor = 1;
+        }
+    };
+    public static final Version VERSION_3_2 = new Version() {
+        {
+            major = 3;
+            minor = 2;
         }
     };
     private static Version currentVersion = null;
@@ -187,6 +194,7 @@
         addPermits(version, PermitType.values());
         addSchedulingPolicies(version, SchedulingPolicyType.values());
         addNetworkUsages(version, NetworkUsage.values());
+        addPmProxyTypes(version, PmProxyType.values());
 
         version.setFeatures(featuresHelper.getFeatures(v));
 
@@ -558,6 +566,16 @@
         }
     }
 
+    private void addPmProxyTypes(VersionCaps version, PmProxyType[] values) {
+        if (VersionUtils.greaterOrEqual(version, VERSION_3_2)) {
+            version.setUsages(new Usages());
+            for (PmProxyType usage : values) {
+                version.getUsages().getUsages().add(usage.value());
+            }
+        }
+    }
+
+
     @Override
     public CapabiliyResource getCapabilitiesSubResource(String id) {
         return new BackendCapabilityResource(id, this);
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
index 60b34d7..708974a 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.api.restapi.resource;
 
+import static 
org.ovirt.engine.api.restapi.resource.BackendHostsResource.SUB_COLLECTIONS;
+
 import java.util.List;
 
 import javax.ws.rs.WebApplicationException;
@@ -8,6 +10,7 @@
 import org.ovirt.engine.api.common.util.StatusUtils;
 import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.api.model.Cluster;
+import org.ovirt.engine.api.model.CreationStatus;
 import org.ovirt.engine.api.model.Fault;
 import org.ovirt.engine.api.model.FenceType;
 import org.ovirt.engine.api.model.Host;
@@ -15,12 +18,11 @@
 import org.ovirt.engine.api.model.LogicalUnit;
 import org.ovirt.engine.api.model.PowerManagement;
 import org.ovirt.engine.api.model.PowerManagementStatus;
-import org.ovirt.engine.api.model.CreationStatus;
 import org.ovirt.engine.api.resource.ActionResource;
 import org.ovirt.engine.api.resource.AssignedPermissionsResource;
 import org.ovirt.engine.api.resource.AssignedTagsResource;
-import org.ovirt.engine.api.resource.HostResource;
 import org.ovirt.engine.api.resource.HostNicsResource;
+import org.ovirt.engine.api.resource.HostResource;
 import org.ovirt.engine.api.resource.HostStorageResource;
 import org.ovirt.engine.api.resource.StatisticsResource;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -31,9 +33,9 @@
 import org.ovirt.engine.core.common.action.MaintananceNumberOfVdssParameters;
 import 
org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase;
 import org.ovirt.engine.core.common.action.UpdateVdsActionParameters;
-import org.ovirt.engine.core.common.action.VdsActionParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VdsActionParameters;
 import org.ovirt.engine.core.common.businessentities.FenceActionType;
 import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue;
 import org.ovirt.engine.core.common.businessentities.VDS;
@@ -47,8 +49,6 @@
 import org.ovirt.engine.core.common.queries.GetVdsByVdsIdParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.queries.VdsIdParametersBase;
-
-import static 
org.ovirt.engine.api.restapi.resource.BackendHostsResource.SUB_COLLECTIONS;
 
 
 public class BackendHostResource extends 
AbstractBackendActionableResource<Host, VDS> implements
@@ -73,6 +73,7 @@
 
     @Override
     public Host update(Host incoming) {
+        validateEnums(Host.class, incoming);
         QueryIdResolver hostResolver = new 
QueryIdResolver(VdcQueryType.GetVdsByVdsId, GetVdsByVdsIdParameters.class);
         VDS entity = getEntity(hostResolver, true);
         if (incoming.isSetCluster() && incoming.getCluster().isSetId() && 
!asGuid(incoming.getCluster().getId()).equals(entity.getvds_group_id())) {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java
index 323977f..0a8196b 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java
@@ -89,6 +89,7 @@
 
     @Override
     public Response add(Host host) {
+        validateEnums(Host.class, host);
         validateParameters(host, "name", "address", "rootPassword");
         VdsStatic staticHost = getMapper(Host.class, 
VdsStatic.class).map(host, null);
         staticHost.setvds_group_id(getClusterId(host));
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
new file mode 100644
index 0000000..025b78c
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
@@ -0,0 +1,17 @@
+package org.ovirt.engine.api.restapi.resource.validation;
+
+import static org.ovirt.engine.api.common.util.EnumValidator.validateEnum;
+
+import org.ovirt.engine.api.model.Host;
+import org.ovirt.engine.api.model.PmProxyType;
+
+@ValidatedClass(clazz = Host.class)
+public class HostValidator implements Validator<Host> {
+
+    @Override
+    public void validateEnums(Host host) {
+        if (host.isSetType()) {
+            validateEnum(PmProxyType.class, host.getType(), true);
+        }
+    }
+}
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
index 6dac49e..03812ea 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
@@ -2,6 +2,7 @@
 
 import java.math.BigDecimal;
 
+import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.api.common.util.StatusUtils;
 import org.ovirt.engine.api.model.CPU;
 import org.ovirt.engine.api.model.Cluster;
@@ -13,6 +14,8 @@
 import org.ovirt.engine.api.model.KSM;
 import org.ovirt.engine.api.model.Option;
 import org.ovirt.engine.api.model.Options;
+import org.ovirt.engine.api.model.PmProxies;
+import org.ovirt.engine.api.model.PmProxy;
 import org.ovirt.engine.api.model.PowerManagement;
 import org.ovirt.engine.api.model.StorageManager;
 import org.ovirt.engine.api.model.TransparentHugePages;
@@ -86,6 +89,16 @@
         if (model.isSetOptions()) {
             entity.setpm_options(map(model.getOptions(), null));
         }
+        if (model.isSetPmProxies()) {
+            String delim = "";
+            StringBuilder builder = new StringBuilder();
+            for (PmProxy pmProxy : model.getPmProxies().getPmProxy()) {
+                builder.append(delim);
+                builder.append(pmProxy.getPropietary());
+                delim = ",";
+            }
+            entity.setPmProxyPreferences(builder.toString());
+        }
         return entity;
     }
 
@@ -145,7 +158,7 @@
             model.setIscsi(new IscsiDetails());
             model.getIscsi().setInitiator(entity.getIScsiInitiatorName());
         }
-        model.setPowerManagement(map(entity, (PowerManagement)null));
+        model.setPowerManagement(map(entity, (PowerManagement) null));
         CPU cpu = new CPU();
         CpuTopology cpuTopology = new CpuTopology();
         if (entity.getcpu_sockets() != null) {
@@ -185,6 +198,17 @@
         if (entity.getPmOptionsMap() != null) {
             model.setOptions(map(entity.getPmOptionsMap(), null));
         }
+        if (entity.getPmProxyPreferences() != null) {
+                PmProxies pmProxies = (model.getPmProxies() != null) ? 
model.getPmProxies() : new PmProxies();
+                pmProxies.getPmProxy().clear();
+                String[] proxies = 
StringUtils.split(entity.getPmProxyPreferences(), ",");
+                for (String proxy : proxies) {
+                        PmProxy pmProxy = new PmProxy();
+                        pmProxy.setPropietary(proxy);
+                        pmProxies.getPmProxy().add(pmProxy);
+                }
+            model.setPmProxies(pmProxies);
+        }
         return model;
     }
 


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

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

Reply via email to