Loading src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +161 −134 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ public class ServiceRepoService { } @Transactional public Service addService(@Valid ServiceCreate service) { logger.info("Will add service: " + service.getName() ); Service s = new Service(); Loading Loading @@ -335,10 +336,11 @@ public class ServiceRepoService { Note noteItem = new Note(); noteItem.setText("Service " + s.getState() ); noteItem.setAuthor("API"); noteItem.setAuthor("SIM-638"); noteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC) ); s.addNoteItem(noteItem); s = this.serviceRepo.save( s ); raiseServiceCreateNotification(s); Loading @@ -353,22 +355,7 @@ public class ServiceRepoService { .orElse(null); } /** * @param id * @param servUpd * @param triggerServiceActionQueue * @param updatedFromParentService * @param updatedFromChildService * @return */ /** * @param id * @param servUpd * @param triggerServiceActionQueue * @param updatedFromParentService * @param updatedFromChildService * @return */ /** * @param id * @param servUpd Loading @@ -379,6 +366,9 @@ public class ServiceRepoService { */ @Transactional public Service updateService(String id, @Valid ServiceUpdate servUpd, boolean triggerServiceActionQueue, Service updatedFromParentService, Service updatedFromChildService ) { logger.debug("================> Will updateService = " + id ); //Service service = this.findByUuid(id); Service service = this.getServiceEager(id); Loading @@ -388,6 +378,9 @@ public class ServiceRepoService { return null; } logger.info("Will update service: " + service.getName() ); //logger.info("Will update service details: " + s.toString() ); Loading @@ -401,6 +394,7 @@ public class ServiceRepoService { } if (servUpd.getType()!=null) { service.setType(servUpd.getType()); } Loading Loading @@ -541,6 +535,8 @@ public class ServiceRepoService { } else { service.addServiceCharacteristicItem(n); if ( !n.getName().contains("::") ) { //it is not a child characteristic serviceCharacteristicChanged = true; charChangedForNotes += n.getName() + ", "; Loading Loading @@ -585,9 +581,10 @@ public class ServiceRepoService { if (stateChanged) { Note noteItem = new Note(); noteItem.setText("Service is " + service.getState() ); noteItem.setAuthor("API"); noteItem.setAuthor("SIM-638"); noteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC) ); service.addNoteItem(noteItem); logger.debug("=============SERVICE STATE ================================> " + service.getState() ); } Loading Loading @@ -635,9 +632,9 @@ public class ServiceRepoService { } service = this.serviceRepo.save( service ); String requestedServiceAsJson = null; try { requestedServiceAsJson = mapper.writeValueAsString( service ); Loading @@ -650,40 +647,28 @@ public class ServiceRepoService { * Save in ServiceActionQueueItem */ if (triggerServiceActionQueue && stateChanged) { Boolean childServiceCharacteristicChanged = false; if ( stateChanged ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); if (stateChanged) { if ( service.getState().equals( ServiceStateType.INACTIVE) ) { saqi.setAction( ServiceActionQueueAction.DEACTIVATE ); }else if ( service.getState().equals( ServiceStateType.TERMINATED) ) { saqi.setAction( ServiceActionQueueAction.TERMINATE ); } } if ( saqi.getAction() != ServiceActionQueueAction.NONE ) { this.addServiceActionQueueItem(service, saqi); } } // //here on any state change of a Service we must send an ActionQueueItem that reflects the state changed with the Action if ( stateChanged ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); if ( service.getState().equals( ServiceStateType.ACTIVE) ) { }else if ( service.getState().equals( ServiceStateType.ACTIVE) ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOACTIVE ); this.addServiceActionQueueItem(service, saqi); }else if ( previousState!=null && previousState.equals( ServiceStateType.ACTIVE) ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOINACTIVE ); this.addServiceActionQueueItem(service, saqi); } } if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) && triggerServiceActionQueue ) { if ( saqi.getAction() != ServiceActionQueueAction.NONE ) { logger.debug("==========addServiceActionQueueItem==============> saqi.getAction() = " + saqi.getAction() ); this.addServiceActionQueueItem(service, saqi); } } else if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) && triggerServiceActionQueue ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); Loading @@ -691,7 +676,9 @@ public class ServiceRepoService { if ( serviceCharacteristicChangedContainsPrimitive ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ); } logger.debug("==========addServiceActionQueueItem==============> serviceCharacteristicChanged && service.getState().eq charChangedForNotes= " + charChangedForNotes); this.addServiceActionQueueItem(service, saqi); childServiceCharacteristicChanged = true; } Loading @@ -706,8 +693,7 @@ public class ServiceRepoService { if (serviceRelationship.getRelationshipType().equals("ChildService") ) { if (serviceRelationship.getService() != null) { if (serviceCharacteristicChanged) { if (stateChanged || childServiceCharacteristicChanged) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent saqi.setServiceRefId(serviceRelationship.getService().getId()); Loading @@ -716,28 +702,16 @@ public class ServiceRepoService { } catch (JsonProcessingException e) { e.printStackTrace(); } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED); this.addServiceActionQueueItem(service, saqi); } } if (stateChanged) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent saqi.setServiceRefId(serviceRelationship.getService().getId()); try { saqi.setOriginalServiceInJSON( mapper.writeValueAsString( service ) ); //pass the child service as is } catch (JsonProcessingException e) { e.printStackTrace(); } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_STATE_CHANGE ); logger.debug("==========addServiceActionQueueItem==============> EVALUATE_CHILD_STATE_CHANGE " + charChangedForNotes); } else if ( childServiceCharacteristicChanged) { saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED); logger.debug("==========addServiceActionQueueItem==============> EVALUATE_CHILD_CHARACTERISTIC_CHANGED " + charChangedForNotes); } this.addServiceActionQueueItem(service, saqi); } } } } } Loading Loading @@ -805,7 +779,6 @@ public class ServiceRepoService { // // TODO Auto-generated catch block // e.printStackTrace(); // } logger.info("======================================================================================================"); } return service; Loading Loading @@ -921,10 +894,10 @@ public class ServiceRepoService { if ( schart!= null ) { String teest = schart.getValue().getValue(); logger.info("schart size = " + teest.length() ); logger.debug("schart size = " + teest.length() ); logger.info("schart " + teest ); logger.info("======================================================================================================"); logger.debug("schart " + teest ); logger.debug("======================================================================================================"); } return res; Loading Loading @@ -1011,6 +984,9 @@ public class ServiceRepoService { //find any similar action inqueue and delete them, so to keep this one as the most recent List<ServiceActionQueueItem> result = this.serviceActionQueueRepo.findByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); logger.debug("Will add ServiceActionQueueItem ServiceRefId result: " +result.size() ); if (result.size()>0) { //essentially it will not delete any requests, but just return with not adding the new action since it is already exists return item; } this.serviceActionQueueRepo.deleteByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); } Loading Loading @@ -1179,16 +1155,14 @@ public class ServiceRepoService { public void updateServicesHavingThisSupportingResource(@Valid Resource res) { try { logger.debug("Will update services related to this resource with id = " + res.getId() ); logger.debug("================> Will update services related to this resource with id = " + res.getId() ); var aservices = findServicesHavingThisSupportingResourceID( res.getId() ); logger.debug("services.found = " + aservices.size() ); for (Service as : aservices) { Service aService = findByUuid(as.getId()); Service aService = getServiceEager(as.getId()); ServiceStateType nextState = aService.getState(); List<Resource> rlist = new ArrayList<Resource>(); for (ResourceRef rref : aService.getSupportingResource()) { Optional<Resource> result = resourceRepo.findByUuid(rref.getId()); Loading @@ -1197,27 +1171,87 @@ public class ServiceRepoService { } } rlist.add(res); //add also this one //copy characteristics, from resource to service /* * Construct characteristic name */ String kind = ""; String resourcename = res.getName() ; org.etsi.osl.tmf.ri639.model.Characteristic ckind = res.getResourceCharacteristicByName("Kind"); if ( ckind != null && ckind.getValue() != null) { kind = ckind.getValue().getValue() ; //example "ConfigMap" } if ( res.getName().indexOf('@')>0) { String firstToken = res.getName().substring( 0, res.getName().indexOf('@') ); resourcename = firstToken ; //example "cr0fc1234-amf" } Boolean resourceIsSameKind = aService.checkIsKindResource(res); if (resourceIsSameKind) { //if this service is the same kind as the resource then don't prefix the characteristic kind = ""; resourcename=""; //rlist.add(res); //add only this one }else { //enable the following to remove crXXXXXX prefix in name // org.etsi.osl.tmf.ri639.model.Characteristic kubinstance = res.getResourceCharacteristicByName("app.kubernetes.io/instance"); // if ( kubinstance != null && kubinstance.getValue() != null) { // String removePrefix = kubinstance.getValue().getValue(); // resourcename = resourcename.replace( removePrefix + "-", ""); // resourcename = resourcename.replace( removePrefix, ""); // } kind = kind + "."; resourcename = resourcename + "."; } ServiceStateType nextState = aService.findNextStateBasedOnSupportingResources(rlist); ServiceUpdate supd = new ServiceUpdate(); nextState = aService.findNextStateBasedOnResourceList(rlist); supd.setState(nextState); String stateText=""; if ( !aService.getState().equals(nextState)) { stateText = "State changed from " + aService.getState() + " to " + nextState + "."; logger.debug("====================> stateText = " + stateText); for (Resource r : rlist) { logger.debug("==================> s:"+ r.getResourceStatus().name()+ ", name:"+ r.getName() ); } } //adding all characteristics from service for (Characteristic ch : aService.getServiceCharacteristic()) { supd.addServiceCharacteristicItem(ch); } //copy characteristics, from resource to service String dontCopyChars = "clusterMasterURL,currentContextCluster,fullResourceName,Kind,apiGroup,UID,metadata"; String[] arrayDontCopyChars = dontCopyChars.split(","); Set<String> setB = new HashSet<>(Arrays.asList(arrayDontCopyChars)); for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { if ( resourceIsSameKind || ( !setB.contains( rChar.getName()) && !rChar.getName().startsWith("org.etsi.osl") ) ){ //don;t copy characteristics in set if ( rChar.getValue() != null ) { String characteristicname = kind + resourcename + rChar.getName(); if ( supd.getServiceCharacteristicByName( characteristicname ) != null ) { supd.getServiceCharacteristicByName( characteristicname ) .value(new Any( rChar.getValue() )); } else { Characteristic cNew = new Characteristic(); cNew.setName( rChar.getName()); cNew.setName( characteristicname ); cNew.value( new Any( rChar.getValue() )); supd.addServiceCharacteristicItem( cNew ); } } } } Characteristic noteCheck = as.getServiceCharacteristicByName("_DETAILED_NOTES_"); if ( noteCheck!= null && noteCheck.getValue() != null Loading @@ -1242,6 +1276,8 @@ public class ServiceRepoService { } @Transactional public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { try { Loading Loading @@ -1272,10 +1308,8 @@ public class ServiceRepoService { @Transactional private void updateServiceFromresourceChange(Resource res) { updateServicesHavingThisSupportingResource(res); addAnyNewRelatedResourcesFromKubernetesLabel(res); updateServicesHavingThisSupportingResource(res); } Loading @@ -1297,7 +1331,7 @@ public class ServiceRepoService { String serviceId = res.getResourceCharacteristicByName("org.etsi.osl.serviceId").getValue().getValue(); logger.debug("rserviceId: " + serviceId); Service aService = findByUuid( serviceId ); Service aService = getServiceEager( serviceId ); if ( aService !=null ) { logger.debug("aService found "); Boolean resourceFoundInSupportedResourcesOfService = false; Loading @@ -1316,13 +1350,6 @@ public class ServiceRepoService { rref.id(res.getId()).name(res.getName()); supd.addSupportingResourceItem(rref ); //copy characteristics from resource to service for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { Characteristic cNew = new Characteristic(); cNew.setName( rChar.getName()); cNew.value( new Any( rChar.getValue() )); supd.addServiceCharacteristicItem( cNew ); } Note n = new Note(); Loading src/test/java/org/etsi/osl/services/api/ServiceInventoryIntegrationTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -327,7 +327,7 @@ public class ServiceInventoryIntegrationTest { assertThat( responseSOUpd.getServiceCharacteristicByName( "DeploymentRequestID" ).getValue().getValue() ).isEqualTo( "1007" ) ; assertThat( serviceRepoService.findAllServiceActionQueueItems().size() ).isEqualTo( 3 ); assertThat( serviceRepoService.findAllServiceActionQueueItems().size() ).isEqualTo( 2 ); assertThat( serviceRepoService.findAllServiceActionQueueItems().get(0).getAction() ).isEqualTo(ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOACTIVE ); } Loading src/test/java/org/etsi/osl/services/api/ServiceOrderIntegrationTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -310,6 +310,7 @@ public class ServiceOrderIntegrationTest { serviceOrderref.setId(responseSO.getId()); serviceOrderref.setServiceOrderItemId((new ArrayList<>(responseSO.getOrderItem())).get(0).getId()); s.addServiceOrderItem(serviceOrderref); s.setServiceCharacteristic( new ArrayList<>()); Service createdServ = serviceRepoService.addService(s); Loading src/test/java/org/etsi/osl/services/api/sim638/ServiceRepoServiceTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -297,10 +297,19 @@ public class ServiceRepoServiceTest { assertThat( updatedService.getServiceCharacteristic().size() ).isEqualTo( 7 ); assertThat( updatedService.getSupportingResource().size() ).isEqualTo( 1); assertThat( updatedService.getServiceCharacteristicByName("NSLCM").getValue().getValue() ).isEqualTo( "nslcm_test" ); ResourceUpdate resourceUpdate = new ResourceUpdate(); org.etsi.osl.tmf.ri639.model.Characteristic resCharacteristicItem = new org.etsi.osl.tmf.ri639.model.Characteristic(); resCharacteristicItem.setName( "NSLCM" ); resCharacteristicItem.setValue( new Any("nslcm_test2")); resourceUpdate.addResourceCharacteristicItem(resCharacteristicItem); resCharacteristicItem.setName( "newChar" ); resCharacteristicItem.setValue( new Any("myval0")); resourceUpdate.addResourceCharacteristicItem(resCharacteristicItem); Loading Loading @@ -458,6 +467,44 @@ public class ServiceRepoServiceTest { return response; } @Test public void testFindNextStateBasedOnSupportingResources() throws Exception { Service s = new Service(); s.setState(ServiceStateType.RESERVED); List<Resource> rlist = new ArrayList<Resource>(); Resource r1 = new Resource(); Resource r2 = new Resource(); r1.setResourceStatus(ResourceStatusType.RESERVED); r2.setResourceStatus(ResourceStatusType.RESERVED); rlist.add(r1); rlist.add(r2); ServiceStateType nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.RESERVED ); r1.setResourceStatus(ResourceStatusType.AVAILABLE); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.RESERVED ); r2.setResourceStatus(ResourceStatusType.AVAILABLE); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.ACTIVE ); s.setState( ServiceStateType.ACTIVE ); r1.setResourceStatus(ResourceStatusType.UNKNOWN); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.ACTIVE ); r1.setResourceStatus(ResourceStatusType.SUSPENDED); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.TERMINATED ); s.setState( ServiceStateType.TERMINATED ); r1.setResourceStatus(ResourceStatusType.AVAILABLE); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.TERMINATED ); } private ServiceSpecification createServiceSpec(String sspectext, ServiceSpecificationCreate sspeccr1) throws Exception{ String response = mvc.perform(MockMvcRequestBuilders.post("/serviceCatalogManagement/v4/serviceSpecification") Loading Loading
src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +161 −134 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ public class ServiceRepoService { } @Transactional public Service addService(@Valid ServiceCreate service) { logger.info("Will add service: " + service.getName() ); Service s = new Service(); Loading Loading @@ -335,10 +336,11 @@ public class ServiceRepoService { Note noteItem = new Note(); noteItem.setText("Service " + s.getState() ); noteItem.setAuthor("API"); noteItem.setAuthor("SIM-638"); noteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC) ); s.addNoteItem(noteItem); s = this.serviceRepo.save( s ); raiseServiceCreateNotification(s); Loading @@ -353,22 +355,7 @@ public class ServiceRepoService { .orElse(null); } /** * @param id * @param servUpd * @param triggerServiceActionQueue * @param updatedFromParentService * @param updatedFromChildService * @return */ /** * @param id * @param servUpd * @param triggerServiceActionQueue * @param updatedFromParentService * @param updatedFromChildService * @return */ /** * @param id * @param servUpd Loading @@ -379,6 +366,9 @@ public class ServiceRepoService { */ @Transactional public Service updateService(String id, @Valid ServiceUpdate servUpd, boolean triggerServiceActionQueue, Service updatedFromParentService, Service updatedFromChildService ) { logger.debug("================> Will updateService = " + id ); //Service service = this.findByUuid(id); Service service = this.getServiceEager(id); Loading @@ -388,6 +378,9 @@ public class ServiceRepoService { return null; } logger.info("Will update service: " + service.getName() ); //logger.info("Will update service details: " + s.toString() ); Loading @@ -401,6 +394,7 @@ public class ServiceRepoService { } if (servUpd.getType()!=null) { service.setType(servUpd.getType()); } Loading Loading @@ -541,6 +535,8 @@ public class ServiceRepoService { } else { service.addServiceCharacteristicItem(n); if ( !n.getName().contains("::") ) { //it is not a child characteristic serviceCharacteristicChanged = true; charChangedForNotes += n.getName() + ", "; Loading Loading @@ -585,9 +581,10 @@ public class ServiceRepoService { if (stateChanged) { Note noteItem = new Note(); noteItem.setText("Service is " + service.getState() ); noteItem.setAuthor("API"); noteItem.setAuthor("SIM-638"); noteItem.setDate(OffsetDateTime.now(ZoneOffset.UTC) ); service.addNoteItem(noteItem); logger.debug("=============SERVICE STATE ================================> " + service.getState() ); } Loading Loading @@ -635,9 +632,9 @@ public class ServiceRepoService { } service = this.serviceRepo.save( service ); String requestedServiceAsJson = null; try { requestedServiceAsJson = mapper.writeValueAsString( service ); Loading @@ -650,40 +647,28 @@ public class ServiceRepoService { * Save in ServiceActionQueueItem */ if (triggerServiceActionQueue && stateChanged) { Boolean childServiceCharacteristicChanged = false; if ( stateChanged ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); if (stateChanged) { if ( service.getState().equals( ServiceStateType.INACTIVE) ) { saqi.setAction( ServiceActionQueueAction.DEACTIVATE ); }else if ( service.getState().equals( ServiceStateType.TERMINATED) ) { saqi.setAction( ServiceActionQueueAction.TERMINATE ); } } if ( saqi.getAction() != ServiceActionQueueAction.NONE ) { this.addServiceActionQueueItem(service, saqi); } } // //here on any state change of a Service we must send an ActionQueueItem that reflects the state changed with the Action if ( stateChanged ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); if ( service.getState().equals( ServiceStateType.ACTIVE) ) { }else if ( service.getState().equals( ServiceStateType.ACTIVE) ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOACTIVE ); this.addServiceActionQueueItem(service, saqi); }else if ( previousState!=null && previousState.equals( ServiceStateType.ACTIVE) ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOINACTIVE ); this.addServiceActionQueueItem(service, saqi); } } if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) && triggerServiceActionQueue ) { if ( saqi.getAction() != ServiceActionQueueAction.NONE ) { logger.debug("==========addServiceActionQueueItem==============> saqi.getAction() = " + saqi.getAction() ); this.addServiceActionQueueItem(service, saqi); } } else if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) && triggerServiceActionQueue ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); Loading @@ -691,7 +676,9 @@ public class ServiceRepoService { if ( serviceCharacteristicChangedContainsPrimitive ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ); } logger.debug("==========addServiceActionQueueItem==============> serviceCharacteristicChanged && service.getState().eq charChangedForNotes= " + charChangedForNotes); this.addServiceActionQueueItem(service, saqi); childServiceCharacteristicChanged = true; } Loading @@ -706,8 +693,7 @@ public class ServiceRepoService { if (serviceRelationship.getRelationshipType().equals("ChildService") ) { if (serviceRelationship.getService() != null) { if (serviceCharacteristicChanged) { if (stateChanged || childServiceCharacteristicChanged) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent saqi.setServiceRefId(serviceRelationship.getService().getId()); Loading @@ -716,28 +702,16 @@ public class ServiceRepoService { } catch (JsonProcessingException e) { e.printStackTrace(); } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED); this.addServiceActionQueueItem(service, saqi); } } if (stateChanged) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent saqi.setServiceRefId(serviceRelationship.getService().getId()); try { saqi.setOriginalServiceInJSON( mapper.writeValueAsString( service ) ); //pass the child service as is } catch (JsonProcessingException e) { e.printStackTrace(); } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_STATE_CHANGE ); logger.debug("==========addServiceActionQueueItem==============> EVALUATE_CHILD_STATE_CHANGE " + charChangedForNotes); } else if ( childServiceCharacteristicChanged) { saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED); logger.debug("==========addServiceActionQueueItem==============> EVALUATE_CHILD_CHARACTERISTIC_CHANGED " + charChangedForNotes); } this.addServiceActionQueueItem(service, saqi); } } } } } Loading Loading @@ -805,7 +779,6 @@ public class ServiceRepoService { // // TODO Auto-generated catch block // e.printStackTrace(); // } logger.info("======================================================================================================"); } return service; Loading Loading @@ -921,10 +894,10 @@ public class ServiceRepoService { if ( schart!= null ) { String teest = schart.getValue().getValue(); logger.info("schart size = " + teest.length() ); logger.debug("schart size = " + teest.length() ); logger.info("schart " + teest ); logger.info("======================================================================================================"); logger.debug("schart " + teest ); logger.debug("======================================================================================================"); } return res; Loading Loading @@ -1011,6 +984,9 @@ public class ServiceRepoService { //find any similar action inqueue and delete them, so to keep this one as the most recent List<ServiceActionQueueItem> result = this.serviceActionQueueRepo.findByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); logger.debug("Will add ServiceActionQueueItem ServiceRefId result: " +result.size() ); if (result.size()>0) { //essentially it will not delete any requests, but just return with not adding the new action since it is already exists return item; } this.serviceActionQueueRepo.deleteByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); } Loading Loading @@ -1179,16 +1155,14 @@ public class ServiceRepoService { public void updateServicesHavingThisSupportingResource(@Valid Resource res) { try { logger.debug("Will update services related to this resource with id = " + res.getId() ); logger.debug("================> Will update services related to this resource with id = " + res.getId() ); var aservices = findServicesHavingThisSupportingResourceID( res.getId() ); logger.debug("services.found = " + aservices.size() ); for (Service as : aservices) { Service aService = findByUuid(as.getId()); Service aService = getServiceEager(as.getId()); ServiceStateType nextState = aService.getState(); List<Resource> rlist = new ArrayList<Resource>(); for (ResourceRef rref : aService.getSupportingResource()) { Optional<Resource> result = resourceRepo.findByUuid(rref.getId()); Loading @@ -1197,27 +1171,87 @@ public class ServiceRepoService { } } rlist.add(res); //add also this one //copy characteristics, from resource to service /* * Construct characteristic name */ String kind = ""; String resourcename = res.getName() ; org.etsi.osl.tmf.ri639.model.Characteristic ckind = res.getResourceCharacteristicByName("Kind"); if ( ckind != null && ckind.getValue() != null) { kind = ckind.getValue().getValue() ; //example "ConfigMap" } if ( res.getName().indexOf('@')>0) { String firstToken = res.getName().substring( 0, res.getName().indexOf('@') ); resourcename = firstToken ; //example "cr0fc1234-amf" } Boolean resourceIsSameKind = aService.checkIsKindResource(res); if (resourceIsSameKind) { //if this service is the same kind as the resource then don't prefix the characteristic kind = ""; resourcename=""; //rlist.add(res); //add only this one }else { //enable the following to remove crXXXXXX prefix in name // org.etsi.osl.tmf.ri639.model.Characteristic kubinstance = res.getResourceCharacteristicByName("app.kubernetes.io/instance"); // if ( kubinstance != null && kubinstance.getValue() != null) { // String removePrefix = kubinstance.getValue().getValue(); // resourcename = resourcename.replace( removePrefix + "-", ""); // resourcename = resourcename.replace( removePrefix, ""); // } kind = kind + "."; resourcename = resourcename + "."; } ServiceStateType nextState = aService.findNextStateBasedOnSupportingResources(rlist); ServiceUpdate supd = new ServiceUpdate(); nextState = aService.findNextStateBasedOnResourceList(rlist); supd.setState(nextState); String stateText=""; if ( !aService.getState().equals(nextState)) { stateText = "State changed from " + aService.getState() + " to " + nextState + "."; logger.debug("====================> stateText = " + stateText); for (Resource r : rlist) { logger.debug("==================> s:"+ r.getResourceStatus().name()+ ", name:"+ r.getName() ); } } //adding all characteristics from service for (Characteristic ch : aService.getServiceCharacteristic()) { supd.addServiceCharacteristicItem(ch); } //copy characteristics, from resource to service String dontCopyChars = "clusterMasterURL,currentContextCluster,fullResourceName,Kind,apiGroup,UID,metadata"; String[] arrayDontCopyChars = dontCopyChars.split(","); Set<String> setB = new HashSet<>(Arrays.asList(arrayDontCopyChars)); for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { if ( resourceIsSameKind || ( !setB.contains( rChar.getName()) && !rChar.getName().startsWith("org.etsi.osl") ) ){ //don;t copy characteristics in set if ( rChar.getValue() != null ) { String characteristicname = kind + resourcename + rChar.getName(); if ( supd.getServiceCharacteristicByName( characteristicname ) != null ) { supd.getServiceCharacteristicByName( characteristicname ) .value(new Any( rChar.getValue() )); } else { Characteristic cNew = new Characteristic(); cNew.setName( rChar.getName()); cNew.setName( characteristicname ); cNew.value( new Any( rChar.getValue() )); supd.addServiceCharacteristicItem( cNew ); } } } } Characteristic noteCheck = as.getServiceCharacteristicByName("_DETAILED_NOTES_"); if ( noteCheck!= null && noteCheck.getValue() != null Loading @@ -1242,6 +1276,8 @@ public class ServiceRepoService { } @Transactional public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { try { Loading Loading @@ -1272,10 +1308,8 @@ public class ServiceRepoService { @Transactional private void updateServiceFromresourceChange(Resource res) { updateServicesHavingThisSupportingResource(res); addAnyNewRelatedResourcesFromKubernetesLabel(res); updateServicesHavingThisSupportingResource(res); } Loading @@ -1297,7 +1331,7 @@ public class ServiceRepoService { String serviceId = res.getResourceCharacteristicByName("org.etsi.osl.serviceId").getValue().getValue(); logger.debug("rserviceId: " + serviceId); Service aService = findByUuid( serviceId ); Service aService = getServiceEager( serviceId ); if ( aService !=null ) { logger.debug("aService found "); Boolean resourceFoundInSupportedResourcesOfService = false; Loading @@ -1316,13 +1350,6 @@ public class ServiceRepoService { rref.id(res.getId()).name(res.getName()); supd.addSupportingResourceItem(rref ); //copy characteristics from resource to service for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { Characteristic cNew = new Characteristic(); cNew.setName( rChar.getName()); cNew.value( new Any( rChar.getValue() )); supd.addServiceCharacteristicItem( cNew ); } Note n = new Note(); Loading
src/test/java/org/etsi/osl/services/api/ServiceInventoryIntegrationTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -327,7 +327,7 @@ public class ServiceInventoryIntegrationTest { assertThat( responseSOUpd.getServiceCharacteristicByName( "DeploymentRequestID" ).getValue().getValue() ).isEqualTo( "1007" ) ; assertThat( serviceRepoService.findAllServiceActionQueueItems().size() ).isEqualTo( 3 ); assertThat( serviceRepoService.findAllServiceActionQueueItems().size() ).isEqualTo( 2 ); assertThat( serviceRepoService.findAllServiceActionQueueItems().get(0).getAction() ).isEqualTo(ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOACTIVE ); } Loading
src/test/java/org/etsi/osl/services/api/ServiceOrderIntegrationTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -310,6 +310,7 @@ public class ServiceOrderIntegrationTest { serviceOrderref.setId(responseSO.getId()); serviceOrderref.setServiceOrderItemId((new ArrayList<>(responseSO.getOrderItem())).get(0).getId()); s.addServiceOrderItem(serviceOrderref); s.setServiceCharacteristic( new ArrayList<>()); Service createdServ = serviceRepoService.addService(s); Loading
src/test/java/org/etsi/osl/services/api/sim638/ServiceRepoServiceTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -297,10 +297,19 @@ public class ServiceRepoServiceTest { assertThat( updatedService.getServiceCharacteristic().size() ).isEqualTo( 7 ); assertThat( updatedService.getSupportingResource().size() ).isEqualTo( 1); assertThat( updatedService.getServiceCharacteristicByName("NSLCM").getValue().getValue() ).isEqualTo( "nslcm_test" ); ResourceUpdate resourceUpdate = new ResourceUpdate(); org.etsi.osl.tmf.ri639.model.Characteristic resCharacteristicItem = new org.etsi.osl.tmf.ri639.model.Characteristic(); resCharacteristicItem.setName( "NSLCM" ); resCharacteristicItem.setValue( new Any("nslcm_test2")); resourceUpdate.addResourceCharacteristicItem(resCharacteristicItem); resCharacteristicItem.setName( "newChar" ); resCharacteristicItem.setValue( new Any("myval0")); resourceUpdate.addResourceCharacteristicItem(resCharacteristicItem); Loading Loading @@ -458,6 +467,44 @@ public class ServiceRepoServiceTest { return response; } @Test public void testFindNextStateBasedOnSupportingResources() throws Exception { Service s = new Service(); s.setState(ServiceStateType.RESERVED); List<Resource> rlist = new ArrayList<Resource>(); Resource r1 = new Resource(); Resource r2 = new Resource(); r1.setResourceStatus(ResourceStatusType.RESERVED); r2.setResourceStatus(ResourceStatusType.RESERVED); rlist.add(r1); rlist.add(r2); ServiceStateType nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.RESERVED ); r1.setResourceStatus(ResourceStatusType.AVAILABLE); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.RESERVED ); r2.setResourceStatus(ResourceStatusType.AVAILABLE); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.ACTIVE ); s.setState( ServiceStateType.ACTIVE ); r1.setResourceStatus(ResourceStatusType.UNKNOWN); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.ACTIVE ); r1.setResourceStatus(ResourceStatusType.SUSPENDED); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.TERMINATED ); s.setState( ServiceStateType.TERMINATED ); r1.setResourceStatus(ResourceStatusType.AVAILABLE); nstate = s.findNextStateBasedOnResourceList(rlist); assertThat(nstate).isEqualTo( ServiceStateType.TERMINATED ); } private ServiceSpecification createServiceSpec(String sspectext, ServiceSpecificationCreate sspeccr1) throws Exception{ String response = mvc.perform(MockMvcRequestBuilders.post("/serviceCatalogManagement/v4/serviceSpecification") Loading