diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8ea78d6c6187dd518ec9fb389aae2a666ba82c86..bb7d754baa751630b25598e182a30f062e9b6ebd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,13 +15,21 @@ include:
rules:
- if: '$CI_COMMIT_REF_NAME == "develop"'
+ - project: osl/code/org.etsi.osl.main
+ ref: $CI_COMMIT_REF_NAME
+ file:
+ - ci-templates/default.yml
+ - ci-templates/build.yml
+ rules:
+ - if: '$CI_COMMIT_REF_PROTECTED && $CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop"'
+
- project: osl/code/org.etsi.osl.main
ref: develop
file:
- ci-templates/default.yml
- ci-templates/build_unprotected.yml
rules:
- - if: '$CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop"'
+ - if: '$CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop" && !$CI_COMMIT_REF_PROTECTED'
maven_build:
extends: .maven_build
diff --git a/Dockerfile b/Dockerfile
index c5f39895bf71ba4fbc8c0b17d711383ccb024b30..e7a7b05cf8fe304860bd076a7163a384075171d4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
FROM ibm-semeru-runtimes:open-17.0.7_7-jdk
# RUN mkdir /opt/shareclasses
RUN mkdir -p /opt/openslice/lib/
-COPY target/org.etsi.osl.tmf.api-1.0.0-SNAPSHOT-exec.jar /opt/openslice/lib/
-CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses", "-jar", "/opt/openslice/lib/org.etsi.osl.tmf.api-1.0.0-SNAPSHOT-exec.jar"]
+COPY target/org.etsi.osl.tmf.api-1.0.0-exec.jar /opt/openslice/lib/
+CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses", "-jar", "/opt/openslice/lib/org.etsi.osl.tmf.api-1.0.0-exec.jar"]
EXPOSE 13082
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e7b37d77751b66fb5c74a79f7727119a0eec82be..885c3062d39c252078cdaf8636c69305ec312f2a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.etsi.osl
org.etsi.osl.main
- 1.0.0-SNAPSHOT
+ 1.0.0
../org.etsi.osl.main
@@ -75,11 +75,6 @@
pom
import
-
- org.json
- json
- 20210307
-
@@ -266,6 +261,13 @@
org.springframework.boot
spring-boot-starter-test
test
+
+
+ com.vaadin.external.google
+ android-json
+
+
+
org.springframework.security
diff --git a/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java b/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java
index 9fd5474732f67d7b8ff4724701b111ff376a59bb..f2a517266d56a3334fbf812e3806a5a4ede9b5ed 100644
--- a/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java
+++ b/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java
@@ -622,7 +622,7 @@ public class ServiceSpecificationRepoService {
* Also,
* we will add by default all the characteristics of this rSpec to the related bundle parent service
*/
- //serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec);
+ serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec);
}
}
@@ -699,24 +699,24 @@ public class ServiceSpecificationRepoService {
return targetServiceSpec;
}
-// private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) {
-//
-// ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid );
-//
-// if ( rSpec != null ) {
-// for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) {
-// ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar );
-// //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() );
-// serviceSpecCharacteristicItem.setName( sourceChar.getName() );
-//
-// if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) {
-// targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem );
-// }
-// }
-// }
-//
-// return targetServiceSpec;
-// }
+ private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) {
+
+ ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid );
+
+ if ( rSpec != null ) {
+ for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) {
+ ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar );
+ //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() );
+ serviceSpecCharacteristicItem.setName( sourceChar.getName() );
+
+ if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) {
+ targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem );
+ }
+ }
+ }
+
+ return targetServiceSpec;
+ }
public ServiceSpecification cloneServiceSpecification(String uuid) {
ServiceSpecification source = this.findByUuid(uuid);
@@ -1144,7 +1144,7 @@ public class ServiceSpecificationRepoService {
return null;
}
- logger.error("nsdid returned: " + nsd.getName());
+ logger.debug("nsdid returned: " + nsd.getName());
List newRfservices = new ArrayList<>();
@@ -1422,11 +1422,11 @@ public class ServiceSpecificationRepoService {
-// for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) {
-// ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar );
+ for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) {
+ ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar );
// serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() );
-// serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem );
-// }
+ serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem );
+ }
ResourceSpecificationRef resourceSpecRef = new ResourceSpecificationRef();
@@ -1439,25 +1439,25 @@ public class ServiceSpecificationRepoService {
return serviceSpec;
}
-// private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) {
-//
-// ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic();
-// serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription());
-// serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() );
-// serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable());
-// serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() );
-// serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() );
-// serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() );
-// for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) {
-// ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue();
-// serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias()));
-// serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() );
-// serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() );
-// serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem );
-// }
-// return serviceSpecCharacteristicItem;
-// }
-//
+ private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) {
+
+ ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic();
+ serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription());
+ serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() );
+ serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable());
+ serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() );
+ serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() );
+ serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() );
+ for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) {
+ ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue();
+ serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias()));
+ serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() );
+ serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() );
+ serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem );
+ }
+ return serviceSpecCharacteristicItem;
+ }
+
diff --git a/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java b/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java
index 55e38b6687ada1511b065fadd1fb68c4d99f290c..93afc976d554ffe86976320a3e0d56fd7b591191 100644
--- a/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java
+++ b/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java
@@ -20,12 +20,15 @@
package org.etsi.osl.tmf.sim638.api;
import java.io.IOException;
-
+import java.util.Date;
+import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
-
+import org.apache.camel.Exchange;
import org.apache.camel.LoggingLevel;
+import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.dataformat.JsonLibrary;
import org.apache.commons.logging.Log;
@@ -44,6 +47,11 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.etsi.osl.model.nfv.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
+import org.etsi.osl.model.nfv.Product;
+import org.etsi.osl.model.nfv.ValidationJob;
+import org.etsi.osl.model.nfv.ValidationStatus;
+import org.etsi.osl.model.nfv.VxFMetadata;
@Configuration
//@RefreshScope
@@ -111,6 +119,9 @@ public class ServiceApiRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
+
+
+
from( CATALOG_ADD_SERVICE )
.log(LoggingLevel.INFO, log, CATALOG_ADD_SERVICE + " message received and will be processed for service inventory!")
.to("log:DEBUG?showBody=true&showHeaders=true")
@@ -188,8 +199,7 @@ public class ServiceApiRouteBuilder extends RouteBuilder {
.unmarshal().json( JsonLibrary.Jackson, DeploymentDescriptor.class, true)
.bean( serviceRepoService, "nfvCatalogNSResourceChanged(${body})");
-
-
+
from( EVENT_RESOURCE_STATE_CHANGED )
.log(LoggingLevel.INFO, log, EVENT_RESOURCE_STATE_CHANGED + " message received and will be processed for service inventory!")
@@ -199,6 +209,13 @@ public class ServiceApiRouteBuilder extends RouteBuilder {
from( EVENT_RESOURCE_CREATE )
+ .errorHandler(deadLetterChannel("direct:retriesDeadLetters")
+ .maximumRedeliveries(5)
+ .redeliveryDelay(1000).useOriginalMessage()
+ .logExhausted(true)
+ .logHandled(true)
+ .retriesExhaustedLogLevel(LoggingLevel.ERROR)
+ .retryAttemptedLogLevel(LoggingLevel.ERROR))
.log(LoggingLevel.INFO, log, EVENT_RESOURCE_CREATE + " message received and will be processed for service inventory!")
.to("log:DEBUG?showBody=true&showHeaders=true")
.unmarshal().json( JsonLibrary.Jackson, ResourceCreateNotification.class, true)
@@ -208,15 +225,33 @@ public class ServiceApiRouteBuilder extends RouteBuilder {
from( EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED )
+ .errorHandler(deadLetterChannel("direct:retriesDeadLetters")
+ .maximumRedeliveries(5)
+ .redeliveryDelay(1000).useOriginalMessage()
+ .logExhausted(true)
+ .logHandled(true)
+ .retriesExhaustedLogLevel(LoggingLevel.ERROR)
+ .retryAttemptedLogLevel(LoggingLevel.ERROR))
+
.log(LoggingLevel.INFO, log, EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED + " message received and will be processed for service inventory!")
.to("log:DEBUG?showBody=true&showHeaders=true")
.unmarshal().json( JsonLibrary.Jackson, ResourceAttributeValueChangeNotification.class, true)
.bean( serviceRepoService, "resourceAttrChangedEvent(${body})");
+
+ /**
+ * dead Letter Queue msgs if everything fails to connect
+ */
+ from("direct:retriesDeadLetters")
+ //.setBody()
+ //.body(String.class)
+ //.process( ErroneousValidationProcessor )
+ .to("log:DEBUG?showBody=true&showHeaders=true")
+ .to("stream:out");
}
-
+
static String toJsonString(Object object) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
diff --git a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java
index 6b65eb616ce5d634898dcadc46f8e94a39f83f9d..eaf0609a083947ceee28114efacb3f886ee9b9f2 100644
--- a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java
+++ b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java
@@ -818,6 +818,7 @@ public class ServiceRepoService {
// this.updateService( parentServiceId, servUpd, false, null, childService);
// }
+ @Transactional
public String getServiceEagerAsString(String id) throws JsonProcessingException {
Service s = this.getServiceEager(id);
ObjectMapper mapper = new ObjectMapper();
@@ -837,7 +838,8 @@ public class ServiceRepoService {
return res;
}
-
+
+ @Transactional
public Service getServiceEager(String id) {
if ( id == null || id.equals("")) {
return null;
@@ -904,6 +906,7 @@ public class ServiceRepoService {
/**
* @return
*/
+ @Transactional
public List findAllServiceActionQueueItems() {
return (List) this.serviceActionQueueRepo.findFirst10ByOrderByInsertedDate();
@@ -934,6 +937,7 @@ public class ServiceRepoService {
* @param id
* @return
*/
+ @Transactional
public Void deleteServiceActionQueueItemByUuid(String id) {
Optional optso = this.serviceActionQueueRepo.findByUuid(id);
@@ -1077,61 +1081,79 @@ public class ServiceRepoService {
@Transactional
public void resourceAttrChangedEvent(@Valid ResourceAttributeValueChangeNotification resNotif) {
+ try {
+
+ logger.debug("ResourceAttributeValueChangeNotification");
+ Resource res = resNotif.getEvent().getEvent().getResource();
+ logger.info("Will update services related to this resource with id = " + res.getId() );
+
+ var aservices = findServicesHavingThisSupportingResourceID( res.getId() );
+
+ for (Service as : aservices) {
+
+ Service aService = findByUuid(as.getId());
+
+ //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) {
+
+
+ ServiceUpdate supd = new ServiceUpdate();
+
+ //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();
+ n.setText("Supporting Resource Attribute Changed with id: " + res.getId());
+ n.setAuthor( "SIM638-API" );
+ n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() );
+ supd.addNoteItem( n );
+
+ this.updateService( aService.getId(), supd , true, null, null); //update the service
+ //}
+ }
- logger.debug("ResourceAttributeValueChangeNotification");
- Resource res = resNotif.getEvent().getEvent().getResource();
- logger.info("Will update services related to this resource with id = " + res.getId() );
-
- var aservices = findServicesHavingThisSupportingResourceID( res.getId() );
-
- for (Service as : aservices) {
-
- Service aService = findByUuid(as.getId());
-
- //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) {
-
- ServiceUpdate supd = new ServiceUpdate();
-
- //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();
- n.setText("Supporting Resource Attribute Changed with id: " + res.getId());
- n.setAuthor( "SIM638-API" );
- n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() );
- supd.addNoteItem( n );
-
- this.updateService( aService.getId(), supd , true, null, null); //update the service
- //}
+ }catch (Exception e) {
+ e.printStackTrace();
}
}
@Transactional
- public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) {
- logger.debug("resourceCreatedEvent");
- Resource res = resNotif.getEvent().getEvent().getResource();
- updateServiceFromresourceChange(res);
+ public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) {
+ try {
+ Resource res = resNotif.getEvent().getEvent().getResource();
+ logger.debug("resourceCreatedEvent for: " + res.getName());
+ updateServiceFromresourceChange(res);
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+
}
@Transactional
public void resourceStateChangedEvent(@Valid ResourceStateChangeNotification resNotif) {
+ try {
+
+ Resource res = resNotif.getEvent().getEvent().getResource();
+ logger.debug("resourceStateChangedEvent for: " + res.getName());
+ updateServiceFromresourceChange(res);
- logger.debug("resourceStateChangedEvent");
- Resource res = resNotif.getEvent().getEvent().getResource();
- updateServiceFromresourceChange(res);
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+
}
-
+
+ @Transactional
private void updateServiceFromresourceChange(Resource res) {
logger.info("Will update services related to this resource with id = " + res.getId() );
@@ -1172,11 +1194,20 @@ public class ServiceRepoService {
}
+ @Transactional
private void updateResourceFromKubernetesLabel(Resource res) {
+ logger.debug("updateResourceFromKubernetesLabel for: " + res.getName());
+
if (res.getResourceCharacteristicByName("org.etsi.osl.serviceId") != null) {
+
+
+ logger.debug("org.etsi.osl.serviceId found ");
String serviceId = res.getResourceCharacteristicByName("org.etsi.osl.serviceId").getValue().getValue();
+ logger.debug("rserviceId: " + serviceId);
+
Service aService = findByUuid( serviceId );
if ( aService !=null ) {
+ logger.debug("aService found ");
Boolean resourceFoundInSupportedResourcesOfService = false;
for (ResourceRef as : aService.getSupportingResource()) {
if ( as.getId().equals( res.getId() )) {
@@ -1184,7 +1215,8 @@ public class ServiceRepoService {
break;
}
}
-
+
+ logger.debug("resourceFoundInSupportedResourcesOfService= " + resourceFoundInSupportedResourcesOfService);
if ( !resourceFoundInSupportedResourcesOfService ) {
ServiceUpdate supd = new ServiceUpdate();
diff --git a/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java b/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java
index 64557ad5e9fdda97daa56ba449b5232ee0e21740..ca5a5da3e4c0772800eb817a203c5f1ea0765d81 100644
--- a/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java
+++ b/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java
@@ -34,6 +34,7 @@ import org.yaml.snakeyaml.Yaml;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -107,10 +108,20 @@ public class PrimitivesParser {
public static JSONObject processNSD(NetworkServiceDescriptor nsd) {
// Parse the NSD descriptor from string to YAML
Yaml yaml = new Yaml();
- Map yamlMap = yaml.load(nsd.getDescriptor());
-
- // Parse the NSD descriptor from YAML to JSONObject
- JSONObject nsdJson = new JSONObject(yamlMap);
+ JSONObject nsdJson;
+
+ Object obj = yaml.load(nsd.getDescriptor());
+
+ if ( obj instanceof ArrayList) {
+ // Parse the NSD descriptor from YAML to JSONObject
+ nsdJson = new JSONObject( (ArrayList