Skip to content
Snippets Groups Projects
Commit 0d8b7cad authored by trantzas's avatar trantzas
Browse files

Merging 2024Q2_RC into main, creating 2024Q2 Release

parents a4762cf5 2bc1b3ed
No related branches found
No related tags found
1 merge request!12Merging 2024Q2_RC into main, creating 2024Q2 Release
Pipeline #7304 passed
Showing
with 453 additions and 213 deletions
include:
- project: osl/code/org.etsi.osl.main
ref: main
file:
- ci-templates/default.yml
- ci-templates/build.yml
rules:
- if: '$CI_COMMIT_REF_NAME == "main"'
- project: osl/code/org.etsi.osl.main
ref: develop
file:
- ci-templates/default.yml
- ci-templates/build.yml
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" && !$CI_COMMIT_REF_PROTECTED'
maven_build:
extends: .maven_build
docker_build:
extends: .docker_build
needs:
- maven_build
...@@ -2,7 +2,7 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk ...@@ -2,7 +2,7 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk
MAINTAINER openslice.io MAINTAINER openslice.io
RUN mkdir /opt/shareclasses RUN mkdir /opt/shareclasses
RUN mkdir -p /opt/openslice/lib/ RUN mkdir -p /opt/openslice/lib/
COPY target/org.etsi.osl.osom-1.2.0-SNAPSHOT.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.0.0.jar /opt/openslice/lib/
COPY target/org.etsi.osl.osom-1.2.0-SNAPSHOT-exec.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.0.0-exec.jar /opt/openslice/lib/
COPY . /opt/openslice/lib/ COPY . /opt/openslice/lib/
CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.2.0-SNAPSHOT-exec.jar"] CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.0.0-exec.jar"]
\ No newline at end of file \ No newline at end of file
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
<servers>
<server>
<id>gitlab-maven</id>
<configuration>
<httpHeaders>
<property>
<name>Job-Token</name>
<value>${CI_JOB_TOKEN}</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
...@@ -5,12 +5,12 @@ ...@@ -5,12 +5,12 @@
<parent> <parent>
<groupId>org.etsi.osl</groupId> <groupId>org.etsi.osl</groupId>
<artifactId>org.etsi.osl.main</artifactId> <artifactId>org.etsi.osl.main</artifactId>
<version>1.2.0-SNAPSHOT</version> <version>1.0.0</version>
<relativePath>../org.etsi.osl.main</relativePath> <relativePath>../org.etsi.osl.main</relativePath>
</parent> </parent>
<artifactId>org.etsi.osl.osom</artifactId>
<artifactId>org.etsi.osl.osom</artifactId>
<name>org.etsi.osl.osom</name> <name>org.etsi.osl.osom</name>
<url>http://maven.apache.org</url> <url>http://maven.apache.org</url>
...@@ -23,6 +23,23 @@ ...@@ -23,6 +23,23 @@
<flowable.version>${flowable-version}</flowable.version> <flowable.version>${flowable-version}</flowable.version>
</properties> </properties>
<repositories>
<repository>
<id>gitlab-maven</id>
<url>https://labs.etsi.org/rep/api/v4/groups/260/-/packages/maven</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>gitlab-maven</id>
<url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
</repository>
<snapshotRepository>
<id>gitlab-maven</id>
<url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
</snapshotRepository>
</distributionManagement>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<!-- Spring Boot BOM --> <!-- Spring Boot BOM -->
...@@ -68,14 +85,14 @@ ...@@ -68,14 +85,14 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.etsi.osl</groupId> <groupId>org.etsi.osl</groupId>
<artifactId>org.etsi.osl.tmf.api</artifactId> <artifactId>org.etsi.osl.model.tmf</artifactId>
<version>${project.version}</version> <version>${org.etsi.osl.model.tmf.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.etsi.osl</groupId> <groupId>org.etsi.osl</groupId>
<artifactId>org.etsi.osl.model</artifactId> <artifactId>org.etsi.osl.model.nfv</artifactId>
<version>${project.version}</version> <version>${org.etsi.osl.model.nfv.version}</version>
</dependency> </dependency>
......
...@@ -26,16 +26,10 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -26,16 +26,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.ExitCodeGenerator; import org.springframework.boot.ExitCodeGenerator;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.cloud.client.discovery.EnableDiscoveryClient; //import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
//import org.springframework.cloud.context.config.annotation.RefreshScope; //import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
/** /**
* @author ctranoris * @author ctranoris
......
...@@ -22,7 +22,6 @@ package org.etsi.osl.osom.configuration; ...@@ -22,7 +22,6 @@ package org.etsi.osl.osom.configuration;
import org.apache.camel.component.activemq.ActiveMQComponent; import org.apache.camel.component.activemq.ActiveMQComponent;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import jakarta.jms.ConnectionFactory; import jakarta.jms.ConnectionFactory;
/** /**
......
...@@ -25,21 +25,16 @@ import org.apache.camel.Exchange; ...@@ -25,21 +25,16 @@ import org.apache.camel.Exchange;
import org.apache.camel.LoggingLevel; import org.apache.camel.LoggingLevel;
import org.apache.camel.Processor; import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder; import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.dataformat.JsonLibrary;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.osom.management.ServiceOrderManager; import org.etsi.osl.model.nfv.ExperimentMetadata;
import org.etsi.osl.osom.serviceactions.ServiceActionCheck; 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;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.etsi.osl.model.ExperimentMetadata;
import org.etsi.osl.model.Product;
import org.etsi.osl.model.ValidationJob;
import org.etsi.osl.model.ValidationStatus;
import org.etsi.osl.model.VxFMetadata;
import org.etsi.osl.tmf.am642.model.AlarmCreate;
import org.etsi.osl.tmf.so641.model.ServiceOrder;
@Configuration @Configuration
//@RefreshScope //@RefreshScope
...@@ -55,6 +50,8 @@ public class OSOMRouteBuilder extends RouteBuilder { ...@@ -55,6 +50,8 @@ public class OSOMRouteBuilder extends RouteBuilder {
private String CRD_DEPLOY_CR_REQ = ""; private String CRD_DEPLOY_CR_REQ = "";
@Value("${CRD_PATCH_CR_REQ}")
private String CRD_PATCH_CR_REQ = "";
public void configure() { public void configure() {
...@@ -75,6 +72,20 @@ public class OSOMRouteBuilder extends RouteBuilder { ...@@ -75,6 +72,20 @@ public class OSOMRouteBuilder extends RouteBuilder {
.to(CRD_DEPLOY_CR_REQ); .to(CRD_DEPLOY_CR_REQ);
from("direct:retriesCRD_PATCH_CR_REQ")
.errorHandler(deadLetterChannel("direct:retriesDeadLetters")
.maximumRedeliveries( 10 ) //let's try 10 times to send it....
.redeliveryDelay( 30000 ).useOriginalMessage()
//.deadLetterHandleNewException( false )
//.logExhaustedMessageHistory(false)
.logExhausted(true)
.logHandled(true)
//.retriesExhaustedLogLevel(LoggingLevel.WARN)
.retryAttemptedLogLevel( LoggingLevel.WARN) )
.to(CRD_PATCH_CR_REQ);
/** /**
* dead Letter Queue Users if everything fails to connect * dead Letter Queue Users if everything fails to connect
*/ */
......
...@@ -4,20 +4,18 @@ import java.io.IOException; ...@@ -4,20 +4,18 @@ import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.ProducerTemplate; import org.apache.camel.ProducerTemplate;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.osom.management.ServiceOrderManager; import org.etsi.osl.osom.management.ServiceOrderManager;
import org.etsi.osl.tmf.lcm.model.ELCMRulePhase;
import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.etsi.osl.tmf.lcm.model.ELCMRulePhase;
import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification;
/** /**
* @author ctranoris * @author ctranoris
......
...@@ -12,18 +12,16 @@ import java.nio.file.Paths; ...@@ -12,18 +12,16 @@ import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import javax.tools.Diagnostic; import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector; import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler; import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject; import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager; import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider; import javax.tools.ToolProvider;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification; import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification;
import org.springframework.boot.system.ApplicationHome;
/** /**
* @author ctranoris * @author ctranoris
...@@ -165,10 +163,12 @@ public class LCMRulesExecutor { ...@@ -165,10 +163,12 @@ public class LCMRulesExecutor {
* This is the location of the jar inside the running container * This is the location of the jar inside the running container
*/ */
File classesJar = new File("/opt/openslice/lib/org.etsi.osl.osom-1.2.0-SNAPSHOT.jar"); ApplicationHome home = new ApplicationHome(LCMRulesExecutor.class);
if ( classesJar.exists() ) { File classesJar = home.getSource();
optionList.addAll(Arrays.asList("-classpath", classesJar.getAbsoluteFile().toString() )); if ( classesJar != null && classesJar.exists() ) {
optionList.addAll(Arrays.asList("-classpath", classesJar.getAbsoluteFile().toString().replace("-exec", "") ));
} }
logger.debug("classesJar = "+ classesJar);
logger.debug("optionList = "+ optionList.toString()); logger.debug("optionList = "+ optionList.toString());
...@@ -213,7 +213,7 @@ public class LCMRulesExecutor { ...@@ -213,7 +213,7 @@ public class LCMRulesExecutor {
URL[] classpath = new URL[] { temp.toUri().toURL() }; URL[] classpath = new URL[] { temp.toUri().toURL() };
if ( classesJar.exists() ) { if ( classesJar != null && classesJar.exists() ) {
classpath = new URL[] { temp.toUri().toURL(), classesJar.toURI().toURL() }; classpath = new URL[] { temp.toUri().toURL(), classesJar.toURI().toURL() };
} }
logger.debug("classpath = "+ classpath.toString()); logger.debug("classpath = "+ classpath.toString());
......
...@@ -28,7 +28,7 @@ public class LCMRulesExecutorVariables { ...@@ -28,7 +28,7 @@ public class LCMRulesExecutorVariables {
private Service service; private Service service;
private List<String> compileDiagnosticErrors; private List<String> compileDiagnosticErrors;
private ServiceOrderManager serviceOrderManager; private ServiceOrderManager serviceOrderManager;
private Map<String, String> outParams; private Map<String, Map<String, String> > outParams;
/** /**
* @param spec * @param spec
...@@ -50,6 +50,7 @@ public class LCMRulesExecutorVariables { ...@@ -50,6 +50,7 @@ public class LCMRulesExecutorVariables {
this.service = serviceInstance; this.service = serviceInstance;
this.serviceOrderManager = aServiceOrderManager; this.serviceOrderManager = aServiceOrderManager;
this.compileDiagnosticErrors = new ArrayList<>(); this.compileDiagnosticErrors = new ArrayList<>();
this.outParams = new HashMap<String,String>();
this.outParams = new HashMap<>();
} }
} }
package org.etsi.osl.osom.lcm; package org.etsi.osl.osom.lcm;
import java.io.IOException; import java.io.IOException;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.function.Consumer; import java.util.function.Consumer;
import javax.net.ssl.SSLException; import javax.net.ssl.SSLException;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
...@@ -17,15 +18,9 @@ import com.fasterxml.jackson.databind.node.ArrayNode; ...@@ -17,15 +18,9 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option; import com.jayway.jsonpath.Option;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.osom.partnerservices.GenericClient; import org.etsi.osl.osom.partnerservices.GenericClient;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.web.reactive.function.client.WebClient;
import org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.Any;
import org.etsi.osl.tmf.common.model.EValueType; import org.etsi.osl.tmf.common.model.EValueType;
import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.Characteristic;
...@@ -35,10 +30,16 @@ import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification; ...@@ -35,10 +30,16 @@ import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification;
import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.prm669.model.RelatedParty;
import org.etsi.osl.tmf.scm633.model.ServiceSpecRelationship; import org.etsi.osl.tmf.scm633.model.ServiceSpecRelationship;
import org.etsi.osl.tmf.sim638.model.Service; 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.ServiceOrder;
import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderCreate;
import org.etsi.osl.tmf.so641.model.ServiceOrderItemRelationship; import org.etsi.osl.tmf.so641.model.ServiceOrderItemRelationship;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateType; import org.etsi.osl.tmf.so641.model.ServiceOrderStateType;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatusCode;
import org.springframework.web.reactive.function.client.WebClient;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
...@@ -395,8 +396,10 @@ public abstract class LcmBaseExecutor { ...@@ -395,8 +396,10 @@ public abstract class LcmBaseExecutor {
System.out.println("============================================================================= \n"); System.out.println("============================================================================= \n");
System.out.println("The value length is apayload= \n" + apayload.length());
System.out.println("The value is apayload= \n" + apayload); System.out.println("The value is apayload= \n" + apayload);
if (apayload!=null) {
System.out.println("The value length is apayload= \n" + apayload.length());
}
System.out.println("============================================================================= \n"); System.out.println("============================================================================= \n");
if (baseurl != null) { if (baseurl != null) {
...@@ -795,8 +798,149 @@ public abstract class LcmBaseExecutor { ...@@ -795,8 +798,149 @@ public abstract class LcmBaseExecutor {
/**
* 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) { public boolean createServiceRefIf(String serviceName, boolean b, HashMap<String, String> charvals) {
logger.debug( String.format("createServiceRefwhen serviceName=%s = %s", serviceName, b ) ); logger.debug( String.format("createServiceRefwhen serviceName=%s = %s", serviceName, b ) );
...@@ -810,7 +954,8 @@ public abstract class LcmBaseExecutor { ...@@ -810,7 +954,8 @@ public abstract class LcmBaseExecutor {
if (serviceIDToCheckDependcy != null) { if (serviceIDToCheckDependcy != null) {
this.vars.getOutParams().put( serviceIDToCheckDependcy, Boolean.toString(b) ); charvals.put("_CREATESERVICEREF_", Boolean.toString(b));
this.vars.getOutParams().put( serviceIDToCheckDependcy, charvals );
} }
return false; return false;
......
...@@ -3,22 +3,19 @@ package org.etsi.osl.osom.management; ...@@ -3,22 +3,19 @@ package org.etsi.osl.osom.management;
import java.io.IOException; import java.io.IOException;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.CamelContext; import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate; import org.apache.camel.ProducerTemplate;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.etsi.osl.tmf.am642.model.AlarmCreate; import org.etsi.osl.tmf.am642.model.AlarmCreate;
import org.etsi.osl.tmf.am642.model.AlarmStateType; import org.etsi.osl.tmf.am642.model.AlarmStateType;
import org.etsi.osl.tmf.am642.model.AlarmUpdate; import org.etsi.osl.tmf.am642.model.AlarmUpdate;
import org.etsi.osl.tmf.am642.model.Comment; import org.etsi.osl.tmf.am642.model.Comment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service @Service
public class AlarmsService { public class AlarmsService {
......
...@@ -22,16 +22,16 @@ package org.etsi.osl.osom.management; ...@@ -22,16 +22,16 @@ package org.etsi.osl.osom.management;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.osom.lcm.LCMRulesController; import org.etsi.osl.osom.lcm.LCMRulesController;
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 org.etsi.osl.tmf.common.model.UserPartRoleType; import org.etsi.osl.tmf.common.model.UserPartRoleType;
import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.prm669.model.RelatedParty;
import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.model.ServiceSpecification;
import org.etsi.osl.tmf.sim638.model.EServiceStartMode; import org.etsi.osl.tmf.sim638.model.EServiceStartMode;
import org.etsi.osl.tmf.sim638.model.Service; import org.etsi.osl.tmf.sim638.model.Service;
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;
/** /**
* @author ctranoris * @author ctranoris
......
...@@ -19,24 +19,24 @@ ...@@ -19,24 +19,24 @@
*/ */
package org.etsi.osl.osom.management; package org.etsi.osl.osom.management;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.flowable.engine.delegate.DelegateExecution; import org.etsi.osl.tmf.common.model.service.Note;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.etsi.osl.model.DeploymentDescriptor;
import org.etsi.osl.model.DeploymentDescriptorStatus;
import org.etsi.osl.model.DeploymentDescriptorVxFInstanceInfo;
import org.etsi.osl.tmf.common.model.Any;
import org.etsi.osl.tmf.common.model.service.Characteristic;
import org.etsi.osl.tmf.common.model.service.ResourceRef; import org.etsi.osl.tmf.common.model.service.ResourceRef;
import org.etsi.osl.tmf.common.model.service.ServiceStateType; import org.etsi.osl.tmf.common.model.service.ServiceStateType;
import org.etsi.osl.tmf.ri639.model.Resource; import org.etsi.osl.tmf.ri639.model.Resource;
import org.etsi.osl.tmf.ri639.model.ResourceStatusType;
import org.etsi.osl.tmf.sim638.model.Service; import org.etsi.osl.tmf.sim638.model.Service;
import org.etsi.osl.tmf.sim638.model.ServiceUpdate; 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; import jakarta.validation.Valid;
...@@ -46,6 +46,10 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate { ...@@ -46,6 +46,10 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate {
private static final transient Log logger = LogFactory.getLog(CROrchestrationCheckDeploymentService.class.getName()); private static final transient Log logger = LogFactory.getLog(CROrchestrationCheckDeploymentService.class.getName());
@Value("${spring.application.name}")
private String compname;
@Autowired @Autowired
private ServiceOrderManager serviceOrderManager; private ServiceOrderManager serviceOrderManager;
...@@ -69,96 +73,47 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate { ...@@ -69,96 +73,47 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate {
return; return;
} }
execution.setVariable("serviceDeploymentFinished", Boolean.FALSE ); execution.setVariable("serviceDeploymentFinished", Boolean.FALSE );
ServiceUpdate supd = new ServiceUpdate(); ServiceUpdate supd = new ServiceUpdate();
boolean propagateToSO = false; boolean propagateToSO = false;
//retrieve the related supporting resource by id and check its status //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 //ResourceRef supresourceRef = aService.getSupportingResource().stream().findFirst().get();//we assume for now we have only one related resource
@Valid List<Resource> rlist = new ArrayList<Resource>();
ServiceStateType nextState = aService.getState() ; for (ResourceRef rref : aService.getSupportingResource()) {
boolean allActive = aService.getSupportingResource().size() > 0 ; Resource res = serviceOrderManager.retrieveResource(rref.getId());
boolean allTerminated = aService.getSupportingResource().size() > 0 ;
boolean existsInactive=false;
boolean existsTerminated=false;
boolean existsReserved=false;
for ( ResourceRef supresourceRef : aService.getSupportingResource()) {
Resource res = serviceOrderManager.retrieveResource( supresourceRef.getId() );
if ( res == null ) { if ( res == null ) {
supd.setState( ServiceStateType.TERMINATED); supd.setState( ServiceStateType.TERMINATED);
execution.setVariable("serviceDeploymentFinished", Boolean.TRUE); execution.setVariable("serviceDeploymentFinished", Boolean.TRUE);
Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO ); Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO );
return; return;
} }
rlist.add(res);
if ( res.getResourceStatus() != null ) {
switch (res.getResourceStatus()) {
case AVAILABLE: {
nextState = ServiceStateType.ACTIVE;
break;
}
case STANDBY: {
nextState = ServiceStateType.RESERVED;
break;
}
case SUSPENDED: {
nextState = ServiceStateType.INACTIVE;
break;
}
case RESERVED: {
nextState = ServiceStateType.RESERVED;
break;
}
case UNKNOWN: {
if (aService.getState().equals( ServiceStateType.ACTIVE )) {
nextState = ServiceStateType.TERMINATED;
}
break;
}
case ALARM: {
nextState = ServiceStateType.INACTIVE;
break;
}
default:
throw new IllegalArgumentException("Unexpected value: " + res.getResourceStatus());
}
}
allActive = allActive && nextState == ServiceStateType.ACTIVE;
allTerminated = allTerminated && nextState == ServiceStateType.TERMINATED;
existsInactive = existsInactive || nextState == ServiceStateType.INACTIVE;
existsTerminated = existsTerminated || nextState == ServiceStateType.TERMINATED;
existsReserved = existsReserved || nextState == ServiceStateType.RESERVED;
} }
@Valid
ServiceStateType currentState = aService.getState();
ServiceStateType nextState = aService.findNextStateBasedOnSupportingResources(rlist);
if ( allActive ) { if (!currentState.equals(nextState)) {
supd.setState( ServiceStateType.ACTIVE ); supd.setState( nextState );
} else if ( allTerminated ) { Note n = new Note();
supd.setState( ServiceStateType.TERMINATED ); n.setText("Service Status Changed to: " + nextState);
} else if ( existsInactive ) { n.setAuthor(compname);
supd.setState( ServiceStateType.INACTIVE ); n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
} else if ( existsReserved ) { supd.addNoteItem(n);
supd.setState( ServiceStateType.RESERVED ); aService = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO );
} else if ( existsTerminated ) {
supd.setState( ServiceStateType.INACTIVE );
} }
Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO ); if ( aService!= null ) {
if ( aService.getState().equals(ServiceStateType.ACTIVE)
if ( serviceResult!= null ) { || aService.getState().equals(ServiceStateType.TERMINATED)) {
if ( serviceResult.getState().equals(ServiceStateType.ACTIVE)
|| serviceResult.getState().equals(ServiceStateType.TERMINATED)) {
logger.info("Deployment Status OK. Service state = " + serviceResult.getState() ); logger.info("Deployment Status OK. Service state = " + aService.getState() );
execution.setVariable("serviceDeploymentFinished", Boolean.TRUE); execution.setVariable("serviceDeploymentFinished", Boolean.TRUE);
return; return;
} }
......
...@@ -23,16 +23,8 @@ import java.time.OffsetDateTime; ...@@ -23,16 +23,8 @@ import java.time.OffsetDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
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 org.etsi.osl.model.DeploymentDescriptor;
import org.etsi.osl.tmf.common.model.service.Characteristic; 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.Note;
import org.etsi.osl.tmf.common.model.service.ResourceRef; import org.etsi.osl.tmf.common.model.service.ResourceRef;
...@@ -45,6 +37,11 @@ import org.etsi.osl.tmf.scm633.model.ServiceSpecification; ...@@ -45,6 +37,11 @@ import org.etsi.osl.tmf.scm633.model.ServiceSpecification;
import org.etsi.osl.tmf.sim638.model.Service; import org.etsi.osl.tmf.sim638.model.Service;
import org.etsi.osl.tmf.sim638.model.ServiceUpdate; import org.etsi.osl.tmf.sim638.model.ServiceUpdate;
import org.etsi.osl.tmf.so641.model.ServiceOrder; import org.etsi.osl.tmf.so641.model.ServiceOrder;
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;
@Component(value = "crOrchestrationService") // bean name @Component(value = "crOrchestrationService") // bean name
...@@ -115,9 +112,14 @@ public class CROrchestrationService implements JavaDelegate { ...@@ -115,9 +112,14 @@ public class CROrchestrationService implements JavaDelegate {
String response = null; String response = null;
if (crspec != null) { if (crspec != null) {
response = createNewDeploymentRequest(aService, resourceCR, sorder.getId(), sorder.getStartDate(), response = createNewDeploymentRequest(aService, resourceCR, sorder.getId(), sorder.getStartDate(),
sorder.getExpectedCompletionDate(), sorder.getId(), crspec); sorder.getExpectedCompletionDate(), crspec);
} }
Characteristic servicecrspecLast = aService.getServiceCharacteristicByName("_CR_SPEC_LASTSEND");
servicecrspecLast.getValue().setValue( crspec );
su.addServiceCharacteristicItem(servicecrspecLast);
if ( response!=null && response.equals("OK")) { if ( response!=null && response.equals("OK")) {
su.setState(ServiceStateType.RESERVED); su.setState(ServiceStateType.RESERVED);
Note successNoteItem = new Note(); Note successNoteItem = new Note();
...@@ -172,6 +174,15 @@ public class CROrchestrationService implements JavaDelegate { ...@@ -172,6 +174,15 @@ public class CROrchestrationService implements JavaDelegate {
} }
/**
*
* THe resource has a temporary name.
* later on the name and its characteristics are updated via cridge
* @param rSpecRef
* @param sOrder
* @param aService
* @return
*/
private Resource createRelatedResource(ResourceSpecificationRef rSpecRef, ServiceOrder sOrder, Service aService) { private Resource createRelatedResource(ResourceSpecificationRef rSpecRef, ServiceOrder sOrder, Service aService) {
ResourceCreate resCreate = new ResourceCreate(); ResourceCreate resCreate = new ResourceCreate();
...@@ -190,9 +201,40 @@ public class CROrchestrationService implements JavaDelegate { ...@@ -190,9 +201,40 @@ public class CROrchestrationService implements JavaDelegate {
} }
/**
*
* This function makes a new deployment request for a custom resource specification.
* The request is performed via the message queue.
* The function sends also some headers that are related and needed for deployment
* These are the headers, that some of them are also added as metadata labels in CR:
* <br>
* <br><b>currentContextCluster:</b> current context of cluster
* <br><b>clusterMasterURL:</b> current master url of the cluster
* <br><b>org.etsi.osl.serviceId:</b> This is the related service id that the created resource has a reference
* <br><b>org.etsi.osl.resourceId:</b> This is the related resource id that the created CR will wrap and reference. There
* <br><b>org.etsi.osl.prefixName:</b> we need to add a short prefix (default is cr) to various places. For example in K8s cannot start with a number
* <br><b>org.etsi.osl.serviceOrderId:</b> the related service order id of this deployment request
* <br><b>org.etsi.osl.namespace:</b> requested namespace name
* <br><b>org.etsi.osl.statusCheckFieldName:</b> The name of the field that is needed to be monitored in order to monitor the status of the service and translate it to TMF resource statys (RESERVED AVAILABLE, etc)
* <br><b>org.etsi.osl.statusCheckValueStandby:</b> The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state STANDBY (see org.etsi.osl.tmf.ri639.model.ResourceStatusType)
* <br><b>org.etsi.osl.statusCheckValueAlarm:</b> The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state ALARMS (see org.etsi.osl.tmf.ri639.model.ResourceStatusType)
* <br><b>org.etsi.osl.statusCheckValueAvailable:</b> The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state AVAILABLE (see org.etsi.osl.tmf.ri639.model.ResourceStatusType)
* <br><b>org.etsi.osl.statusCheckValueReserved:</b> The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state RESERVED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType)
* <br><b>org.etsi.osl.statusCheckValueUnknown:</b> The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state UNKNOWN (see org.etsi.osl.tmf.ri639.model.ResourceStatusType)
* <br><b>org.etsi.osl.statusCheckValueSuspended:</b> The CR specific value (of the CheckFieldName) that needs to me mapped to the TMF resource state SUSPENDED (see org.etsi.osl.tmf.ri639.model.ResourceStatusType)
* <br>
*
* @param aService reference to the service that the resource and the CR belongs to
* @param resourceCR 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)
* @param _CR_SPEC the spec that is sent to cridge (in json)
* @return a string respons from cridge. 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
*/
private String createNewDeploymentRequest(Service aService, Resource resourceCR, String orderId, private String createNewDeploymentRequest(Service aService, Resource resourceCR, String orderId,
OffsetDateTime startDate, OffsetDateTime startDate,
OffsetDateTime endDate, String orderid, String _CR_SPEC) { OffsetDateTime endDate, String _CR_SPEC) {
try { try {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
......
...@@ -2,15 +2,8 @@ package org.etsi.osl.osom.management; ...@@ -2,15 +2,8 @@ package org.etsi.osl.osom.management;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
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 org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.Any;
import org.etsi.osl.tmf.common.model.EValueType; import org.etsi.osl.tmf.common.model.EValueType;
import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.Characteristic;
...@@ -27,6 +20,11 @@ import org.etsi.osl.tmf.stm653.model.ServiceTest; ...@@ -27,6 +20,11 @@ import org.etsi.osl.tmf.stm653.model.ServiceTest;
import org.etsi.osl.tmf.stm653.model.ServiceTestCreate; import org.etsi.osl.tmf.stm653.model.ServiceTestCreate;
import org.etsi.osl.tmf.stm653.model.ServiceTestSpecification; import org.etsi.osl.tmf.stm653.model.ServiceTestSpecification;
import org.etsi.osl.tmf.stm653.model.ServiceTestSpecificationRef; import org.etsi.osl.tmf.stm653.model.ServiceTestSpecificationRef;
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; import jakarta.validation.Valid;
@Component(value = "checkServiceTestDeployment") //bean name @Component(value = "checkServiceTestDeployment") //bean name
......
...@@ -3,17 +3,13 @@ package org.etsi.osl.osom.management; ...@@ -3,17 +3,13 @@ package org.etsi.osl.osom.management;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.osom.lcm.LCMRulesController; import org.etsi.osl.osom.lcm.LCMRulesController;
import org.etsi.osl.osom.lcm.LCMRulesExecutorVariables; import org.etsi.osl.osom.lcm.LCMRulesExecutorVariables;
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 org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.Any;
import org.etsi.osl.tmf.common.model.EValueType; import org.etsi.osl.tmf.common.model.EValueType;
import org.etsi.osl.tmf.common.model.UserPartRoleType; import org.etsi.osl.tmf.common.model.UserPartRoleType;
...@@ -37,6 +33,11 @@ import org.etsi.osl.tmf.so641.model.ServiceOrder; ...@@ -37,6 +33,11 @@ import org.etsi.osl.tmf.so641.model.ServiceOrder;
import org.etsi.osl.tmf.so641.model.ServiceOrderItem; import org.etsi.osl.tmf.so641.model.ServiceOrderItem;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateType; import org.etsi.osl.tmf.so641.model.ServiceOrderStateType;
import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate; import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate;
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; import jakarta.validation.Valid;
@Component(value = "createReservedService") // bean name @Component(value = "createReservedService") // bean name
...@@ -97,9 +98,16 @@ public class CreateReservedService implements JavaDelegate { ...@@ -97,9 +98,16 @@ public class CreateReservedService implements JavaDelegate {
logger.debug("Retrieved Service ID:" + spec.getId()); logger.debug("Retrieved Service ID:" + spec.getId());
logger.debug("Retrieved Service Name:" + spec.getName()); logger.debug("Retrieved Service Name:" + spec.getName());
//this map contains as key the id of the serviceSpecs to be created
//and as value a Map of initial characteristics and their values
Map<String, Map<String,String>> tobeCreatedInitialCharValues = new HashMap<>();
if ( execution.getVariable("serviceSpecsToCreateInitialCharValues") != null ) {
tobeCreatedInitialCharValues = (Map<String, Map<String, String>>) execution.getVariable("serviceSpecsToCreateInitialCharValues");
}
//this is a main underlying service for the requested service (restriction) //this is a main underlying service for the requested service (restriction)
Service createdUnderlService = addServicesToVariables( spec, sor, soi, parentService ); Service createdUnderlService = addServicesToVariables( spec, sor, soi, parentService, tobeCreatedInitialCharValues );
soi.getService().setState( ServiceStateType.RESERVED ); soi.getService().setState( ServiceStateType.RESERVED );
soi.setState(ServiceOrderStateType.INPROGRESS); soi.setState(ServiceOrderStateType.INPROGRESS);
...@@ -146,11 +154,12 @@ public class CreateReservedService implements JavaDelegate { ...@@ -146,11 +154,12 @@ public class CreateReservedService implements JavaDelegate {
* @param servicesHandledByNFVOAutomated * @param servicesHandledByNFVOAutomated
* @param servicesLocallyAutomated * @param servicesLocallyAutomated
* @param parentService * @param parentService
* @param tobeCreatedInitialCharValues
* @return * @return
*/ */
private Service addServicesToVariables(ServiceSpecification specrel, private Service addServicesToVariables(ServiceSpecification specrel,
ServiceOrder sor, ServiceOrderItem soi, ServiceOrder sor, ServiceOrderItem soi,
Service parentService) { Service parentService, Map<String, Map<String, String>> tobeCreatedInitialCharValues) {
logger.debug("\tService spec name :" + specrel.getName()); logger.debug("\tService spec name :" + specrel.getName());
logger.debug("\tService spec type :" + specrel.getType()); logger.debug("\tService spec type :" + specrel.getType());
...@@ -160,25 +169,23 @@ public class CreateReservedService implements JavaDelegate { ...@@ -160,25 +169,23 @@ public class CreateReservedService implements JavaDelegate {
if ( partnerOrg != null ) { if ( partnerOrg != null ) {
createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, partnerOrg, parentService); createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, partnerOrg, parentService, tobeCreatedInitialCharValues);
} }
else if (specrel.getType().equals("ResourceFacingServiceSpecification")) { else if (specrel.getType().equals("ResourceFacingServiceSpecification")) {
createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService); createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService, tobeCreatedInitialCharValues);
} else if ( specrel.getType().equals("CustomerFacingServiceSpecification") && (specrel.isIsBundle()!=null) && specrel.isIsBundle() ) { } else if ( specrel.getType().equals("CustomerFacingServiceSpecification") && (specrel.isIsBundle()!=null) && specrel.isIsBundle() ) {
createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService); createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService, tobeCreatedInitialCharValues);
} else if ( specrel.getType().equals("CustomerFacingServiceSpecification") && (specrel.findSpecCharacteristicByName("OSAUTOMATED") != null ) ) { } else if ( specrel.getType().equals("CustomerFacingServiceSpecification") && (specrel.findSpecCharacteristicByName("OSAUTOMATED") != null ) ) {
createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService); createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService, tobeCreatedInitialCharValues);
} else if ( specrel.getType().equals("CustomerFacingServiceSpecification") && (specrel.findSpecCharacteristicByName("testSpecRef") != null ) ) { } else if ( specrel.getType().equals("CustomerFacingServiceSpecification") && (specrel.findSpecCharacteristicByName("testSpecRef") != null ) ) {
createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService); createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService, tobeCreatedInitialCharValues);
} }
else { else {
createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.MANUALLY_BY_SERVICE_PROVIDER, null, parentService); createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.MANUALLY_BY_SERVICE_PROVIDER, null, parentService, tobeCreatedInitialCharValues);
} }
//add now the serviceRef //add now the serviceRef
...@@ -234,11 +241,15 @@ public class CreateReservedService implements JavaDelegate { ...@@ -234,11 +241,15 @@ public class CreateReservedService implements JavaDelegate {
* @param sor * @param sor
* @param soi * @param soi
* @param spec * @param spec
* @param startMode
* @param partnerOrg
* @param parentService
* @param tobeCreatedInitialCharValues
* @return * @return
*/ */
private Service createServiceByServiceSpec(ServiceOrder sor, ServiceOrderItem soi, private Service createServiceByServiceSpec(ServiceOrder sor, ServiceOrderItem soi,
ServiceSpecification spec, EServiceStartMode startMode, ServiceSpecification spec, EServiceStartMode startMode,
RelatedParty partnerOrg, Service parentService) { RelatedParty partnerOrg, Service parentService, Map<String, Map<String, String>> tobeCreatedInitialCharValues) {
ServiceCreate serviceToCreate = new ServiceCreate(); ServiceCreate serviceToCreate = new ServiceCreate();
String servicename = spec.getName(); String servicename = spec.getName();
...@@ -285,15 +296,33 @@ public class CreateReservedService implements JavaDelegate { ...@@ -285,15 +296,33 @@ public class CreateReservedService implements JavaDelegate {
} }
} }
//this map contains as key the id of the serviceSpecs to be created
//and as value a Map of initial characteristics and their values
Map<String, String> initCharValues = tobeCreatedInitialCharValues.get( spec.getId() );
//we need to be careful here with the bundle and the related Service Specs, to properly propagate the rules inside //we need to be careful here with the bundle and the related Service Specs, to properly propagate the rules inside
//first copy into the newly created service any characteristic values from the order //first copy into the newly created service any characteristic values from the order
for (ServiceSpecCharacteristic c : spec.getServiceSpecCharacteristic()) { for (ServiceSpecCharacteristic c : spec.getServiceSpecCharacteristic()) {
boolean characteristicFound = false; boolean characteristicFound = false;
//pass any initial value. This has high priority
if ( initCharValues != null ) {
if ( initCharValues.get( c.getName() ) != null ) {
Characteristic orderCharacteristic = new Characteristic()
.value( new Any( initCharValues.get( c.getName() ), initCharValues.get( c.getName() ))) ;
serviceToCreate.addServiceCharacteristicItem( helperCreateCharacteristicItem(c, orderCharacteristic ) );
characteristicFound = true;
continue;
}
}
for (Characteristic orderCharacteristic : soi.getService().getServiceCharacteristic()) { for (Characteristic orderCharacteristic : soi.getService().getServiceCharacteristic()) {
String specCharacteristicToSearch = spec.getName() + "::" +c.getName(); String specCharacteristicToSearch = spec.getName() + "::" +c.getName();
if ( orderCharacteristic.getName().equals( specCharacteristicToSearch )) { //copy only characteristics that are related from the order if ( orderCharacteristic.getName().equals( specCharacteristicToSearch )) { //copy only characteristics that are related from the order
serviceToCreate.addServiceCharacteristicItem( addServiceCharacteristicItem(c, orderCharacteristic) ); serviceToCreate.addServiceCharacteristicItem( helperCreateCharacteristicItem(c, orderCharacteristic) );
characteristicFound = true; characteristicFound = true;
break; break;
} }
...@@ -304,7 +333,7 @@ public class CreateReservedService implements JavaDelegate { ...@@ -304,7 +333,7 @@ public class CreateReservedService implements JavaDelegate {
String specCharacteristicToSearch = c.getName(); String specCharacteristicToSearch = c.getName();
if ( orderCharacteristic.getName().equals( specCharacteristicToSearch )) { //copy only characteristics that are related from the order if ( orderCharacteristic.getName().equals( specCharacteristicToSearch )) { //copy only characteristics that are related from the order
serviceToCreate.addServiceCharacteristicItem( addServiceCharacteristicItem(c, orderCharacteristic) ); serviceToCreate.addServiceCharacteristicItem( helperCreateCharacteristicItem(c, orderCharacteristic) );
characteristicFound = true; characteristicFound = true;
break; break;
} }
...@@ -312,6 +341,8 @@ public class CreateReservedService implements JavaDelegate { ...@@ -312,6 +341,8 @@ public class CreateReservedService implements JavaDelegate {
} }
} }
if ( serviceToCreate.getServiceCharacteristic() == null ) { if ( serviceToCreate.getServiceCharacteristic() == null ) {
...@@ -386,7 +417,7 @@ public class CreateReservedService implements JavaDelegate { ...@@ -386,7 +417,7 @@ public class CreateReservedService implements JavaDelegate {
return null; return null;
} }
private Characteristic addServiceCharacteristicItem(ServiceSpecCharacteristic c, Characteristic orderCharacteristic) { private Characteristic helperCreateCharacteristicItem(ServiceSpecCharacteristic c, Characteristic orderCharacteristic) {
Characteristic serviceCharacteristicItem = new Characteristic(); Characteristic serviceCharacteristicItem = new Characteristic();
serviceCharacteristicItem.setName( c.getName() ); serviceCharacteristicItem.setName( c.getName() );
serviceCharacteristicItem.setValueType( c.getValueType() ); serviceCharacteristicItem.setValueType( c.getValueType() );
......
...@@ -21,17 +21,15 @@ package org.etsi.osl.osom.management; ...@@ -21,17 +21,15 @@ package org.etsi.osl.osom.management;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.flowable.dmn.engine.DmnEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.Characteristic;
import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.model.ServiceSpecification;
import org.etsi.osl.tmf.so641.model.ServiceOrder; import org.etsi.osl.tmf.so641.model.ServiceOrder;
import org.etsi.osl.tmf.so641.model.ServiceOrderItem; import org.etsi.osl.tmf.so641.model.ServiceOrderItem;
import org.flowable.dmn.engine.DmnEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/** /**
* @author ctranoris * @author ctranoris
......
...@@ -22,15 +22,9 @@ package org.etsi.osl.osom.management; ...@@ -22,15 +22,9 @@ package org.etsi.osl.osom.management;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.List; import java.util.List;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.osom.partnerservices.PartnerOrganizationServicesManager; import org.etsi.osl.osom.partnerservices.PartnerOrganizationServicesManager;
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 org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.Any;
import org.etsi.osl.tmf.common.model.UserPartRoleType; import org.etsi.osl.tmf.common.model.UserPartRoleType;
import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.Characteristic;
...@@ -49,6 +43,11 @@ import org.etsi.osl.tmf.so641.model.ServiceOrder; ...@@ -49,6 +43,11 @@ import org.etsi.osl.tmf.so641.model.ServiceOrder;
import org.etsi.osl.tmf.so641.model.ServiceOrderItem; import org.etsi.osl.tmf.so641.model.ServiceOrderItem;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateType; import org.etsi.osl.tmf.so641.model.ServiceOrderStateType;
import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate; import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate;
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;
@Component(value = "externalPartnerCheckDeploymentService") //bean name @Component(value = "externalPartnerCheckDeploymentService") //bean name
public class ExternalPartnerCheckDeploymentService implements JavaDelegate { public class ExternalPartnerCheckDeploymentService implements JavaDelegate {
......
...@@ -21,15 +21,9 @@ package org.etsi.osl.osom.management; ...@@ -21,15 +21,9 @@ package org.etsi.osl.osom.management;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.etsi.osl.osom.partnerservices.PartnerOrganizationServicesManager; import org.etsi.osl.osom.partnerservices.PartnerOrganizationServicesManager;
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 org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.Any;
import org.etsi.osl.tmf.common.model.UserPartRoleType; import org.etsi.osl.tmf.common.model.UserPartRoleType;
import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.Characteristic;
...@@ -46,6 +40,11 @@ import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; ...@@ -46,6 +40,11 @@ import org.etsi.osl.tmf.so641.model.ServiceOrderCreate;
import org.etsi.osl.tmf.so641.model.ServiceOrderItem; import org.etsi.osl.tmf.so641.model.ServiceOrderItem;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateType; import org.etsi.osl.tmf.so641.model.ServiceOrderStateType;
import org.etsi.osl.tmf.so641.model.ServiceRestriction; import org.etsi.osl.tmf.so641.model.ServiceRestriction;
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;
@Component(value = "externalPartnerSubmitOrderService") //bean name @Component(value = "externalPartnerSubmitOrderService") //bean name
public class ExternalPartnerSubmitOrderService implements JavaDelegate { public class ExternalPartnerSubmitOrderService implements JavaDelegate {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment