aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INFO.yaml22
-rw-r--r--cds-ui/application/pom.xml4
-rw-r--r--cds-ui/client/pom.xml4
-rw-r--r--cds-ui/client/src/app/common/constants/app-constants.ts3
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts4
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.html5
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.ts22
-rw-r--r--cds-ui/pom.xml4
-rw-r--r--cds-ui/server/pom.xml4
-rw-r--r--cds-ui/server/src/controllers/data-dictionary.controller.ts11
-rw-r--r--cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts17
-rw-r--r--cds-ui/server/src/services/resource-dictionary.service.ts1
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/data_types.json447
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/node_types.json35
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/resources_definition_types.json257
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json122
-rw-r--r--components/model-catalog/blueprint-model/uat-blueprints/echo/Tests/uat.yaml6
-rw-r--r--components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml48
-rw-r--r--components/model-catalog/proto-definition/pom.xml4
-rw-r--r--components/parent/pom.xml2
-rw-r--r--components/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/application/pom.xml2
-rw-r--r--ms/blueprintsprocessor/cba-parent/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/distribution/pom.xml2
-rw-r--r--ms/blueprintsprocessor/functions/ansible-awx-executor/pom.xml2
-rw-r--r--ms/blueprintsprocessor/functions/cli-executor/pom.xml2
-rw-r--r--ms/blueprintsprocessor/functions/config-snapshots/pom.xml4
-rw-r--r--ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutor.kt17
-rw-r--r--ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotService.kt3
-rw-r--r--ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutorTest.kt23
-rw-r--r--ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotServiceTest.kt12
-rw-r--r--ms/blueprintsprocessor/functions/netconf-executor/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/functions/pom.xml2
-rw-r--r--ms/blueprintsprocessor/functions/python-executor/pom.xml2
-rw-r--r--ms/blueprintsprocessor/functions/resource-resolution/pom.xml2
-rw-r--r--ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionConstants.kt1
-rw-r--r--ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt9
-rw-r--r--ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt258
-rw-r--r--ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtilsTest.kt313
-rw-r--r--ms/blueprintsprocessor/functions/restconf-executor/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/commons/db-lib/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/commons/grpc-lib/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/commons/message-lib/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/modules/commons/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/commons/processor-core/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt3
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibData.kt4
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt33
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyService.kt85
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt55
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/SSLRestClientService.kt63
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt14
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyServiceTest.kt435
-rw-r--r--ms/blueprintsprocessor/modules/commons/ssh-lib/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/configs-api/pom.xml4
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/configs-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/configs/api/ResourceConfigSnapshotControllerTest.kt5
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/designer-api/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/outbounds/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/services/execution-service/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/modules/services/pom.xml2
-rw-r--r--ms/blueprintsprocessor/modules/services/workflow-service/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/parent/pom.xml2
-rwxr-xr-xms/blueprintsprocessor/pom.xml2
-rwxr-xr-xms/command-executor/pom.xml7
-rw-r--r--ms/command-executor/src/main/python/command_executor_handler.py7
-rw-r--r--ms/command-executor/src/main/python/server.py5
-rw-r--r--ms/command-executor/src/main/python/utils.py1
-rw-r--r--ms/controllerblueprints/modules/blueprint-core/pom.xml2
-rw-r--r--ms/controllerblueprints/modules/blueprint-validation/pom.xml2
-rw-r--r--ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/utils/PropertyAssignmentValidationUtils.kt5
-rw-r--r--ms/controllerblueprints/modules/pom.xml2
-rw-r--r--ms/controllerblueprints/modules/resource-dict/pom.xml2
-rw-r--r--ms/controllerblueprints/parent/pom.xml2
-rw-r--r--ms/controllerblueprints/pom.xml4
-rw-r--r--ms/pom.xml4
-rw-r--r--ms/sdclistener/application/pom.xml4
-rwxr-xr-xms/sdclistener/distribution/pom.xml2
-rwxr-xr-xms/sdclistener/parent/pom.xml2
-rw-r--r--ms/sdclistener/pom.xml2
-rw-r--r--pom.xml4
-rw-r--r--releases/0.6.1.yaml5
-rw-r--r--version.properties4
88 files changed, 1943 insertions, 546 deletions
diff --git a/INFO.yaml b/INFO.yaml
index 89c7c13a7..d07760a64 100644
--- a/INFO.yaml
+++ b/INFO.yaml
@@ -8,7 +8,7 @@ project_lead: &onap_releng_ptl
email: 'dtimoney@att.com'
id: 'djtimoney'
company: 'ATT'
- timezone: 'America/New York'
+ timezone: 'America/New_York'
primary_contact: *onap_releng_ptl
issue_tracking:
type: 'jira'
@@ -33,12 +33,12 @@ committers:
email: 'jflucas@research.att.com'
company: 'ATT'
id: 'jackl'
- timezone: 'America/New York'
+ timezone: 'America/New_York'
- name: 'Jun (Nicolas) Hu'
email: 'jh245g@att.com'
company: 'ATT'
id: 'jh245g'
- timezone: 'America/New York'
+ timezone: 'America/New_York'
- name: 'Gaurav Agrawal'
email: 'gaurav.agrawal@huawei.com'
company: 'Huawei'
@@ -48,21 +48,9 @@ committers:
email: 'brindasanth@in.ibm.com'
company: 'IBM'
id: 'brindasanthm'
- timezone: 'America/New York'
+ timezone: 'America/New_York'
repositories:
- - ccsdk-apps
- - ccsdk-cds
- - ccsdk-distribution
- - ccsdk-features
- - ccsdk-parent
- - ccsdk-platform-blueprints
- - ccsdk-platform-plugins
- - ccsdk-sli-adaptors
- - ccsdk-sli-core
- - ccsdk-sli-northbound
- - ccsdk-sli-plugins
- - ccsdk-storage-esaas
- - ccsdk-utils
+ - ccsdk/cds
tsc:
approval: 'https://lists.onap.org/pipermail/onap-tsc'
changes:
diff --git a/cds-ui/application/pom.xml b/cds-ui/application/pom.xml
index 752275a8e..87cb4f282 100644
--- a/cds-ui/application/pom.xml
+++ b/cds-ui/application/pom.xml
@@ -24,12 +24,12 @@ limitations under the License.
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ui</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>application</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cds-ui-application</name>
diff --git a/cds-ui/client/pom.xml b/cds-ui/client/pom.xml
index 44c7a8976..f25e78228 100644
--- a/cds-ui/client/pom.xml
+++ b/cds-ui/client/pom.xml
@@ -24,12 +24,12 @@ limitations under the License.
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ui</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>ui-client</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cds-ui-client</name>
diff --git a/cds-ui/client/src/app/common/constants/app-constants.ts b/cds-ui/client/src/app/common/constants/app-constants.ts
index 5ebde91e3..78fefd803 100644
--- a/cds-ui/client/src/app/common/constants/app-constants.ts
+++ b/cds-ui/client/src/app/common/constants/app-constants.ts
@@ -108,5 +108,6 @@ export const ResourceDictionaryURLs = {
searchResourceDictionaryByTags: '/resourcedictionary/search',
searchResourceDictionaryByName: '',
getSources: '/resourcedictionary/source-mapping',
- getModelType: '/resourcedictionary/model-type'
+ getModelType: '/resourcedictionary/model-type',
+ getDataType: '/resourcedictionary/model-type/by-definition/data_type'
} \ No newline at end of file
diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts
index ed1ef6f37..f66a1c9c9 100644
--- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts
+++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts
@@ -44,4 +44,8 @@ export class ResourceEditService {
getModelType(name) {
return this.api.get(ResourceDictionaryURLs.getModelType + '/' + name);
}
+
+ getDataTypes() {
+ return this.api.get(ResourceDictionaryURLs.getDataType);
+ }
} \ No newline at end of file
diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.html b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.html
index d40dbd957..24bee2720 100644
--- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.html
+++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.html
@@ -28,8 +28,9 @@
</mat-form-field>
<mat-form-field class="form-field">
<mat-select matInput placeholder="Data Type" formControlName="_type">
- <mat-option value="string">string</mat-option>
- <mat-option value="list">list</mat-option>
+ <!-- <mat-option value="string">string</mat-option> -->
+ <!-- <mat-option value="list">list</mat-option> -->
+ <mat-option value="string" *ngFor="let item of dataTypeList">{{item.modelName}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="form-field" >
diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.ts
index e155ec100..473b20038 100644
--- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.ts
+++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-metadata/resource-metadata.component.ts
@@ -24,13 +24,15 @@ import { Component, OnInit, EventEmitter, Output } from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import { IResources } from 'src/app/common/core/store/models/resources.model';
import { IResourcesState } from 'src/app/common/core/store/models/resourcesState.model';
-import { Observable } from 'rxjs';
+import { Observable, from } from 'rxjs';
import { Store } from '@ngrx/store';
import { IAppState } from '../../../../common/core/store/state/app.state';
import { A11yModule } from '@angular/cdk/a11y';
+
import { LoadResourcesSuccess } from 'src/app/common/core/store/actions/resources.action';
import { IPropertyData } from 'src/app/common/core/store/models/propertyData.model';
import { IEntrySchema } from 'src/app/common/core/store/models/entrySchema.model';
+import { ResourceEditService } from '../resource-edit.service';
@Component({
selector: 'app-resource-metadata',
@@ -48,8 +50,13 @@ export class ResourceMetadataComponent implements OnInit {
propertyValues = [];
property = [];
@Output() resourcesData = new EventEmitter();
+ dataTypeList: any[] = [
+ {modelName: 'String'}, {modelName: 'Boolean'}, {modelName: 'Integer'}, {modelName: 'Float'}, {modelName: 'Double'}
+ ];
- constructor(private formBuilder: FormBuilder, private store: Store<IAppState>) {
+ constructor(private formBuilder: FormBuilder,
+ private store: Store<IAppState>,
+ private resourceEditService: ResourceEditService) {
this.rdState = this.store.select('resources');
this.ResourceMetadata = this.formBuilder.group({
Resource_Name: ['', Validators.required],
@@ -62,6 +69,17 @@ export class ResourceMetadataComponent implements OnInit {
}
ngOnInit() {
+ this.resourceEditService.getDataTypes()
+ .subscribe(data=>{
+ console.log(data);
+ if(data) {
+ data.forEach(element => {
+ this.dataTypeList.push(element);
+ });
+ }
+ }, (error)=>{
+ console.log("There is an error");
+ });
this.rdState.subscribe(
resourcesdata => {
var resourcesState: IResourcesState = { resources: resourcesdata.resources, isLoadSuccess: resourcesdata.isLoadSuccess, isSaveSuccess: resourcesdata.isSaveSuccess, isUpdateSuccess: resourcesdata.isUpdateSuccess };
diff --git a/cds-ui/pom.xml b/cds-ui/pom.xml
index 8c4d24140..de2be3542 100644
--- a/cds-ui/pom.xml
+++ b/cds-ui/pom.xml
@@ -24,13 +24,13 @@ limitations under the License.
<parent>
<groupId>org.onap.ccsdk.parent</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
- <version>1.4.1-SNAPSHOT</version>
+ <version>1.5.0-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ui</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cds-ui-parent</name>
diff --git a/cds-ui/server/pom.xml b/cds-ui/server/pom.xml
index 32f68de93..2d6d6465b 100644
--- a/cds-ui/server/pom.xml
+++ b/cds-ui/server/pom.xml
@@ -24,12 +24,12 @@ limitations under the License.
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ui</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>ui-server</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cds-ui-server</name>
diff --git a/cds-ui/server/src/controllers/data-dictionary.controller.ts b/cds-ui/server/src/controllers/data-dictionary.controller.ts
index 63587e6b3..eab0bc50c 100644
--- a/cds-ui/server/src/controllers/data-dictionary.controller.ts
+++ b/cds-ui/server/src/controllers/data-dictionary.controller.ts
@@ -95,4 +95,15 @@ export class DataDictionaryController {
async getmodelType(@param.path.string('source') source: string) {
return await this.rdservice.getModelType(source);
}
+
+ @get('/resourcedictionary/model-type/by-definition/data_type', {
+ responses: {
+ '200': {
+ content: { 'application/json': {} },
+ },
+ },
+ })
+ async getDataTypes() {
+ return await this.rdservice.getDataTypes();
+ }
}
diff --git a/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts
index af96aca04..9f9d754d1 100644
--- a/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts
+++ b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts
@@ -88,7 +88,6 @@ export default {
}
},
- ,
{
"template": {
"method": "GET",
@@ -104,6 +103,22 @@ export default {
"getModelType": ["source"]
}
+ },
+ {
+ "template": {
+ "method": "GET",
+ "url": controllerApiConfig.http.url + "/model-type/by-definition/data_type",
+ "headers": {
+ "accepts": "application/json",
+ "content-type": "application/json",
+ "authorization": controllerApiConfig.http.authToken
+ },
+ "responsePath": "$.*"
+ },
+ "functions": {
+ "getDataTypes": []
+
+ }
}
]
}; \ No newline at end of file
diff --git a/cds-ui/server/src/services/resource-dictionary.service.ts b/cds-ui/server/src/services/resource-dictionary.service.ts
index 9a781d6b8..8df22085c 100644
--- a/cds-ui/server/src/services/resource-dictionary.service.ts
+++ b/cds-ui/server/src/services/resource-dictionary.service.ts
@@ -9,6 +9,7 @@ export interface ResourceDictionaryService {
save(resourceDictionary: JSON): Promise<JSON>;
searchbyNames(resourceDictionaryList: JSON): Promise<JSON>;
getModelType(source: string): Promise<JSON>;
+ getDataTypes(): Promise<JSON>;
}
export class ResourceDictionaryServiceProvider implements Provider<ResourceDictionaryService> {
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/data_types.json b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/data_types.json
index 8c304c40b..b7109251e 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/data_types.json
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/data_types.json
@@ -1,3 +1,448 @@
{
- "data_types" : { }
+ "data_types" : {
+ "dt-resource-assignment-properties" : {
+ "description" : "Dynamic DataType definition for workflow(resource-assignment).",
+ "version" : "1.0.0",
+ "properties" : {
+ "nf-role" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "default" : "vSN",
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vm-type" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vnf-id" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "public_net_id" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "value" : "public_net_id",
+ "default" : "public_net_id",
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vnf_name" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vfw_private_ip_1" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "unprotected-prefix-id" : {
+ "description" : "",
+ "required" : false,
+ "type" : "integer",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "onap_private_subnet_id" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vfw_private_ip_0" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "aic-cloud-region" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "sec_group" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "default" : "onap_sg_PUhf",
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vfw_private_ip_2" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vnfc-model-invariant-uuid" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "nfc-naming-code" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "private-prefix-id" : {
+ "description" : "",
+ "required" : false,
+ "type" : "integer",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vf-module-model-customization-uuid" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vfw_name_0" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vf_module_name" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "nexus_artifact_repo" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "value" : "nexus_artifact_repo",
+ "default" : "nexus_artifact_repo",
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "onap_private_net_cidr" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "image_name" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vf-nf-code" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vf-module-id" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vf-module-label" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vsn_private_ip_0" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vpg_name_0" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vpg_private_ip_1" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "protected_private_net_cidr" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vf-naming-policy" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "default" : "SDNC_Policy.Config_MS_ONAP_VSN_NAMING_TIMESTAMP",
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vpg_private_ip_0" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vsn_private_ip_1" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vfccustomizationuuid" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "unprotected_private_net_cidr" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vsn_name_0" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "onap_private_net_id" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vnfc-model-version" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "service-instance-id" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vf-module-type" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vnf-model-customization-uuid" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "pub_key" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "key_name" : {
+ "description" : "",
+ "required" : false,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "protected-prefix-id" : {
+ "description" : "",
+ "required" : false,
+ "type" : "integer",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ },
+ "vnf-name" : {
+ "description" : "",
+ "required" : true,
+ "type" : "string",
+ "status" : "",
+ "constraints" : [ { } ],
+ "entry_schema" : {
+ "type" : ""
+ }
+ }
+ },
+ "derived_from" : "tosca.datatypes.Dynamic"
+ }
+ }
} \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/node_types.json b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/node_types.json
index 599e37704..e812db1cf 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/node_types.json
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/node_types.json
@@ -24,6 +24,12 @@
"required" : false,
"type" : "string"
},
+ "occurrence" : {
+ "description" : "Number of time to perform the resolution.",
+ "required" : false,
+ "type" : "integer",
+ "default" : 1
+ },
"store-result" : {
"description" : "Whether or not to store the output.",
"required" : false,
@@ -115,18 +121,6 @@
},
"derived_from" : "tosca.nodes.ResourceSource"
},
- "source-default" : {
- "description" : "This is Default Resource Source Node Type",
- "version" : "1.0.0",
- "properties" : { },
- "derived_from" : "tosca.nodes.ResourceSource"
- },
- "source-input" : {
- "description" : "This is Input Resource Source Node Type",
- "version" : "1.0.0",
- "properties" : { },
- "derived_from" : "tosca.nodes.ResourceSource"
- },
"source-db" : {
"description" : "This is Database Resource Source Node Type",
"version" : "1.0.0",
@@ -136,7 +130,8 @@
"type" : "string",
"constraints" : [ {
"valid_values" : [ "SQL", "PLSQL" ]
- } ]
+ } ],
+ "default" : "SQL"
},
"endpoint-selector" : {
"required" : false,
@@ -170,6 +165,18 @@
},
"derived_from" : "tosca.nodes.ResourceSource"
},
+ "source-default" : {
+ "description" : "This is Default Resource Source Node Type",
+ "version" : "1.0.0",
+ "properties" : { },
+ "derived_from" : "tosca.nodes.ResourceSource"
+ },
+ "source-input" : {
+ "description" : "This is Input Resource Source Node Type",
+ "version" : "1.0.0",
+ "properties" : { },
+ "derived_from" : "tosca.nodes.ResourceSource"
+ },
"source-rest" : {
"description" : "This is Rest Resource Source Node Type",
"version" : "1.0.0",
@@ -250,4 +257,4 @@
"derived_from" : "tosca.nodes.Root"
}
}
-}
+} \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/resources_definition_types.json b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/resources_definition_types.json
index 1a62972ca..240624094 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/resources_definition_types.json
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/resources_definition_types.json
@@ -81,15 +81,30 @@
"description" : "nexus_artifact_repo",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
"default" : {
"type" : "source-default",
"properties" : { }
},
- "input" : {
- "type" : "source-input",
- "properties" : { }
+ "sdnc" : {
+ "type" : "source-rest",
+ "properties" : {
+ "type" : "JSON",
+ "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/nexus_artifact_repo",
+ "path" : "/param/0/value",
+ "input-key-mapping" : {
+ "service-instance-id" : "service-instance-id",
+ "vnf-id" : "vnf-id"
+ },
+ "output-key-mapping" : {
+ "nexus_artifact_repo" : "value"
+ },
+ "key-dependencies" : [ "service-instance-id", "vnf-id" ]
+ }
}
}
},
@@ -129,11 +144,19 @@
"description" : "nfc-naming-code",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
+ "endpoint-selector" : "dynamic-db-source",
"type" : "SQL",
"query" : "select nfc_naming_code as nfc_naming_code from sdnctl.VFC_MODEL where customization_uuid=:vfccustomizationuuid",
"input-key-mapping" : {
@@ -154,13 +177,38 @@
"description" : "onap_private_net_cidr",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
+ "sdnc" : {
+ "type" : "source-rest",
+ "properties" : {
+ "type" : "JSON",
+ "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/onap_private_net_cidr",
+ "path" : "/param/0/value",
+ "input-key-mapping" : {
+ "service-instance-id" : "service-instance-id",
+ "vnf-id" : "vnf-id"
+ },
+ "output-key-mapping" : {
+ "onap_private_net_cidr" : "value"
+ },
+ "key-dependencies" : [ "service-instance-id", "vnf-id" ]
+ }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
+ "endpoint-selector" : "dynamic-db-source",
"type" : "SQL",
- "query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = \"private\"",
+ "query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = \"management\"",
+ "input-key-mapping" : { },
"output-key-mapping" : {
"onap_private_net_cidr" : "prefix"
}
@@ -175,11 +223,15 @@
"description" : "onap_private_net_id",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
"input" : {
"type" : "source-input"
},
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"sdnc" : {
"type" : "source-rest",
"properties" : {
@@ -205,11 +257,15 @@
"description" : "onap_private_subnet_id",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
"input" : {
"type" : "source-input"
},
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"sdnc" : {
"type" : "source-rest",
"properties" : {
@@ -235,13 +291,22 @@
"description" : "private-prefix-id",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
+ "endpoint-selector" : "dynamic-db-source",
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = \"private\"",
+ "input-key-mapping" : { },
"output-key-mapping" : {
"private-prefix-id" : "prefix_id"
}
@@ -298,11 +363,15 @@
"description" : "pub_key",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
"input" : {
"type" : "source-input"
},
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"sdnc" : {
"type" : "source-rest",
"properties" : {
@@ -328,14 +397,30 @@
"description" : "public_net_id",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
"default" : {
"type" : "source-default",
"properties" : { }
},
- "input" : {
- "type" : "source-input"
+ "sdnc" : {
+ "type" : "source-rest",
+ "properties" : {
+ "type" : "JSON",
+ "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/public_net_id",
+ "path" : "/param/0/value",
+ "input-key-mapping" : {
+ "service-instance-id" : "service-instance-id",
+ "vnf-id" : "vnf-id"
+ },
+ "output-key-mapping" : {
+ "public_net_id" : "value"
+ },
+ "key-dependencies" : [ "service-instance-id", "vnf-id" ]
+ }
}
}
},
@@ -346,15 +431,30 @@
"description" : "sec_group",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
"default" : {
"type" : "source-default",
"properties" : { }
},
- "input" : {
- "type" : "source-input",
- "properties" : { }
+ "sdnc" : {
+ "type" : "source-rest",
+ "properties" : {
+ "type" : "JSON",
+ "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/sec_group",
+ "path" : "/param/0/value",
+ "input-key-mapping" : {
+ "service-instance-id" : "service-instance-id",
+ "vnf-id" : "vnf-id"
+ },
+ "output-key-mapping" : {
+ "sec_group" : "value"
+ },
+ "key-dependencies" : [ "service-instance-id", "vnf-id" ]
+ }
}
}
},
@@ -465,8 +565,15 @@
"description" : "vf-module-label",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
@@ -490,10 +597,13 @@
"description" : "vf-module-model-customization-uuid",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
"input" : {
- "type" : "source-input",
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
"properties" : { }
}
}
@@ -593,17 +703,25 @@
}
},
"vfccustomizationuuid" : {
- "tags" : "vfccustomizationuuid, tosca.datatypes.Root, data_type",
+ "tags" : "vfccustomizationuuid",
"name" : "vfccustomizationuuid",
"property" : {
"description" : "vfccustomizationuuid",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
+ "endpoint-selector" : "dynamic-db-source",
"type" : "SQL",
"query" : "select sdnctl.VF_MODULE_TO_VFC_MAPPING.vfc_customization_uuid as vnf_customid from sdnctl.VF_MODULE_TO_VFC_MAPPING where vm_count = 1 and sdnctl.VF_MODULE_TO_VFC_MAPPING.vf_module_customization_uuid=:vfmodulecustomizationuuid",
"input-key-mapping" : {
@@ -717,11 +835,19 @@
"description" : "vm-type",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
+ "endpoint-selector" : "dynamic-db-source",
"type" : "SQL",
"query" : "select VFC_MODEL.vm_type as vm_type from VFC_MODEL where customization_uuid=:vfccustomizationuuid",
"input-key-mapping" : {
@@ -742,11 +868,30 @@
"description" : "vnf-id",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
"input" : {
- "type" : "source-input",
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
"properties" : { }
+ },
+ "sdnc" : {
+ "type" : "source-rest",
+ "properties" : {
+ "type" : "JSON",
+ "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vnf-id",
+ "path" : "/param/0/value",
+ "input-key-mapping" : {
+ "service-instance-id" : "service-instance-id",
+ "vnf-id" : "vnf-id"
+ },
+ "output-key-mapping" : {
+ "vnf-id" : "value"
+ },
+ "key-dependencies" : [ "service-instance-id", "vnf-id" ]
+ }
}
}
},
@@ -766,29 +911,51 @@
}
},
"vnf-name" : {
- "tags" : "vnf-name, tosca.datatypes.Root, data_type",
+ "tags" : "vnf-name",
"name" : "vnf-name",
"property" : {
"description" : "vnf-name",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"sdnc" : {
"type" : "source-rest",
"properties" : {
"type" : "JSON",
- "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vnf_name",
+ "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-name/vnf-data/vnf-topology/vnf-parameters-data/param/vnf-name",
"path" : "/param/0/value",
- "expression-type" : "JSON_POINTER",
"input-key-mapping" : {
"service-instance-id" : "service-instance-id",
- "vnf-id" : "vnf-id"
+ "vnf-name" : "vnf-name"
},
"output-key-mapping" : {
"vnf-name" : "value"
},
- "key-dependencies" : [ "service-instance-id", "vnf-id" ]
+ "key-dependencies" : [ "service-instance-id", "vnf-name" ]
+ }
+ },
+ "aai-data" : {
+ "type" : "source-rest",
+ "properties" : {
+ "type" : "JSON",
+ "verb" : "GET",
+ "url-path" : "/aai/v14/network/generic-vnfs/generic-vnf/$vnf-id",
+ "path" : "",
+ "input-key-mapping" : {
+ "vnf-id" : "vnf-id"
+ },
+ "output-key-mapping" : {
+ "vnf-name" : "vnf-name"
+ },
+ "key-dependencies" : [ "vnf-id" ]
}
}
}
@@ -832,14 +999,22 @@
"tags" : "vnfc-model-invariant-uuid",
"name" : "vnfc-model-invariant-uuid",
"property" : {
- "description" : "vnfc-model-invariant-uuid for SRIOV VPE template",
+ "description" : "vnfc-model-invariant-uuid",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
+ "endpoint-selector" : "dynamic-db-source",
"type" : "SQL",
"query" : "select VFC_MODEL.invariant_uuid as vfc_invariant_uuid from VFC_MODEL where customization_uuid=:vfccustomizationuuid",
"input-key-mapping" : {
@@ -857,14 +1032,22 @@
"tags" : "vnfc-model-version",
"name" : "vnfc-model-version",
"property" : {
- "description" : "vnfc-model-version for SRIOV VPE template",
+ "description" : "vnfc-model-version",
"type" : "string"
},
- "updated-by" : "Singal, Kapil <ks220y@att.com>",
+ "updated-by" : "MALAKOV, YURIY <yuriy.malakov@att.com>",
"sources" : {
+ "input" : {
+ "type" : "source-input"
+ },
+ "default" : {
+ "type" : "source-default",
+ "properties" : { }
+ },
"processor-db" : {
"type" : "source-db",
"properties" : {
+ "endpoint-selector" : "dynamic-db-source",
"type" : "SQL",
"query" : "select VFC_MODEL.version as vnfc_model_version from VFC_MODEL where customization_uuid=:vfccustomizationuuid",
"input-key-mapping" : {
@@ -1001,4 +1184,4 @@
}
}
}
-}
+} \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json
index a4d90adfe..9ff4f3a1f 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json
@@ -1,19 +1,31 @@
{
- "metadata": {
- "template_author": "Alexis de Talhouët",
- "author-email": "adetalhouet89@gmail.com",
- "user-groups": "ADMIN, OPERATION",
- "template_name": "vFW_spinup",
- "template_version": "1.0.0",
- "template_tags": "vFW"
+ "tosca_definitions_version" : "controller_blueprint_1_0_0",
+ "metadata" : {
+ "template_author" : "Alexis de Talhouët",
+ "author-email" : "adetalhouet89@gmail.com",
+ "user-groups" : "ADMIN, OPERATION",
+ "template_name" : "vFW_spinup",
+ "template_version" : "1.0.0",
+ "template_tags" : "vFW"
},
- "topology_template": {
- "workflows": {
- "resource-assignment": {
- "steps": {
- "resource-assignment": {
- "description": "Resource Assign Workflow",
- "target": "resource-assignment"
+ "imports" : [ {
+ "file" : "Definitions/data_types.json"
+ }, {
+ "file" : "Definitions/relationship_types.json"
+ }, {
+ "file" : "Definitions/artifact_types.json"
+ }, {
+ "file" : "Definitions/node_types.json"
+ }, {
+ "file" : "Definitions/policy_types.json"
+ } ],
+ "topology_template" : {
+ "workflows" : {
+ "resource-assignment" : {
+ "steps" : {
+ "resource-assignment" : {
+ "description" : "Resource Assign Workflow",
+ "target" : "resource-assignment"
}
},
"inputs" : {
@@ -23,22 +35,24 @@
"entry_schema" : {
"type" : "string"
}
+ },
+ "resource-assignment-properties" : {
+ "description" : "Dynamic PropertyDefinition for workflow(resource-assignment).",
+ "required" : true,
+ "type" : "dt-resource-assignment-properties"
}
},
- "outputs": {
- "meshed-template": {
- "type": "json",
- "value": {
- "get_attribute": [
- "resource-assignment",
- "assignment-params"
- ]
+ "outputs" : {
+ "meshed-template" : {
+ "type" : "json",
+ "value" : {
+ "get_attribute" : [ "resource-assignment", "assignment-params" ]
}
}
}
}
},
- "node_templates": {
+ "node_templates" : {
"resource-assignment" : {
"type" : "component-resource-resolution",
"interfaces" : {
@@ -54,46 +68,46 @@
}
}
},
- "artifacts": {
- "base-template": {
- "type": "artifact-template-velocity",
- "file": "Templates/base-template.vtl"
+ "artifacts" : {
+ "base-template" : {
+ "type" : "artifact-template-velocity",
+ "file" : "Templates/base-template.vtl"
},
- "base-mapping": {
- "type": "artifact-mapping-resource",
- "file": "Templates/base-mapping.json"
+ "base-mapping" : {
+ "type" : "artifact-mapping-resource",
+ "file" : "Templates/base-mapping.json"
},
- "vfw-template": {
- "type": "artifact-template-velocity",
- "file": "Templates/vfw-template.vtl"
+ "vfw-template" : {
+ "type" : "artifact-template-velocity",
+ "file" : "Templates/vfw-template.vtl"
},
- "vfw-mapping": {
- "type": "artifact-mapping-resource",
- "file": "Templates/vfw-mapping.json"
+ "vfw-mapping" : {
+ "type" : "artifact-mapping-resource",
+ "file" : "Templates/vfw-mapping.json"
},
- "vfw-vnf-template": {
- "type": "artifact-template-velocity",
- "file": "Templates/vfw-vnf-template.vtl"
+ "vfw-vnf-template" : {
+ "type" : "artifact-template-velocity",
+ "file" : "Templates/vfw-vnf-template.vtl"
},
- "vfw-vnf-mapping": {
- "type": "artifact-mapping-resource",
- "file": "Templates/vfw-vnf-mapping.json"
+ "vfw-vnf-mapping" : {
+ "type" : "artifact-mapping-resource",
+ "file" : "Templates/vfw-vnf-mapping.json"
},
- "vpg-template": {
- "type": "artifact-template-velocity",
- "file": "Templates/vpg-template.vtl"
+ "vpg-template" : {
+ "type" : "artifact-template-velocity",
+ "file" : "Templates/vpg-template.vtl"
},
- "vpg-mapping": {
- "type": "artifact-mapping-resource",
- "file": "Templates/vpg-mapping.json"
+ "vpg-mapping" : {
+ "type" : "artifact-mapping-resource",
+ "file" : "Templates/vpg-mapping.json"
},
- "vsn-template": {
- "type": "artifact-template-velocity",
- "file": "Templates/vsn-template.vtl"
+ "vsn-template" : {
+ "type" : "artifact-template-velocity",
+ "file" : "Templates/vsn-template.vtl"
},
- "vsn-mapping": {
- "type": "artifact-mapping-resource",
- "file": "Templates/vsn-mapping.json"
+ "vsn-mapping" : {
+ "type" : "artifact-mapping-resource",
+ "file" : "Templates/vsn-mapping.json"
}
}
}
diff --git a/components/model-catalog/blueprint-model/uat-blueprints/echo/Tests/uat.yaml b/components/model-catalog/blueprint-model/uat-blueprints/echo/Tests/uat.yaml
index 116230929..5036a6fa2 100644
--- a/components/model-catalog/blueprint-model/uat-blueprints/echo/Tests/uat.yaml
+++ b/components/model-catalog/blueprint-model/uat-blueprints/echo/Tests/uat.yaml
@@ -26,9 +26,3 @@ processes:
message: success
payload:
echo-response: {}
- stepData:
- name: echo
- properties:
- resource-assignment-params:
- echo: *message
- status: success
diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml
index 3a5903c49..fbdb2eea8 100644
--- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml
+++ b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml
@@ -31,32 +31,6 @@ processes:
message: success
payload:
config-assign-response: {}
- stepData:
- name: config-assign
- properties:
- resource-assignment-params:
- config-assign: &assignPatch
- ietf-restconf:yang-patch:
- patch-id: patch-1
- edit:
- - edit-id: edit1
- operation: merge
- target: /
- value: { netconflist: { netconf: [ { netconf-id: "10", netconf-param: "1000" }]}}
- - edit-id: edit2
- operation: merge
- target: /
- value: { netconflist: { netconf: [ { netconf-id: "20", netconf-param: "2000" }]}}
- - edit-id: edit3
- operation: merge
- target: /
- value: { netconflist: { netconf: [ { netconf-id: "30", netconf-param: "3000" }]}}
- status: success
- responseNormalizerSpec:
- stepData:
- properties:
- resource-assignment-params:
- config-assign: ?from-json(.stepData.properties.resource-assignment-params.config-assign)
- name: config-deploy
request:
commonHeader: *commonHeader
@@ -84,11 +58,6 @@ processes:
errorMessage: null
eventType: EVENT_COMPONENT_EXECUTED
message: success
- stepData:
- name: config-deploy
- properties:
- response-data: ""
- status: success
external-services:
- selector: sdncodl
@@ -127,7 +96,22 @@ external-services:
path: [*configUri, *configletResourcePath]
headers:
Content-Type: application/yang.patch+json
- body: *assignPatch
+ body:
+ ietf-restconf:yang-patch:
+ patch-id: patch-1
+ edit:
+ - edit-id: edit1
+ operation: merge
+ target: /
+ value: { netconflist: { netconf: [ { netconf-id: "10", netconf-param: "1000" }]}}
+ - edit-id: edit2
+ operation: merge
+ target: /
+ value: { netconflist: { netconf: [ { netconf-id: "20", netconf-param: "2000" }]}}
+ - edit-id: edit3
+ operation: merge
+ target: /
+ value: { netconflist: { netconf: [ { netconf-id: "30", netconf-param: "3000" }]}}
- request:
method: DELETE
path: *configUri
diff --git a/components/model-catalog/proto-definition/pom.xml b/components/model-catalog/proto-definition/pom.xml
index e358240fd..9c6d802a0 100644
--- a/components/model-catalog/proto-definition/pom.xml
+++ b/components/model-catalog/proto-definition/pom.xml
@@ -20,13 +20,13 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<groupId>org.onap.ccsdk.cds.components</groupId>
<artifactId>proto-definition</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Controller Blueprints Proto Definition</name>
diff --git a/components/parent/pom.xml b/components/parent/pom.xml
index 4ce7e8cc6..6f33118c1 100644
--- a/components/parent/pom.xml
+++ b/components/parent/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>components</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<groupId>org.onap.ccsdk.cds.components</groupId>
<artifactId>parent</artifactId>
diff --git a/components/pom.xml b/components/pom.xml
index 26d609f12..060cf4ec6 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>components</artifactId>
diff --git a/ms/blueprintsprocessor/application/pom.xml b/ms/blueprintsprocessor/application/pom.xml
index a4f60f111..64452a061 100755
--- a/ms/blueprintsprocessor/application/pom.xml
+++ b/ms/blueprintsprocessor/application/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>application</artifactId>
diff --git a/ms/blueprintsprocessor/cba-parent/pom.xml b/ms/blueprintsprocessor/cba-parent/pom.xml
index 0ee0da4e9..a1b6beff4 100644
--- a/ms/blueprintsprocessor/cba-parent/pom.xml
+++ b/ms/blueprintsprocessor/cba-parent/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>cba-parent</artifactId>
diff --git a/ms/blueprintsprocessor/distribution/pom.xml b/ms/blueprintsprocessor/distribution/pom.xml
index d6d9c56cd..4037c98e6 100755
--- a/ms/blueprintsprocessor/distribution/pom.xml
+++ b/ms/blueprintsprocessor/distribution/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>distribution</artifactId>
diff --git a/ms/blueprintsprocessor/functions/ansible-awx-executor/pom.xml b/ms/blueprintsprocessor/functions/ansible-awx-executor/pom.xml
index 96254b705..8b59b17f7 100644
--- a/ms/blueprintsprocessor/functions/ansible-awx-executor/pom.xml
+++ b/ms/blueprintsprocessor/functions/ansible-awx-executor/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>functions</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/ms/blueprintsprocessor/functions/cli-executor/pom.xml b/ms/blueprintsprocessor/functions/cli-executor/pom.xml
index 53882b0b0..89f409a70 100644
--- a/ms/blueprintsprocessor/functions/cli-executor/pom.xml
+++ b/ms/blueprintsprocessor/functions/cli-executor/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>functions</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor.functions</groupId>
diff --git a/ms/blueprintsprocessor/functions/config-snapshots/pom.xml b/ms/blueprintsprocessor/functions/config-snapshots/pom.xml
index 0867135c4..0ad979683 100644
--- a/ms/blueprintsprocessor/functions/config-snapshots/pom.xml
+++ b/ms/blueprintsprocessor/functions/config-snapshots/pom.xml
@@ -18,13 +18,13 @@
<parent>
<artifactId>functions</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor.functions</groupId>
<artifactId>config-snapshots</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<name>Blueprints Processor Function - Config Snapshots</name>
<description>Blueprints Processor Function - Config Snapshots</description>
diff --git a/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutor.kt b/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutor.kt
index eafcaf44b..180ad7b48 100644
--- a/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutor.kt
+++ b/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutor.kt
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-package org.onap.ccsdk.cds.blueprintsprocessor.functions.ansible.executor
+package org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots
import com.github.fge.jsonpatch.diff.JsonDiff
+import org.apache.logging.log4j.util.Strings
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.db.ResourceConfigSnapshot
import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.db.ResourceConfigSnapshot.Status.RUNNING
@@ -144,18 +145,20 @@ open class ComponentConfigSnapshotsExecutor(private val cfgSnapshotService: Reso
*/
private suspend fun compareConfigurationSnapshot(resourceId: String, resourceType: String, contentType : String) {
+ val cfgRunning = cfgSnapshotService.findByResourceIdAndResourceTypeAndStatus(resourceId, resourceType, RUNNING)
+ val cfgCandidate = cfgSnapshotService.findByResourceIdAndResourceTypeAndStatus(resourceId, resourceType, CANDIDATE)
+
+ if (cfgRunning.isEmpty() || cfgCandidate.isEmpty()) {
+ setNodeOutputProperties(OUTPUT_STATUS_SUCCESS, Strings.EMPTY)
+ return
+ }
+
when (contentType.toUpperCase()) {
DIFF_JSON -> {
- val cfgRunning = cfgSnapshotService.findByResourceIdAndResourceTypeAndStatus(resourceId, resourceType, RUNNING)
- val cfgCandidate = cfgSnapshotService.findByResourceIdAndResourceTypeAndStatus(resourceId, resourceType, CANDIDATE)
-
val patchNode = JsonDiff.asJson(cfgRunning.jsonAsJsonType(), cfgCandidate.jsonAsJsonType())
setNodeOutputProperties(OUTPUT_STATUS_SUCCESS, patchNode.toString())
}
DIFF_XML -> {
- val cfgRunning = cfgSnapshotService.findByResourceIdAndResourceTypeAndStatus(resourceId, resourceType, RUNNING)
- val cfgCandidate = cfgSnapshotService.findByResourceIdAndResourceTypeAndStatus(resourceId, resourceType, CANDIDATE)
-
val myDiff = DiffBuilder
.compare(Input.fromString(cfgRunning))
.withTest(Input.fromString(cfgCandidate))
diff --git a/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotService.kt b/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotService.kt
index 50c90f332..5fcba5b0c 100644
--- a/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotService.kt
+++ b/ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotService.kt
@@ -17,6 +17,7 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.db
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
+import org.apache.logging.log4j.util.Strings
import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.db.ResourceConfigSnapshot.Status.RUNNING
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException
import org.slf4j.LoggerFactory
@@ -40,7 +41,7 @@ class ResourceConfigSnapshotService(private val repository: ResourceConfigSnapsh
status : ResourceConfigSnapshot.Status = RUNNING): String =
withContext(Dispatchers.IO) {
repository.findByResourceIdAndResourceTypeAndStatus(resourceId, resourceType, status)
- ?.config_snapshot ?: throw NoSuchElementException()
+ ?.config_snapshot ?: Strings.EMPTY
}
suspend fun write(snapshot: String, resId: String, resType: String,
diff --git a/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutorTest.kt b/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutorTest.kt
index 79dd93037..c212908b9 100644
--- a/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutorTest.kt
+++ b/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/ComponentConfigSnapshotsExecutorTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.onap.ccsdk.cds.blueprintsprocessor.functions.ansible.executor
+package org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots
import com.fasterxml.jackson.databind.JsonNode
import kotlinx.coroutines.runBlocking
@@ -27,11 +27,12 @@ import org.onap.ccsdk.cds.blueprintsprocessor.core.BluePrintProperties
import org.onap.ccsdk.cds.blueprintsprocessor.core.BlueprintPropertyConfiguration
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
import org.onap.ccsdk.cds.blueprintsprocessor.db.BluePrintDBLibConfiguration
-import org.onap.ccsdk.cds.blueprintsprocessor.functions.ansible.executor.ComponentConfigSnapshotsExecutor.Companion.DIFF_JSON
-import org.onap.ccsdk.cds.blueprintsprocessor.functions.ansible.executor.ComponentConfigSnapshotsExecutor.Companion.DIFF_XML
-import org.onap.ccsdk.cds.blueprintsprocessor.functions.ansible.executor.ComponentConfigSnapshotsExecutor.Companion.OPERATION_DIFF
-import org.onap.ccsdk.cds.blueprintsprocessor.functions.ansible.executor.ComponentConfigSnapshotsExecutor.Companion.OPERATION_FETCH
-import org.onap.ccsdk.cds.blueprintsprocessor.functions.ansible.executor.ComponentConfigSnapshotsExecutor.Companion.OPERATION_STORE
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.ComponentConfigSnapshotsExecutor
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.ComponentConfigSnapshotsExecutor.Companion.DIFF_JSON
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.ComponentConfigSnapshotsExecutor.Companion.DIFF_XML
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.ComponentConfigSnapshotsExecutor.Companion.OPERATION_DIFF
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.ComponentConfigSnapshotsExecutor.Companion.OPERATION_FETCH
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.ComponentConfigSnapshotsExecutor.Companion.OPERATION_STORE
import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.db.ResourceConfigSnapshot
import org.onap.ccsdk.cds.blueprintsprocessor.functions.config.snapshots.db.ResourceConfigSnapshotService
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
@@ -192,9 +193,7 @@ class ComponentConfigSnapshotsExecutorTest {
return@runBlocking
}
- // then; we should get error and the PAYLOAD payload in our output properties
- assertTrue( bluePrintRuntimeService.getBluePrintError().errors.size > 0 )
- assertEquals(ComponentConfigSnapshotsExecutor.OUTPUT_STATUS_ERROR.asJsonPrimitive(),
+ assertEquals(ComponentConfigSnapshotsExecutor.OUTPUT_STATUS_SUCCESS.asJsonPrimitive(),
bluePrintRuntimeService.getNodeTemplateAttributeValue(nodeTemplateName,
ComponentConfigSnapshotsExecutor.OUTPUT_STATUS))
}
@@ -234,7 +233,10 @@ class ComponentConfigSnapshotsExecutorTest {
runBlocking {
// when; asking for unknown content type diff operation; should get an error response
try {
- prepareRequestProperties(OPERATION_DIFF, "asdasd", "PNF", "YANG")
+ val resId = "121111"
+ val resType = "PNF"
+ cfgSnapshotService.write("snapshotConfig", resId, resType, ResourceConfigSnapshot.Status.CANDIDATE)
+ prepareRequestProperties(OPERATION_DIFF, resId, resType, "YANG")
cfgSnapshotComponent.processNB(executionRequest)
@@ -245,7 +247,6 @@ class ComponentConfigSnapshotsExecutorTest {
}
// then; we should get error in our output properties
- assertTrue( bluePrintRuntimeService.getBluePrintError().errors.size == 1 )
assertEquals(ComponentConfigSnapshotsExecutor.OUTPUT_STATUS_ERROR.asJsonPrimitive(),
bluePrintRuntimeService.getNodeTemplateAttributeValue(nodeTemplateName,
ComponentConfigSnapshotsExecutor.OUTPUT_STATUS))
diff --git a/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotServiceTest.kt b/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotServiceTest.kt
index 2830cb547..3c989c154 100644
--- a/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotServiceTest.kt
+++ b/ms/blueprintsprocessor/functions/config-snapshots/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshotServiceTest.kt
@@ -48,18 +48,6 @@ class ResourceConfigSnapshotServiceTest {
}
}
- @Test(expected = NoSuchElementException::class)
- fun notFoundEntryReturnsExceptionTest() {
- val tr = ResourceConfigSnapshot()
- runBlocking {
- every {
- cfgRepository.findByResourceIdAndResourceTypeAndStatus(any(), any(), any())
- } returns tr
- val snap = cfgService.findByResourceIdAndResourceTypeAndStatus("MISSING_ID", "UNKNOWN_TYPE")
- assertTrue ( snap.isBlank(), "Not found but returned a non empty string" )
- }
- }
-
@Test
fun createNewResourceConfigSnapshotTest() {
val tr = ResourceConfigSnapshot()
diff --git a/ms/blueprintsprocessor/functions/netconf-executor/pom.xml b/ms/blueprintsprocessor/functions/netconf-executor/pom.xml
index ff9d0f7f8..f163c0e1a 100644
--- a/ms/blueprintsprocessor/functions/netconf-executor/pom.xml
+++ b/ms/blueprintsprocessor/functions/netconf-executor/pom.xml
@@ -18,7 +18,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>functions</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor.functions</groupId>
diff --git a/ms/blueprintsprocessor/functions/pom.xml b/ms/blueprintsprocessor/functions/pom.xml
index c2ac510c1..73daf22a5 100755
--- a/ms/blueprintsprocessor/functions/pom.xml
+++ b/ms/blueprintsprocessor/functions/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/ms/blueprintsprocessor/functions/python-executor/pom.xml b/ms/blueprintsprocessor/functions/python-executor/pom.xml
index 68ba95e3a..872e5a61c 100644
--- a/ms/blueprintsprocessor/functions/python-executor/pom.xml
+++ b/ms/blueprintsprocessor/functions/python-executor/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>functions</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/pom.xml b/ms/blueprintsprocessor/functions/resource-resolution/pom.xml
index 6f2d34973..be524fe22 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/pom.xml
+++ b/ms/blueprintsprocessor/functions/resource-resolution/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>functions</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor.functions</groupId>
<artifactId>resource-resolution</artifactId>
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionConstants.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionConstants.kt
index 2a9218df3..769644288 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionConstants.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionConstants.kt
@@ -29,5 +29,4 @@ object ResourceResolutionConstants {
const val RESOURCE_RESOLUTION_INPUT_OCCURRENCE = "occurrence"
const val RESOURCE_RESOLUTION_INPUT_RESOURCE_ID = "resource-id"
const val RESOURCE_RESOLUTION_INPUT_RESOURCE_TYPE = "resource-type"
- val DATA_DICTIONARY_SECRET_SOURCE_TYPES = arrayOf("vault-data") //Add more secret data dictionary source type here
} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt
index 641175ca2..51170a9b2 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt
@@ -28,6 +28,7 @@ import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.proc
import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils
import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.utils.ResourceDefinitionUtils.createResourceAssignments
import org.onap.ccsdk.cds.controllerblueprints.core.*
+import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService
import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintTemplateService
import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
@@ -151,7 +152,9 @@ open class ResourceResolutionServiceImpl(private var applicationContext: Applica
ResourceAssignmentUtils.generateResourceDataForAssignments(resourceAssignments.toList())
resolvedContent = blueprintTemplateService.generateContent(bluePrintRuntimeService, nodeTemplateName,
- artifactTemplate, resolvedParamJsonContent)
+ artifactTemplate, resolvedParamJsonContent, false,
+ mutableMapOf(ResourceResolutionConstants.RESOURCE_RESOLUTION_INPUT_OCCURRENCE to
+ properties[ResourceResolutionConstants.RESOURCE_RESOLUTION_INPUT_OCCURRENCE].asJsonPrimitive()))
if (isToStore(properties)) {
templateResolutionDBService.write(properties, resolvedContent, bluePrintRuntimeService, artifactPrefix)
@@ -330,7 +333,9 @@ open class ResourceResolutionServiceImpl(private var applicationContext: Applica
resourceAssignmentList.forEach {
if (compareOne(resourceResolution, it)) {
log.info("Resource ({}) already resolve: value=({})", it.name, resourceResolution.value)
- val value = resourceResolution.value!!.asJsonPrimitive()
+
+ // Make sure to recreate value as per the defined type.
+ val value = resourceResolution.value!!.asJsonType(it.property!!.type)
it.property!!.value = value
it.status = resourceResolution.status
ResourceAssignmentUtils.setResourceDataValue(it, raRuntimeService, value)
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
index 01cfd723b..117df1e5b 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
@@ -1,6 +1,6 @@
/*
* Copyright © 2017-2018 AT&T Intellectual Property.
- * Modifications Copyright © 2019 IBM.
+ * Modifications Copyright (c) 2019 IBM, Bell Canada.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.uti
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.node.ArrayNode
+import com.fasterxml.jackson.databind.node.NullNode
import com.fasterxml.jackson.databind.node.ObjectNode
import com.fasterxml.jackson.databind.node.TextNode
import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
@@ -194,85 +195,214 @@ class ResourceAssignmentUtils {
@Throws(BluePrintProcessorException::class)
fun parseResponseNode(responseNode: JsonNode, resourceAssignment: ResourceAssignment,
raRuntimeService: ResourceAssignmentRuntimeService, outputKeyMapping: MutableMap<String, String>): JsonNode {
+ try {
+ if ((resourceAssignment.property?.type).isNullOrEmpty()) {
+ throw BluePrintProcessorException("Couldn't get data dictionary type for dictionary name (${resourceAssignment.name})")
+ }
+ val type = resourceAssignment.property!!.type
+ return when (type) {
+ in BluePrintTypes.validPrimitiveTypes() -> {
+ parseResponseNodeForPrimitiveTypes(responseNode, resourceAssignment, outputKeyMapping)
+ }
+ in BluePrintTypes.validCollectionTypes() -> {
+ // Array Types
+ parseResponseNodeForCollection(responseNode, resourceAssignment, raRuntimeService, outputKeyMapping)
+ }
+ else -> {
+ // Complex Types
+ parseResponseNodeForComplexType(responseNode, resourceAssignment, raRuntimeService, outputKeyMapping)
+ }
+ }
+ } catch (e: Exception) {
+ logger.error("Fail to parse response data, error message $e")
+ throw BluePrintProcessorException("${e.message}", e)
+ }
+ }
+
+ private fun parseResponseNodeForPrimitiveTypes(responseNode: JsonNode, resourceAssignment: ResourceAssignment,
+ outputKeyMapping: MutableMap<String, String>): JsonNode {
val dName = resourceAssignment.dictionaryName
- val dSource = resourceAssignment.dictionarySource
- val type = nullToEmpty(resourceAssignment.property?.type)
- lateinit var entrySchemaType: String
- when (type) {
- in BluePrintTypes.validPrimitiveTypes() -> {
- if (dSource !in ResourceResolutionConstants.DATA_DICTIONARY_SECRET_SOURCE_TYPES)
- logger.info("For template key (${resourceAssignment.name}) setting value as ($responseNode)")
- val result = if (responseNode is ArrayNode)
- responseNode.get(0)
- else
- responseNode
- return if (result.isComplexType()) {
- check(result.has(outputKeyMapping[dName])) {
- "Fail to find output key mapping ($dName) in result."
+ logger.info("For template key (${resourceAssignment.name}) setting value as ($responseNode)")
+
+ var result: JsonNode? = responseNode
+ if (responseNode.isComplexType()) {
+ val key = outputKeyMapping.keys.firstOrNull()
+ var returnNode: JsonNode? = responseNode
+ if (responseNode is ArrayNode) {
+ val arrayNode = responseNode.toList()
+ val firstElement = if (key.isNullOrEmpty()) {
+ arrayNode.first()
+ }
+ else{
+ arrayNode.firstOrNull { element ->
+ element.isComplexType() && element.has(outputKeyMapping[key])
+ }
+ }
+
+ if (firstElement.isNull() || (firstElement!!.isComplexType() && !firstElement!!.has(outputKeyMapping[key]))
+ || (!result!!.isComplexType() && result is NullNode)) {
+ if (key.isNullOrEmpty()) {
+ throw BluePrintProcessorException("Fail to find mapping in the responseNode.")
+ }
+ else {
+ throw BluePrintProcessorException("Fail to find response with output key mapping ($key) in result.")
}
- result[outputKeyMapping[dName]]
- } else {
- result
}
+ returnNode = firstElement
}
- in BluePrintTypes.validCollectionTypes() -> {
- // Array Types
- entrySchemaType = checkNotEmpty(resourceAssignment.property?.entrySchema?.type) {
- "Entry schema is not defined for dictionary ($dName) info"
+ result = if (returnNode!!.isComplexType()) {
+ returnNode[outputKeyMapping[key]]
+ }
+ else {
+ returnNode
+ }
+ }
+ return result!!
+ }
+
+ private fun parseResponseNodeForCollection(responseNode: JsonNode, resourceAssignment: ResourceAssignment,
+ raRuntimeService: ResourceAssignmentRuntimeService,
+ outputKeyMapping: MutableMap<String, String>): JsonNode {
+ val dName = resourceAssignment.dictionaryName
+ if ((resourceAssignment.property?.entrySchema?.type).isNullOrEmpty()) {
+ throw BluePrintProcessorException("Couldn't get data type for dictionary type " +
+ "(${resourceAssignment.property!!.type}) and dictionary name ($dName)")
+ }
+ val entrySchemaType = resourceAssignment.property!!.entrySchema!!.type
+
+ var arrayNode = JacksonUtils.objectMapper.createArrayNode()
+
+ if (outputKeyMapping.isNotEmpty()) {
+ when (responseNode) {
+ is ArrayNode -> {
+ val responseArrayNode = responseNode.toList()
+ for (responseSingleJsonNode in responseArrayNode) {
+ val arrayChildNode = parseArrayNodeElementWithOutputKeyMapping(raRuntimeService, responseSingleJsonNode,
+ outputKeyMapping, entrySchemaType)
+ arrayNode.add(arrayChildNode)
+ }
}
- val arrayNode = JacksonUtils.objectMapper.createArrayNode()
- lateinit var responseValueNode: JsonNode
- lateinit var propertyType: String
- outputKeyMapping.map {
- val arrayChildNode = JacksonUtils.objectMapper.createObjectNode()
+ is ObjectNode -> {
val responseArrayNode = responseNode.rootFieldsToMap()
- outer@ for ((key, responseSingleJsonNode) in responseArrayNode) {
- if (key == it.key) {
- if (entrySchemaType in BluePrintTypes.validPrimitiveTypes()) {
- responseValueNode = responseSingleJsonNode
- propertyType = entrySchemaType
-
- } else {
- responseValueNode = responseSingleJsonNode.get(it.key)
- propertyType = getPropertyType(raRuntimeService, entrySchemaType, it.key)
- }
- if (resourceAssignment.dictionarySource !in ResourceResolutionConstants.DATA_DICTIONARY_SECRET_SOURCE_TYPES)
- logger.info("For List Type Resource: key (${it.key}), value ($responseValueNode), " +
- "type ({$propertyType})")
- JacksonUtils.populateJsonNodeValues(it.value,
- responseValueNode, propertyType, arrayChildNode)
- arrayNode.add(arrayChildNode)
- break@outer
- }
- }
+ val arrayNodeResult = parseObjectNodeWithOutputKeyMapping(responseArrayNode, outputKeyMapping, entrySchemaType)
+ arrayNode.addAll(arrayNodeResult)
+ }
+ else -> {
+ throw BluePrintProcessorException("Key-value response expected to match the responseNode.")
}
- if (resourceAssignment.dictionarySource !in ResourceResolutionConstants.DATA_DICTIONARY_SECRET_SOURCE_TYPES)
- logger.info("For template key (${resourceAssignment.name}) setting value as ($arrayNode)")
-
- return arrayNode
}
- else -> {
- // Complex Types
- entrySchemaType = checkNotEmpty(resourceAssignment.property?.type) {
- "Entry schema is not defined for dictionary ($dName) info"
+ }
+ else {
+ when (responseNode) {
+ is ArrayNode -> {
+ responseNode.forEach { elementNode ->
+ arrayNode.add(elementNode)
+ }
}
- val objectNode = JacksonUtils.objectMapper.createObjectNode()
+ is ObjectNode -> {
+ val responseArrayNode = responseNode.rootFieldsToMap()
+ for ((key, responseSingleJsonNode) in responseArrayNode) {
+ val arrayChildNode = JacksonUtils.objectMapper.createObjectNode()
+ JacksonUtils.populateJsonNodeValues(key, responseSingleJsonNode, entrySchemaType, arrayChildNode)
+ arrayNode.add(arrayChildNode)
+ }
+ }
+ else -> {
+ arrayNode.add(responseNode)
+ }
+ }
+ }
+
+ logger.info("For template key (${resourceAssignment.name}) setting value as ($arrayNode)")
+
+ return arrayNode
+ }
+
+ private fun parseResponseNodeForComplexType(responseNode: JsonNode, resourceAssignment: ResourceAssignment,
+ raRuntimeService: ResourceAssignmentRuntimeService,
+ outputKeyMapping: MutableMap<String, String>): JsonNode {
+ val entrySchemaType = resourceAssignment.property!!.type
+ val dictionaryName = resourceAssignment.dictionaryName!!
+
+ var result: ObjectNode
+ if (checkOutputKeyMappingInDataTypeProperties(entrySchemaType, outputKeyMapping, raRuntimeService))
+ {
+ result = parseArrayNodeElementWithOutputKeyMapping(raRuntimeService, responseNode, outputKeyMapping, entrySchemaType)
+ }
+ else {
+ val childNode = JacksonUtils.objectMapper.createObjectNode()
+ if (outputKeyMapping.isNotEmpty()) {
outputKeyMapping.map {
- val responseKeyValue = responseNode.get(it.key)
- val propertyTypeForDataType = ResourceAssignmentUtils
- .getPropertyType(raRuntimeService, entrySchemaType, it.key)
+ val responseKeyValue = if (responseNode.has(it.key)) {
+ responseNode.get(it.key)
+ }
+ else {
+ NullNode.getInstance()
+ }
- if (resourceAssignment.dictionarySource !in ResourceResolutionConstants.DATA_DICTIONARY_SECRET_SOURCE_TYPES)
- logger.info("For List Type Resource: key (${it.key}), value ($responseKeyValue), type ({$propertyTypeForDataType})")
- JacksonUtils.populateJsonNodeValues(it.value, responseKeyValue, propertyTypeForDataType, objectNode)
+ JacksonUtils.populateJsonNodeValues(it.value,
+ responseKeyValue, entrySchemaType, childNode)
}
+ }
+ else {
+ JacksonUtils.populateJsonNodeValues(dictionaryName, responseNode, entrySchemaType, childNode)
+ }
+ result = childNode
+ }
+ return result
+ }
+
+ private fun parseArrayNodeElementWithOutputKeyMapping(raRuntimeService: ResourceAssignmentRuntimeService,
+ responseSingleJsonNode: JsonNode, outputKeyMapping:
+ MutableMap<String, String>, entrySchemaType: String): ObjectNode {
+ val arrayChildNode = JacksonUtils.objectMapper.createObjectNode()
+
+ outputKeyMapping.map {
+ val responseKeyValue = if (responseSingleJsonNode.has(it.key)) {
+ responseSingleJsonNode.get(it.key)
+ }
+ else {
+ NullNode.getInstance()
+ }
+ val propertyTypeForDataType = ResourceAssignmentUtils
+ .getPropertyType(raRuntimeService, entrySchemaType, it.key)
+
+ logger.info("For List Type Resource: key (${it.key}), value ($responseKeyValue), " +
+ "type ({$propertyTypeForDataType})")
- if (resourceAssignment.dictionarySource !in ResourceResolutionConstants.DATA_DICTIONARY_SECRET_SOURCE_TYPES)
- logger.info("For template key (${resourceAssignment.name}) setting value as ($objectNode)")
+ JacksonUtils.populateJsonNodeValues(it.value,
+ responseKeyValue, propertyTypeForDataType, arrayChildNode)
+ }
+
+ return arrayChildNode
+ }
+
+ private fun parseObjectNodeWithOutputKeyMapping(responseArrayNode: MutableMap<String, JsonNode>,
+ outputKeyMapping: MutableMap<String, String>,
+ entrySchemaType: String): ArrayNode {
+ val arrayNode = JacksonUtils.objectMapper.createArrayNode()
+ outputKeyMapping.map {
+ val objectNode = JacksonUtils.objectMapper.createObjectNode()
+ val responseSingleJsonNode = responseArrayNode.filterKeys { key -> key == it.key }.entries.firstOrNull()
- return objectNode
+ if (responseSingleJsonNode == null) {
+ JacksonUtils.populateJsonNodeValues(it.value, NullNode.getInstance(), entrySchemaType, objectNode)
}
+ else
+ {
+ JacksonUtils.populateJsonNodeValues(it.value, responseSingleJsonNode.value, entrySchemaType, objectNode)
+ }
+ arrayNode.add(objectNode)
}
+
+ return arrayNode
+ }
+
+ private fun checkOutputKeyMappingInDataTypeProperties(dataTypeName: String, outputKeyMapping: MutableMap<String, String>,
+ raRuntimeService: ResourceAssignmentRuntimeService): Boolean {
+ val dataTypeProps = raRuntimeService.bluePrintContext().dataTypeByName(dataTypeName)?.properties
+ val result = outputKeyMapping.filterKeys { !dataTypeProps!!.containsKey(it) }.keys.firstOrNull()
+ return result == null
}
}
} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtilsTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtilsTest.kt
index 9b87c12eb..9365c3e34 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtilsTest.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtilsTest.kt
@@ -1,6 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
+ * Modifications Copyright (c) 2019 IBM, Bell Canada.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,16 +19,86 @@
* ============LICENSE_END=========================================================
*/
-
package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.utils
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.node.NullNode
import com.fasterxml.jackson.databind.node.TextNode
+import io.mockk.every
+import io.mockk.spyk
+import org.junit.Before
import org.junit.Test
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType
+import org.onap.ccsdk.cds.controllerblueprints.core.data.DataType
+import org.onap.ccsdk.cds.controllerblueprints.core.data.EntrySchema
import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
+import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintMetadataUtils
+import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceAssignment
import kotlin.test.assertEquals
+data class IpAddress(val port: String, val ip: String)
+data class Host(val name: String, val ipAddress: IpAddress)
+data class ExpectedResponseIp(val ip: String)
+data class ExpectedResponsePort(val port: String)
+
class ResourceAssignmentUtilsTest {
+ private lateinit var resourceAssignmentRuntimeService: ResourceAssignmentRuntimeService
+
+ @Before
+ fun setup() {
+
+ val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(
+ "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration")
+
+ resourceAssignmentRuntimeService = spyk(ResourceAssignmentRuntimeService("1234", bluePrintContext))
+
+ val propertiesDefinition1 = PropertyDefinition().apply {
+ type = "string"
+ id = "port"
+ }
+
+ val propertiesDefinition2 = PropertyDefinition().apply {
+ type = "string"
+ id = "ip"
+ }
+
+ val propertiesDefinition3 = PropertyDefinition().apply {
+ type = "string"
+ id = "name"
+ }
+
+ val propertiesDefinition4 = PropertyDefinition().apply {
+ type = "ip-address"
+ id = "ipAddress"
+ }
+
+ var mapOfPropertiesIpAddress = mutableMapOf<String, PropertyDefinition>()
+ mapOfPropertiesIpAddress["port"] = propertiesDefinition1
+ mapOfPropertiesIpAddress["ip"] = propertiesDefinition2
+
+ var mapOfPropertiesHost = mutableMapOf<String, PropertyDefinition>()
+ mapOfPropertiesHost["name"] = propertiesDefinition3
+ mapOfPropertiesHost["ipAddress"] = propertiesDefinition4
+
+ val myDataTypeIpaddress = DataType().apply {
+ id = "ip-address"
+ properties = mapOfPropertiesIpAddress
+ }
+
+ val myDataTypeHost = DataType().apply {
+ id = "host"
+ properties = mapOfPropertiesHost
+ }
+
+ every { resourceAssignmentRuntimeService.bluePrintContext().dataTypeByName("ip-address") } returns myDataTypeIpaddress
+
+ every { resourceAssignmentRuntimeService.bluePrintContext().dataTypeByName("host") } returns myDataTypeHost
+
+ every { resourceAssignmentRuntimeService.setNodeTemplateAttributeValue(any(), any(), any()) } returns Unit
+ }
@Test
fun `generateResourceDataForAssignments - positive test`() {
@@ -43,7 +114,6 @@ class ResourceAssignmentUtilsTest {
//then the assignment should produce a valid result
val expected = "{\n" + " \"pnf-id\" : \"valid_value\"\n" + "}"
assertEquals(expected, outcome, "unexpected outcome generated")
-
}
@Test
@@ -76,4 +146,243 @@ class ResourceAssignmentUtilsTest {
}
return resourceAssignmentForTest
}
+
+ @Test
+ fun parseResponseNodeTestForPrimitivesTypes(){
+ // Input values for primitive type
+ val keyValue = mutableMapOf<String, String>()
+ keyValue["value"]= "1.2.3.1"
+ val expectedPrimitiveType = TextNode("1.2.3.1")
+
+ var outcome = prepareResponseNodeForTest("sample-value", "string",
+ "", "1.2.3.1".asJsonPrimitive())
+ assertEquals(expectedPrimitiveType, outcome, "Unexpected outcome returned for primitive type of simple String")
+ outcome = prepareResponseNodeForTest("sample-key-value", "string", "", keyValue)
+ assertEquals(expectedPrimitiveType, outcome, "Unexpected outcome returned for primitive type of key-value String")
+ }
+
+ @Test
+ fun parseResponseNodeTestForCollectionsOfString(){
+ // Input values for collection type
+ val mapOfString = mutableMapOf<String, String>()
+ mapOfString["value1"] = "1.2.3.1"
+ mapOfString["port"] = "8888"
+ mapOfString["value2"] = "1.2.3.2"
+ val arrayOfKeyValue = arrayListOf(ExpectedResponseIp("1.2.3.1"),
+ ExpectedResponsePort( "8888"), ExpectedResponseIp("1.2.3.2"))
+
+ val mutableMapKeyValue = mutableMapOf<String, String>()
+ mutableMapKeyValue["value1"] = "1.2.3.1"
+ mutableMapKeyValue["port"] = "8888"
+
+ //List
+ val expectedListOfString = arrayOfKeyValue.asJsonType()
+ var outcome = prepareResponseNodeForTest("listOfString", "list",
+ "string", mapOfString.asJsonType())
+ assertEquals(expectedListOfString, outcome, "unexpected outcome returned for list of String")
+
+ //Map
+ val expectedMapOfString = mutableMapOf<String, JsonNode>()
+ expectedMapOfString["ip"] = "1.2.3.1".asJsonPrimitive()
+ expectedMapOfString["port"] = "8888".asJsonPrimitive()
+
+ val arrayNode = JacksonUtils.objectMapper.createArrayNode()
+ expectedMapOfString.map {
+ val arrayChildNode = JacksonUtils.objectMapper.createObjectNode()
+ arrayChildNode.set(it.key, it.value)
+ arrayNode.add(arrayChildNode)
+ }
+ val arrayChildNode1 = JacksonUtils.objectMapper.createObjectNode()
+ arrayChildNode1.set("ip", NullNode.getInstance())
+ arrayNode.add(arrayChildNode1)
+ outcome = prepareResponseNodeForTest("mapOfString", "map", "string",
+ mutableMapKeyValue.asJsonType())
+ assertEquals(arrayNode, outcome, "unexpected outcome returned for map of String")
+ }
+
+ @Test
+ fun parseResponseNodeTestForCollectionsOfJsonNode(){
+ // Input values for collection type
+ val mapOfString = mutableMapOf<String, JsonNode>()
+ mapOfString["value1"] = "1.2.3.1".asJsonPrimitive()
+ mapOfString["port"] = "8888".asJsonPrimitive()
+ mapOfString["value2"] = "1.2.3.2".asJsonPrimitive()
+ val arrayOfKeyValue = arrayListOf(ExpectedResponseIp("1.2.3.1"),
+ ExpectedResponsePort( "8888"), ExpectedResponseIp("1.2.3.2"))
+
+ val mutableMapKeyValue = mutableMapOf<String, JsonNode>()
+ mutableMapKeyValue["value1"] = "1.2.3.1".asJsonPrimitive()
+ mutableMapKeyValue["port"] = "8888".asJsonPrimitive()
+
+ //List
+ val expectedListOfString = arrayOfKeyValue.asJsonType()
+ var outcome = prepareResponseNodeForTest("listOfString", "list",
+ "string", mapOfString.asJsonType())
+ assertEquals(expectedListOfString, outcome, "unexpected outcome returned for list of String")
+
+ //Map
+ val expectedMapOfString = mutableMapOf<String, JsonNode>()
+ expectedMapOfString["ip"] = "1.2.3.1".asJsonPrimitive()
+ expectedMapOfString["port"] = "8888".asJsonPrimitive()
+ val arrayNode = JacksonUtils.objectMapper.createArrayNode()
+ expectedMapOfString.map {
+ val arrayChildNode = JacksonUtils.objectMapper.createObjectNode()
+ arrayChildNode.set(it.key, it.value)
+ arrayNode.add(arrayChildNode)
+ }
+ val arrayChildNode1 = JacksonUtils.objectMapper.createObjectNode()
+ arrayChildNode1.set("ip", NullNode.getInstance())
+ arrayNode.add(arrayChildNode1)
+ outcome = prepareResponseNodeForTest("mapOfString", "map",
+ "string", mutableMapKeyValue.asJsonType())
+ assertEquals(arrayNode, outcome, "unexpected outcome returned for map of String")
+ }
+
+ @Test
+ fun parseResponseNodeTestForCollectionsOfComplexType(){
+ // Input values for collection type
+ val mapOfComplexType = mutableMapOf<String, JsonNode>()
+ mapOfComplexType["value1"] = IpAddress("1111", "1.2.3.1").asJsonType()
+ mapOfComplexType["value2"] = IpAddress("2222", "1.2.3.2").asJsonType()
+ mapOfComplexType["value3"] = IpAddress("3333", "1.2.3.3").asJsonType()
+
+ //List
+ val arrayNode = JacksonUtils.objectMapper.createArrayNode()
+ mapOfComplexType.map {
+ val arrayChildNode = JacksonUtils.objectMapper.createObjectNode()
+ arrayChildNode.set("ipAddress", it.value)
+ arrayNode.add(arrayChildNode)
+ }
+ var outcome = prepareResponseNodeForTest("listOfMyDataType", "list",
+ "ip-address", mapOfComplexType.asJsonType())
+ assertEquals(arrayNode, outcome, "unexpected outcome returned for list of String")
+ }
+
+ @Test
+ fun `parseResponseNodeTestForComplexType find one output key mapping`(){
+ // Input values for complex type
+ val objectNode = JacksonUtils.objectMapper.createObjectNode()
+
+ // Input values for collection type
+ val mapOfComplexType = mutableMapOf<String, JsonNode>()
+ mapOfComplexType["value"] = Host("my-ipAddress", IpAddress("1111", "1.2.3.1")).asJsonType()
+ mapOfComplexType["port"] = "8888".asJsonType()
+ mapOfComplexType["something"] = "1.2.3.2".asJsonType()
+
+ val expectedComplexType = objectNode.set("ipAddress", Host("my-ipAddress", IpAddress("1111", "1.2.3.1")).asJsonType())
+ val outcome = prepareResponseNodeForTest("complexTypeOneKeys", "host",
+ "", mapOfComplexType.asJsonType())
+ assertEquals(expectedComplexType, outcome, "Unexpected outcome returned for complex type")
+ }
+
+ @Test
+ fun `parseResponseNodeTestForComplexType find all output key mapping`(){
+ // Input values for complex type
+ val objectNode = JacksonUtils.objectMapper.createObjectNode()
+
+ // Input values for collection type
+ val mapOfComplexType = mutableMapOf<String, JsonNode>()
+ mapOfComplexType["name"] = "my-ipAddress".asJsonType()
+ mapOfComplexType["ipAddress"] = IpAddress("1111", "1.2.3.1").asJsonType()
+
+ val expectedComplexType = Host("my-ipAddress", IpAddress("1111", "1.2.3.1")).asJsonType()
+ val outcome = prepareResponseNodeForTest("complexTypeAllKeys", "host",
+ "", mapOfComplexType.asJsonType())
+ assertEquals(expectedComplexType, outcome, "Unexpected outcome returned for complex type")
+ }
+
+ private fun prepareResponseNodeForTest(dictionary_source: String, sourceType: String, entrySchema: String,
+ response: Any): JsonNode {
+
+ val resourceAssignment = when (sourceType) {
+ "list", "map" -> {
+ prepareRADataDictionaryCollection(dictionary_source, sourceType, entrySchema)
+ }
+ "string" -> {
+ prepareRADataDictionaryOfPrimaryType(dictionary_source)
+ }
+ else -> {
+ prepareRADataDictionaryComplexType(dictionary_source, sourceType, entrySchema)
+ }
+ }
+
+ val responseNode = checkNotNull(JacksonUtils.getJsonNode(response)) {
+ "Failed to get database query result into Json node."
+ }
+
+ val outputKeyMapping = prepareOutputKeyMapping(dictionary_source)
+
+ return ResourceAssignmentUtils.parseResponseNode(responseNode, resourceAssignment, resourceAssignmentRuntimeService, outputKeyMapping)
+ }
+
+ private fun prepareRADataDictionaryOfPrimaryType(dictionary_source: String): ResourceAssignment {
+ return ResourceAssignment().apply {
+ name = "ipAddress"
+ dictionaryName = "sample-ip"
+ dictionarySource = "$dictionary_source"
+ property = PropertyDefinition().apply {
+ type = "string"
+ }
+ }
+ }
+
+ private fun prepareRADataDictionaryCollection(dictionary_source: String, sourceType: String, schema: String): ResourceAssignment {
+ return ResourceAssignment().apply {
+ name = "ipAddress-list"
+ dictionaryName = "sample-licenses"
+ dictionarySource = "$dictionary_source"
+ property = PropertyDefinition().apply {
+ type = "$sourceType"
+ entrySchema = EntrySchema().apply {
+ type = "$schema"
+ }
+ }
+ }
+ }
+
+ private fun prepareRADataDictionaryComplexType(dictionary_source: String, sourceType: String, schema: String): ResourceAssignment {
+ return ResourceAssignment().apply {
+ name = "ipAddress-complexType"
+ dictionaryName = "sample-licenses"
+ dictionarySource = "$dictionary_source"
+ property = PropertyDefinition().apply {
+ type = "$sourceType"
+ }
+ }
+ }
+
+ private fun prepareOutputKeyMapping(dictionary_source: String): MutableMap<String, String> {
+ val outputMapping = mutableMapOf<String, String>()
+
+ when (dictionary_source) {
+ "listOfString", "mapOfString" -> {
+ //List of string
+ outputMapping["value1"] = "ip"
+ outputMapping["port"] = "port"
+ outputMapping["value2"] = "ip"
+ }
+ "listOfMyDataType", "mapOfMyDataType" -> {
+ //List or map of complex Type
+ outputMapping["value1"] = "ipAddress"
+ outputMapping["value2"] = "ipAddress"
+ outputMapping["value3"] = "ipAddress"
+ }
+ "sample-key-value", "sample-value" -> {
+ //Primary Type
+ if (dictionary_source=="sample-key-value")
+ outputMapping["sample-ip"] = "value"
+ }
+ else -> {
+ //Complex Type
+ if (dictionary_source == "complexTypeOneKeys")
+ outputMapping["value"] = "ipAddress"
+ else {
+ outputMapping["name"] = "name"
+ outputMapping["ipAddress"] = "ipAddress"
+ }
+
+ }
+ }
+ return outputMapping
+ }
} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/restconf-executor/pom.xml b/ms/blueprintsprocessor/functions/restconf-executor/pom.xml
index 53f0f4e47..c1dd50126 100644
--- a/ms/blueprintsprocessor/functions/restconf-executor/pom.xml
+++ b/ms/blueprintsprocessor/functions/restconf-executor/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>functions</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor.functions</groupId>
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml
index 783d8efbe..67b84240c 100644
--- a/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>commons</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>db-lib</artifactId>
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml
index b8d418f27..3ed0424ee 100644
--- a/ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>commons</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>dmaap-lib</artifactId>
diff --git a/ms/blueprintsprocessor/modules/commons/grpc-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/grpc-lib/pom.xml
index ad16eb908..e5214e139 100644
--- a/ms/blueprintsprocessor/modules/commons/grpc-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/grpc-lib/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>commons</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/message-lib/pom.xml
index 2a67da10a..b5b8c46a3 100644
--- a/ms/blueprintsprocessor/modules/commons/message-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/message-lib/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>commons</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/ms/blueprintsprocessor/modules/commons/pom.xml b/ms/blueprintsprocessor/modules/commons/pom.xml
index 8c88db424..37dd5d77e 100755
--- a/ms/blueprintsprocessor/modules/commons/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>modules</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>commons</artifactId>
diff --git a/ms/blueprintsprocessor/modules/commons/processor-core/pom.xml b/ms/blueprintsprocessor/modules/commons/processor-core/pom.xml
index 8ebbc6768..673d1277c 100644
--- a/ms/blueprintsprocessor/modules/commons/processor-core/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/processor-core/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>commons</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>processor-core</artifactId>
diff --git a/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt b/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt
index c45ebc127..5a6ba0661 100644
--- a/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt
+++ b/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt
@@ -18,6 +18,7 @@
package org.onap.ccsdk.cds.blueprintsprocessor.core.api.data
import com.fasterxml.jackson.annotation.JsonFormat
+import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.node.ObjectNode
import io.swagger.annotations.ApiModelProperty
@@ -40,6 +41,7 @@ open class ExecutionServiceInput {
" and the input for resource resolution located within the xxx-request block, contained within xxx-properties")
lateinit var payload: ObjectNode
@get:ApiModelProperty(hidden = true)
+ @get:JsonIgnore
var stepData: StepData? = null
}
@@ -56,6 +58,7 @@ open class ExecutionServiceOutput {
" and the input for resource resolution located within the xxx-request block, contained within xxx-properties")
lateinit var payload: ObjectNode
@get:ApiModelProperty(hidden = true)
+ @get:JsonIgnore
var stepData: StepData? = null
}
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml
index 7602853f8..7c6cceb23 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>commons</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>rest-lib</artifactId>
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibData.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibData.kt
index 75a9409fd..68672f227 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibData.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibData.kt
@@ -1,6 +1,7 @@
/*
* Copyright © 2017-2018 AT&T Intellectual Property.
* Modifications Copyright © 2019 Huawei.
+ * Modifications Copyright © 2019 Bell Canada.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@ package org.onap.ccsdk.cds.blueprintsprocessor.rest
open class RestClientProperties {
lateinit var type: String
lateinit var url: String
+ var additionalHeaders: Map<String, String>? = null
}
open class SSLRestClientProperties : RestClientProperties() {
@@ -63,4 +65,4 @@ open class PolicyManagerRestClientProperties : RestClientProperties() {
lateinit var env: String
lateinit var clientAuth: String
lateinit var authorisation: String
-} \ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt
index 3190cd1c6..bb6937d7c 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt
@@ -18,6 +18,10 @@ package org.onap.ccsdk.cds.blueprintsprocessor.rest.service
import org.apache.http.message.BasicHeader
import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.RestClientProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.RestLibConstants
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.utils.WebClientUtils
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
import org.springframework.http.HttpHeaders
import org.springframework.http.MediaType
import java.nio.charset.Charset
@@ -25,42 +29,43 @@ import java.util.*
class BasicAuthRestClientService(private val restClientProperties:
BasicAuthRestClientProperties) :
- BlueprintWebClientService {
+ BlueprintWebClientService {
override fun defaultHeaders(): Map<String, String> {
val encodedCredentials = setBasicAuth(restClientProperties.username,
- restClientProperties.password)
+ restClientProperties.password)
return mapOf(
- HttpHeaders.CONTENT_TYPE to MediaType.APPLICATION_JSON_VALUE,
- HttpHeaders.ACCEPT to MediaType.APPLICATION_JSON_VALUE,
- HttpHeaders.AUTHORIZATION to "Basic $encodedCredentials")
+ HttpHeaders.CONTENT_TYPE to MediaType.APPLICATION_JSON_VALUE,
+ HttpHeaders.ACCEPT to MediaType.APPLICATION_JSON_VALUE,
+ HttpHeaders.AUTHORIZATION to "Basic $encodedCredentials")
}
override fun host(uri: String): String {
return restClientProperties.url + uri
}
- override fun convertToBasicHeaders(headers: Map<String, String>):
- Array<BasicHeader> {
+ override fun convertToBasicHeaders(headers: Map<String, String>):
+ Array<BasicHeader> {
val customHeaders: MutableMap<String, String> = headers.toMutableMap()
+ //inject additionalHeaders
+ customHeaders.putAll(verifyAdditionalHeaders(restClientProperties))
+
if (!headers.containsKey(HttpHeaders.AUTHORIZATION)) {
val encodedCredentials = setBasicAuth(
- restClientProperties.username,
- restClientProperties.password)
+ restClientProperties.username,
+ restClientProperties.password)
customHeaders[HttpHeaders.AUTHORIZATION] =
- "Basic $encodedCredentials"
+ "Basic $encodedCredentials"
}
return super.convertToBasicHeaders(customHeaders)
}
private fun setBasicAuth(username: String, password: String): String {
-
val credentialsString = "$username:$password"
return Base64.getEncoder().encodeToString(
- credentialsString.toByteArray(Charset.defaultCharset()))
+ credentialsString.toByteArray(Charset.defaultCharset()))
}
-
-} \ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyService.kt
index 4f6865764..8d4f0ca63 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyService.kt
@@ -38,7 +38,7 @@ open class BluePrintRestLibPropertyService(private var bluePrintProperties:
BluePrintProperties) {
open fun blueprintWebClientService(jsonNode: JsonNode):
- BlueprintWebClientService {
+ BlueprintWebClientService {
val restClientProperties = restClientProperties(jsonNode)
return blueprintWebClientService(restClientProperties)
}
@@ -51,7 +51,7 @@ open class BluePrintRestLibPropertyService(private var bluePrintProperties:
fun restClientProperties(prefix: String): RestClientProperties {
val type = bluePrintProperties.propertyBeanType(
- "$prefix.type", String::class.java)
+ "$prefix.type", String::class.java)
return when (type) {
RestLibConstants.TYPE_BASIC_AUTH -> {
basicAuthRestClientProperties(prefix)
@@ -76,7 +76,7 @@ open class BluePrintRestLibPropertyService(private var bluePrintProperties:
}
else -> {
throw BluePrintProcessorException("Rest adaptor($type) is" +
- " not supported")
+ " not supported")
}
}
}
@@ -86,43 +86,35 @@ open class BluePrintRestLibPropertyService(private var bluePrintProperties:
val type = jsonNode.get("type").textValue()
return when (type) {
RestLibConstants.TYPE_TOKEN_AUTH -> {
- JacksonUtils.readValue(jsonNode,
- TokenAuthRestClientProperties::class.java)!!
+ JacksonUtils.readValue(jsonNode, TokenAuthRestClientProperties::class.java)!!
}
RestLibConstants.TYPE_BASIC_AUTH -> {
- JacksonUtils.readValue(jsonNode,
- BasicAuthRestClientProperties::class.java)!!
+ JacksonUtils.readValue(jsonNode, BasicAuthRestClientProperties::class.java)!!
}
RestLibConstants.TYPE_DME2_PROXY -> {
- JacksonUtils.readValue(jsonNode,
- DME2RestClientProperties::class.java)!!
+ JacksonUtils.readValue(jsonNode, DME2RestClientProperties::class.java)!!
}
RestLibConstants.TYPE_POLICY_MANAGER -> {
- JacksonUtils.readValue(jsonNode,
- PolicyManagerRestClientProperties::class.java)!!
+ JacksonUtils.readValue(jsonNode, PolicyManagerRestClientProperties::class.java)!!
}
RestLibConstants.TYPE_SSL_BASIC_AUTH -> {
- JacksonUtils.readValue(jsonNode,
- SSLBasicAuthRestClientProperties::class.java)!!
+ JacksonUtils.readValue(jsonNode, SSLBasicAuthRestClientProperties::class.java)!!
}
RestLibConstants.TYPE_SSL_TOKEN_AUTH -> {
- JacksonUtils.readValue(jsonNode,
- SSLTokenAuthRestClientProperties::class.java)!!
+ JacksonUtils.readValue(jsonNode, SSLTokenAuthRestClientProperties::class.java)!!
}
RestLibConstants.TYPE_SSL_NO_AUTH -> {
- JacksonUtils.readValue(
- jsonNode, SSLRestClientProperties::class.java)!!
+ JacksonUtils.readValue(jsonNode, SSLRestClientProperties::class.java)!!
}
else -> {
- throw BluePrintProcessorException("Rest adaptor($type) is" +
- " not supported")
+ throw BluePrintProcessorException(
+ "Rest adaptor($type) is not supported")
}
}
}
-
- private fun blueprintWebClientService(
- restClientProperties: RestClientProperties):
- BlueprintWebClientService {
+
+ private fun blueprintWebClientService(restClientProperties: RestClientProperties):
+ BlueprintWebClientService {
when (restClientProperties) {
is SSLRestClientProperties -> {
@@ -138,66 +130,65 @@ open class BluePrintRestLibPropertyService(private var bluePrintProperties:
return DME2ProxyRestClientService(restClientProperties)
}
else -> {
- throw BluePrintProcessorException("couldn't get rest " +
- "service for")
+ throw BluePrintProcessorException("couldn't get rest service for type:${restClientProperties.type} uri: ${restClientProperties.url}")
}
}
}
private fun tokenRestClientProperties(prefix: String):
- TokenAuthRestClientProperties {
+ TokenAuthRestClientProperties {
return bluePrintProperties.propertyBeanType(
- prefix, TokenAuthRestClientProperties::class.java)
+ prefix, TokenAuthRestClientProperties::class.java)
}
private fun basicAuthRestClientProperties(prefix: String):
- BasicAuthRestClientProperties {
+ BasicAuthRestClientProperties {
return bluePrintProperties.propertyBeanType(
- prefix, BasicAuthRestClientProperties::class.java)
+ prefix, BasicAuthRestClientProperties::class.java)
}
private fun sslBasicAuthRestClientProperties(prefix: String):
- SSLRestClientProperties {
+ SSLRestClientProperties {
val sslProps: SSLBasicAuthRestClientProperties =
- bluePrintProperties.propertyBeanType(
- prefix, SSLBasicAuthRestClientProperties::class.java)
- val basicProps : BasicAuthRestClientProperties =
- bluePrintProperties.propertyBeanType(
- prefix, BasicAuthRestClientProperties::class.java)
+ bluePrintProperties.propertyBeanType(
+ prefix, SSLBasicAuthRestClientProperties::class.java)
+ val basicProps: BasicAuthRestClientProperties =
+ bluePrintProperties.propertyBeanType(
+ prefix, BasicAuthRestClientProperties::class.java)
sslProps.basicAuth = basicProps
return sslProps
}
private fun sslTokenAuthRestClientProperties(prefix: String):
- SSLRestClientProperties {
+ SSLRestClientProperties {
val sslProps: SSLTokenAuthRestClientProperties =
- bluePrintProperties.propertyBeanType(prefix,
- SSLTokenAuthRestClientProperties::class.java)
- val basicProps : TokenAuthRestClientProperties =
- bluePrintProperties.propertyBeanType(prefix,
- TokenAuthRestClientProperties::class.java)
+ bluePrintProperties.propertyBeanType(prefix,
+ SSLTokenAuthRestClientProperties::class.java)
+ val basicProps: TokenAuthRestClientProperties =
+ bluePrintProperties.propertyBeanType(prefix,
+ TokenAuthRestClientProperties::class.java)
sslProps.tokenAuth = basicProps
return sslProps
}
private fun sslNoAuthRestClientProperties(prefix: String):
- SSLRestClientProperties {
+ SSLRestClientProperties {
return bluePrintProperties.propertyBeanType(
- prefix, SSLRestClientProperties::class.java)
+ prefix, SSLRestClientProperties::class.java)
}
private fun dme2ProxyClientProperties(prefix: String):
- DME2RestClientProperties {
+ DME2RestClientProperties {
return bluePrintProperties.propertyBeanType(
- prefix, DME2RestClientProperties::class.java)
+ prefix, DME2RestClientProperties::class.java)
}
private fun policyManagerRestClientProperties(prefix: String):
- PolicyManagerRestClientProperties {
+ PolicyManagerRestClientProperties {
return bluePrintProperties.propertyBeanType(
- prefix, PolicyManagerRestClientProperties::class.java)
+ prefix, PolicyManagerRestClientProperties::class.java)
}
}
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt
index 1acd07b7b..26c808874 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt
@@ -28,11 +28,14 @@ import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.CloseableHttpClient
import org.apache.http.impl.client.HttpClients
import org.apache.http.message.BasicHeader
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.RestClientProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.RestLibConstants
import org.onap.ccsdk.cds.blueprintsprocessor.rest.utils.WebClientUtils
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintRetryException
import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintIOUtils
import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
+import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import java.io.IOException
import java.io.InputStream
@@ -46,9 +49,9 @@ interface BlueprintWebClientService {
fun httpClient(): CloseableHttpClient {
return HttpClients.custom()
- .addInterceptorFirst(WebClientUtils.logRequest())
- .addInterceptorLast(WebClientUtils.logResponse())
- .build()
+ .addInterceptorFirst(WebClientUtils.logRequest())
+ .addInterceptorLast(WebClientUtils.logResponse())
+ .build()
}
/** High performance non blocking Retry function, If execution block [block] throws BluePrintRetryException
@@ -82,10 +85,12 @@ interface BlueprintWebClientService {
HttpMethod.POST -> post(path, request, convertedHeaders, String::class.java)
HttpMethod.PUT -> put(path, request, convertedHeaders, String::class.java)
HttpMethod.PATCH -> patch(path, request, convertedHeaders, String::class.java)
- else -> throw BluePrintProcessorException("Unsupported methodType($methodType)")
+ else -> throw BluePrintProcessorException(
+ "Unsupported methodType($methodType) attempted on path($path)")
}
}
+ //TODO: convert to multi-map
fun convertToBasicHeaders(headers: Map<String, String>): Array<BasicHeader> {
return headers.map { BasicHeader(it.key, it.value) }.toTypedArray()
}
@@ -135,8 +140,8 @@ interface BlueprintWebClientService {
@Throws(IOException::class, ClientProtocolException::class)
private fun <T> performCallAndExtractTypedWebClientResponse(
- httpUriRequest: HttpUriRequest, responseType: Class<T>):
- WebClientResponse<T> {
+ httpUriRequest: HttpUriRequest, responseType: Class<T>):
+ WebClientResponse<T> {
val httpResponse = httpClient().execute(httpUriRequest)
val statusCode = httpResponse.statusLine.statusCode
httpResponse.entity.content.use {
@@ -154,7 +159,7 @@ interface BlueprintWebClientService {
}
suspend fun <T> getNB(path: String, additionalHeaders: Array<BasicHeader>?, responseType: Class<T>):
- WebClientResponse<T> = withContext(Dispatchers.IO) {
+ WebClientResponse<T> = withContext(Dispatchers.IO) {
get(path, additionalHeaders!!, responseType)
}
@@ -191,27 +196,27 @@ interface BlueprintWebClientService {
}
suspend fun <T> deleteNB(path: String, additionalHeaders: Array<BasicHeader>?):
- WebClientResponse<String> {
+ WebClientResponse<String> {
return deleteNB(path, additionalHeaders, String::class.java)
}
suspend fun <T> deleteNB(path: String, additionalHeaders: Array<BasicHeader>?, responseType: Class<T>):
- WebClientResponse<T> = withContext(Dispatchers.IO) {
+ WebClientResponse<T> = withContext(Dispatchers.IO) {
delete(path, additionalHeaders!!, responseType)
}
suspend fun <T> patchNB(path: String, request: Any, additionalHeaders: Array<BasicHeader>?, responseType: Class<T>):
- WebClientResponse<T> = withContext(Dispatchers.IO) {
+ WebClientResponse<T> = withContext(Dispatchers.IO) {
patch(path, request, additionalHeaders!!, responseType)
}
suspend fun exchangeNB(methodType: String, path: String, request: Any): WebClientResponse<String> {
return exchangeNB(methodType, path, request, hashMapOf(),
- String::class.java)
+ String::class.java)
}
suspend fun exchangeNB(methodType: String, path: String, request: Any, additionalHeaders: Map<String, String>?):
- WebClientResponse<String> {
+ WebClientResponse<String> {
return exchangeNB(methodType, path, request, additionalHeaders, String::class.java)
}
@@ -249,7 +254,7 @@ interface BlueprintWebClientService {
}
private fun basicHeaders(headers: Map<String, String>?):
- Array<BasicHeader> {
+ Array<BasicHeader> {
val basicHeaders = mutableListOf<BasicHeader>()
defaultHeaders().forEach { (name, value) ->
basicHeaders.add(BasicHeader(name, value))
@@ -263,11 +268,29 @@ interface BlueprintWebClientService {
// Non Blocking Rest Implementation
suspend fun httpClientNB(): CloseableHttpClient {
return HttpClients.custom()
- .addInterceptorFirst(WebClientUtils.logRequest())
- .addInterceptorLast(WebClientUtils.logResponse())
- .build()
+ .addInterceptorFirst(WebClientUtils.logRequest())
+ .addInterceptorLast(WebClientUtils.logResponse())
+ .build()
}
//TODO maybe there could be cases where we care about return headers?
data class WebClientResponse<T>(val status: Int, val body: T)
+
+ fun verifyAdditionalHeaders(restClientProperties: RestClientProperties): Map<String, String> {
+ val customHeaders: MutableMap<String, String> = mutableMapOf()
+ //Extract additionalHeaders from the requestProperties and
+ //throw an error if HttpHeaders.AUTHORIZATION key (headers are case-insensitive)
+ restClientProperties.additionalHeaders?.let {
+ if (it.keys.map { k -> k.toLowerCase().trim() }.contains(HttpHeaders.AUTHORIZATION.toLowerCase())) {
+ val errMsg = "Error in definition of endpoint ${restClientProperties.url}." +
+ " User-supplied \"additionalHeaders\" cannot contain AUTHORIZATION header with" +
+ " auth-type \"${RestLibConstants.TYPE_BASIC_AUTH}\""
+ WebClientUtils.log.error(errMsg)
+ throw BluePrintProcessorException(errMsg)
+ } else {
+ customHeaders.putAll(it)
+ }
+ }
+ return customHeaders
+ }
}
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/SSLRestClientService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/SSLRestClientService.kt
index 30dd49018..2acf776ca 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/SSLRestClientService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/SSLRestClientService.kt
@@ -33,25 +33,31 @@ import java.io.FileInputStream
import java.security.KeyStore
import java.security.cert.X509Certificate
-class SSLRestClientService(private val restClientProperties:
- SSLRestClientProperties) :
- BlueprintWebClientService {
+class SSLRestClientService(private val restClientProperties: SSLRestClientProperties) :
+ BlueprintWebClientService {
var auth: BlueprintWebClientService? = null
init {
- auth = getAuthService()
+ auth = getAuthService()
}
- private fun getAuthService() : BlueprintWebClientService? {
-
- return when(restClientProperties) {
+ private fun getAuthService(): BlueprintWebClientService? {
+ //type,url and additional headers don't get carried over to TokenAuthRestClientProperties from SSLTokenAuthRestClientProperties
+ //set them in auth obj to be consistent. TODO: refactor
+ return when (restClientProperties) {
is SSLBasicAuthRestClientProperties -> {
- val basic = restClientProperties.basicAuth!!
- BasicAuthRestClientService(basic)
+ val basicAuthProps = restClientProperties.basicAuth!!
+ basicAuthProps.additionalHeaders = restClientProperties.additionalHeaders
+ basicAuthProps.url = restClientProperties.url
+ basicAuthProps.type = restClientProperties.type
+ BasicAuthRestClientService(basicAuthProps)
}
is SSLTokenAuthRestClientProperties -> {
- val token = restClientProperties.tokenAuth!!
+ val token = restClientProperties.tokenAuth!!
+ token.additionalHeaders = restClientProperties.additionalHeaders
+ token.url = restClientProperties.url
+ token.type = restClientProperties.type
TokenAuthRestClientService(token)
}
else -> {
@@ -61,19 +67,16 @@ class SSLRestClientService(private val restClientProperties:
}
}
-
override fun defaultHeaders(): Map<String, String> {
-
if (auth != null) {
return auth!!.defaultHeaders()
}
return mapOf(
- HttpHeaders.CONTENT_TYPE to MediaType.APPLICATION_JSON_VALUE,
- HttpHeaders.ACCEPT to MediaType.APPLICATION_JSON_VALUE)
+ HttpHeaders.CONTENT_TYPE to MediaType.APPLICATION_JSON_VALUE,
+ HttpHeaders.ACCEPT to MediaType.APPLICATION_JSON_VALUE)
}
override fun host(uri: String): String {
-
return restClientProperties.url + uri
}
@@ -85,8 +88,9 @@ class SSLRestClientService(private val restClientProperties:
val sslTrust = restClientProperties.sslTrust
val sslTrustPwd = restClientProperties.sslTrustPassword
- val acceptingTrustStrategy = { chain: Array<X509Certificate>,
- authType: String -> true }
+ val acceptingTrustStrategy = { _: Array<X509Certificate>, _: String ->
+ true
+ }
val sslContext = SSLContextBuilder.create()
if (sslKey != null && sslKeyPwd != null) {
@@ -98,13 +102,12 @@ class SSLRestClientService(private val restClientProperties:
}
sslContext.loadTrustMaterial(File(sslTrust), sslTrustPwd.toCharArray(),
- acceptingTrustStrategy)
+ acceptingTrustStrategy)
val csf = SSLConnectionSocketFactory(sslContext.build())
return HttpClients.custom()
- .addInterceptorFirst(WebClientUtils.logRequest())
- .addInterceptorLast(WebClientUtils.logResponse())
- .setSSLSocketFactory(csf).build()
-
+ .addInterceptorFirst(WebClientUtils.logRequest())
+ .addInterceptorLast(WebClientUtils.logResponse())
+ .setSSLSocketFactory(csf).build()
}
// Non Blocking Rest Implementation
@@ -113,13 +116,15 @@ class SSLRestClientService(private val restClientProperties:
}
override fun convertToBasicHeaders(headers: Map<String, String>): Array<BasicHeader> {
- var head1: Map<String, String> = defaultHeaders()
- var head2: MutableMap<String, String> = head1.toMutableMap()
- head2.putAll(headers)
+ val mergedDefaultAndSuppliedHeaders = defaultHeaders().plus(headers)
+ //During the initialization, getAuthService() sets the auth variable.
+ //If it's not null, then we have an authentication mechanism.
+ //If null - indicates no-auth used
if (auth != null) {
- return auth!!.convertToBasicHeaders(head2)
+ return auth!!.convertToBasicHeaders(mergedDefaultAndSuppliedHeaders)
}
- return super.convertToBasicHeaders(head2)
+ //inject additionalHeaders
+ return super.convertToBasicHeaders(mergedDefaultAndSuppliedHeaders
+ .plus(verifyAdditionalHeaders(restClientProperties)))
}
-
-} \ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt
index 82446994c..73b534143 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt
@@ -23,20 +23,20 @@ import org.springframework.http.MediaType
class TokenAuthRestClientService(private val restClientProperties:
TokenAuthRestClientProperties) :
- BlueprintWebClientService {
+ BlueprintWebClientService {
override fun defaultHeaders(): Map<String, String> {
-
return mapOf(
- HttpHeaders.CONTENT_TYPE to MediaType.APPLICATION_JSON_VALUE,
- HttpHeaders.ACCEPT to MediaType.APPLICATION_JSON_VALUE,
- HttpHeaders.AUTHORIZATION to restClientProperties.token!!)
+ HttpHeaders.CONTENT_TYPE to MediaType.APPLICATION_JSON_VALUE,
+ HttpHeaders.ACCEPT to MediaType.APPLICATION_JSON_VALUE,
+ HttpHeaders.AUTHORIZATION to restClientProperties.token!!)
}
override fun convertToBasicHeaders(headers: Map<String, String>):
- Array<BasicHeader> {
-
+ Array<BasicHeader> {
val customHeaders: MutableMap<String, String> = headers.toMutableMap()
+ //inject additionalHeaders
+ customHeaders.putAll(verifyAdditionalHeaders(restClientProperties))
if (!headers.containsKey(HttpHeaders.AUTHORIZATION)) {
customHeaders[HttpHeaders.AUTHORIZATION] = restClientProperties.token!!
}
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyServiceTest.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyServiceTest.kt
index 37a797f78..b617dab90 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyServiceTest.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BluePrintRestLibPropertyServiceTest.kt
@@ -2,6 +2,7 @@
* Copyright © 2017-2018 AT&T Intellectual Property.
* Modifications Copyright © 2018 IBM.
* Modifications Copyright © 2019 Huawei.
+ * Modifications Copyright © 2019 Bell Canada.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,11 +29,15 @@ import org.onap.ccsdk.cds.blueprintsprocessor.rest.BluePrintRestLibConfiguration
import org.onap.ccsdk.cds.blueprintsprocessor.rest.SSLBasicAuthRestClientProperties
import org.onap.ccsdk.cds.blueprintsprocessor.rest.SSLRestClientProperties
import org.onap.ccsdk.cds.blueprintsprocessor.rest.SSLTokenAuthRestClientProperties
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.http.MediaType
import org.springframework.test.context.ContextConfiguration
import org.springframework.test.context.TestPropertySource
import org.springframework.test.context.junit4.SpringRunner
import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import kotlin.test.assertNotNull
@RunWith(SpringRunner::class)
@@ -63,26 +68,25 @@ import kotlin.test.assertNotNull
"blueprintsprocessor.restclient.ssl.sslKeyPassword=changeit"
])
class BluePrintRestLibPropertyServiceTest {
-
@Autowired
lateinit var bluePrintRestLibPropertyService: BluePrintRestLibPropertyService
@Test
fun testRestClientProperties() {
val properties = bluePrintRestLibPropertyService.restClientProperties(
- "blueprintsprocessor.restclient.sample")
+ "blueprintsprocessor.restclient.sample")
assertNotNull(properties, "failed to create property bean")
assertNotNull(properties.url, "failed to get url property in" +
- " property bean")
+ " property bean")
}
@Test
fun testSSLBasicProperties() {
val properties = bluePrintRestLibPropertyService.restClientProperties(
- "blueprintsprocessor.restclient.sslbasic")
+ "blueprintsprocessor.restclient.sslbasic")
assertNotNull(properties, "failed to create property bean")
val p: SSLBasicAuthRestClientProperties =
- properties as SSLBasicAuthRestClientProperties
+ properties as SSLBasicAuthRestClientProperties
assertEquals(p.basicAuth!!.username, "admin")
assertEquals(p.basicAuth!!.password, "cds")
@@ -94,11 +98,11 @@ class BluePrintRestLibPropertyServiceTest {
@Test
fun testSSLTokenProperties() {
val properties = bluePrintRestLibPropertyService.restClientProperties(
- "blueprintsprocessor.restclient.ssltoken")
+ "blueprintsprocessor.restclient.ssltoken")
assertNotNull(properties, "failed to create property bean")
val p: SSLTokenAuthRestClientProperties =
- properties as SSLTokenAuthRestClientProperties
+ properties as SSLTokenAuthRestClientProperties
assertEquals(p.tokenAuth!!.token!!, "72178473kjshdkjgvbsdkjv903274908")
assertEquals(p.sslTrust, "src/test/resources/keystore.p12")
@@ -109,11 +113,11 @@ class BluePrintRestLibPropertyServiceTest {
@Test
fun testSSLNoAuthProperties() {
val properties = bluePrintRestLibPropertyService.restClientProperties(
- "blueprintsprocessor.restclient.ssl")
+ "blueprintsprocessor.restclient.ssl")
assertNotNull(properties, "failed to create property bean")
val p: SSLRestClientProperties =
- properties as SSLRestClientProperties
+ properties as SSLRestClientProperties
assertEquals(p.sslTrust, "src/test/resources/keystore.p12")
assertEquals(p.sslTrustPassword, "changeit")
@@ -125,113 +129,370 @@ class BluePrintRestLibPropertyServiceTest {
@Test
fun testSSLBasicPropertiesAsJson() {
- val json: String = "{\n" +
- " \"type\" : \"ssl-basic-auth\",\n" +
- " \"url\" : \"https://localhost:8443\",\n" +
- " \"keyStoreInstance\" : \"PKCS12\",\n" +
- " \"sslTrust\" : \"src/test/resources/keystore.p12\",\n" +
- " \"sslTrustPassword\" : \"changeit\",\n" +
- " \"basicAuth\" : {\n" +
- " \"username\" : \"admin\",\n" +
- " \"password\" : \"cds\"\n" +
- " }\n" +
- "}"
- val mapper = ObjectMapper()
- val actualObj: JsonNode = mapper.readTree(json)
+ val actualObj: JsonNode = defaultMapper.readTree(sslBasicAuthEndpointWithHeadersField())
val properties = bluePrintRestLibPropertyService.restClientProperties(
- actualObj)
+ actualObj)
assertNotNull(properties, "failed to create property bean")
- val p: SSLBasicAuthRestClientProperties =
- properties as SSLBasicAuthRestClientProperties
+ val p: SSLBasicAuthRestClientProperties = properties as SSLBasicAuthRestClientProperties
- assertEquals(p.basicAuth!!.username, "admin")
- assertEquals(p.basicAuth!!.password, "cds")
- assertEquals(p.sslTrust, "src/test/resources/keystore.p12")
- assertEquals(p.sslTrustPassword, "changeit")
- assertEquals(p.keyStoreInstance, "PKCS12")
+ assertEquals("admin", p.basicAuth!!.username)
+ assertEquals("cds", p.basicAuth!!.password)
+ assertEquals("src/test/resources/keystore.p12", p.sslTrust)
+ assertEquals("changeit", p.sslTrustPassword)
+ assertEquals("PKCS12", p.keyStoreInstance)
+ assertEquals("ssl-basic-auth", p.type)
+ assertEquals("https://localhost:8443", p.url)
}
@Test
fun testSSLTokenPropertiesAsJson() {
- val json: String = "{\n" +
- " \"type\" : \"ssl-token-auth\",\n" +
- " \"url\" : \"https://localhost:8443\",\n" +
- " \"keyStoreInstance\" : \"PKCS12\",\n" +
- " \"sslTrust\" : \"src/test/resources/keystore.p12\",\n" +
- " \"sslTrustPassword\" : \"changeit\",\n" +
- " \"tokenAuth\" : {\n" +
- " \"token\" : \"72178473kjshdkjgvbsdkjv903274908\"\n" +
- " }\n" +
- "}"
- val mapper = ObjectMapper()
- val actualObj: JsonNode = mapper.readTree(json)
- val properties = bluePrintRestLibPropertyService.restClientProperties(
- actualObj)
+ val actualObj: JsonNode = defaultMapper.readTree(sslTokenAuthEndpointWithHeadersField())
+ val properties =
+ bluePrintRestLibPropertyService.restClientProperties(actualObj)
assertNotNull(properties, "failed to create property bean")
- val p: SSLTokenAuthRestClientProperties =
- properties as SSLTokenAuthRestClientProperties
+ val p: SSLTokenAuthRestClientProperties = properties as SSLTokenAuthRestClientProperties
- assertEquals(p.tokenAuth!!.token!!, "72178473kjshdkjgvbsdkjv903274908")
- assertEquals(p.sslTrust, "src/test/resources/keystore.p12")
- assertEquals(p.sslTrustPassword, "changeit")
- assertEquals(p.keyStoreInstance, "PKCS12")
+ assertEquals("72178473kjshdkjgvbsdkjv903274908", p.tokenAuth!!.token!!)
+ assertEquals("src/test/resources/keystore.p12", p.sslTrust)
+ assertEquals("changeit", p.sslTrustPassword)
+ assertEquals("PKCS12", p.keyStoreInstance)
+ assertEquals("ssl-token-auth", p.type)
+ assertEquals("https://localhost:8443", p.url)
}
@Test
fun testSSLNoAuthPropertiesAsJson() {
- val json: String = "{\n" +
- " \"type\" : \"ssl-basic-auth\",\n" +
- " \"url\" : \"https://localhost:8443\",\n" +
- " \"keyStoreInstance\" : \"PKCS12\",\n" +
- " \"sslTrust\" : \"src/test/resources/keystore.p12\",\n" +
- " \"sslTrustPassword\" : \"changeit\",\n" +
- " \"sslKey\" : \"src/test/resources/keystore.p12\",\n" +
- " \"sslKeyPassword\" : \"changeit\"\n" +
- "}"
- val mapper = ObjectMapper()
- val actualObj: JsonNode = mapper.readTree(json)
+ val actualObj: JsonNode = defaultMapper.readTree(sslNoAuthEndpointWithHeadersField())
val properties = bluePrintRestLibPropertyService.restClientProperties(
- actualObj)
+ actualObj)
assertNotNull(properties, "failed to create property bean")
val p: SSLRestClientProperties =
- properties as SSLRestClientProperties
+ properties as SSLRestClientProperties
- assertEquals(p.sslTrust, "src/test/resources/keystore.p12")
- assertEquals(p.sslTrustPassword, "changeit")
- assertEquals(p.keyStoreInstance, "PKCS12")
- assertEquals(p.sslKey, "src/test/resources/keystore.p12")
- assertEquals(p.sslKeyPassword, "changeit")
+ assertEquals("src/test/resources/keystore.p12", p.sslTrust)
+ assertEquals("changeit", p.sslTrustPassword)
+ assertEquals("PKCS12", p.keyStoreInstance)
+ assertEquals("src/test/resources/keystore.p12", p.sslKey)
+ assertEquals("changeit", p.sslKeyPassword)
+ assertEquals("ssl-no-auth", p.type)
+ assertEquals("https://localhost:8443", p.url)
}
@Test
fun testBlueprintWebClientService() {
val blueprintWebClientService = bluePrintRestLibPropertyService
- .blueprintWebClientService("sample")
- assertNotNull(blueprintWebClientService, "failed to create blu" +
- "eprintWebClientService")
+ .blueprintWebClientService("sample")
+ assertNotNull(blueprintWebClientService,
+ "failed to create blueprintWebClientService")
}
@Test
fun testBlueprintWebClientServiceWithJsonNode() {
- val json: String = "{\n" +
- " \"type\" : \"ssl-basic-auth\",\n" +
- " \"url\" : \"https://localhost:8443\",\n" +
- " \"keyStoreInstance\" : \"PKCS12\",\n" +
- " \"sslTrust\" : \"src/test/resources/keystore.p12\",\n" +
- " \"sslTrustPassword\" : \"changeit\",\n" +
- " \"basicAuth\" : {\n" +
- " \"username\" : \"admin\",\n" +
- " \"password\" : \"cds\"\n" +
- " }\n" +
- "}"
- val mapper = ObjectMapper()
- val actualObj: JsonNode = mapper.readTree(json)
+ val actualObj: JsonNode = defaultMapper.readTree(sslBasicAuthEndpointWithHeadersField())
val blueprintWebClientService = bluePrintRestLibPropertyService
- .blueprintWebClientService(actualObj)
- assertNotNull(blueprintWebClientService, "failed to create blu" +
- "eprintWebClientService")
+ .blueprintWebClientService(actualObj)
+ assertNotNull(blueprintWebClientService, "failed to create blueprintWebClientService")
+ }
+
+ //pass the result of $typeEndpointWithHeadersField() output with and without headers to compare.
+ private fun validateHeadersDidNotChangeWithEmptyAdditionalHeaders(noHeaders: String, withHeaders: String) {
+ val parsedObj: JsonNode = defaultMapper.readTree(noHeaders)
+ val bpWebClientService =
+ bluePrintRestLibPropertyService.blueprintWebClientService(parsedObj)
+ val extractedHeaders = bpWebClientService.convertToBasicHeaders(mapOf())
+
+ val parsedObjWithHeaders: JsonNode = defaultMapper.readTree(withHeaders)
+ val bpWebClientServiceWithHeaders =
+ bluePrintRestLibPropertyService.blueprintWebClientService(parsedObjWithHeaders)
+ val extractedHeadersWithAdditionalHeaders = bpWebClientServiceWithHeaders.convertToBasicHeaders(mapOf())
+ //Array<BasicHeader<>> -> Map<String,String>
+ val headersMap = extractedHeaders.map { it.name to it.value }.toMap()
+ val additionalHeadersMap = extractedHeadersWithAdditionalHeaders.map { it.name to it.value }.toMap()
+ assertEquals(headersMap, additionalHeadersMap)
+ }
+
+ @Test
+ fun `BasicAuth WebClientService with empty additionalHeaders does not modify headers`() {
+ val endPointJson = basicAuthEndpointWithHeadersField()
+ val endPointWithHeadersJson = basicAuthEndpointWithHeadersField(emptyAdditionalHeaders)
+ validateHeadersDidNotChangeWithEmptyAdditionalHeaders(endPointJson, endPointWithHeadersJson)
+ }
+
+ private fun acceptsOneAdditionalHeadersTest(endPointWithHeadersJson: String) {
+ val parsedObj: JsonNode = defaultMapper.readTree(endPointWithHeadersJson)
+ val bpWebClientService =
+ bluePrintRestLibPropertyService.blueprintWebClientService(parsedObj)
+ val extractedHeaders = bpWebClientService.convertToBasicHeaders(mapOf())
+ assertEquals(1, extractedHeaders.filter { it.name == "key1" }.count())
+ }
+
+ @Test
+ fun `BasicAuth WebClientService accepts one additionalHeaders`() {
+ val endPointWithHeadersJson = basicAuthEndpointWithHeadersField(oneAdditionalParameter)
+ acceptsOneAdditionalHeadersTest(endPointWithHeadersJson)
+ }
+
+ private fun acceptsMultipleAdditionalHeaders(endPointWithHeadersJson: String) {
+ val parsedObj: JsonNode = defaultMapper.readTree(endPointWithHeadersJson)
+ val bpWebClientService =
+ bluePrintRestLibPropertyService.blueprintWebClientService(parsedObj)
+ val extractedHeaders = bpWebClientService.convertToBasicHeaders(mapOf())
+ assertEquals(1, extractedHeaders.filter { it.name == "key1" }.count())
+ assertEquals(1, extractedHeaders.filter { it.name == "key2" }.count())
+ assertEquals(1, extractedHeaders.filter { it.name == "key3" }.count())
+ }
+
+ @Test
+ fun `BasicAuth WebClientService accepts multiple additionalHeaders`() {
+ val endPointWithHeadersJson = basicAuthEndpointWithHeadersField(threeAdditionalHeaders)
+ acceptsMultipleAdditionalHeaders(endPointWithHeadersJson)
+ }
+
+ private fun additionalHeadersChangedContentTypeToAPPLICATION_XML(endPointWithHeadersJson: String) {
+ val parsedObj: JsonNode = defaultMapper.readTree(endPointWithHeadersJson)
+ val bpWebClientService =
+ bluePrintRestLibPropertyService.blueprintWebClientService(parsedObj)
+ val extractedHeaders = bpWebClientService.convertToBasicHeaders(mapOf())
+ assertEquals(MediaType.APPLICATION_XML.toString(),
+ extractedHeaders.filter { it.name == HttpHeaders.CONTENT_TYPE }[0].value!!)
+ }
+
+ @Test
+ fun `BasicAuth WebClientService additionalHeaders can overwrite default Content-Type`() {
+ //default content type is application/json
+ val endPointWithHeadersJson = basicAuthEndpointWithHeadersField(contentTypeAdditionalHeader)
+ additionalHeadersChangedContentTypeToAPPLICATION_XML(endPointWithHeadersJson)
+ }
+
+ //called from within "assertFailsWith(exceptionClass = BluePrintProcessorException::class) {"
+ private fun attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson: String) {
+ val parsedObj: JsonNode = defaultMapper.readTree(endPointWithHeadersJson)
+ val bpWebClientService =
+ bluePrintRestLibPropertyService.blueprintWebClientService(parsedObj)
+ bpWebClientService.convertToBasicHeaders(mapOf())
+ }
+
+ @Test
+ fun `BasicAuth WebClientService throws BlueprintProcessorException if additionalHeaders contain Authorization`() {
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = basicAuthEndpointWithHeadersField(additionalHeadersWithAuth)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ //spec says headers are case insensitive...
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = basicAuthEndpointWithHeadersField(additionalHeadersWithAuthLowercased)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ }
+
+ @Test
+ fun `TokenAuth WebClientService with empty additionalHeaders does not modify headers`() {
+ val endPointJson = sslTokenAuthEndpointWithHeadersField()
+ val endPointWithHeadersJson = sslTokenAuthEndpointWithHeadersField(emptyAdditionalHeaders)
+ validateHeadersDidNotChangeWithEmptyAdditionalHeaders(endPointJson, endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `TokenAuth WebClientService accepts one additionalHeaders`() {
+ val endPointWithHeadersJson = sslTokenAuthEndpointWithHeadersField(oneAdditionalParameter)
+ acceptsOneAdditionalHeadersTest(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `TokenAuth WebClientService accepts multiple additionalHeaders`() {
+ val endPointWithHeadersJson = sslTokenAuthEndpointWithHeadersField(threeAdditionalHeaders)
+ acceptsMultipleAdditionalHeaders(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `TokenAuth WebClientService additionalHeaders can overwrite default Content-Type`() {
+ //default content type is application/json
+ val endPointWithHeadersJson = sslTokenAuthEndpointWithHeadersField(contentTypeAdditionalHeader)
+ additionalHeadersChangedContentTypeToAPPLICATION_XML(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `TokenAuth WebClientService throws BlueprintProcessorException if additionalHeaders contain Authorization`() {
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = sslTokenAuthEndpointWithHeadersField(additionalHeadersWithAuth)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ //spec says headers are case insensitive...
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = sslTokenAuthEndpointWithHeadersField(additionalHeadersWithAuthLowercased)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ }
+
+ //TESTS FOR SSL BASIC AUTH headers
+ @Test
+ fun `SSLBasicAuth WebClientService with empty additionalHeaders does not modify headers`() {
+ val endPointJson = sslBasicAuthEndpointWithHeadersField()
+ val endPointWithHeadersJson = sslBasicAuthEndpointWithHeadersField(emptyAdditionalHeaders)
+ validateHeadersDidNotChangeWithEmptyAdditionalHeaders(endPointJson, endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLBasicAuth WebClientService accepts one additionalHeaders`() {
+ val endPointWithHeadersJson = sslBasicAuthEndpointWithHeadersField(oneAdditionalParameter)
+ acceptsOneAdditionalHeadersTest(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLBasicAuth WebClientService accepts multiple additionalHeaders`() {
+ val endPointWithHeadersJson = sslBasicAuthEndpointWithHeadersField(threeAdditionalHeaders)
+ acceptsMultipleAdditionalHeaders(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLBasicAuth WebClientService additionalHeaders can overwrite default Content-Type`() {
+ //default content type is application/json
+ val endPointWithHeadersJson = sslBasicAuthEndpointWithHeadersField(contentTypeAdditionalHeader)
+ additionalHeadersChangedContentTypeToAPPLICATION_XML(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLBasicAuth WebClientService throws BlueprintProcessorException if additionalHeaders contain Authorization`() {
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = sslBasicAuthEndpointWithHeadersField(additionalHeadersWithAuth)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ //spec says headers are case insensitive...
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = sslBasicAuthEndpointWithHeadersField(additionalHeadersWithAuthLowercased)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ }
+
+ //SSL-NO-AUTH headers tests
+ @Test
+ fun `SSLNoAuth WebClientService with empty additionalHeaders does not modify headers`() {
+ val endPointJson = sslNoAuthEndpointWithHeadersField()
+ val endPointWithHeadersJson = sslNoAuthEndpointWithHeadersField(emptyAdditionalHeaders)
+ validateHeadersDidNotChangeWithEmptyAdditionalHeaders(endPointJson, endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLNoAuth WebClientService accepts one additionalHeaders`() {
+ val endPointWithHeadersJson = sslNoAuthEndpointWithHeadersField(oneAdditionalParameter)
+ acceptsOneAdditionalHeadersTest(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLNoAuth WebClientService accepts multiple additionalHeaders`() {
+ val endPointWithHeadersJson = sslNoAuthEndpointWithHeadersField(threeAdditionalHeaders)
+ acceptsMultipleAdditionalHeaders(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLNoAuth WebClientService additionalHeaders can overwrite default Content-Type`() {
+ //default content type is application/json
+ val endPointWithHeadersJson = sslNoAuthEndpointWithHeadersField(contentTypeAdditionalHeader)
+ additionalHeadersChangedContentTypeToAPPLICATION_XML(endPointWithHeadersJson)
+ }
+
+ @Test
+ fun `SSLNoAuth WebClientService throws BlueprintProcessorException if additionalHeaders contain Authorization`() {
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = sslNoAuthEndpointWithHeadersField(additionalHeadersWithAuth)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ //spec says headers are case insensitive...
+ assertFailsWith(exceptionClass = BluePrintProcessorException::class) {
+ val endPointWithHeadersJson = sslNoAuthEndpointWithHeadersField(additionalHeadersWithAuthLowercased)
+ attemptToPutAuthorizationHeaderIntoAdditionalHeaders(endPointWithHeadersJson)
+ }
+ }
+
+ companion object BluePrintRestLibPropertyServiceTest {
+ val defaultMapper = ObjectMapper()
+ val expectedTokenAuthDefaultHeaders = mapOf<String, String>(
+ "Content-Type" to "application/json",
+ "Accept" to "application/json",
+ "Authorization" to "72178473kjshdkjgvbsdkjv903274908")
+
+ val endPointWithHeadersJsonWithBasicAuthHeader = basicAuthEndpointWithHeadersField(""",
+ "additionalHeaders" : {
+ "authorization": "Basic aGF2ZTphbmljZWRheQo="
+ }""".trimIndent())
+
+ private fun sslTokenAuthEndpointWithHeadersField(headers: String = ""): String =
+ """{
+ "type" : "ssl-token-auth",
+ "url" : "https://localhost:8443",
+ "keyStoreInstance" : "PKCS12",
+ "sslTrust" : "src/test/resources/keystore.p12",
+ "sslTrustPassword" : "changeit",
+ "tokenAuth" : {
+ "token" : "72178473kjshdkjgvbsdkjv903274908"
+ }$headers
+ }
+ """.trimIndent()
+
+ private fun sslBasicAuthEndpointWithHeadersField(headers: String = ""): String =
+ """{
+ "type" : "ssl-basic-auth",
+ "url" : "https://localhost:8443",
+ "keyStoreInstance" : "PKCS12",
+ "sslTrust" : "src/test/resources/keystore.p12",
+ "sslTrustPassword" : "changeit",
+ "basicAuth" : {
+ "username" : "admin",
+ "password" : "cds"
+ }$headers
+ }""".trimIndent()
+
+ private fun sslNoAuthEndpointWithHeadersField(headers: String = ""): String = """{
+ "type" : "ssl-no-auth",
+ "url" : "https://localhost:8443",
+ "keyStoreInstance" : "PKCS12",
+ "sslTrust" : "src/test/resources/keystore.p12",
+ "sslTrustPassword" : "changeit",
+ "sslKey" : "src/test/resources/keystore.p12",
+ "sslKeyPassword" : "changeit"$headers
+ }""".trimIndent()
+
+ //Don't forget to supply "," as the first char to make valid JSON
+ private fun basicAuthEndpointWithHeadersField(headers: String = ""): String =
+ """{
+ "type": "basic-auth",
+ "url": "http://127.0.0.1:8000",
+ "username": "user",
+ "password": "pass"$headers
+ }""".trimIndent()
+
+ private val emptyAdditionalHeaders = """,
+ "additionalHeaders" : {
+ }""".trimIndent()
+
+ private val oneAdditionalParameter = """,
+ "additionalHeaders" : {
+ "key1": "value1"
+ }""".trimIndent()
+
+ private val threeAdditionalHeaders = """,
+ "additionalHeaders" : {
+ "key1": "value1",
+ "key2": "value2",
+ "key3": "value3"
+ }""".trimIndent()
+
+ private val contentTypeAdditionalHeader = """,
+ "additionalHeaders" : {
+ "${HttpHeaders.CONTENT_TYPE}": "${MediaType.APPLICATION_XML}"
+ }""".trimIndent()
+
+ private val additionalHeadersWithAuth = """,
+ "additionalHeaders" : {
+ "Authorization": "Basic aGF2ZTphbmljZWRheQo="
+ }""".trimIndent()
+
+ private val additionalHeadersWithAuthLowercased = """,
+ "additionalHeaders" : {
+ "authorization": "Basic aGF2ZTphbmljZWRheQo="
+ }""".trimIndent()
}
}
diff --git a/ms/blueprintsprocessor/modules/commons/ssh-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/ssh-lib/pom.xml
index a13d0cc9c..ff09b83f3 100644
--- a/ms/blueprintsprocessor/modules/commons/ssh-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/ssh-lib/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>commons</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/ms/blueprintsprocessor/modules/inbounds/configs-api/pom.xml b/ms/blueprintsprocessor/modules/inbounds/configs-api/pom.xml
index f34a1ec4b..b09a8ac41 100644
--- a/ms/blueprintsprocessor/modules/inbounds/configs-api/pom.xml
+++ b/ms/blueprintsprocessor/modules/inbounds/configs-api/pom.xml
@@ -19,12 +19,12 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>inbounds</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>configs-api</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Blueprints Processor Resource Configurations API</name>
<description>Blueprints Processor Resource Configurations API</description>
diff --git a/ms/blueprintsprocessor/modules/inbounds/configs-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/configs/api/ResourceConfigSnapshotControllerTest.kt b/ms/blueprintsprocessor/modules/inbounds/configs-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/configs/api/ResourceConfigSnapshotControllerTest.kt
index c3f18fcba..b4c1ad0e0 100644
--- a/ms/blueprintsprocessor/modules/inbounds/configs-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/configs/api/ResourceConfigSnapshotControllerTest.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/configs-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/configs/api/ResourceConfigSnapshotControllerTest.kt
@@ -129,14 +129,15 @@ class ResourceConfigSnapshotControllerTest {
}
@Test
- fun `get returns 404 if entry not found`() {
+ fun `get returns 200 if entry not found`() {
runBlocking {
webTestClient
.get()
.uri("/api/v1/configs?resourceId=MISSING&resourceType=PNF")
.exchange()
- .expectStatus().isNotFound
+ .expectStatus().is2xxSuccessful
+ .expectBody()
}
}
diff --git a/ms/blueprintsprocessor/modules/inbounds/designer-api/pom.xml b/ms/blueprintsprocessor/modules/inbounds/designer-api/pom.xml
index 8f6d32ee2..12cb8ae71 100644
--- a/ms/blueprintsprocessor/modules/inbounds/designer-api/pom.xml
+++ b/ms/blueprintsprocessor/modules/inbounds/designer-api/pom.xml
@@ -18,7 +18,7 @@
<parent>
<artifactId>inbounds</artifactId>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>designer-api</artifactId>
diff --git a/ms/blueprintsprocessor/modules/inbounds/pom.xml b/ms/blueprintsprocessor/modules/inbounds/pom.xml
index ba1bbd185..0542fe380 100644
--- a/ms/blueprintsprocessor/modules/inbounds/pom.xml
+++ b/ms/blueprintsprocessor/modules/inbounds/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>modules</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>inbounds</artifactId>
diff --git a/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml b/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml
index cf8c61ac7..da233b882 100644
--- a/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml
+++ b/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>inbounds</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>resource-api</artifactId>
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml
index 7abcfea5f..7c53e1c04 100755
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>inbounds</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>selfservice-api</artifactId>
diff --git a/ms/blueprintsprocessor/modules/outbounds/pom.xml b/ms/blueprintsprocessor/modules/outbounds/pom.xml
index 34b6912ac..34eba8366 100644
--- a/ms/blueprintsprocessor/modules/outbounds/pom.xml
+++ b/ms/blueprintsprocessor/modules/outbounds/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>modules</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>outbounds</artifactId>
diff --git a/ms/blueprintsprocessor/modules/pom.xml b/ms/blueprintsprocessor/modules/pom.xml
index 86a581406..ea39e2aa9 100644
--- a/ms/blueprintsprocessor/modules/pom.xml
+++ b/ms/blueprintsprocessor/modules/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
diff --git a/ms/blueprintsprocessor/modules/services/execution-service/pom.xml b/ms/blueprintsprocessor/modules/services/execution-service/pom.xml
index c232f059b..4acc22433 100644
--- a/ms/blueprintsprocessor/modules/services/execution-service/pom.xml
+++ b/ms/blueprintsprocessor/modules/services/execution-service/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>services</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>execution-service</artifactId>
diff --git a/ms/blueprintsprocessor/modules/services/pom.xml b/ms/blueprintsprocessor/modules/services/pom.xml
index 6b9cb2e48..0a5f9b63f 100755
--- a/ms/blueprintsprocessor/modules/services/pom.xml
+++ b/ms/blueprintsprocessor/modules/services/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>modules</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>services</artifactId>
diff --git a/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml b/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml
index 1a621f4af..c3effa5d3 100644
--- a/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml
+++ b/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>services</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/ms/blueprintsprocessor/parent/pom.xml b/ms/blueprintsprocessor/parent/pom.xml
index e79c497be..5a54a7717 100755
--- a/ms/blueprintsprocessor/parent/pom.xml
+++ b/ms/blueprintsprocessor/parent/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>blueprintsprocessor</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
<artifactId>parent</artifactId>
diff --git a/ms/blueprintsprocessor/pom.xml b/ms/blueprintsprocessor/pom.xml
index abe737fee..7714d856e 100755
--- a/ms/blueprintsprocessor/pom.xml
+++ b/ms/blueprintsprocessor/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ms</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>blueprintsprocessor</artifactId>
diff --git a/ms/command-executor/pom.xml b/ms/command-executor/pom.xml
index e99c4ecb2..5861912ca 100755
--- a/ms/command-executor/pom.xml
+++ b/ms/command-executor/pom.xml
@@ -14,13 +14,12 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ms</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>command-executor</artifactId>
@@ -35,7 +34,7 @@
<docker.verbose>true</docker.verbose>
<ccsdk.project.version>${project.version}</ccsdk.project.version>
<ccsdk.build.timestamp>${maven.build.timestamp}</ccsdk.build.timestamp>
- <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
+ <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
</properties>
<build>
diff --git a/ms/command-executor/src/main/python/command_executor_handler.py b/ms/command-executor/src/main/python/command_executor_handler.py
index abea4d411..972dad627 100644
--- a/ms/command-executor/src/main/python/command_executor_handler.py
+++ b/ms/command-executor/src/main/python/command_executor_handler.py
@@ -35,7 +35,6 @@ class CommandExecutorHandler():
self.request = request
self.logger = logging.getLogger(self.__class__.__name__)
self.blueprint_id = utils.get_blueprint_id(request)
- # FIXME parameterize path
self.venv_home = '/opt/app/onap/blueprints/deploy/' + self.blueprint_id
self.installed = self.venv_home + '/.installed'
@@ -61,6 +60,7 @@ class CommandExecutorHandler():
results.append(f.read())
f.close()
+ # deactivate_venv(blueprint_id)
return True
def execute_command(self, request, results):
@@ -73,7 +73,6 @@ class CommandExecutorHandler():
if "ansible-playbook" in request.command:
cmd = cmd + "; " + request.command + " -e 'ansible_python_interpreter=" + self.venv_home + "/bin/python'"
else:
- # we append the properties as last agr to the script
cmd = cmd + "; " + request.command + " " + re.escape(MessageToJson(request.properties))
try:
@@ -171,8 +170,8 @@ class CommandExecutorHandler():
path = "%s/bin/activate_this.py" % self.venv_home
try:
- exec(open(path).read(), {'__file__': path})
- exec(fixpathenvvar)
+ exec (open(path).read(), {'__file__': path})
+ exec (fixpathenvvar)
self.logger.info("Running with PATH : {}".format(os.environ['PATH']))
return True
except Exception as err:
diff --git a/ms/command-executor/src/main/python/server.py b/ms/command-executor/src/main/python/server.py
index 0ed3d3266..453d751b2 100644
--- a/ms/command-executor/src/main/python/server.py
+++ b/ms/command-executor/src/main/python/server.py
@@ -1,4 +1,5 @@
-# !/usr/bin/python
+
+#!/usr/bin/python
#
# Copyright (C) 2019 Bell Canada.
@@ -42,7 +43,7 @@ def serve():
'Access denied!')
server = grpc.server(
- futures.ProcessPoolExecutor(),
+ futures.ThreadPoolExecutor(max_workers=10),
interceptors=(header_validator,))
CommandExecutor_pb2_grpc.add_CommandExecutorServiceServicer_to_server(
diff --git a/ms/command-executor/src/main/python/utils.py b/ms/command-executor/src/main/python/utils.py
index 4314b287d..dc5d0089f 100644
--- a/ms/command-executor/src/main/python/utils.py
+++ b/ms/command-executor/src/main/python/utils.py
@@ -17,7 +17,6 @@ from google.protobuf.timestamp_pb2 import Timestamp
import proto.CommandExecutor_pb2 as CommandExecutor_pb2
-
def get_blueprint_id(request):
blueprint_name = request.identifiers.blueprintName
blueprint_version = request.identifiers.blueprintVersion
diff --git a/ms/controllerblueprints/modules/blueprint-core/pom.xml b/ms/controllerblueprints/modules/blueprint-core/pom.xml
index 1c1385b9c..1cb912c1b 100644
--- a/ms/controllerblueprints/modules/blueprint-core/pom.xml
+++ b/ms/controllerblueprints/modules/blueprint-core/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.controllerblueprints</groupId>
<artifactId>modules</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>blueprint-core</artifactId>
<name>Controller Blueprints Core</name>
diff --git a/ms/controllerblueprints/modules/blueprint-validation/pom.xml b/ms/controllerblueprints/modules/blueprint-validation/pom.xml
index 57865fcf0..04c751127 100644
--- a/ms/controllerblueprints/modules/blueprint-validation/pom.xml
+++ b/ms/controllerblueprints/modules/blueprint-validation/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.controllerblueprints</groupId>
<artifactId>modules</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>blueprint-validation</artifactId>
<name>Controller Blueprints Validation Service</name>
diff --git a/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/utils/PropertyAssignmentValidationUtils.kt b/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/utils/PropertyAssignmentValidationUtils.kt
index 2ef70164a..d49348152 100644
--- a/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/utils/PropertyAssignmentValidationUtils.kt
+++ b/ms/controllerblueprints/modules/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/utils/PropertyAssignmentValidationUtils.kt
@@ -1,5 +1,6 @@
/*
* Copyright © 2019 IBM.
+ * Modifications Copyright © 2019 Bell Canada.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -51,7 +52,7 @@ open class PropertyAssignmentValidationUtils(private val bluePrintContext: BlueP
properties: MutableMap<String, JsonNode>) {
properties.forEach { propertyName, propertyAssignment ->
val propertyDefinition: PropertyDefinition = nodeTypeProperties[propertyName]
- ?: throw BluePrintException("failed to get definition for the property ($propertyName)")
+ ?: throw BluePrintException("validatePropertyAssignments failed to get definition for the property ($propertyName)")
validatePropertyAssignment(propertyName, propertyDefinition, propertyAssignment)
@@ -91,7 +92,7 @@ open class PropertyAssignmentValidationUtils(private val bluePrintContext: BlueP
}
check(isValid) {
- throw BluePrintException("property($propertyName) defined of type($propertyType) is not comptable with the value ($propertyAssignment)")
+ throw BluePrintException("property($propertyName) defined of type($propertyType) is not compatible with the value ($propertyAssignment)")
}
}
diff --git a/ms/controllerblueprints/modules/pom.xml b/ms/controllerblueprints/modules/pom.xml
index 4bc962f04..73b231316 100644
--- a/ms/controllerblueprints/modules/pom.xml
+++ b/ms/controllerblueprints/modules/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.controllerblueprints</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>modules</artifactId>
diff --git a/ms/controllerblueprints/modules/resource-dict/pom.xml b/ms/controllerblueprints/modules/resource-dict/pom.xml
index b210b100b..4ee4f91a0 100644
--- a/ms/controllerblueprints/modules/resource-dict/pom.xml
+++ b/ms/controllerblueprints/modules/resource-dict/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.controllerblueprints</groupId>
<artifactId>modules</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>resource-dict</artifactId>
<name>Controller Blueprints Resource Dictionary</name>
diff --git a/ms/controllerblueprints/parent/pom.xml b/ms/controllerblueprints/parent/pom.xml
index 3021c4032..925b1678a 100644
--- a/ms/controllerblueprints/parent/pom.xml
+++ b/ms/controllerblueprints/parent/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>controllerblueprints</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<groupId>org.onap.ccsdk.cds.controllerblueprints</groupId>
<artifactId>parent</artifactId>
diff --git a/ms/controllerblueprints/pom.xml b/ms/controllerblueprints/pom.xml
index 909dfa4fe..8abb36e67 100644
--- a/ms/controllerblueprints/pom.xml
+++ b/ms/controllerblueprints/pom.xml
@@ -18,13 +18,13 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ms</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>controllerblueprints</artifactId>
<name>Controller Blueprints Root</name>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<properties>
<service.name>ControllerBlueprints</service.name>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/ms/pom.xml b/ms/pom.xml
index 973222c1a..ba5a5b0c7 100644
--- a/ms/pom.xml
+++ b/ms/pom.xml
@@ -20,12 +20,12 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>ms</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Micro-services Root</name>
diff --git a/ms/sdclistener/application/pom.xml b/ms/sdclistener/application/pom.xml
index eb0323bd3..da24e97bc 100644
--- a/ms/sdclistener/application/pom.xml
+++ b/ms/sdclistener/application/pom.xml
@@ -19,13 +19,13 @@
<parent>
<groupId>org.onap.ccsdk.cds.sdclistener</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>application</artifactId>
<packaging>jar</packaging>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<name>SDC Listener Application</name>
<properties>
diff --git a/ms/sdclistener/distribution/pom.xml b/ms/sdclistener/distribution/pom.xml
index be68cd218..8f0120fa5 100755
--- a/ms/sdclistener/distribution/pom.xml
+++ b/ms/sdclistener/distribution/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds.sdclistener</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>distribution</artifactId>
diff --git a/ms/sdclistener/parent/pom.xml b/ms/sdclistener/parent/pom.xml
index 0648ed76f..cfdfc9b24 100755
--- a/ms/sdclistener/parent/pom.xml
+++ b/ms/sdclistener/parent/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>sdclistener</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</parent>
<groupId>org.onap.ccsdk.cds.sdclistener</groupId>
<artifactId>parent</artifactId>
diff --git a/ms/sdclistener/pom.xml b/ms/sdclistener/pom.xml
index b3113889a..42c6a1acd 100644
--- a/ms/sdclistener/pom.xml
+++ b/ms/sdclistener/pom.xml
@@ -19,7 +19,7 @@
<parent>
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>ms</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
diff --git a/pom.xml b/pom.xml
index 12cabac62..ddeb8c824 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@ limitations under the License.
<parent>
<groupId>org.onap.ccsdk.parent</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
- <version>1.4.1-SNAPSHOT</version>
+ <version>1.5.0-SNAPSHOT</version>
<relativePath/>
</parent>
@@ -28,7 +28,7 @@ limitations under the License.
<groupId>org.onap.ccsdk.cds</groupId>
<artifactId>parent</artifactId>
- <version>0.6.1-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cds-parent</name>
diff --git a/releases/0.6.1.yaml b/releases/0.6.1.yaml
new file mode 100644
index 000000000..46921af89
--- /dev/null
+++ b/releases/0.6.1.yaml
@@ -0,0 +1,5 @@
+---
+distribution_type: 'maven'
+version: '0.6.1'
+project: 'ccsdk-cds'
+log_dir: 'ccsdk-cds-maven-stage-master/208/'
diff --git a/version.properties b/version.properties
index 5d94f48dd..fc68f0298 100644
--- a/version.properties
+++ b/version.properties
@@ -5,8 +5,8 @@
release_name=0
-sprint_number=6
-feature_revision=1
+sprint_number=7
+feature_revision=0
base_version=${release_name}.${sprint_number}.${feature_revision}