aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/northbound
diff options
context:
space:
mode:
authorDan Timoney <dtimoney@att.com>2019-12-17 15:48:21 +0000
committerGerrit Code Review <gerrit@onap.org>2019-12-17 15:48:21 +0000
commit595457177ac1316c4567c2bf339b4fb0230e85c6 (patch)
treeeb88ec70cc57c9ccc61b63e9d5ddd0d70fe89147 /sdnr/northbound
parentdf195945d03dec122666e8d48e4c7ba94630468a (diff)
parent1194cb075b95b7cabe40b7114c2dd0df22ecb777 (diff)
Merge "YANG Model update for A1 Adapter"
Diffstat (limited to 'sdnr/northbound')
-rw-r--r--sdnr/northbound/a1Adapter/model/src/main/yang/A1-ADAPTER-API.yang102
-rw-r--r--sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterClient.java51
-rw-r--r--sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterProvider.java79
3 files changed, 229 insertions, 3 deletions
diff --git a/sdnr/northbound/a1Adapter/model/src/main/yang/A1-ADAPTER-API.yang b/sdnr/northbound/a1Adapter/model/src/main/yang/A1-ADAPTER-API.yang
index 297787b32..68eb3be6a 100644
--- a/sdnr/northbound/a1Adapter/model/src/main/yang/A1-ADAPTER-API.yang
+++ b/sdnr/northbound/a1Adapter/model/src/main/yang/A1-ADAPTER-API.yang
@@ -14,8 +14,6 @@ module A1-ADAPTER-API {
"A1 adapter for Frankfurt";
}
-
-
grouping a1-adapter-response {
leaf response-code {
type string;
@@ -27,12 +25,59 @@ module A1-ADAPTER-API {
"Response payload for A1 Adapter RPC's";
}
+ grouping a1-policy-instance-property {
+
+ description
+ "Properties as specified in the create_schema field of policy type in PUT payload";
+
+ leaf property-name {
+ type string {
+ length "1..64";
+ }
+ description
+ "Individual property name";
+ }
+ leaf property-value {
+ type string {
+ length "1..64";
+ }
+ description
+ "Value of the property";
+ }
+ }
+
+
+ grouping a1-policy-type-create-schema-property-statement {
+
+ leaf policy-statement {
+ type string {
+ length "1..64";
+ }
+ description
+ "Individual policy statement name";
+ }
+ leaf policy-statement-value {
+ type string {
+ length "1..64";
+ }
+ description
+ "Value of the policy statement";
+ }
+ }
+
///Flattend interface using RPC
//Get a comma separated list of near-rt rics, e.g. domain-name1:port1,domainname2:port2
//Each item in the returned list will be regarded as one near-rt-ric-id.
rpc getNearRT-RICs {
+ // OpenDaylight Fluorine version of restconf cannot handle RPCs with no input
+ input {
+ leaf dummy {
+ type string;
+ }
+ }
+
output {
uses a1-adapter-response;
leaf-list near-rt-ric-id-list {
@@ -91,7 +136,21 @@ module A1-ADAPTER-API {
leaf policy-type {
type string;
}
- }
+ list properties {
+ key "property-name";
+ leaf property-name {
+ type string {
+ length "1..64";
+ }
+ description
+ "Individual property name";
+ }
+ list policy-statements {
+ key "policy-statement";
+ uses a1-policy-type-create-schema-property-statement;
+ }
+ }
+ }
output {
uses a1-adapter-response;
leaf status {
@@ -177,6 +236,10 @@ module A1-ADAPTER-API {
leaf policy-instance {
type string;
}
+ list properties {
+ key "property-name";
+ uses a1-policy-instance-property;
+ }
}
output {
uses a1-adapter-response;
@@ -242,4 +305,37 @@ module A1-ADAPTER-API {
}
}
}
+
+ //Policy feedback Notification to provide policy enforcement update
+ rpc notifyPolicyEnforcementUpdate {
+ input {
+ leaf near-rt-ric-id {
+ type string;
+ }
+ leaf policy-type-id {
+ type uint32;
+ }
+ leaf policy-instance-id {
+ type string;
+ }
+
+ }
+ output {
+ uses a1-adapter-response;
+ leaf policy_enforcement_status {
+ type string;
+ description
+ "Policy enforcement status - IN_EFFECT or NON_IN_EFFECT";
+ }
+ leaf policy_enforcement_reason {
+ type string;
+ description
+ "Indicates the reason why policy is no longer being enforced";
+ }
+ }
+ }
+
+
+
+
}
diff --git a/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterClient.java b/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterClient.java
index 216f9bd38..429c57f92 100644
--- a/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterClient.java
+++ b/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterClient.java
@@ -617,6 +617,57 @@ public Properties execute(String module, String rpc, String version, String mode
}
+ // Client for notifyPolicyEnforcementUpdate
+
+
+ public Properties execute(String module, String rpc, String version, String mode, NotifyPolicyEnforcementUpdateOutputBuilder serviceData)
+ throws SvcLogicException {
+
+ Properties parms = new Properties();
+
+ return execute(module,rpc,version, mode,serviceData,parms);
+ }
+
+ public Properties execute(String module, String rpc, String version, String mode, NotifyPolicyEnforcementUpdateOutputBuilder serviceData, Properties parms)
+ throws SvcLogicException {
+ Properties localProp;
+ localProp = MdsalHelper.toProperties(parms, serviceData);
+
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug("Parameters passed to SLI");
+
+ for (Object key : localProp.keySet()) {
+ String parmName = (String) key;
+ String parmValue = localProp.getProperty(parmName);
+
+ LOG.debug(parmName+" = "+parmValue);
+
+ }
+ }
+
+ Properties respProps = svcLogicService.execute(module, rpc, version, mode, localProp);
+
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug("Parameters returned by SLI");
+
+ for (Object key : respProps.keySet()) {
+ String parmName = (String) key;
+ String parmValue = respProps.getProperty(parmName);
+
+ LOG.debug(parmName+" = "+parmValue);
+
+ }
+ }
+ if ("failure".equalsIgnoreCase(respProps.getProperty("SvcLogic.status"))) {
+ return respProps;
+ }
+
+ MdsalHelper.toBuilder(respProps, serviceData);
+
+ return respProps;
+ }
diff --git a/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterProvider.java b/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterProvider.java
index 5e06118f9..986ebb33d 100644
--- a/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterProvider.java
+++ b/sdnr/northbound/a1Adapter/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/a1Adapter/A1AdapterProvider.java
@@ -963,6 +963,85 @@ public ListenableFuture<RpcResult<GetStatusOutput>> getStatus(
}
+// RPC notifyPolicyEnforcementUpdate
+
+@Override
+public ListenableFuture<RpcResult<NotifyPolicyEnforcementUpdateOutput>> notifyPolicyEnforcementUpdate(
+ NotifyPolicyEnforcementUpdateInput input) {
+ final String svcOperation = "notifyPolicyEnforcementUpdate";
+
+ Properties parms = new Properties();
+ NotifyPolicyEnforcementUpdateOutputBuilder serviceDataBuilder = new NotifyPolicyEnforcementUpdateOutputBuilder();
+
+ LOG.info( "Reached RPC notifyPolicyEnforcementUpdate");
+
+ LOG.info( svcOperation +" called." );
+
+ if(input == null ) {
+ LOG.debug("exiting " +svcOperation+ " because of invalid input");
+ serviceDataBuilder.setResponseCode("Input is null");
+ RpcResult<NotifyPolicyEnforcementUpdateOutput> rpcResult =
+ RpcResultBuilder.<NotifyPolicyEnforcementUpdateOutput> status(true).withResult(serviceDataBuilder.build()).build();
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ // add input to parms
+ LOG.info("Adding INPUT data for "+svcOperation+" input: " + input);
+ NotifyPolicyEnforcementUpdateInputBuilder inputBuilder = new NotifyPolicyEnforcementUpdateInputBuilder(input);
+ MdsalHelper.toProperties(parms, inputBuilder.build());
+
+ LOG.info("Printing SLI parameters to be passed");
+
+ // iterate properties file to get key-value pairs
+ for (String key : parms.stringPropertyNames()) {
+ String value = parms.getProperty(key);
+ LOG.info("The SLI parameter in " + key + " is: " + value);
+ }
+
+ // Call SLI sync method
+ try
+ {
+ if (A1AdapterClient.hasGraph("A1-ADAPTER-API", svcOperation , null, "sync"))
+ {
+ LOG.info( "A1AdapterClient has a Directed Graph for '" + svcOperation + "'");
+ try
+ {
+ A1AdapterClient.execute("A1-ADAPTER-API", svcOperation, null, "sync", serviceDataBuilder, parms);
+ }
+ catch (Exception e)
+ {
+ LOG.error("Caught exception executing service logic for "+ svcOperation, e);
+ serviceDataBuilder.setResponseCode("500");
+ }
+ } else {
+ LOG.error("No service logic active for A1Adapter: '" + svcOperation + "'");
+ serviceDataBuilder.setResponseCode("503");
+ }
+ }
+ catch (Exception e)
+ {
+ LOG.error("Caught exception looking for service logic", e);
+ serviceDataBuilder.setResponseCode("500");
+ }
+
+ String errorCode = serviceDataBuilder.getResponseCode();
+
+ if (!("0".equals(errorCode) || "200".equals(errorCode))) {
+ LOG.error("Returned FAILED for "+svcOperation+" error code: '" + errorCode + "'");
+ } else {
+ LOG.info("Returned SUCCESS for "+svcOperation+" ");
+ serviceDataBuilder.setResponseCode("A1 Adapter Executed for notifyPolicyEnforcementUpdate. " );
+ }
+
+ RpcResult<NotifyPolicyEnforcementUpdateOutput> rpcResult =
+ RpcResultBuilder.<NotifyPolicyEnforcementUpdateOutput> status(true).withResult(serviceDataBuilder.build()).build();
+
+ LOG.info("Successful exit from notifyPolicyEnforcementUpdate ");
+
+ return Futures.immediateFuture(rpcResult);
+}
+
+
}