diff --git a/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java b/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java index 585b5d0a700ead4d8cfbac1ff79b362658083150..c7e3bc81ab4a1083ac49f10e05e262918c31d2c9 100644 --- a/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java +++ b/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java @@ -1,7 +1,10 @@ package org.etsi.osl.osom.lcm; import java.io.IOException; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Optional; import java.util.function.Consumer; @@ -27,6 +30,8 @@ import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification; import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.scm633.model.ServiceSpecRelationship; import org.etsi.osl.tmf.sim638.model.Service; +import org.etsi.osl.tmf.sim638.model.ServiceCreate; +import org.etsi.osl.tmf.sim638.model.ServiceUpdate; import org.etsi.osl.tmf.so641.model.ServiceOrder; import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderItemRelationship; @@ -788,10 +793,151 @@ public abstract class LcmBaseExecutor { return ""; } + + + + /** + * Set the value to a characteristics of a referenced service + * @param serviceName the name of the service reference + * @param characteristics map with name.value + * @param value + */ + public void setServiceRefCharacteristicsValues(String serviceName, HashMap<String, String> charvals) { + + //logger.debug( String.format( "setServiceRefPropValue %s %s %s ", serviceName, characteristicName, value ) ); + logger.debug( String.format( "setServiceRefCharacteristicsValues for %s ", serviceName ) ); + + Service ctxService = this.vars.getService(); + + if (ctxService == null) { + ServiceCreate scre = this.vars.getServiceToCreate(); + if (scre != null) { + for (String charname : charvals.keySet()) { + setCharacteristicOfCurrentService( serviceName + "::" + charname, charvals.get(charname) ); + } + } + return; + } + + @NotNull @Valid ServiceRef refSrvice = null; + + for (ServiceRef sr : ctxService.getSupportingService()) { + if ( sr.getName().equals(serviceName) ) { + refSrvice = sr; + break; + } + } + + + if (refSrvice == null) { + return; + } + + if (this.vars.getServiceOrderManager() != null) { + Service aService = this.vars.getServiceOrderManager().retrieveService(refSrvice.getId()); + if (aService != null) { + + ServiceUpdate supd = new ServiceUpdate(); + Note n = new Note(); + n.setAuthor("LCMRULE " + this.lcmspec.getName()); + n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); + String note = ""; + for (String charname : charvals.keySet()) { + setCharacteristicOfCurrentService( serviceName + "::" + charname, charvals.get(charname) ); + + Characteristic servicecrspecLast = aService.getServiceCharacteristicByName(charname); + if (servicecrspecLast != null) { + servicecrspecLast.getValue().setValue( charvals.get(charname) ); + supd.addServiceCharacteristicItem(servicecrspecLast); + note += charname + "=" + charvals.get(charname)+ ", "; + } + } + + + n.setText( String.format( "New characterisictic values for ServiceRef %s: %s" , serviceName, note )); + supd.addNoteItem(n); + this.vars.getServiceOrderManager().updateService(aService.getId(), supd, true); + + } + + } + + } + +// /** +// * Set the value to a characteristic of a referenced service +// * @param serviceName the name of the service reference +// * @param characteristicName +// * @param value +// */ +// public void setServiceRefPropValue( String serviceName, String characteristicName, String value ) { +// logger.debug( String.format( "setServiceRefPropValue %s %s %s ", serviceName, characteristicName, value ) ); +// Service ctxService = this.vars.getService(); +// +// +// if (ctxService == null) { +// ServiceCreate scre = this.vars.getServiceToCreate(); +// if (scre != null) { +// setCharacteristicOfCurrentService( serviceName + "::" + characteristicName, value); +// } +// return; +// } +// +// +// +// +// +// +// @NotNull @Valid ServiceRef refSrvice = null; +// +// for (ServiceRef sr : ctxService.getSupportingService()) { +// if ( sr.getName().equals(serviceName) ) { +// refSrvice = sr; +// break; +// } +// } +// +// +// setCharacteristicOfCurrentService( serviceName + "::" + characteristicName, value); +// +// if (refSrvice == null) { +// return; +// } +// +// if (this.vars.getServiceOrderManager() != null) { +// Service aService = this.vars.getServiceOrderManager().retrieveService(refSrvice.getId()); +// if (aService != null) { +// +// ServiceUpdate supd = new ServiceUpdate(); +// +// Characteristic servicecrspecLast = +// aService.getServiceCharacteristicByName(characteristicName); +// if (servicecrspecLast != null) { +// servicecrspecLast.getValue().setValue(value); +// supd.addServiceCharacteristicItem(servicecrspecLast); +// Note n = new Note(); +// n.setAuthor("LCMRULE " + this.lcmspec.getName()); +// n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); +// n.setText("Set new value (" + value + ") to ref Service (" + serviceName +// + ") Characteristic: " + characteristicName); +// supd.addNoteItem(n); +// this.vars.getServiceOrderManager().updateService(aService.getId(), supd, true); +// +// +// } +// +// } +// +// } +// +// } - //createServiceRefIf("Bundle B", getServiceRefPropValue("BundleA", "state", "").equals("active")==true); + + + + //createServiceRefIf("Bundle B", getServiceRefPropValue("BundleA", "state", "").equals("active")==true); public boolean createServiceRefIf(String serviceName, boolean b) { logger.debug( String.format("createServiceRefwhen serviceName=%s = %s", serviceName, b ) ); diff --git a/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java b/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java index d13ff592a4b3c45519b668525c8432fc5f6acf1e..221c8619b6962d32fce13c5e986d8af688ec15e7 100644 --- a/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java +++ b/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java @@ -67,7 +67,7 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate { ServiceUpdate supd = new ServiceUpdate(); - boolean propagateToSO = false; + boolean triggerServiceActionQueue = false; //retrieve the related supporting resource by id and check its status //ResourceRef supresourceRef = aService.getSupportingResource().stream().findFirst().get();//we assume for now we have only one related resource @@ -84,7 +84,7 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate { if ( res == null ) { supd.setState( ServiceStateType.TERMINATED); execution.setVariable("serviceDeploymentFinished", Boolean.TRUE); - Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO ); + Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, triggerServiceActionQueue ); return; } @@ -145,7 +145,7 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate { supd.setState( ServiceStateType.INACTIVE ); } - Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO ); + Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, triggerServiceActionQueue ); if ( serviceResult!= null ) { if ( serviceResult.getState().equals(ServiceStateType.ACTIVE) diff --git a/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java b/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java index 9feeb411350468f2d3d123cffa66373089b81cc6..f6a8955533feda277f9f2c7468f81dd47fceb9ec 100644 --- a/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java +++ b/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java @@ -160,8 +160,6 @@ public class CreateReservedService implements JavaDelegate { if ( partnerOrg != null ) { createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, partnerOrg, parentService); - - } else if (specrel.getType().equals("ResourceFacingServiceSpecification")) { createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService); @@ -329,7 +327,7 @@ public class CreateReservedService implements JavaDelegate { } } } - + //also add parent service as relationship to parent ServiceRelationship srelationship = new ServiceRelationship(); diff --git a/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java b/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java index e81aab1f84dcc4fd1097f291f4200717c9f038b7..021458906cc013f11966313a0d33d972e2951439 100644 --- a/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java +++ b/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java @@ -87,7 +87,7 @@ public class NFVOrchestrationCheckDeploymentService implements JavaDelegate { ServiceUpdate supd = new ServiceUpdate(); boolean aVNFINDEXREFadded = false; - boolean propagateToSO = false; + boolean triggerServiceActionQueue = false; if ( aService.getServiceCharacteristic() != null ) { for (Characteristic c : aService.getServiceCharacteristic()) { @@ -103,17 +103,17 @@ public class NFVOrchestrationCheckDeploymentService implements JavaDelegate { c.setValue( new Any( dd.getInstanceId() + "" )); } else if ( c.getName().equals("NSR")) { c.setValue( new Any( dd.getNsr() + "" )); - propagateToSO = true; + triggerServiceActionQueue = true; } else if ( c.getName().equals("NSLCM")) { c.setValue( new Any( dd.getNs_nslcm_details() + "" )); - propagateToSO = true; + triggerServiceActionQueue = true; } if ( dd.getDeploymentDescriptorVxFInstanceInfo() !=null ) { for ( DeploymentDescriptorVxFInstanceInfo vnfinfo : dd.getDeploymentDescriptorVxFInstanceInfo() ) { if ( c.getName().equals( "VNFINDEXREF_INFO_" + vnfinfo.getMemberVnfIndexRef() )) { c.setValue( new Any( vnfinfo.getVxfInstanceInfo() + "" )); aVNFINDEXREFadded = true; - propagateToSO = true; + triggerServiceActionQueue = true; } } @@ -153,7 +153,7 @@ public class NFVOrchestrationCheckDeploymentService implements JavaDelegate { supd.setState( ServiceStateType.TERMINATED ); } - Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO ); + Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, triggerServiceActionQueue ); if ( serviceResult!= null ) { if ( serviceResult.getState().equals(ServiceStateType.ACTIVE) diff --git a/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java b/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java index 86fb199ed59521d9af7c64df888d3cb35d1bbf9e..6290743ba0d1e9f690c0fd62db7134e3f611de1e 100644 --- a/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java +++ b/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java @@ -448,16 +448,16 @@ public class ServiceOrderManager { /** * @param serviceId * @param s - * @param propagateToSO is a cryptic thing. However it is used as follows: if FALSE, to just update the service status in catalog without further taking any action. + * @param triggerServiceActionQueue is a cryptic thing. However it is used as follows: if FALSE, to just update the service status in catalog without further taking any action. * if TRUE then the ServiceUpdate will trigger a ServiceActionQueue to further process the update. So this is needed to avoid these kinds of deadlocks * @return */ - public org.etsi.osl.tmf.sim638.model.Service updateService(String serviceId, ServiceUpdate s, boolean propagateToSO) { + public org.etsi.osl.tmf.sim638.model.Service updateService(String serviceId, ServiceUpdate s, boolean triggerServiceActionQueue) { logger.info("will update Service : " + serviceId ); try { Map<String, Object> map = new HashMap<>(); map.put("serviceid", serviceId ); - map.put("propagateToSO", propagateToSO ); + map.put("triggerServiceActionQueue", triggerServiceActionQueue ); Object response = template.requestBodyAndHeaders( CATALOG_UPD_SERVICE, toJsonString(s), map); diff --git a/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java b/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java index c375e3766d304a751411e8391b8c9e57c55b1959..00269a8028cf3396f7fa0fcae647d740e4030a2d 100644 --- a/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java +++ b/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java @@ -79,7 +79,9 @@ public class ServiceActionCheck implements JavaDelegate { execution.setVariable("saction", "HandleActiveStateChanged"); } else if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOINACTIVE ) ) { execution.setVariable("saction", "HandleInactiveStateChanged"); - } else if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED ) || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ) ) { + } else if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED ) + || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED ) + || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ) ) { execution.setVariable("saction", "HandleEvaluateService");// default