Loading src/main/java/org/etsi/osl/osom/management/CROrchestrationService.java +12 −9 Original line number Diff line number Diff line Loading @@ -108,6 +108,15 @@ public class CROrchestrationService implements JavaDelegate { rr.setName( resourceCR.getName()); rr.setType( resourceCR.getType()); su.addSupportingResourceItem( rr ); su.setState(ServiceStateType.RESERVED); Note successNoteItem = new Note(); successNoteItem.setText(String.format("Requesting CRIDGE to deploy crspec")); successNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); successNoteItem.setAuthor(compname); su.addNoteItem(successNoteItem); Service supd = serviceOrderManager.updateService(aService.getId(), su, false); String response = null; if (crspec != null) { Loading @@ -120,22 +129,16 @@ public class CROrchestrationService implements JavaDelegate { servicecrspecLast.getValue().setValue( crspec ); su.addServiceCharacteristicItem(servicecrspecLast); if ( response!=null && response.equals("OK")) { su.setState(ServiceStateType.RESERVED); Note successNoteItem = new Note(); successNoteItem.setText(String.format("Requesting CRIDGE to deploy crspec")); successNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); successNoteItem.setAuthor(compname); su.addNoteItem(successNoteItem); } else { if ( response==null || !response.equals("OK")) { su = new ServiceUpdate(); su.setState(ServiceStateType.TERMINATED); Note errNoteItem = new Note(); errNoteItem.setText(String.format("Requesting CRIDGE to deploy crspec failed with message: " + response)); errNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); errNoteItem.setAuthor(compname); su.addNoteItem(errNoteItem); supd = serviceOrderManager.updateService(aService.getId(), su, false); } Service supd = serviceOrderManager.updateService(aService.getId(), su, false); return; Loading src/main/java/org/etsi/osl/osom/management/GCOrchestrationService.java +44 −37 Original line number Diff line number Diff line Loading @@ -68,10 +68,10 @@ public class GCOrchestrationService implements JavaDelegate { public void execute(DelegateExecution execution) { logger.info("Ceneric Controller OrchestrationService"); logger.info("VariableNames:" + execution.getVariableNames().toString()); logger.info("orderid:" + execution.getVariable("orderid").toString()); logger.info("contextServiceId:" + execution.getVariable("contextServiceId").toString()); logger.debug("Ceneric Controller OrchestrationService"); logger.debug("VariableNames:" + execution.getVariableNames().toString()); logger.debug("orderid:" + execution.getVariable("orderid").toString()); logger.debug("contextServiceId:" + execution.getVariable("contextServiceId").toString()); try { Loading Loading @@ -108,36 +108,42 @@ public class GCOrchestrationService implements JavaDelegate { ResourceSpecification rspec = serviceOrderManager.retrieveResourceSpec(rSpecRef.getId()); //we will create a resource based on the values of resourcepsecificationRef Resource resourceCR = createRelatedResource( rspec, sorder, aService ); ResourceRef rr = new ResourceRef(); rr.setId( resourceCR.getId() ); rr.setName( resourceCR.getName()); rr.setType( resourceCR.getType()); su.addSupportingResourceItem( rr ); ResourceCreate resourceCreate = createRelatedResource( rspec, sorder, aService ); Resource response = null; response = createNewResourceDeploymentRequest(aService, resourceCR, rspec, sorder.getId(), sorder.getStartDate(), sorder.getExpectedCompletionDate() ); //save it to TMF API service inventory Resource resourceI = serviceOrderManager.createResource( resourceCreate, sorder, rspec.getId() ); ResourceRef rr = new ResourceRef(); rr.setId( resourceI.getId() ); rr.setName( resourceI.getName()); rr.setType( resourceI.getType()); su.addSupportingResourceItem( rr ); if ( response!=null ) { su.setState(ServiceStateType.RESERVED); Note successNoteItem = new Note(); successNoteItem.setText(String.format("Requesting Controller of "+ rSpecRef.getName() +" to deploy resource")); successNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); successNoteItem.setAuthor(compname); su.addNoteItem(successNoteItem); } else { Service supd = serviceOrderManager.updateService(aService.getId(), su, false); Resource response = null; response = createNewResourceDeploymentRequest(aService, resourceI, resourceCreate, sorder.getId() ); if ( response==null ) { su.setState(ServiceStateType.TERMINATED); Note errNoteItem = new Note(); errNoteItem.setText(String.format("Requesting Controller to deploy resource failed ")); errNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); errNoteItem.setAuthor(compname); su.addNoteItem(errNoteItem); supd = serviceOrderManager.updateService(aService.getId(), su, false); } Service supd = serviceOrderManager.updateService(aService.getId(), su, false); return; Loading Loading @@ -187,7 +193,7 @@ public class GCOrchestrationService implements JavaDelegate { * @param aService * @return */ private Resource createRelatedResource(ResourceSpecification rspec, ServiceOrder sOrder, Service aService) { private ResourceCreate createRelatedResource(ResourceSpecification rspec, ServiceOrder sOrder, Service aService) { /** * In future releases, it is better to create some helper function in the TMF model that Loading Loading @@ -221,9 +227,9 @@ public class GCOrchestrationService implements JavaDelegate { } //copy to resource the rest of the characteristics that do not exists yet from the above search copyRemainingSpecCharacteristicsToResourceCharacteristic(rspec , resCreate.getResourceCharacteristic() ); resCreate = copyRemainingSpecCharacteristicsToResourceCharacteristic(rspec , resCreate ); return serviceOrderManager.createResource( resCreate, sOrder, rspec.getId() ); return resCreate; Loading Loading @@ -253,8 +259,11 @@ public class GCOrchestrationService implements JavaDelegate { * @param spec * @param list */ private void copyRemainingSpecCharacteristicsToResourceCharacteristic(ResourceSpecification spec, @Valid List<org.etsi.osl.tmf.ri639.model.Characteristic> list) { private ResourceCreate copyRemainingSpecCharacteristicsToResourceCharacteristic(ResourceSpecification spec, @Valid ResourceCreate resCreate) { List<org.etsi.osl.tmf.ri639.model.Characteristic> list = resCreate.getResourceCharacteristic(); for (ResourceSpecificationCharacteristic sourceCharacteristic : spec.getResourceSpecCharacteristic()) { if ( sourceCharacteristic.getValueType() != null ) { boolean charfound = false; Loading Loading @@ -321,6 +330,8 @@ public class GCOrchestrationService implements JavaDelegate { } return resCreate; } Loading @@ -338,33 +349,29 @@ public class GCOrchestrationService implements JavaDelegate { * <br> * * @param aService reference to the service that the resource and the CR belongs to * @param aResource reference the equivalent resource in TMF repo of the target CR. One to one mapping * @param resourceI reference the equivalent resource in TMF repo of the target CR. One to one mapping * @param orderId related service order ID * @param startDate start date of the deployment (not used currently) * @param endDate end date of the deployment (not used currently) * @return a Resource as updated. It might return "OK" if everything is ok. * "SEE OTHER" if there are multiple CRIDGEs then some other cridge will handle the request for the equivalent cluster. * Any other response is handled as error * return Resource object from the controller */ private Resource createNewResourceDeploymentRequest( Service aService, Resource aResource, ResourceSpecification rRef, String orderId, OffsetDateTime startDate, OffsetDateTime endDate) { private Resource createNewResourceDeploymentRequest( Service aService, Resource resourceI, ResourceCreate aResourceCreate, String orderId) { try { Map<String, Object> map = new HashMap<>(); map.put("org.etsi.osl.serviceId", aService.getId() ); map.put("org.etsi.osl.resourceId", aResource.getId() ); map.put("org.etsi.osl.prefixName", "gr" + aResource.getId().substring(0, 8) ); map.put("org.etsi.osl.resourceId", resourceI.getId() ); map.put("org.etsi.osl.prefixName", "gr" + resourceI.getId().substring(0, 8) ); map.put("org.etsi.osl.serviceOrderId", orderId ); logger.debug("createNewResourceDeploymentRequest "); String queueName = "jms:queue:CREATE/"+aResource.getCategory() + "/" + rRef.getVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResource); String queueName = "jms:queue:CREATE/"+ aResourceCreate.getCategory() + "/" + aResourceCreate.getResourceVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResourceCreate); return response; Loading src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java +5 −1 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import org.etsi.osl.tmf.ri639.model.LogicalResource; import org.etsi.osl.tmf.ri639.model.PhysicalResource; import org.etsi.osl.tmf.ri639.model.Resource; import org.etsi.osl.tmf.ri639.model.ResourceCreate; import org.etsi.osl.tmf.ri639.model.ResourceUpdate; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.sim638.model.ServiceActionQueueItem; import org.etsi.osl.tmf.sim638.model.ServiceCreate; Loading Loading @@ -1086,7 +1087,7 @@ public class ServiceOrderManager { } public Resource gcGenericResourceDeploymentRequest(String queueName, Map<String, Object> map, Resource aResource) { public Resource gcGenericResourceDeploymentRequest(String queueName, Map<String, Object> map, ResourceUpdate aResource) { try { logger.debug("gcGenericResourceDeploymentRequest queueName=" + queueName); Loading @@ -1110,6 +1111,9 @@ public class ServiceOrderManager { return null; } /** * get service spec by id from model via bus * @param id Loading src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java +203 −1 Original line number Diff line number Diff line Loading @@ -2,21 +2,40 @@ package org.etsi.osl.osom.serviceactions; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.etsi.osl.osom.management.ServiceOrderManager; import org.etsi.osl.tmf.common.model.AttachmentRefOrValue; import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.Note; import org.etsi.osl.tmf.common.model.service.ResourceRef; import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.ri639.model.Feature; import org.etsi.osl.tmf.ri639.model.Resource; import org.etsi.osl.tmf.ri639.model.ResourceCreate; import org.etsi.osl.tmf.ri639.model.ResourceRelationship; import org.etsi.osl.tmf.ri639.model.ResourceUpdate; import org.etsi.osl.tmf.sim638.model.Service; import org.etsi.osl.tmf.sim638.model.ServiceActionQueueAction; import org.etsi.osl.tmf.sim638.model.ServiceActionQueueItem; import org.etsi.osl.tmf.sim638.model.ServiceOrderRef; import org.etsi.osl.tmf.sim638.model.ServiceUpdate; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.JavaDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import jakarta.validation.Valid; @Component(value = "AutomaticallyHandleAction") //bean name public class AutomaticallyHandleAction implements JavaDelegate { Loading @@ -31,7 +50,9 @@ public class AutomaticallyHandleAction implements JavaDelegate { public void execute(DelegateExecution execution) { logger.info("AutomaticallyHandleAction:" + execution.getVariableNames().toString() ); logger.debug("AutomaticallyHandleAction:" + execution.getVariableNames().toString() ); logger.debug("Ceneric Controller OrchestrationService"); logger.debug("VariableNames:" + execution.getVariableNames().toString()); ObjectMapper mapper = new ObjectMapper(); Loading @@ -42,12 +63,85 @@ public class AutomaticallyHandleAction implements JavaDelegate { item = mapper.readValue( execution.getVariable("serviceActionItem").toString(), ServiceActionQueueItem.class); aService = mapper.readValue( execution.getVariable("Service").toString(), Service.class); if ( aService.getSupportingResource().stream().findFirst().isPresent() ) { //there is a resourceRef ResourceRef rr = aService.getSupportingResource().stream().findFirst().get(); Resource relatedResource = serviceOrderManager.retrieveResource( rr.getId() ); ResourceUpdate aResourceUpdate = resourceToResourceUpdate(relatedResource); //pass characteristic values from services to resource Optional<ServiceOrderRef> sref = aService.getServiceOrder().stream().findFirst(); String serviceOrderID=""; if ( sref.isPresent()) { serviceOrderID = sref.get().getId(); } Boolean allServiceAndResourceCharacteristicsAreTheSame = true; Boolean onlyStatusCharacteristicsChanged = true; for (org.etsi.osl.tmf.ri639.model.Characteristic resCharacteristic : aResourceUpdate.getResourceCharacteristic()) { Characteristic servChar = aService.getServiceCharacteristicByName( resCharacteristic.getName() ); if ( servChar !=null) { //we need to check if the characteristics that changed are only from the resources (e.g. start with status. ) //if there are only from resources then we will not snd back an update request, otherwise we get into an infinite loop if ( resCharacteristic.getValue().getValue() != null && servChar.getValue().getValue() != null && !resCharacteristic.getValue().getValue().equals( servChar.getValue().getValue() ) ) { allServiceAndResourceCharacteristicsAreTheSame = false; if ( !servChar.getValue().getValue().startsWith("status.") ) { onlyStatusCharacteristicsChanged = false; } else { logger.debug("Only Status Characteristic Changed. Will not update the resource!" ); } } resCharacteristic.getValue().setValue( servChar.getValue().getValue() ); } } try{ Resource response = null; if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED ) || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED ) || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ) ) { if ( !onlyStatusCharacteristicsChanged && !allServiceAndResourceCharacteristicsAreTheSame) { response = createNewResourceDeploymentRequest(aService, relatedResource, aResourceUpdate, serviceOrderID ); } } else { response = createNewResourceDeleteRequest(aService, relatedResource, aResourceUpdate, serviceOrderID ); } }catch (Exception e) { e.printStackTrace(); } } ServiceUpdate supd = new ServiceUpdate(); Note n = new Note(); n.setText("Service Action AutomaticallyHandleAction. Action: " + item.getAction() ); n.setAuthor( compname ); n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); supd.addNoteItem( n ); serviceOrderManager.deleteServiceActionQueueItem( item ); serviceOrderManager.updateService( aService.getId() , supd, false); Loading @@ -61,4 +155,112 @@ public class AutomaticallyHandleAction implements JavaDelegate { } } private ResourceUpdate resourceToResourceUpdate(Resource source) { if ( source == null ) { return null; } ResourceUpdate resourceUpdate = new ResourceUpdate(); resourceUpdate.setCategory( source.getCategory() ); resourceUpdate.setDescription( source.getDescription() ); resourceUpdate.setEndOperatingDate( source.getEndOperatingDate() ); resourceUpdate.setName( source.getName() ); resourceUpdate.setResourceVersion( source.getResourceVersion() ); resourceUpdate.setStartOperatingDate( source.getStartOperatingDate() ); Set<Feature> set = source.getActivationFeature(); if ( set != null ) { resourceUpdate.setActivationFeature( new ArrayList<Feature>( set ) ); } resourceUpdate.setAdministrativeState( source.getAdministrativeState() ); Set<AttachmentRefOrValue> set1 = source.getAttachment(); if ( set1 != null ) { resourceUpdate.setAttachment( new ArrayList<AttachmentRefOrValue>( set1 ) ); } Set<Note> set2 = source.getNote(); if ( set2 != null ) { resourceUpdate.setNote( new ArrayList<Note>( set2 ) ); } resourceUpdate.setOperationalState( source.getOperationalState() ); resourceUpdate.setPlace( source.getPlace() ); Set<RelatedParty> set3 = source.getRelatedParty(); if ( set3 != null ) { resourceUpdate.setRelatedParty( new ArrayList<RelatedParty>( set3 ) ); } @Valid Set<org.etsi.osl.tmf.ri639.model.Characteristic> set4 = source.getResourceCharacteristic(); if ( set4 != null ) { resourceUpdate.setResourceCharacteristic( new ArrayList<org.etsi.osl.tmf.ri639.model.Characteristic>( set4 ) ); } Set<ResourceRelationship> set5 = source.getResourceRelationship(); if ( set5 != null ) { resourceUpdate.setResourceRelationship( new ArrayList<ResourceRelationship>( set5 ) ); } resourceUpdate.setResourceSpecification( source.getResourceSpecification() ); resourceUpdate.setResourceStatus( source.getResourceStatus() ); resourceUpdate.setUsageState( source.getUsageState() ); return resourceUpdate; } private Resource createNewResourceDeploymentRequest( Service aService, Resource resourceI, ResourceUpdate aResourceUpdate, String orderId) { try { Map<String, Object> map = new HashMap<>(); map.put("org.etsi.osl.serviceId", aService.getId() ); map.put("org.etsi.osl.resourceId", resourceI.getId() ); map.put("org.etsi.osl.prefixName", "gr" + resourceI.getId().substring(0, 8) ); map.put("org.etsi.osl.serviceOrderId", orderId ); logger.debug("createNewResourceDeploymentRequest "); String queueName = "jms:queue:UPDATE/"+ aResourceUpdate.getCategory() + "/" + aResourceUpdate.getResourceVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResourceUpdate); return response; } catch (Exception e) { logger.error("cridgeDeploymentRequest failed"); e.printStackTrace(); } return null; } private Resource createNewResourceDeleteRequest( Service aService, Resource resourceI, ResourceUpdate aResourceUpdate, String orderId) { try { Map<String, Object> map = new HashMap<>(); map.put("org.etsi.osl.serviceId", aService.getId() ); map.put("org.etsi.osl.resourceId", resourceI.getId() ); map.put("org.etsi.osl.prefixName", "gr" + resourceI.getId().substring(0, 8) ); map.put("org.etsi.osl.serviceOrderId", orderId ); logger.debug("createNewResourceDeploymentRequest "); String queueName = "jms:queue:DELETE/"+ aResourceUpdate.getCategory() + "/" + aResourceUpdate.getResourceVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResourceUpdate); return response; } catch (Exception e) { logger.error("cridgeDeploymentRequest failed"); e.printStackTrace(); } return null; } } Loading
src/main/java/org/etsi/osl/osom/management/CROrchestrationService.java +12 −9 Original line number Diff line number Diff line Loading @@ -108,6 +108,15 @@ public class CROrchestrationService implements JavaDelegate { rr.setName( resourceCR.getName()); rr.setType( resourceCR.getType()); su.addSupportingResourceItem( rr ); su.setState(ServiceStateType.RESERVED); Note successNoteItem = new Note(); successNoteItem.setText(String.format("Requesting CRIDGE to deploy crspec")); successNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); successNoteItem.setAuthor(compname); su.addNoteItem(successNoteItem); Service supd = serviceOrderManager.updateService(aService.getId(), su, false); String response = null; if (crspec != null) { Loading @@ -120,22 +129,16 @@ public class CROrchestrationService implements JavaDelegate { servicecrspecLast.getValue().setValue( crspec ); su.addServiceCharacteristicItem(servicecrspecLast); if ( response!=null && response.equals("OK")) { su.setState(ServiceStateType.RESERVED); Note successNoteItem = new Note(); successNoteItem.setText(String.format("Requesting CRIDGE to deploy crspec")); successNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); successNoteItem.setAuthor(compname); su.addNoteItem(successNoteItem); } else { if ( response==null || !response.equals("OK")) { su = new ServiceUpdate(); su.setState(ServiceStateType.TERMINATED); Note errNoteItem = new Note(); errNoteItem.setText(String.format("Requesting CRIDGE to deploy crspec failed with message: " + response)); errNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); errNoteItem.setAuthor(compname); su.addNoteItem(errNoteItem); supd = serviceOrderManager.updateService(aService.getId(), su, false); } Service supd = serviceOrderManager.updateService(aService.getId(), su, false); return; Loading
src/main/java/org/etsi/osl/osom/management/GCOrchestrationService.java +44 −37 Original line number Diff line number Diff line Loading @@ -68,10 +68,10 @@ public class GCOrchestrationService implements JavaDelegate { public void execute(DelegateExecution execution) { logger.info("Ceneric Controller OrchestrationService"); logger.info("VariableNames:" + execution.getVariableNames().toString()); logger.info("orderid:" + execution.getVariable("orderid").toString()); logger.info("contextServiceId:" + execution.getVariable("contextServiceId").toString()); logger.debug("Ceneric Controller OrchestrationService"); logger.debug("VariableNames:" + execution.getVariableNames().toString()); logger.debug("orderid:" + execution.getVariable("orderid").toString()); logger.debug("contextServiceId:" + execution.getVariable("contextServiceId").toString()); try { Loading Loading @@ -108,36 +108,42 @@ public class GCOrchestrationService implements JavaDelegate { ResourceSpecification rspec = serviceOrderManager.retrieveResourceSpec(rSpecRef.getId()); //we will create a resource based on the values of resourcepsecificationRef Resource resourceCR = createRelatedResource( rspec, sorder, aService ); ResourceRef rr = new ResourceRef(); rr.setId( resourceCR.getId() ); rr.setName( resourceCR.getName()); rr.setType( resourceCR.getType()); su.addSupportingResourceItem( rr ); ResourceCreate resourceCreate = createRelatedResource( rspec, sorder, aService ); Resource response = null; response = createNewResourceDeploymentRequest(aService, resourceCR, rspec, sorder.getId(), sorder.getStartDate(), sorder.getExpectedCompletionDate() ); //save it to TMF API service inventory Resource resourceI = serviceOrderManager.createResource( resourceCreate, sorder, rspec.getId() ); ResourceRef rr = new ResourceRef(); rr.setId( resourceI.getId() ); rr.setName( resourceI.getName()); rr.setType( resourceI.getType()); su.addSupportingResourceItem( rr ); if ( response!=null ) { su.setState(ServiceStateType.RESERVED); Note successNoteItem = new Note(); successNoteItem.setText(String.format("Requesting Controller of "+ rSpecRef.getName() +" to deploy resource")); successNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); successNoteItem.setAuthor(compname); su.addNoteItem(successNoteItem); } else { Service supd = serviceOrderManager.updateService(aService.getId(), su, false); Resource response = null; response = createNewResourceDeploymentRequest(aService, resourceI, resourceCreate, sorder.getId() ); if ( response==null ) { su.setState(ServiceStateType.TERMINATED); Note errNoteItem = new Note(); errNoteItem.setText(String.format("Requesting Controller to deploy resource failed ")); errNoteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); errNoteItem.setAuthor(compname); su.addNoteItem(errNoteItem); supd = serviceOrderManager.updateService(aService.getId(), su, false); } Service supd = serviceOrderManager.updateService(aService.getId(), su, false); return; Loading Loading @@ -187,7 +193,7 @@ public class GCOrchestrationService implements JavaDelegate { * @param aService * @return */ private Resource createRelatedResource(ResourceSpecification rspec, ServiceOrder sOrder, Service aService) { private ResourceCreate createRelatedResource(ResourceSpecification rspec, ServiceOrder sOrder, Service aService) { /** * In future releases, it is better to create some helper function in the TMF model that Loading Loading @@ -221,9 +227,9 @@ public class GCOrchestrationService implements JavaDelegate { } //copy to resource the rest of the characteristics that do not exists yet from the above search copyRemainingSpecCharacteristicsToResourceCharacteristic(rspec , resCreate.getResourceCharacteristic() ); resCreate = copyRemainingSpecCharacteristicsToResourceCharacteristic(rspec , resCreate ); return serviceOrderManager.createResource( resCreate, sOrder, rspec.getId() ); return resCreate; Loading Loading @@ -253,8 +259,11 @@ public class GCOrchestrationService implements JavaDelegate { * @param spec * @param list */ private void copyRemainingSpecCharacteristicsToResourceCharacteristic(ResourceSpecification spec, @Valid List<org.etsi.osl.tmf.ri639.model.Characteristic> list) { private ResourceCreate copyRemainingSpecCharacteristicsToResourceCharacteristic(ResourceSpecification spec, @Valid ResourceCreate resCreate) { List<org.etsi.osl.tmf.ri639.model.Characteristic> list = resCreate.getResourceCharacteristic(); for (ResourceSpecificationCharacteristic sourceCharacteristic : spec.getResourceSpecCharacteristic()) { if ( sourceCharacteristic.getValueType() != null ) { boolean charfound = false; Loading Loading @@ -321,6 +330,8 @@ public class GCOrchestrationService implements JavaDelegate { } return resCreate; } Loading @@ -338,33 +349,29 @@ public class GCOrchestrationService implements JavaDelegate { * <br> * * @param aService reference to the service that the resource and the CR belongs to * @param aResource reference the equivalent resource in TMF repo of the target CR. One to one mapping * @param resourceI reference the equivalent resource in TMF repo of the target CR. One to one mapping * @param orderId related service order ID * @param startDate start date of the deployment (not used currently) * @param endDate end date of the deployment (not used currently) * @return a Resource as updated. It might return "OK" if everything is ok. * "SEE OTHER" if there are multiple CRIDGEs then some other cridge will handle the request for the equivalent cluster. * Any other response is handled as error * return Resource object from the controller */ private Resource createNewResourceDeploymentRequest( Service aService, Resource aResource, ResourceSpecification rRef, String orderId, OffsetDateTime startDate, OffsetDateTime endDate) { private Resource createNewResourceDeploymentRequest( Service aService, Resource resourceI, ResourceCreate aResourceCreate, String orderId) { try { Map<String, Object> map = new HashMap<>(); map.put("org.etsi.osl.serviceId", aService.getId() ); map.put("org.etsi.osl.resourceId", aResource.getId() ); map.put("org.etsi.osl.prefixName", "gr" + aResource.getId().substring(0, 8) ); map.put("org.etsi.osl.resourceId", resourceI.getId() ); map.put("org.etsi.osl.prefixName", "gr" + resourceI.getId().substring(0, 8) ); map.put("org.etsi.osl.serviceOrderId", orderId ); logger.debug("createNewResourceDeploymentRequest "); String queueName = "jms:queue:CREATE/"+aResource.getCategory() + "/" + rRef.getVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResource); String queueName = "jms:queue:CREATE/"+ aResourceCreate.getCategory() + "/" + aResourceCreate.getResourceVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResourceCreate); return response; Loading
src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java +5 −1 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import org.etsi.osl.tmf.ri639.model.LogicalResource; import org.etsi.osl.tmf.ri639.model.PhysicalResource; import org.etsi.osl.tmf.ri639.model.Resource; import org.etsi.osl.tmf.ri639.model.ResourceCreate; import org.etsi.osl.tmf.ri639.model.ResourceUpdate; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.sim638.model.ServiceActionQueueItem; import org.etsi.osl.tmf.sim638.model.ServiceCreate; Loading Loading @@ -1086,7 +1087,7 @@ public class ServiceOrderManager { } public Resource gcGenericResourceDeploymentRequest(String queueName, Map<String, Object> map, Resource aResource) { public Resource gcGenericResourceDeploymentRequest(String queueName, Map<String, Object> map, ResourceUpdate aResource) { try { logger.debug("gcGenericResourceDeploymentRequest queueName=" + queueName); Loading @@ -1110,6 +1111,9 @@ public class ServiceOrderManager { return null; } /** * get service spec by id from model via bus * @param id Loading
src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java +203 −1 Original line number Diff line number Diff line Loading @@ -2,21 +2,40 @@ package org.etsi.osl.osom.serviceactions; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.etsi.osl.osom.management.ServiceOrderManager; import org.etsi.osl.tmf.common.model.AttachmentRefOrValue; import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.Note; import org.etsi.osl.tmf.common.model.service.ResourceRef; import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.ri639.model.Feature; import org.etsi.osl.tmf.ri639.model.Resource; import org.etsi.osl.tmf.ri639.model.ResourceCreate; import org.etsi.osl.tmf.ri639.model.ResourceRelationship; import org.etsi.osl.tmf.ri639.model.ResourceUpdate; import org.etsi.osl.tmf.sim638.model.Service; import org.etsi.osl.tmf.sim638.model.ServiceActionQueueAction; import org.etsi.osl.tmf.sim638.model.ServiceActionQueueItem; import org.etsi.osl.tmf.sim638.model.ServiceOrderRef; import org.etsi.osl.tmf.sim638.model.ServiceUpdate; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.JavaDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import jakarta.validation.Valid; @Component(value = "AutomaticallyHandleAction") //bean name public class AutomaticallyHandleAction implements JavaDelegate { Loading @@ -31,7 +50,9 @@ public class AutomaticallyHandleAction implements JavaDelegate { public void execute(DelegateExecution execution) { logger.info("AutomaticallyHandleAction:" + execution.getVariableNames().toString() ); logger.debug("AutomaticallyHandleAction:" + execution.getVariableNames().toString() ); logger.debug("Ceneric Controller OrchestrationService"); logger.debug("VariableNames:" + execution.getVariableNames().toString()); ObjectMapper mapper = new ObjectMapper(); Loading @@ -42,12 +63,85 @@ public class AutomaticallyHandleAction implements JavaDelegate { item = mapper.readValue( execution.getVariable("serviceActionItem").toString(), ServiceActionQueueItem.class); aService = mapper.readValue( execution.getVariable("Service").toString(), Service.class); if ( aService.getSupportingResource().stream().findFirst().isPresent() ) { //there is a resourceRef ResourceRef rr = aService.getSupportingResource().stream().findFirst().get(); Resource relatedResource = serviceOrderManager.retrieveResource( rr.getId() ); ResourceUpdate aResourceUpdate = resourceToResourceUpdate(relatedResource); //pass characteristic values from services to resource Optional<ServiceOrderRef> sref = aService.getServiceOrder().stream().findFirst(); String serviceOrderID=""; if ( sref.isPresent()) { serviceOrderID = sref.get().getId(); } Boolean allServiceAndResourceCharacteristicsAreTheSame = true; Boolean onlyStatusCharacteristicsChanged = true; for (org.etsi.osl.tmf.ri639.model.Characteristic resCharacteristic : aResourceUpdate.getResourceCharacteristic()) { Characteristic servChar = aService.getServiceCharacteristicByName( resCharacteristic.getName() ); if ( servChar !=null) { //we need to check if the characteristics that changed are only from the resources (e.g. start with status. ) //if there are only from resources then we will not snd back an update request, otherwise we get into an infinite loop if ( resCharacteristic.getValue().getValue() != null && servChar.getValue().getValue() != null && !resCharacteristic.getValue().getValue().equals( servChar.getValue().getValue() ) ) { allServiceAndResourceCharacteristicsAreTheSame = false; if ( !servChar.getValue().getValue().startsWith("status.") ) { onlyStatusCharacteristicsChanged = false; } else { logger.debug("Only Status Characteristic Changed. Will not update the resource!" ); } } resCharacteristic.getValue().setValue( servChar.getValue().getValue() ); } } try{ Resource response = null; if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED ) || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED ) || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ) ) { if ( !onlyStatusCharacteristicsChanged && !allServiceAndResourceCharacteristicsAreTheSame) { response = createNewResourceDeploymentRequest(aService, relatedResource, aResourceUpdate, serviceOrderID ); } } else { response = createNewResourceDeleteRequest(aService, relatedResource, aResourceUpdate, serviceOrderID ); } }catch (Exception e) { e.printStackTrace(); } } ServiceUpdate supd = new ServiceUpdate(); Note n = new Note(); n.setText("Service Action AutomaticallyHandleAction. Action: " + item.getAction() ); n.setAuthor( compname ); n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); supd.addNoteItem( n ); serviceOrderManager.deleteServiceActionQueueItem( item ); serviceOrderManager.updateService( aService.getId() , supd, false); Loading @@ -61,4 +155,112 @@ public class AutomaticallyHandleAction implements JavaDelegate { } } private ResourceUpdate resourceToResourceUpdate(Resource source) { if ( source == null ) { return null; } ResourceUpdate resourceUpdate = new ResourceUpdate(); resourceUpdate.setCategory( source.getCategory() ); resourceUpdate.setDescription( source.getDescription() ); resourceUpdate.setEndOperatingDate( source.getEndOperatingDate() ); resourceUpdate.setName( source.getName() ); resourceUpdate.setResourceVersion( source.getResourceVersion() ); resourceUpdate.setStartOperatingDate( source.getStartOperatingDate() ); Set<Feature> set = source.getActivationFeature(); if ( set != null ) { resourceUpdate.setActivationFeature( new ArrayList<Feature>( set ) ); } resourceUpdate.setAdministrativeState( source.getAdministrativeState() ); Set<AttachmentRefOrValue> set1 = source.getAttachment(); if ( set1 != null ) { resourceUpdate.setAttachment( new ArrayList<AttachmentRefOrValue>( set1 ) ); } Set<Note> set2 = source.getNote(); if ( set2 != null ) { resourceUpdate.setNote( new ArrayList<Note>( set2 ) ); } resourceUpdate.setOperationalState( source.getOperationalState() ); resourceUpdate.setPlace( source.getPlace() ); Set<RelatedParty> set3 = source.getRelatedParty(); if ( set3 != null ) { resourceUpdate.setRelatedParty( new ArrayList<RelatedParty>( set3 ) ); } @Valid Set<org.etsi.osl.tmf.ri639.model.Characteristic> set4 = source.getResourceCharacteristic(); if ( set4 != null ) { resourceUpdate.setResourceCharacteristic( new ArrayList<org.etsi.osl.tmf.ri639.model.Characteristic>( set4 ) ); } Set<ResourceRelationship> set5 = source.getResourceRelationship(); if ( set5 != null ) { resourceUpdate.setResourceRelationship( new ArrayList<ResourceRelationship>( set5 ) ); } resourceUpdate.setResourceSpecification( source.getResourceSpecification() ); resourceUpdate.setResourceStatus( source.getResourceStatus() ); resourceUpdate.setUsageState( source.getUsageState() ); return resourceUpdate; } private Resource createNewResourceDeploymentRequest( Service aService, Resource resourceI, ResourceUpdate aResourceUpdate, String orderId) { try { Map<String, Object> map = new HashMap<>(); map.put("org.etsi.osl.serviceId", aService.getId() ); map.put("org.etsi.osl.resourceId", resourceI.getId() ); map.put("org.etsi.osl.prefixName", "gr" + resourceI.getId().substring(0, 8) ); map.put("org.etsi.osl.serviceOrderId", orderId ); logger.debug("createNewResourceDeploymentRequest "); String queueName = "jms:queue:UPDATE/"+ aResourceUpdate.getCategory() + "/" + aResourceUpdate.getResourceVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResourceUpdate); return response; } catch (Exception e) { logger.error("cridgeDeploymentRequest failed"); e.printStackTrace(); } return null; } private Resource createNewResourceDeleteRequest( Service aService, Resource resourceI, ResourceUpdate aResourceUpdate, String orderId) { try { Map<String, Object> map = new HashMap<>(); map.put("org.etsi.osl.serviceId", aService.getId() ); map.put("org.etsi.osl.resourceId", resourceI.getId() ); map.put("org.etsi.osl.prefixName", "gr" + resourceI.getId().substring(0, 8) ); map.put("org.etsi.osl.serviceOrderId", orderId ); logger.debug("createNewResourceDeploymentRequest "); String queueName = "jms:queue:DELETE/"+ aResourceUpdate.getCategory() + "/" + aResourceUpdate.getResourceVersion() ; Resource response = serviceOrderManager.gcGenericResourceDeploymentRequest(queueName , map, aResourceUpdate); return response; } catch (Exception e) { logger.error("cridgeDeploymentRequest failed"); e.printStackTrace(); } return null; } }