aboutsummaryrefslogtreecommitdiffstats
path: root/rest-services/cbs-client
diff options
context:
space:
mode:
authorTomasz Wrobel <tomasz.wrobel@nokia.com>2022-07-15 11:35:37 +0200
committerTomasz Wrobel <tomasz.wrobel@nokia.com>2022-07-25 09:53:33 +0200
commit32563249ea8a984244dc4059438db275169cad39 (patch)
tree0295046c2a82d8d045e00e2935712106474c7003 /rest-services/cbs-client
parentb85a81257af612d836f5a897ee07a1a7d3e71999 (diff)
Fix environment variable substitution for complex cases
Issue-ID: DCAEGEN2-3223 Signed-off-by: Tomasz Wrobel <tomasz.wrobel@nokia.com> Change-Id: I9cfb612f0cabf6a2c96ccc4c80493885c02549fe
Diffstat (limited to 'rest-services/cbs-client')
-rw-r--r--rest-services/cbs-client/pom.xml24
-rw-r--r--rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsing.java39
-rw-r--r--rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsingTest.java4
-rw-r--r--rest-services/cbs-client/src/test/resources/sample_expected_parsed_service_config.json54
-rw-r--r--rest-services/cbs-client/src/test/resources/sample_service_config.json1
5 files changed, 103 insertions, 19 deletions
diff --git a/rest-services/cbs-client/pom.xml b/rest-services/cbs-client/pom.xml
index f78d97bf..e99fc44a 100644
--- a/rest-services/cbs-client/pom.xml
+++ b/rest-services/cbs-client/pom.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- ================================================================================
- Copyright (c) 2022 Nokia. 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. 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.
- ============LICENSE_END=========================================================
+============LICENSE_START=======================================================
+Copyright (c) 2022 Nokia. 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. 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.
+============LICENSE_END=========================================================
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onap.dcaegen2.services.sdk</groupId>
<artifactId>dcaegen2-services-sdk-rest-services</artifactId>
- <version>1.8.8-SNAPSHOT</version>
+ <version>1.8.9-SNAPSHOT</version>
</parent>
<groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
diff --git a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsing.java b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsing.java
index 17144f1a..21dfb5ed 100644
--- a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsing.java
+++ b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsing.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* DCAEGEN2-SERVICES-SDK
* ================================================================================
- * Copyright (C) 2021 Nokia. All rights reserved.
+ * Copyright (C) 2021-2022 Nokia. 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,6 +23,9 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
+import java.util.HashMap;
+import java.util.Map.Entry;
+import org.jetbrains.annotations.NotNull;
import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions.EnvironmentParsingException;
import java.util.Map;
import java.util.regex.Matcher;
@@ -37,7 +40,8 @@ public class CbsClientEnvironmentParsing {
private static final Pattern shellEnvPattern = Pattern.compile("\\$\\{(.+?)}");
- private CbsClientEnvironmentParsing() {}
+ private CbsClientEnvironmentParsing() {
+ }
/**
* <p>
@@ -56,22 +60,47 @@ public class CbsClientEnvironmentParsing {
processJsonObject(jsonObjectCopy);
return jsonObjectCopy;
}
+
private static void processJsonObject(JsonObject jsonObject) {
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
processJsonObjectEntry(jsonObject, entry);
}
}
+
private static void processJsonObjectEntry(JsonObject jsonObject, Map.Entry<String, JsonElement> entry) {
if (entry.getValue().isJsonArray()) {
processJsonArray(entry.getValue().getAsJsonArray());
} else if (entry.getValue().isJsonObject()) {
processJsonObject(entry.getValue().getAsJsonObject());
} else {
- Matcher matcher = getMatcher(entry.getValue().getAsString());
- if (matcher.find()) {
- jsonObject.addProperty(entry.getKey(), getValueFromSystemEnv(matcher.group(1)));
+ Map<String, String> systemEnvMatches = getSystemEnvMatches(entry);
+ if (systemEnvMatches.isEmpty()) {
+ return;
}
+ String result = getReplacedValue(entry.getValue().getAsString(), systemEnvMatches);
+
+ jsonObject.addProperty(entry.getKey(), result);
+ }
+ }
+
+ @NotNull
+ private static Map<String, String> getSystemEnvMatches(Entry<String, JsonElement> entry) {
+ Matcher matcher = getMatcher(entry.getValue().getAsString());
+ Map<String,String> systemEnvMatches = new HashMap<>();
+ while (matcher.find()) {
+ String stringTobeReplaced = matcher.group(0);
+ String systemEnv = matcher.group(1);
+ systemEnvMatches.put(stringTobeReplaced, systemEnv);
+ }
+ return systemEnvMatches;
+ }
+
+ private static String getReplacedValue(String inputValue, Map<String, String> systemEnvMatches) {
+ String result = inputValue;
+ for (Entry<String, String> valueToReplace : systemEnvMatches.entrySet()) {
+ result = result.replace(valueToReplace.getKey(), getValueFromSystemEnv(valueToReplace.getValue()));
}
+ return result;
}
private static void processJsonArray(JsonArray jsonArray) {
diff --git a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsingTest.java b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsingTest.java
index 41d757fd..91e3a044 100644
--- a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsingTest.java
+++ b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientEnvironmentParsingTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START====================================
* DCAEGEN2-SERVICES-SDK
* =========================================================
- * Copyright (C) 2021 Nokia. All rights reserved.
+ * Copyright (C) 2021-2022 Nokia. 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.
@@ -33,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat;
public class CbsClientEnvironmentParsingTest {
private static final String SAMPLE_CONFIG = "src/test/resources/sample_service_config.json";
- private static final String SAMPLE_EXPECTED_CONFIG = "src/test/resources/sample_expected_service_config.json";
+ private static final String SAMPLE_EXPECTED_CONFIG = "src/test/resources/sample_expected_parsed_service_config.json";
@Rule
public final EnvironmentVariables envs = new EnvironmentVariables();
diff --git a/rest-services/cbs-client/src/test/resources/sample_expected_parsed_service_config.json b/rest-services/cbs-client/src/test/resources/sample_expected_parsed_service_config.json
new file mode 100644
index 00000000..e14d9609
--- /dev/null
+++ b/rest-services/cbs-client/src/test/resources/sample_expected_parsed_service_config.json
@@ -0,0 +1,54 @@
+{
+ "keystore.path": "/var/run/security/keystore.p12",
+ "testMultiReplacement": "admin/admin/admin_secret/admin_secret",
+ "streams_publishes": {
+ "perf3gpp": {
+ "testArray": [{
+ "testPrimitiveArray": ["admin", "admin_secret", {
+ "nestedArray": ["admin"]
+ }
+ ],
+ "testPrimitive": "admin",
+ "aaf_credentials": {
+ "username": "admin",
+ "password": "admin_secret"
+ }
+ }
+ ],
+ "type": "kafka",
+ "kafka_info": {
+ "bootstrap_servers": "dmaap-mr-kafka:6060",
+ "topic_name": "HVVES_PERF3GPP"
+ }
+ },
+ "pnf_ready": {
+ "aaf_credentials": {
+ "username": "admin",
+ "password": "admin_secret"
+ },
+ "type": "message_router",
+ "dmaap_info": {
+ "topic_url": "http://message-router:3904/events/VES_PNF_READY"
+ }
+ },
+ "call_trace": {
+ "aaf_credentials": {
+ "username": "admin",
+ "password": "admin_secret"
+ },
+ "type": "kafka",
+ "kafka_info": {
+ "bootstrap_servers": "dmaap-mr-kafka:6060",
+ "topic_name": "HVVES_TRACE"
+ }
+ }
+ },
+ "streams_subscribes": {
+ "measurements": {
+ "type": "message_router",
+ "dmaap_info": {
+ "topic_url": "http://message-router:3904/events/VES_MEASUREMENT"
+ }
+ }
+ }
+}
diff --git a/rest-services/cbs-client/src/test/resources/sample_service_config.json b/rest-services/cbs-client/src/test/resources/sample_service_config.json
index e5798597..b0c2dd68 100644
--- a/rest-services/cbs-client/src/test/resources/sample_service_config.json
+++ b/rest-services/cbs-client/src/test/resources/sample_service_config.json
@@ -1,5 +1,6 @@
{
"keystore.path": "/var/run/security/keystore.p12",
+ "testMultiReplacement": "${AAF_USER}/${AAF_USER}/${AAF_PASSWORD}/${AAF_PASSWORD}",
"streams_publishes": {
"perf3gpp": {
"testArray": [{