aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/release-notes.rst2
-rw-r--r--pom.xml2
-rw-r--r--src/main/java/org/onap/clamp/clds/client/req/tca/TcaRequestFormatter.java3
-rw-r--r--src/main/java/org/onap/clamp/clds/model/properties/PolicyItem.java24
-rw-r--r--src/main/java/org/onap/clamp/clds/service/CldsService.java8
-rw-r--r--src/main/resources/META-INF/resources/designer/partials/portfolios/PolicyWindow_properties.html44
-rw-r--r--src/main/resources/META-INF/resources/designer/partials/portfolios/deploy_parameters.html8
-rw-r--r--src/main/resources/META-INF/resources/designer/scripts/DeploymentCtrl.js25
-rw-r--r--src/test/resources/example/model-properties/policy/modelBpmnProperties.json30
-rw-r--r--src/test/resources/example/operational-policy/yaml-policy-chain-1.yaml2
-rw-r--r--src/test/resources/example/operational-policy/yaml-policy-chain-2.yaml2
-rw-r--r--src/test/resources/example/tca-policy-req/blueprint-expected.yaml2
-rw-r--r--src/test/resources/example/tca-policy-req/tca-policy-expected.json4
-rw-r--r--version.properties4
14 files changed, 114 insertions, 46 deletions
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index 2e6fd4793..fa5d8b6a0 100644
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -5,7 +5,7 @@
Release Notes
=============
-Version: 2.0.0
+Version: 2.0.1
--------------
:Release Date: 2018-06-25
diff --git a/pom.xml b/pom.xml
index dcfbcb7e2..4beb6d67a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.onap.clamp</groupId>
<artifactId>clds</artifactId>
- <version>2.0.0-SNAPSHOT</version>
+ <version>2.0.1-SNAPSHOT</version>
<name>clamp</name>
<parent>
diff --git a/src/main/java/org/onap/clamp/clds/client/req/tca/TcaRequestFormatter.java b/src/main/java/org/onap/clamp/clds/client/req/tca/TcaRequestFormatter.java
index 35c438d9e..1478342c5 100644
--- a/src/main/java/org/onap/clamp/clds/client/req/tca/TcaRequestFormatter.java
+++ b/src/main/java/org/onap/clamp/clds/client/req/tca/TcaRequestFormatter.java
@@ -157,10 +157,9 @@ public class TcaRequestFormatter {
private static void addThresholds(ClampProperties refProp, String service, ObjectNode appendToNode, TcaItem tcaItem,
ModelProperties modelProperties) {
ArrayNode tcaNodes = appendToNode.withArray("thresholds");
- ObjectNode tcaNode;
try {
- tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.thresholds.template", service);
for (TcaThreshold tcaThreshold : tcaItem.getTcaThresholds()) {
+ ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.thresholds.template", service);
tcaNode.put("closedLoopControlName", modelProperties.getControlNameAndPolicyUniqueId());
tcaNode.put("fieldPath", tcaThreshold.getFieldPath());
tcaNode.put("thresholdValue", tcaThreshold.getThreshold());
diff --git a/src/main/java/org/onap/clamp/clds/model/properties/PolicyItem.java b/src/main/java/org/onap/clamp/clds/model/properties/PolicyItem.java
index bb14b235f..337a97633 100644
--- a/src/main/java/org/onap/clamp/clds/model/properties/PolicyItem.java
+++ b/src/main/java/org/onap/clamp/clds/model/properties/PolicyItem.java
@@ -48,17 +48,17 @@ import java.util.List;
* "targetResourceId","value":["Eace933104d443b496b8.nodes.heat.vpg"]}]]}]
*/
public class PolicyItem implements Cloneable {
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyItem.class);
- protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
- private String id;
- private String recipe;
- private int maxRetries;
- private int retryTimeLimit;
- private String parentPolicy;
- private List<String> parentPolicyConditions;
- private String actor;
- private String targetResourceId;
+ protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyItem.class);
+ protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
+ private String id;
+ private String recipe;
+ private int maxRetries;
+ private int retryTimeLimit;
+ private String parentPolicy;
+ private List<String> parentPolicyConditions;
+ private String actor;
+ private String targetResourceId;
/**
* Parse Policy given json node.
@@ -73,7 +73,9 @@ public class PolicyItem implements Cloneable {
parentPolicy = AbstractModelElement.getValueByName(node, "parentPolicy");
parentPolicyConditions = AbstractModelElement.getValuesByName(node, "parentPolicyConditions");
targetResourceId = AbstractModelElement.getValueByName(node, "targetResourceId");
-
+ if (targetResourceId != null && targetResourceId.isEmpty()) {
+ this.setTargetResourceId(null);
+ }
}
/**
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java
index 888b782e1..9b68845c0 100644
--- a/src/main/java/org/onap/clamp/clds/service/CldsService.java
+++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java
@@ -835,6 +835,10 @@ public class CldsService extends SecureServiceBase {
fillInCldsModel(model);
String bpmnJson = cldsBpmnTransformer.doXslTransformToString(model.getBpmnText());
logger.info("PUT bpmnJson={}", bpmnJson);
+ SecureServicePermission permisionManage = SecureServicePermission.create(cldsPermissionTypeClManage,
+ cldsPermissionInstance, CldsEvent.ACTION_DEPLOY);
+ isAuthorized(permisionManage);
+ isAuthorizedForVf(model);
ModelProperties modelProp = new ModelProperties(modelName, model.getControlName(), CldsEvent.ACTION_DEPLOY,
false, bpmnJson, model.getPropText());
checkForDuplicateServiceVf(modelName, model.getPropText());
@@ -890,6 +894,10 @@ public class CldsService extends SecureServiceBase {
LoggingUtils.setRequestContext("CldsService: Undeploy model", getPrincipalName());
Boolean errorCase = false;
try {
+ SecureServicePermission permisionManage = SecureServicePermission.create(cldsPermissionTypeClManage,
+ cldsPermissionInstance, CldsEvent.ACTION_UNDEPLOY);
+ isAuthorized(permisionManage);
+ isAuthorizedForVf(model);
String operationStatusUndeployUrl = dcaeDispatcherServices.deleteExistingDeployment(model.getDeploymentId(),
model.getTypeId());
String operationStatus = dcaeDispatcherServices.getOperationStatusWithRetry(operationStatusUndeployUrl);
diff --git a/src/main/resources/META-INF/resources/designer/partials/portfolios/PolicyWindow_properties.html b/src/main/resources/META-INF/resources/designer/partials/portfolios/PolicyWindow_properties.html
index 7dd2c4dd7..83fb337d9 100644
--- a/src/main/resources/META-INF/resources/designer/partials/portfolios/PolicyWindow_properties.html
+++ b/src/main/resources/META-INF/resources/designer/partials/portfolios/PolicyWindow_properties.html
@@ -286,9 +286,13 @@ label {
<label for="targetResourceId" class="col-sm-4 control-label">
Target ResourceId</label>
<div class="col-sm-8">
- <input type="text" class="form-control" id="targetResourceId"
- name="targetResourceId"> </input>
+ <select class="form-control" name="targetResourceId" id="targetResourceId" enableFilter="true" onchange="changeTargetResourceIdOther();" >
+ <option value=""></option>
+ <option value="Other:">Other:</option>
+ </select>
</div>
+ <input type="text" style="display:none" class="form-control" id="targetResourceIdOther"
+ name="targetResourceIdOther" value=""></input>
</div>
</div>
</form>
@@ -304,6 +308,22 @@ label {
</div>
<script>
+
+ function initTargetResourceId() {
+ // Set all the Resource Invariant UUID in the target resource ID list (+Empty and other)
+ Object.keys(vf_Services["shared"]["byVf"]).forEach(function(key){
+ $('#targetResourceId').append($('<option></option>').val(key).html(key));
+ });
+ }
+
+ function changeTargetResourceIdOther() {
+ if ($("#targetResourceId").val()==="Other:") {
+ $("#targetResourceIdOther").show();
+ } else {
+ $("#targetResourceIdOther").hide();
+ $("#targetResourceIdOther").val("");
+ }
+ }
//Basically this method will add a new form. All forms share the same class. When you want one form to show(active form) the other forms get the
// css attribute display:none
$("#add_one_more").click(function(event) {
@@ -334,7 +354,8 @@ label {
}
}
$("#pname").val('');
-
+ initTargetResourceId();
+
//load recipes for a chosen policy
function disperseConfig(policyObj, id){
parent_policy={};
@@ -360,7 +381,13 @@ label {
parent_policy[num]=el[i][j].value
if(el[i][j].name==='recipe' && el[i][j].value.toString()!==''){
$("#go_properties_tab"+num).text(el[i][j].value)
- }
+ }
+ if(el[i][j].name==="targetResourceIdOther" && el[i][j].value.toString()!=='') {
+ // Add the entry and set it
+ $('#targetResourceId').append($('<option></option>').val($('#targetResourceIdOther').val()).html($('#targetResourceIdOther').val()));
+ $('#targetResourceId').val($('#targetResourceIdOther').val());
+ }
+
}
}
}
@@ -385,13 +412,14 @@ label {
$("#formId"+k+" #parentPolicy").change();
}
+ // Now load all component with the right value defined in policyObj JSON
for (headInd in policyObj[id]){
if (!(policyObj[id][headInd].hasOwnProperty("policyConfigurations"))){
$("#" + policyObj[id][headInd].name).val(policyObj[id][headInd].value);
}
}
}
-
+
setMultiSelect();
if (readMOnly){
@@ -454,6 +482,10 @@ label {
}
$("#savePropsBtn").click(function(event) {
+ if($("#targetResourceIdOther").is(":visible")) {
+ $('#targetResourceId').append($('<option></option>').val($("#targetResourceIdOther").val()).html($("#targetResourceIdOther").val()))
+ $("#targetResourceId").val($("#targetResourceIdOther").val());
+ }
$(".idError").hide();
if ($("#policyTable .highlight td").html() !== $("#pname").val()){
//repeated name
@@ -483,7 +515,7 @@ label {
finalSaveList[tableVal] = allPolicies[tableVal];
}
});
-
+
saveProperties(finalSaveList);
$("#close_button").click();
})
diff --git a/src/main/resources/META-INF/resources/designer/partials/portfolios/deploy_parameters.html b/src/main/resources/META-INF/resources/designer/partials/portfolios/deploy_parameters.html
index 5693a875b..3fc1b0301 100644
--- a/src/main/resources/META-INF/resources/designer/partials/portfolios/deploy_parameters.html
+++ b/src/main/resources/META-INF/resources/designer/partials/portfolios/deploy_parameters.html
@@ -26,11 +26,11 @@
<button type="button" class="close" ng-click="close()" aria-hidden="true" style="margin-top: -3px">&times;</button>
<h4>Deployment parameters</h4>
</div>
- <div class="modal-body" style="height: 150px">
- <div style="height: 30px">
- Deployment parameters as JSON.
+ <div class="modal-body" style="display:block">
+ <div style="height: 100%;clear: both;" id="deployPropertiesDiv" name="deployPropertiesDiv" ng-init="load_deploy_parameters()" >
+ Deployment parameters.
</div>
- <textarea class="form-control" focus="true" name="deployProperties" id="deployProperties" ng-init="load_deploy_parameters()"/>
+
</div>
<div class="modal-footer">
<button ng-click="deploy()" class="btn btn-primary">Deploy</button>
diff --git a/src/main/resources/META-INF/resources/designer/scripts/DeploymentCtrl.js b/src/main/resources/META-INF/resources/designer/scripts/DeploymentCtrl.js
index 950e59ca1..935091240 100644
--- a/src/main/resources/META-INF/resources/designer/scripts/DeploymentCtrl.js
+++ b/src/main/resources/META-INF/resources/designer/scripts/DeploymentCtrl.js
@@ -26,10 +26,18 @@ app.controller('DeploymentCtrl',
function( $scope, $rootScope, $modalInstance, data, dialogs, cldsModelService) {
function validate_and_set_deploy_parameters () {
- var parameters = $("#deployProperties").val();
+ var inputList = document.getElementsByClassName("deployFormId");
+ var jsonParameters="{";
+ $.each(inputList, function(key) {
+ if (jsonParameters !== "{") {
+ jsonParameters = jsonParameters+",";
+ }
+ jsonParameters = jsonParameters+'"'+inputList[key].id+'":'+'"'+inputList[key].value+'"'
+ });
+ jsonParameters = jsonParameters+"}";
try {
- parameters = JSON.parse(parameters);
- set_deploy_parameters(parameters);
+ //Try to validate the json
+ set_deploy_parameters(JSON.parse(jsonParameters));
} catch (e) {
console.error("Couldn't parse deploy parameters json");
}
@@ -39,7 +47,6 @@ app.controller('DeploymentCtrl',
if (!'global' in elementMap) {
elementMap["global"] = [];
}
-
var index = elementMap["global"].findIndex(function (e) { return (typeof e == "object" && !(e instanceof Array)) && "deployParameters" == e["name"]; });
if (index == -1) {
elementMap["global"].push({"name": "deployParameters", "value": parameters});
@@ -50,8 +57,14 @@ app.controller('DeploymentCtrl',
$scope.load_deploy_parameters = function () {
var index = elementMap["global"].findIndex(function (e) { return (typeof e == "object" && !(e instanceof Array)) && "deployParameters" == e["name"]; });
- if (index != -1) {
- $('#deployProperties').val(JSON.stringify(elementMap["global"][index]["value"]))
+ if (index != -1) {
+ $('#deployPropertiesDiv').append($('<br/>'));
+ $.each(elementMap["global"][index].value, function(key) {
+ var propertyValue=elementMap["global"][index].value[key];
+ $('#deployPropertiesDiv').append($('<label class="control-label">'+key+' </label>'));
+ $('#deployPropertiesDiv').append($('<input style="width: 100%; clear: both;" class="deployFormId" id="'+key+'"></input>').val(propertyValue).html(propertyValue));
+ $('#deployPropertiesDiv').append($('<br/>'));
+ });
}
}
diff --git a/src/test/resources/example/model-properties/policy/modelBpmnProperties.json b/src/test/resources/example/model-properties/policy/modelBpmnProperties.json
index 5c2214e84..0ef387529 100644
--- a/src/test/resources/example/model-properties/policy/modelBpmnProperties.json
+++ b/src/test/resources/example/model-properties/policy/modelBpmnProperties.json
@@ -100,7 +100,14 @@
"name": "targetResourceId",
"value":
[
- "resource-id"
+ ""
+ ]
+ },
+ {
+ "name": "targetResourceIdOther",
+ "value":
+ [
+ ""
]
}
],
@@ -162,6 +169,13 @@
[
"resource-id"
]
+ },
+ {
+ "name": "targetResourceIdOther",
+ "value":
+ [
+ "resource-idOther"
+ ]
}
]
]
@@ -227,13 +241,6 @@
[
""
]
- },
- {
- "name": "targetResourceId",
- "value":
- [
- "resource-id"
- ]
}
],
@@ -294,6 +301,13 @@
[
"resource-id"
]
+ },
+ {
+ "name": "targetResourceIdOther",
+ "value":
+ [
+ "resource-idOther"
+ ]
}
]
]
diff --git a/src/test/resources/example/operational-policy/yaml-policy-chain-1.yaml b/src/test/resources/example/operational-policy/yaml-policy-chain-1.yaml
index fec0e1e6c..3d0252a00 100644
--- a/src/test/resources/example/operational-policy/yaml-policy-chain-1.yaml
+++ b/src/test/resources/example/operational-policy/yaml-policy-chain-1.yaml
@@ -31,7 +31,7 @@ policies:
retry: 3
success: <generatedId>
target:
- resourceID: resource-id
+ resourceID: null
type: VM
timeout: 180
- actor: APPC
diff --git a/src/test/resources/example/operational-policy/yaml-policy-chain-2.yaml b/src/test/resources/example/operational-policy/yaml-policy-chain-2.yaml
index fec0e1e6c..3d0252a00 100644
--- a/src/test/resources/example/operational-policy/yaml-policy-chain-2.yaml
+++ b/src/test/resources/example/operational-policy/yaml-policy-chain-2.yaml
@@ -31,7 +31,7 @@ policies:
retry: 3
success: <generatedId>
target:
- resourceID: resource-id
+ resourceID: null
type: VM
timeout: 180
- actor: APPC
diff --git a/src/test/resources/example/tca-policy-req/blueprint-expected.yaml b/src/test/resources/example/tca-policy-req/blueprint-expected.yaml
index 4116b9799..a35557cca 100644
--- a/src/test/resources/example/tca-policy-req/blueprint-expected.yaml
+++ b/src/test/resources/example/tca-policy-req/blueprint-expected.yaml
@@ -30,7 +30,7 @@ node_templates:
subscriberMessageLimit: '-1', subscriberPollingInterval: '20000', subscriberProtocol: https,
subscriberTimeoutMS: '-1', subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub,
subscriberUserName: m00502@tca.af.dcae.onap.org, subscriberUserPassword: Te5021abc,
- tca_policy: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"example_model01.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_1jy9to4","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":123,"direction":"GREATER_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"},{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":123,"direction":"GREATER_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"}]}]}'}
+ tca_policy: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"example_model01.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_1jy9to4","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":123,"direction":"LESS_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ABATED"},{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":123,"direction":"GREATER_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"}]}]}'}
artifact_name: dcae-analytics-tca
artifact_version: 1.0.0
connections:
diff --git a/src/test/resources/example/tca-policy-req/tca-policy-expected.json b/src/test/resources/example/tca-policy-req/tca-policy-expected.json
index 5bf007bc9..6e302dd6a 100644
--- a/src/test/resources/example/tca-policy-req/tca-policy-expected.json
+++ b/src/test/resources/example/tca-policy-req/tca-policy-expected.json
@@ -28,9 +28,9 @@
"version": "1.0.2",
"fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
"thresholdValue": 123,
- "direction": "GREATER_OR_EQUAL",
+ "direction": "LESS_OR_EQUAL",
"severity": "MAJOR",
- "closedLoopEventStatus": "ONSET"
+ "closedLoopEventStatus": "ABATED"
},
{
"closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_0",
diff --git a/version.properties b/version.properties
index a81893c7a..93dca4bb4 100644
--- a/version.properties
+++ b/version.properties
@@ -2,7 +2,7 @@
# ============LICENSE_START=======================================================
# ONAP CLAMP
# ================================================================================
-# Copyright (C) 2017 AT&T Intellectual Property. All rights
+# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
# reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -27,7 +27,7 @@
major=2
minor=0
-patch=0
+patch=1
base_version=${major}.${minor}.${patch}