diff options
Diffstat (limited to 'a1-policy-management/src/main')
12 files changed, 242 insertions, 54 deletions
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java index 4d1fa331..4d825f85 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java @@ -3,7 +3,7 @@ * ONAP : ccsdk oran * ====================================================================== * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved. - * Copyright (C) 2023-2024 OpenInfra Foundation Europe. All rights reserved. + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,7 +37,7 @@ import org.springframework.context.annotation.Configuration; @Configuration public class BeanFactory { - @Value("${server.http-port}") + @Value("${server.http-port:0}") private int httpPort = 0; @Bean diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java index 204af9c0..6d642a31 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java @@ -3,6 +3,8 @@ * ONAP : ccsdk oran * ====================================================================== * Copyright (C) 2019-2022 Nordix Foundation. All rights reserved. + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe. + * All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -59,7 +61,12 @@ public class AsyncRestClientFactory { public AsyncRestClientFactory(WebClientConfig clientConfig, SecurityContext securityContext) { if (clientConfig != null) { - this.sslContextFactory = new CachingSslContextFactory(clientConfig); + if (clientConfig.isSslEnabled()) { + this.sslContextFactory = new CachingSslContextFactory(clientConfig); + } else { + this.sslContextFactory = null; + logger.debug("SSL is turned OFF for the web client"); + } this.httpProxyConfig = clientConfig.getHttpProxyConfig(); } else { logger.warn("No configuration for web client defined, HTTPS will not work"); diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java index 6d8d52de..360369c0 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java @@ -3,7 +3,8 @@ * ONAP : ccsdk oran * ====================================================================== * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved. - * Modifications Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved. + * Modifications Copyright (C) 2023-2025 OpenInfra Foundation Europe. + * All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,36 +40,40 @@ import reactor.netty.transport.ProxyProvider; public class ApplicationConfig { @Getter - @Value("${app.filepath}") + @Value("${app.filepath:null}") private String localConfigurationFilePath; @Getter - @Value("${app.config-file-schema-path:}") + @Value("${app.config-file-schema-path:null}") private String configurationFileSchemaPath; @Getter @Value("${app.vardata-directory:null}") private String vardataDirectory; - @Value("${server.ssl.key-store-type}") + @Getter + @Value("${server.ssl.enabled:true}") + private boolean sslEnabled; + + @Value("${server.ssl.key-store-type:null}") private String sslKeyStoreType = ""; - @Value("${server.ssl.key-store-password}") + @Value("${server.ssl.key-store-password:null}") private String sslKeyStorePassword = ""; - @Value("${server.ssl.key-store}") + @Value("${server.ssl.key-store:null}") private String sslKeyStore = ""; - @Value("${server.ssl.key-password}") + @Value("${server.ssl.key-password:null}") private String sslKeyPassword = ""; - @Value("${app.webclient.trust-store-used}") + @Value("${app.webclient.trust-store-used:false}") private boolean sslTrustStoreUsed = false; - @Value("${app.webclient.trust-store-password}") + @Value("${app.webclient.trust-store-password:null}") private String sslTrustStorePassword = ""; - @Value("${app.webclient.trust-store}") + @Value("${app.webclient.trust-store:null}") private String sslTrustStore = ""; @Value("${app.webclient.http.proxy-host:}") @@ -133,17 +138,26 @@ public class ApplicationConfig { .httpProxyPort(this.httpProxyPort) // .httpProxyType(ProxyProvider.Proxy.valueOf(this.httpProxyType)) // .build(); + if (sslEnabled) { + this.webClientConfig = WebClientConfig.builder() // + .sslEnabled(true) + .keyStoreType(this.sslKeyStoreType) // + .keyStorePassword(this.sslKeyStorePassword) // + .keyStore(this.sslKeyStore) // + .keyPassword(this.sslKeyPassword) // + .isTrustStoreUsed(this.sslTrustStoreUsed) // + .trustStore(this.sslTrustStore) // + .trustStorePassword(this.sslTrustStorePassword) // + .httpProxyConfig(httpProxyConfig) // + .build(); + } else { + this.webClientConfig = WebClientConfig.builder() // + .sslEnabled(false) + .isTrustStoreUsed(false) + .httpProxyConfig(httpProxyConfig) // + .build(); + } - this.webClientConfig = WebClientConfig.builder() // - .keyStoreType(this.sslKeyStoreType) // - .keyStorePassword(this.sslKeyStorePassword) // - .keyStore(this.sslKeyStore) // - .keyPassword(this.sslKeyPassword) // - .isTrustStoreUsed(this.sslTrustStoreUsed) // - .trustStore(this.sslTrustStore) // - .trustStorePassword(this.sslTrustStorePassword) // - .httpProxyConfig(httpProxyConfig) // - .build(); } return this.webClientConfig; } diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java index f5f0f7e7..24c1d258 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * ONAP : ccsdk oran * ====================================================================== - * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved. + * Copyright (C) 2019-2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -148,13 +148,20 @@ public class ApplicationConfigParser { "Configuration error, controller configuration not found: " + controllerName); } - RicConfig ricConfig = RicConfig.builder() // - .ricId(get(ricJsonObj, "name", "id", "ricId").getAsString()) // - .baseUrl(get(ricJsonObj, "baseUrl").getAsString()) // - .managedElementIds(parseManagedElementIds(get(ricJsonObj, "managedElementIds").getAsJsonArray())) // + RicConfig.RicConfigBuilder ricConfigBuilder = RicConfig.builder() + .ricId(get(ricJsonObj, "name", "id", "ricId").getAsString()) + .baseUrl(get(ricJsonObj, "baseUrl").getAsString()) .controllerConfig(controllerConfig) - .customAdapterClass(getString(ricJsonObj, "customAdapterClass", "")) // - .build(); + .customAdapterClass(getString(ricJsonObj, "customAdapterClass", "")); + + if (ricJsonObj.has("managedElementIds")) { + ricConfigBuilder + .managedElementIds(parseManagedElementIds(get(ricJsonObj, "managedElementIds").getAsJsonArray())); + } else { + ricConfigBuilder.managedElementIds(null); + } + + RicConfig ricConfig = ricConfigBuilder.build(); if (!ricConfig.getBaseUrl().isEmpty()) { result.add(ricConfig); } else { diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java index ba8e7a1d..194cf8c5 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * ONAP : ccsdk oran * ====================================================================== - * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ import io.opentelemetry.sdk.extension.trace.jaeger.sampler.JaegerRemoteSampler; import io.opentelemetry.sdk.trace.samplers.Sampler; import java.time.Duration; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java index ab2958c6..1f22d995 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java @@ -3,6 +3,8 @@ * ONAP : ccsdk oran * ====================================================================== * Copyright (C) 2020-2023 Nordix Foundation. All rights reserved. + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe. + * All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,13 +25,15 @@ package org.onap.ccsdk.oran.a1policymanagementservice.configuration; import lombok.Builder; import lombok.Getter; import lombok.ToString; - import reactor.netty.transport.ProxyProvider; @Builder @Getter @ToString public class WebClientConfig { + + private boolean sslEnabled; + private String keyStoreType; private String keyStorePassword; diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java index 53abcd71..ee3ce6d2 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java @@ -41,9 +41,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import java.util.*; @RestController("ricRepositoryControllerV2") @RequiredArgsConstructor @@ -124,9 +122,16 @@ public class RicRepositoryController implements NearRtRicRepositoryApi { } private RicInfo toRicInfo(Ric ric) { - return new RicInfo().ricId(ric.id()) - .managedElementIds((List<String>) ric.getManagedElementIds()) + RicInfo ricInfo = new RicInfo().ricId(ric.id()) .policytypeIds((List<String>) ric.getSupportedPolicyTypeNames()) .state(toRicState(ric.getState())); + + if (ric.getConfig().getManagedElementIds() == null) { + ricInfo.setManagedElementIds(new ArrayList<>()); + } else { + ricInfo.managedElementIds((List<String>) ric.getConfig().getManagedElementIds()); + } + + return ricInfo; } } diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java index ce2769e6..ff33c7c9 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java @@ -40,8 +40,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; -import java.util.List; -import java.util.Set; +import java.util.*; @RestController("ricRepositoryControllerV3") @RequiredArgsConstructor @@ -93,10 +92,17 @@ public class RicRepositoryControllerV3 implements NearRtRicRepositoryApi { } private RicInfo toRicInfo(Ric ric) { - return new RicInfo().ricId(ric.id()) - .managedElementIds((List<String>) ric.getManagedElementIds()) + RicInfo ricInfo = new RicInfo().ricId(ric.id()) .policyTypeIds((List<String>) ric.getSupportedPolicyTypeNames()) .state(toRicState(ric.getState())); + + if (ric.getConfig().getManagedElementIds() == null) { + ricInfo.setManagedElementIds(new ArrayList<>()); + } else { + ricInfo.managedElementIds((List<String>) ric.getConfig().getManagedElementIds()); + } + + return ricInfo; } private RicInfo.StateEnum toRicState(Ric.RicState state) { diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java index d29e37a6..81d864fa 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * ONAP : ccsdk oran * ====================================================================== - * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -67,7 +67,7 @@ public class ServiceControllerV3 implements ServiceRegistryAndSupervisionApi { } @Override - public Mono<ResponseEntity<Object>> keepAliveService(String serviceId, String accept, Mono<String> body, ServerWebExchange exchange) throws Exception { + public Mono<ResponseEntity<Object>> keepAliveService(String serviceId, String accept, ServerWebExchange exchange) throws Exception { return serviceController.keepAliveService(serviceId, exchange); } diff --git a/a1-policy-management/src/main/resources/logback-json.xml b/a1-policy-management/src/main/resources/logback-json.xml new file mode 100644 index 00000000..3c22aeac --- /dev/null +++ b/a1-policy-management/src/main/resources/logback-json.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2025 OpenInfra Foundation Europe + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= + --> +<configuration> + <appender name="json" class="ch.qos.logback.core.ConsoleAppender"> + <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> + <providers> + <version> + <fieldName>version</fieldName> + <version>1.2.0</version> + </version> + <timestamp> + <fieldName>timestamp</fieldName> + <pattern>yyyy-MM-dd'T'HH:mm:ss.SSSZ</pattern> + </timestamp> + <pattern> + <omitEmptyFields>true</omitEmptyFields> + <pattern> + { + "service_id": "${SERVICE_ID:-a1pms}", + "message": "%msg", + "facility": "%X{facility}", + "subject": "%X{subject}", + "extra_data": { + "logger": "%logger", + "thread_info": { + "thread_name": "%thread" + }, + "dst": { + "trace_id": "%mdc{traceId}" + }, + "exception": { + "stack_trace": "%xEx" + } + }, + "metadata": { + "application_id": "${APP_ID:-a1pms}" + } + } + </pattern> + </pattern> + </providers> + + </encoder> + </appender> + + <root level="${ROOT_LOG_LEVEL:-INFO}"> + <appender-ref ref="json"/> + </root> + + <logger name="/" level="${ROOT_LOG_LEVEL:-INFO}"/> +</configuration> + diff --git a/a1-policy-management/src/main/resources/logback-plain.xml b/a1-policy-management/src/main/resources/logback-plain.xml index 0340cce8..014a983a 100644 --- a/a1-policy-management/src/main/resources/logback-plain.xml +++ b/a1-policy-management/src/main/resources/logback-plain.xml @@ -19,22 +19,17 @@ ~ --> <configuration> - - <!-- Define a plain text console appender --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} - <!-- - -->%replace(%X{facility}){'^(.+)$','facility=$1 | '} <!-- - -->%replace(%X{subject}){'^(.+)$','subject=$1 | ' } <!-- - -->%msg%n</pattern> + <pattern> + %d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] %-5level %logger - %msg [facility=%X{facility}, subject=%X{subject}, traceId=%mdc{traceId}] %n%xEx + </pattern> </encoder> </appender> - - - <!-- Configure root logger to use the plain text console appender for all log levels --> - <root level="INFO"> + <root level="${ROOT_LOG_LEVEL:-INFO}"> <appender-ref ref="console"/> </root> + <logger name="/" level="${ROOT_LOG_LEVEL:-INFO}"/> </configuration>
\ No newline at end of file diff --git a/a1-policy-management/src/main/resources/logback-stream.xml b/a1-policy-management/src/main/resources/logback-stream.xml new file mode 100644 index 00000000..9cfb863b --- /dev/null +++ b/a1-policy-management/src/main/resources/logback-stream.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2025 OpenInfra Foundation Europe + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= + --> +<configuration> + <appender name="json" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> + <destination>localhost:5044</destination> + <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> + <providers> + <version> + <fieldName>version</fieldName> + <version>1.2.0</version> + </version> + <timestamp> + <fieldName>timestamp</fieldName> + <pattern>yyyy-MM-dd'T'HH:mm:ss.SSSZ</pattern> + </timestamp> + <pattern> + <omitEmptyFields>true</omitEmptyFields> + <pattern> + { + "service_id": "${SERVICE_ID:-a1pms}", + "message": "%msg", + "facility": "%X{facility}", + "subject": "%X{subject}", + "extra_data": { + "logger": "%logger", + "thread_info": { + "thread_name": "%thread" + }, + "dst": { + "trace_id": "%mdc{traceId}" + }, + "exception": { + "stack_trace": "%xEx" + } + }, + "metadata": { + "application_id": "${APP_ID:-a1pms}" + } + } + </pattern> + </pattern> + </providers> + + </encoder> + </appender> + + <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern> + %d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] %-5level %logger - %msg [facility=%X{facility}, subject=%X{subject}, traceId=%mdc{traceId}] %n%xEx + </pattern> + </encoder> + </appender> + + <root level="${ROOT_LOG_LEVEL:-INFO}"> + <appender-ref ref="json"/> + <appender-ref ref="console"/> + </root> + + <logger name="/" level="${ROOT_LOG_LEVEL:-INFO}"/> +</configuration> + |