From 10811110a23cf9fcf464575bba609b8c65d19aec Mon Sep 17 00:00:00 2001 From: RehanRaza Date: Thu, 30 Jan 2020 13:14:08 +0100 Subject: [PATCH] Fix bug in SDNC, read controller info from yaml Change-Id: I2fa69844d9b8ba3d82a84b04b9dd658c9fad5c59 Issue-ID: NONRTRIC-108 Signed-off-by: RehanRaza --- policy-agent/config/application.yaml | 3 ++ .../java/org/oransc/policyagent/BeanFactory.java | 2 +- .../policyagent/clients/A1ClientFactory.java | 15 ++++++-- .../policyagent/clients/SdncOscA1Client.java | 42 +++++++++++++--------- .../policyagent/clients/SdnrOnapA1Client.java | 38 ++++++++++++-------- .../configuration/ApplicationConfig.java | 33 +++++++++++++++++ .../policyagent/utils/MockA1ClientFactory.java | 4 +++ .../northbound/restadapter/NearRicUrlProvider.java | 4 +-- 8 files changed, 106 insertions(+), 35 deletions(-) diff --git a/policy-agent/config/application.yaml b/policy-agent/config/application.yaml index 5b6df771..aec36d04 100644 --- a/policy-agent/config/application.yaml +++ b/policy-agent/config/application.yaml @@ -19,6 +19,9 @@ logging: file: /var/log/policy-agent/application.log app: filepath: /opt/app/policy-agent/config/application_configuration.json + a1ControllerBaseUrl: http://a1-controller-container:8181 + a1ControllerUsername: admin + a1ControllerPassword: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U server: port : 8081 diff --git a/policy-agent/src/main/java/org/oransc/policyagent/BeanFactory.java b/policy-agent/src/main/java/org/oransc/policyagent/BeanFactory.java index 8ed1c218..8297b221 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/BeanFactory.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/BeanFactory.java @@ -60,7 +60,7 @@ class BeanFactory { @Bean A1ClientFactory getA1ClientFactory() { - return new A1ClientFactory(); + return new A1ClientFactory(getApplicationConfig()); } @Bean diff --git a/policy-agent/src/main/java/org/oransc/policyagent/clients/A1ClientFactory.java b/policy-agent/src/main/java/org/oransc/policyagent/clients/A1ClientFactory.java index 7b7e0cef..c150c089 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/clients/A1ClientFactory.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/clients/A1ClientFactory.java @@ -21,16 +21,25 @@ package org.oransc.policyagent.clients; import org.oransc.policyagent.clients.A1Client.A1ProtocolType; +import org.oransc.policyagent.configuration.ApplicationConfig; import org.oransc.policyagent.exceptions.ServiceException; import org.oransc.policyagent.repository.Ric; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import reactor.core.publisher.Mono; public class A1ClientFactory { private static final Logger logger = LoggerFactory.getLogger(A1ClientFactory.class); + private final ApplicationConfig appConfig; + + @Autowired + public A1ClientFactory(ApplicationConfig appConfig) { + this.appConfig = appConfig; + } + public Mono createA1Client(Ric ric) { return getProtocolVersion(ric) // .flatMap(version -> createA1Client(ric, version)); @@ -68,11 +77,13 @@ public class A1ClientFactory { } protected A1Client createSdncOscA1Client(Ric ric) { - return new SdncOscA1Client(ric.getConfig()); + return new SdncOscA1Client(ric.getConfig(), appConfig.getA1ControllerBaseUrl(), + appConfig.getA1ControllerUsername(), appConfig.getA1ControllerPassword()); } protected A1Client createSdnrOnapA1Client(Ric ric) { - return new SdnrOnapA1Client(ric.getConfig()); + return new SdnrOnapA1Client(ric.getConfig(), appConfig.getA1ControllerBaseUrl(), + appConfig.getA1ControllerUsername(), appConfig.getA1ControllerPassword()); } private Mono fetchVersion(Ric ric, A1Client a1Client) { diff --git a/policy-agent/src/main/java/org/oransc/policyagent/clients/SdncOscA1Client.java b/policy-agent/src/main/java/org/oransc/policyagent/clients/SdncOscA1Client.java index a91f9f87..2f8fab48 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/clients/SdncOscA1Client.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/clients/SdncOscA1Client.java @@ -37,17 +37,21 @@ import reactor.core.publisher.Mono; public class SdncOscA1Client implements A1Client { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private static final String A1_CONTROLLER_URL = "http://a1-controller-container:8181/restconf/operations"; - private static final String A1_CONTROLLER_USERNAME = "admin"; - private static final String A1_CONTROLLER_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U"; + private String a1ControllerBaseUrl; + private String a1ControllerUsername; + private String a1ControllerPassword; private final RicConfig ricConfig; private final AsyncRestClient restClient; - public SdncOscA1Client(RicConfig ricConfig) { + public SdncOscA1Client(RicConfig ricConfig, String baseUrl, String username, String password) { this.ricConfig = ricConfig; - this.restClient = new AsyncRestClient(A1_CONTROLLER_URL); - logger.debug("SdncOscA1Client for ric: {}", this.ricConfig.name()); + this.a1ControllerBaseUrl = baseUrl; + this.a1ControllerUsername = username; + this.a1ControllerPassword = password; + this.restClient = new AsyncRestClient(a1ControllerBaseUrl + "/restconf/operations"); + logger.debug("SdncOscA1Client for ric: {}, a1ControllerBaseUrl: {}", this.ricConfig.name(), + a1ControllerBaseUrl); } @Override @@ -58,8 +62,8 @@ public class SdncOscA1Client implements A1Client { logger.debug("POST getPolicyTypeIdentities inputJsonString = {}", inputJsonString); return restClient - .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypeIdentities", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD) // + .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypeIdentities", inputJsonString, a1ControllerUsername, + a1ControllerPassword) // .flatMap(response -> getValueFromResponse(response, "policy-type-id-list")) // .flatMap(this::parseJsonArrayOfString); } @@ -72,8 +76,8 @@ public class SdncOscA1Client implements A1Client { logger.debug("POST getPolicyIdentities inputJsonString = {}", inputJsonString); return restClient - .postWithAuthHeader("/A1-ADAPTER-API:getPolicyIdentities", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD) // + .postWithAuthHeader("/A1-ADAPTER-API:getPolicyIdentities", inputJsonString, a1ControllerUsername, + a1ControllerPassword) // .flatMap(response -> getValueFromResponse(response, "policy-id-list")) // .flatMap(this::parseJsonArrayOfString); } @@ -87,8 +91,8 @@ public class SdncOscA1Client implements A1Client { logger.debug("POST getPolicyType inputJsonString = {}", inputJsonString); return restClient - .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD) // + .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, a1ControllerUsername, + a1ControllerPassword) // .flatMap(response -> getValueFromResponse(response, "policy-type")) // .flatMap(this::extractPolicySchema); } @@ -104,8 +108,8 @@ public class SdncOscA1Client implements A1Client { logger.debug("POST putPolicy inputJsonString = {}", inputJsonString); return restClient - .postWithAuthHeader("/A1-ADAPTER-API:putPolicy", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD) // + .postWithAuthHeader("/A1-ADAPTER-API:putPolicy", inputJsonString, a1ControllerUsername, + a1ControllerPassword) // .flatMap(response -> getValueFromResponse(response, "returned-policy")) // .flatMap(this::validateJson); } @@ -129,8 +133,8 @@ public class SdncOscA1Client implements A1Client { String inputJsonString = createInputJsonString(paramsJson); logger.debug("POST deletePolicy inputJsonString = {}", inputJsonString); - return restClient.postWithAuthHeader("/A1-ADAPTER-API:deletePolicy", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD); + return restClient.postWithAuthHeader("/A1-ADAPTER-API:deletePolicy", inputJsonString, a1ControllerUsername, + a1ControllerPassword); } @Override @@ -150,6 +154,9 @@ public class SdncOscA1Client implements A1Client { try { JSONObject outputJson = new JSONObject(response); JSONObject responseParams = outputJson.getJSONObject("output"); + if (!responseParams.has(key)) { + return Mono.just(""); + } String value = responseParams.get(key).toString(); return Mono.just(value); } catch (JSONException ex) { // invalid json @@ -160,6 +167,9 @@ public class SdncOscA1Client implements A1Client { private Mono> parseJsonArrayOfString(String inputString) { try { List arrayList = new ArrayList<>(); + if (inputString.isEmpty()) { + return Mono.just(arrayList); + } JSONArray jsonArray = new JSONArray(inputString); for (int i = 0; i < jsonArray.length(); i++) { arrayList.add(jsonArray.getString(i)); diff --git a/policy-agent/src/main/java/org/oransc/policyagent/clients/SdnrOnapA1Client.java b/policy-agent/src/main/java/org/oransc/policyagent/clients/SdnrOnapA1Client.java index 4a0a506c..1993be76 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/clients/SdnrOnapA1Client.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/clients/SdnrOnapA1Client.java @@ -37,17 +37,21 @@ import reactor.core.publisher.Mono; public class SdnrOnapA1Client implements A1Client { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private static final String A1_CONTROLLER_URL = "http://sdnc_controller_container:8181/restconf/operations"; - private static final String A1_CONTROLLER_USERNAME = "admin"; - private static final String A1_CONTROLLER_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U"; + private String a1ControllerBaseUrl; + private String a1ControllerUsername; + private String a1ControllerPassword; private final RicConfig ricConfig; private final AsyncRestClient restClient; - public SdnrOnapA1Client(RicConfig ricConfig) { + public SdnrOnapA1Client(RicConfig ricConfig, String baseUrl, String username, String password) { this.ricConfig = ricConfig; - this.restClient = new AsyncRestClient(A1_CONTROLLER_URL); - logger.debug("SdnrOnapA1Client for ric: {}", this.ricConfig.name()); + this.a1ControllerBaseUrl = baseUrl; + this.a1ControllerUsername = username; + this.a1ControllerPassword = password; + this.restClient = new AsyncRestClient(a1ControllerBaseUrl + "/restconf/operations"); + logger.debug("SdnrOnapA1Client for ric: {}, a1ControllerBaseUrl: {}", this.ricConfig.name(), + a1ControllerBaseUrl); } @Override @@ -58,8 +62,8 @@ public class SdnrOnapA1Client implements A1Client { logger.debug("POST getPolicyTypeIdentities inputJsonString = {}", inputJsonString); return restClient - .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypes", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD) // + .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypes", inputJsonString, a1ControllerUsername, + a1ControllerPassword) // .flatMap(response -> getValueFromResponse(response, "policy-type-id-list")) // .flatMap(this::parseJsonArrayOfString); } @@ -81,8 +85,8 @@ public class SdnrOnapA1Client implements A1Client { logger.debug("POST getPolicyIdentities inputJsonString = {}", inputJsonString); return restClient - .postWithAuthHeader("/A1-ADAPTER-API:getPolicyInstances", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD) // + .postWithAuthHeader("/A1-ADAPTER-API:getPolicyInstances", inputJsonString, a1ControllerUsername, + a1ControllerPassword) // .flatMap(response -> getValueFromResponse(response, "policy-instance-id-list")) // .flatMap(this::parseJsonArrayOfString); } @@ -96,8 +100,8 @@ public class SdnrOnapA1Client implements A1Client { logger.debug("POST getPolicyType inputJsonString = {}", inputJsonString); return restClient - .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, A1_CONTROLLER_USERNAME, - A1_CONTROLLER_PASSWORD) // + .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, a1ControllerUsername, + a1ControllerPassword) // .flatMap(response -> getValueFromResponse(response, "policy-type")) // .flatMap(this::extractPolicySchema); } @@ -114,7 +118,7 @@ public class SdnrOnapA1Client implements A1Client { logger.debug("POST putPolicy inputJsonString = {}", inputJsonString); return restClient.postWithAuthHeader("/A1-ADAPTER-API:createPolicyInstance", inputJsonString, - A1_CONTROLLER_USERNAME, A1_CONTROLLER_PASSWORD); + a1ControllerUsername, a1ControllerPassword); } public Mono deletePolicy(String policyTypeId, String policyId) { @@ -126,7 +130,7 @@ public class SdnrOnapA1Client implements A1Client { logger.debug("POST deletePolicy inputJsonString = {}", inputJsonString); return restClient.postWithAuthHeader("/A1-ADAPTER-API:deletePolicyInstance", inputJsonString, - A1_CONTROLLER_USERNAME, A1_CONTROLLER_PASSWORD); + a1ControllerUsername, a1ControllerPassword); } @Override @@ -164,6 +168,9 @@ public class SdnrOnapA1Client implements A1Client { try { JSONObject outputJson = new JSONObject(response); JSONObject responseParams = outputJson.getJSONObject("output"); + if (!responseParams.has(key)) { + return Mono.just(""); + } String value = responseParams.get(key).toString(); return Mono.just(value); } catch (JSONException ex) { // invalid json @@ -174,6 +181,9 @@ public class SdnrOnapA1Client implements A1Client { private Mono> parseJsonArrayOfString(String inputString) { try { List arrayList = new ArrayList<>(); + if (inputString.isEmpty()) { + return Mono.just(arrayList); + } JSONArray jsonArray = new JSONArray(inputString); for (int i = 0; i < jsonArray.length(); i++) { arrayList.add(jsonArray.getString(i)); diff --git a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java index f23b5e24..1e8c6d47 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java @@ -42,6 +42,15 @@ public class ApplicationConfig { @NotEmpty private String filepath; + @NotEmpty + private String a1ControllerBaseUrl; + + @NotEmpty + private String a1ControllerUsername; + + @NotEmpty + private String a1ControllerPassword; + private Collection observers = new Vector<>(); private Map ricConfigs = new HashMap<>(); @Getter @@ -57,6 +66,18 @@ public class ApplicationConfig { return this.filepath; } + public String getA1ControllerBaseUrl() { + return this.a1ControllerBaseUrl; + } + + public String getA1ControllerUsername() { + return this.a1ControllerUsername; + } + + public String getA1ControllerPassword() { + return this.a1ControllerPassword; + } + /* * Do not remove, used by framework! */ @@ -64,6 +85,18 @@ public class ApplicationConfig { this.filepath = filepath; } + public synchronized void setA1ControllerBaseUrl(String a1ControllerBaseUrl) { + this.a1ControllerBaseUrl = a1ControllerBaseUrl; + } + + public synchronized void setA1ControllerUsername(String a1ControllerUsername) { + this.a1ControllerUsername = a1ControllerUsername; + } + + public synchronized void setA1ControllerPassword(String a1ControllerPassword) { + this.a1ControllerPassword = a1ControllerPassword; + } + public synchronized Collection getRicConfigs() { return this.ricConfigs.values(); } diff --git a/policy-agent/src/test/java/org/oransc/policyagent/utils/MockA1ClientFactory.java b/policy-agent/src/test/java/org/oransc/policyagent/utils/MockA1ClientFactory.java index 314c44c1..ec86a82f 100644 --- a/policy-agent/src/test/java/org/oransc/policyagent/utils/MockA1ClientFactory.java +++ b/policy-agent/src/test/java/org/oransc/policyagent/utils/MockA1ClientFactory.java @@ -20,12 +20,15 @@ package org.oransc.policyagent.utils; +import static org.mockito.Mockito.mock; + import java.lang.invoke.MethodHandles; import java.util.HashMap; import java.util.Map; import org.oransc.policyagent.clients.A1Client; import org.oransc.policyagent.clients.A1ClientFactory; +import org.oransc.policyagent.configuration.ApplicationConfig; import org.oransc.policyagent.repository.PolicyTypes; import org.oransc.policyagent.repository.Ric; import org.slf4j.Logger; @@ -37,6 +40,7 @@ public class MockA1ClientFactory extends A1ClientFactory { private final PolicyTypes policyTypes; public MockA1ClientFactory(PolicyTypes policyTypes) { + super(mock(ApplicationConfig.class)); this.policyTypes = policyTypes; } diff --git a/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/onap/sdnc/northbound/restadapter/NearRicUrlProvider.java b/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/onap/sdnc/northbound/restadapter/NearRicUrlProvider.java index d45d2029..10b16e37 100644 --- a/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/onap/sdnc/northbound/restadapter/NearRicUrlProvider.java +++ b/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/onap/sdnc/northbound/restadapter/NearRicUrlProvider.java @@ -88,8 +88,8 @@ public class NearRicUrlProvider { * @return the putPolicy url */ public String putPolicyUrl(final String nearRtRicUrl, final String policyId, final String policyTypeId) { - return UriComponentsBuilder.fromUriString(policiesUrl(nearRtRicUrl)).pathSegment(policyId) - .pathSegment("?policyTypeId=").pathSegment(policyTypeId).build().toString(); + return UriComponentsBuilder.fromUriString(policiesUrl(nearRtRicUrl)) + .pathSegment(policyId + "?policyTypeId=" + policyTypeId).build().toString(); } /** -- 2.16.6