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