diff options
author | Tomasz Wrobel <tomasz.wrobel@nokia.com> | 2022-07-15 11:35:37 +0200 |
---|---|---|
committer | Tomasz Wrobel <tomasz.wrobel@nokia.com> | 2022-07-25 09:53:33 +0200 |
commit | 32563249ea8a984244dc4059438db275169cad39 (patch) | |
tree | 0295046c2a82d8d045e00e2935712106474c7003 /rest-services/cbs-client/src | |
parent | b85a81257af612d836f5a897ee07a1a7d3e71999 (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/src')
4 files changed, 91 insertions, 7 deletions
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": [{ |