Loading Dockerfile +3 −3 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk MAINTAINER openslice.io RUN mkdir /opt/shareclasses RUN mkdir -p /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.3.0.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.3.0-exec.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.4.0.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.4.0-exec.jar /opt/openslice/lib/ COPY . /opt/openslice/lib/ CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.3.0-exec.jar"] No newline at end of file CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.4.0-exec.jar"] No newline at end of file pom.xml +1 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ <parent> <groupId>org.etsi.osl</groupId> <artifactId>org.etsi.osl.main</artifactId> <version>2025Q4</version> <version>2026Q2</version> <relativePath>../org.etsi.osl.main</relativePath> </parent> Loading src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java +11 −2 Original line number Diff line number Diff line Loading @@ -150,14 +150,23 @@ public abstract class LcmBaseExecutor { if (c.getName().equals(charName)) { if (c.getValue() != null) { if (c.getValue().getValue() != null) { // Unseal secrets as needed if (c.getValueType().equals(EValueType.SECRET.getValue())) { final var secretsClient = this.vars.getServiceOrderManager().getSecretsClient(); if (secretsClient.isPresent()) { c.getValue().setValue( secretsClient.get().unseal(c.getValue().getValue(), c.getName())); } } return Optional.of(c); } } } } } Characteristic z = null; return Optional.ofNullable(z); return Optional.empty(); } public void setCharValFromStringType(String charName, String newValue) { Loading src/main/java/org/etsi/osl/osom/lcm/SecretsClient.java 0 → 100644 +63 −0 Original line number Diff line number Diff line package org.etsi.osl.osom.lcm; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.ProducerTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.stereotype.Service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @Service @ConditionalOnExpression("${SECRETS_CONTROLLER_ENABLE:false}") public class SecretsClient { private static final transient Log logger = LogFactory.getLog( SecretsClient.class.getName() ); private final ProducerTemplate producerTemplate; private final String unsealSecretQueue; private final ObjectMapper mapper = new ObjectMapper(); @Autowired public SecretsClient( ProducerTemplate producerTemplate, @Value("${SECRETS_CHARACTERISTIC_UNSEAL}") String unsealSecretQueue ) { this.producerTemplate = producerTemplate; this.unsealSecretQueue = unsealSecretQueue; } public String unseal(String uri, String characteristic) { try { final var cmd = new UnsealCharacteristicCommand(uri, characteristic); final var payload = this.mapper.writeValueAsString(cmd); final var responseRaw = this.producerTemplate.requestBody(this.unsealSecretQueue, payload, String.class); if (responseRaw == null || responseRaw.isEmpty()) { return uri; } final var response = this.mapper.readValue(responseRaw, String.class); if (response == null || response.isEmpty()) { return uri; } return response; } catch (JsonProcessingException e) { throw new RuntimeException(e); } catch (Exception e) { // controller is enabled by the request failed (no route, timeout, broker down) logger.warn("Secrets controller did not respond for " + uri, e); return uri; } } private record UnsealCharacteristicCommand(String secretURI, String characteristic) { } } src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java +9 −11 Original line number Diff line number Diff line Loading @@ -20,11 +20,7 @@ package org.etsi.osl.osom.management; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; Loading @@ -35,6 +31,7 @@ import org.etsi.osl.model.nfv.DeploymentDescriptor; import org.etsi.osl.model.nfv.NetworkServiceDescriptor; import org.etsi.osl.model.nfv.ScaleDescriptor; import org.etsi.osl.osom.lcm.ChatClient; import org.etsi.osl.osom.lcm.SecretsClient; import org.etsi.osl.osom.serviceactions.NSActionRequestPayload; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO; Loading Loading @@ -208,6 +205,8 @@ public class ServiceOrderManager { @Autowired private ChatClient chatClient; @Autowired private Optional<SecretsClient> secretsClient; @Transactional public void processOrder(ServiceOrder serviceOrder) { Loading Loading @@ -1213,8 +1212,7 @@ public class ServiceOrderManager { return chatClient; } public Optional<SecretsClient> getSecretsClient() { return this.secretsClient; } } Loading
Dockerfile +3 −3 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk MAINTAINER openslice.io RUN mkdir /opt/shareclasses RUN mkdir -p /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.3.0.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.3.0-exec.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.4.0.jar /opt/openslice/lib/ COPY target/org.etsi.osl.osom-1.4.0-exec.jar /opt/openslice/lib/ COPY . /opt/openslice/lib/ CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.3.0-exec.jar"] No newline at end of file CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.4.0-exec.jar"] No newline at end of file
pom.xml +1 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ <parent> <groupId>org.etsi.osl</groupId> <artifactId>org.etsi.osl.main</artifactId> <version>2025Q4</version> <version>2026Q2</version> <relativePath>../org.etsi.osl.main</relativePath> </parent> Loading
src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java +11 −2 Original line number Diff line number Diff line Loading @@ -150,14 +150,23 @@ public abstract class LcmBaseExecutor { if (c.getName().equals(charName)) { if (c.getValue() != null) { if (c.getValue().getValue() != null) { // Unseal secrets as needed if (c.getValueType().equals(EValueType.SECRET.getValue())) { final var secretsClient = this.vars.getServiceOrderManager().getSecretsClient(); if (secretsClient.isPresent()) { c.getValue().setValue( secretsClient.get().unseal(c.getValue().getValue(), c.getName())); } } return Optional.of(c); } } } } } Characteristic z = null; return Optional.ofNullable(z); return Optional.empty(); } public void setCharValFromStringType(String charName, String newValue) { Loading
src/main/java/org/etsi/osl/osom/lcm/SecretsClient.java 0 → 100644 +63 −0 Original line number Diff line number Diff line package org.etsi.osl.osom.lcm; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.ProducerTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.stereotype.Service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @Service @ConditionalOnExpression("${SECRETS_CONTROLLER_ENABLE:false}") public class SecretsClient { private static final transient Log logger = LogFactory.getLog( SecretsClient.class.getName() ); private final ProducerTemplate producerTemplate; private final String unsealSecretQueue; private final ObjectMapper mapper = new ObjectMapper(); @Autowired public SecretsClient( ProducerTemplate producerTemplate, @Value("${SECRETS_CHARACTERISTIC_UNSEAL}") String unsealSecretQueue ) { this.producerTemplate = producerTemplate; this.unsealSecretQueue = unsealSecretQueue; } public String unseal(String uri, String characteristic) { try { final var cmd = new UnsealCharacteristicCommand(uri, characteristic); final var payload = this.mapper.writeValueAsString(cmd); final var responseRaw = this.producerTemplate.requestBody(this.unsealSecretQueue, payload, String.class); if (responseRaw == null || responseRaw.isEmpty()) { return uri; } final var response = this.mapper.readValue(responseRaw, String.class); if (response == null || response.isEmpty()) { return uri; } return response; } catch (JsonProcessingException e) { throw new RuntimeException(e); } catch (Exception e) { // controller is enabled by the request failed (no route, timeout, broker down) logger.warn("Secrets controller did not respond for " + uri, e); return uri; } } private record UnsealCharacteristicCommand(String secretURI, String characteristic) { } }
src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java +9 −11 Original line number Diff line number Diff line Loading @@ -20,11 +20,7 @@ package org.etsi.osl.osom.management; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; Loading @@ -35,6 +31,7 @@ import org.etsi.osl.model.nfv.DeploymentDescriptor; import org.etsi.osl.model.nfv.NetworkServiceDescriptor; import org.etsi.osl.model.nfv.ScaleDescriptor; import org.etsi.osl.osom.lcm.ChatClient; import org.etsi.osl.osom.lcm.SecretsClient; import org.etsi.osl.osom.serviceactions.NSActionRequestPayload; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO; Loading Loading @@ -208,6 +205,8 @@ public class ServiceOrderManager { @Autowired private ChatClient chatClient; @Autowired private Optional<SecretsClient> secretsClient; @Transactional public void processOrder(ServiceOrder serviceOrder) { Loading Loading @@ -1213,8 +1212,7 @@ public class ServiceOrderManager { return chatClient; } public Optional<SecretsClient> getSecretsClient() { return this.secretsClient; } }