Eli Mesika has uploaded a new change for review. Change subject: REST API: Adding external status to host ......................................................................
REST API: Adding external status to host This patch adds handling the external_status field from the external event API call Change-Id: I833f8e607fac7107e9352a547b3e36cbf9000f01 Signed-off-by: emesika <emes...@redhat.com> --- A backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.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.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/BackendEventsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java M 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, 121 insertions(+), 7 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/97/40997/1 diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.java new file mode 100644 index 0000000..d6b8ac8 --- /dev/null +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.api.model; + +public enum EntityExternalStatus { + OK, + INFO, + WARNING, + ERROR, + FAILURE; + + public String value() { + return name().toLowerCase(); + } + + public static EntityExternalStatus fromValue(String v) { + try { + 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 648f576..bc86c1c 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 @@ -620,6 +620,7 @@ <xs:element ref="creation_states" minOccurs="0"/> <xs:element ref="power_management_states" minOccurs="0"/> <xs:element ref="host_states" minOccurs="0"/> + <xs:element ref="external_statuses" minOccurs="0"/> <xs:element ref="host_protocols" minOccurs="0"/> <xs:element ref="host_non_operational_details" minOccurs="0"/> <xs:element ref="network_states" minOccurs="0"/> @@ -1921,6 +1922,7 @@ <xs:element name="address" type="xs:string" minOccurs="0"/> <xs:element ref="certificate" minOccurs="0" maxOccurs="1"/> <xs:element ref="status" minOccurs="0" maxOccurs="1"/> + <xs:element name="external_status" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="cluster" type="Cluster" minOccurs="0"/> <!-- unsigned to avoid issues with port values greater than 32767, e.g. the standard VDSM port 54321 --> @@ -2022,6 +2024,20 @@ </xs:sequence> </xs:complexType> + <xs:element name="external_statuses" type="ExternalStatuses"/> + + <xs:complexType name="ExternalStatuses"> + <xs:sequence> + <xs:element name="external_status" type="xs:string" minOccurs="0" maxOccurs="unbounded"> + <xs:annotation> + <xs:appinfo> + <jaxb:property name="ExternalStatus"/> + </xs:appinfo> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:element name="host_protocols" type="HostProtocols"/> <xs:complexType name="HostProtocols"> 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 345fca3..52a7cf9 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 @@ -1584,7 +1584,7 @@ parameterType: Event signatures: - mandatoryArguments: {event.description: 'xs:string', event.severity: 'xs:string', event.origin: 'xs:string', event.custom_id: 'xs:int'} - optionalArguments: {event.flood_rate: 'xs:int', event.host.id: 'xs:string',event.user.id: 'xs:string', + optionalArguments: {event.flood_rate: 'xs:int', event.host.id: 'xs:string',event.host.external_status: 'xs:string',event.user.id: 'xs:string', event.vm.id: 'xs:string',event.storage_domain.id: 'xs:string',event.template.id: 'xs:string', event.cluster.id: 'xs:string',event.data_center.id: 'xs:string'} description: add a new event to the system 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 f641e4f..977a663 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 @@ -34,6 +34,8 @@ import org.ovirt.engine.api.model.DiskStorageTypes; import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.DisplayTypes; +import org.ovirt.engine.api.model.EntityExternalStatus; +import org.ovirt.engine.api.model.ExternalStatuses; import org.ovirt.engine.api.model.FenceType; import org.ovirt.engine.api.model.FenceTypes; import org.ovirt.engine.api.model.GlusterState; @@ -130,6 +132,8 @@ import org.ovirt.engine.api.model.WatchdogActions; import org.ovirt.engine.api.model.WatchdogModel; import org.ovirt.engine.api.model.WatchdogModels; + + import org.ovirt.engine.api.resource.CapabilitiesResource; import org.ovirt.engine.api.resource.CapabiliyResource; import org.ovirt.engine.api.restapi.model.AuthenticationMethod; @@ -263,6 +267,7 @@ addStorageDomaintStates(version, StorageDomainStatus.values()); addPowerManagementStateses(version, PowerManagementStatus.values()); addHostStates(version, HostStatus.values()); + addHostExternalStates(version, EntityExternalStatus.values()); addHostProtocols(version, HostProtocol.values()); addHostNonOperationalDetails(version, NonOperationalReason.values()); addNetworkStates(version, NetworkStatus.values()); @@ -642,12 +647,12 @@ private List<CustomProperty> getVmHooksEnvs(Version version) { List<CustomProperty> ret = new ArrayList<CustomProperty>(); ret.addAll(CustomPropertiesParser.parse(getConfigurationValue(String.class, - ConfigurationValues.PredefinedVMProperties, - version), + ConfigurationValues.PredefinedVMProperties, + version), true)); ret.addAll(CustomPropertiesParser.parse(getConfigurationValue(String.class, - ConfigurationValues.UserDefinedVMProperties, - version), + ConfigurationValues.UserDefinedVMProperties, + version), true)); return ret; } @@ -771,6 +776,13 @@ } } + private void addHostExternalStates(VersionCaps version, EntityExternalStatus[] values) { + version.setExternalStatuses(new ExternalStatuses()); + for (EntityExternalStatus status : values) { + version.getExternalStatuses().getExternalStatus().add(status.value()); + } + } + private void addHostProtocols(VersionCaps version, HostProtocol[] values) { version.setHostProtocols(new HostProtocols()); for (HostProtocol protocol: values) { diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java index 708f510..b25cc81 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java @@ -5,10 +5,12 @@ import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Action; +import org.ovirt.engine.api.model.EntityExternalStatus; import org.ovirt.engine.api.model.Event; import org.ovirt.engine.api.model.Events; import org.ovirt.engine.api.resource.EventResource; import org.ovirt.engine.api.resource.EventsResource; +import org.ovirt.engine.api.restapi.types.HostMapper; import org.ovirt.engine.core.common.action.AddExternalEventParameters; import org.ovirt.engine.core.common.action.RemoveAuditLogByIdParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; @@ -75,9 +77,20 @@ public Response add(Event event) { validateParameters(event, "origin", "severity", "customId", "description"); validateEnums(Event.class, event); + EntityExternalStatus entityExternalStatus = null; + if (event.isSetHost() && event.getHost().isSetExternalStatus()) { + entityExternalStatus = + EntityExternalStatus.fromValue(event.getHost().getExternalStatus()); + return performCreate(VdcActionType.AddExternalEvent, + new AddExternalEventParameters(map(event), + HostMapper.map(entityExternalStatus, null)), + new QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, GetAuditLogByIdParameters.class)); + + } return performCreate(VdcActionType.AddExternalEvent, - new AddExternalEventParameters(map(event)), - new QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, GetAuditLogByIdParameters.class)); + new AddExternalEventParameters(map(event), null), + new QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, GetAuditLogByIdParameters.class)); + } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java index a8c417a..0a39b05 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java @@ -8,10 +8,15 @@ @ValidatedClass(clazz = Event.class) public class EventValidator implements Validator<Event> { + private HostValidator hostValidator = new HostValidator(); + @Override public void validateEnums(Event event) { if (event.isSetSeverity()) { validateEnum(LogSeverity.class, event.getSeverity(), true); } + if (event.isSetHost()) { + hostValidator.validateEnums(event.getHost()); + } } } 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 index ee1d682..32444fe 100644 --- 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 @@ -2,6 +2,7 @@ import static org.ovirt.engine.api.common.util.EnumValidator.validateEnum; +import org.ovirt.engine.api.model.EntityExternalStatus; import org.ovirt.engine.api.model.Host; import org.ovirt.engine.api.model.PmProxy; import org.ovirt.engine.api.model.PmProxyType; @@ -26,5 +27,8 @@ if (host.isSetProtocol()) { validateEnum(HostProtocol.class, host.getProtocol(), true); } + if (host.isSetExternalStatus()) { + validateEnum(EntityExternalStatus.class, host.getExternalStatus()); + } } } 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 452e42e..c0af39e 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 @@ -13,6 +13,7 @@ import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.CpuTopology; import org.ovirt.engine.api.model.Display; +import org.ovirt.engine.api.model.EntityExternalStatus; import org.ovirt.engine.api.model.ExternalHostProvider; import org.ovirt.engine.api.model.HardwareInformation; import org.ovirt.engine.api.model.Hook; @@ -45,6 +46,7 @@ import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.core.common.action.VdsOperationActionParameters; import org.ovirt.engine.core.common.businessentities.AutoNumaBalanceStatus; +import org.ovirt.engine.core.common.businessentities.ExternalStatus; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.VDSType; @@ -197,6 +199,10 @@ model.setProtocol(protocol != null ? protocol.value() : null); HostStatus status = map(entity.getStatus(), null); model.setStatus(StatusUtils.create(status)); + if (entity.getExternalStatus() != null) { + EntityExternalStatus entityExternalStatus = map(entity.getExternalStatus(), null); + model.setExternalStatus(entityExternalStatus.name()); + } if (status == HostStatus.NON_OPERATIONAL) { model.getStatus().setDetail(entity.getNonOperationalReason().name().toLowerCase()); } else if (status == HostStatus.MAINTENANCE || status == HostStatus.PREPARING_FOR_MAINTENANCE) { @@ -693,4 +699,41 @@ return null; } } + + @Mapping(from = ExternalStatus.class, to = EntityExternalStatus.class) + public static EntityExternalStatus map(ExternalStatus entityStatus, EntityExternalStatus template) { + switch (entityStatus) { + case Ok: + return EntityExternalStatus.OK; + case Info: + return EntityExternalStatus.INFO; + case Warning: + return EntityExternalStatus.WARNING; + case Error: + return EntityExternalStatus.ERROR; + case Failure: + return EntityExternalStatus.FAILURE; + default: + return null; + } + } + + + @Mapping(from = ExternalStatus.class, to = EntityExternalStatus.class) + public static ExternalStatus map(EntityExternalStatus entityStatus, ExternalStatus template) { + switch (entityStatus) { + case OK: + return ExternalStatus.Ok; + case INFO: + return ExternalStatus.Info; + case WARNING: + return ExternalStatus.Warning; + case ERROR: + return ExternalStatus.Error; + case FAILURE: + return ExternalStatus.Failure; + default: + return null; + } + } } -- To view, visit https://gerrit.ovirt.org/40997 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I833f8e607fac7107e9352a547b3e36cbf9000f01 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