diff options
author | Ittay Stern <ittay.stern@att.com> | 2018-08-29 17:01:32 +0300 |
---|---|---|
committer | Ittay Stern <ittay.stern@att.com> | 2019-02-18 18:35:30 +0200 |
commit | 6f900cc45d7dd7f97430812b86b5c1d1693c8ae3 (patch) | |
tree | 936005c364dc5a7264d6304d4777c3d83494db22 /vid-webpack-master/src/app/shared/components | |
parent | 67d99f816cc583643c35193197594cf78d8ce60a (diff) |
merge from ecomp a88f0072 - Modern UI
Issue-ID: VID-378
Change-Id: Ibcb23dd27f550cf32ce2fe0239f0f496ae014ff6
Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-webpack-master/src/app/shared/components')
107 files changed, 30365 insertions, 183 deletions
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html new file mode 100644 index 000000000..1dad32376 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html @@ -0,0 +1,92 @@ +<div class="modal fade" bsModal #auditInfoModal="bs-modal" [config]="{backdrop: 'static'}" + tabindex="-1" role="dialog" aria-labelledby="dialog-static-name"> + <div id="audit-info-modal" class=""> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" (click)="onCancelClick()">×</button> + <span [attr.data-tests-id]="'audit-info-title'" class="modal-title">{{title}}</span> + </div> + <div class="modal-body row"> + <div class="col-md-4 left-panel"> + <div id="service-model-name" class="row">{{type | uppercase}} MODEL: <span>{{serviceModelName}}</span></div> + <div class="row service-model"> + <model-information [modelInformationItems]="modelInfoItems"></model-information> + </div> + </div> + <div class="col-md-8 right-panel"> + <div class="row" *ngIf="showVidStatus"><span class="table-title">VID status</span></div> + <div class="row" *ngIf="showVidStatus"> + <table id="service-instantiation-audit-info-vid" class="table table-bordered"> + <thead class="thead-dark"> + <tr class="row"> + <th class="col-md-4" scope="col">Status</th> + <th class="col-md-4" scope="col">Status time</th> + <th class="col-md-4" scope="col">Final</th> + </tr> + </thead> + <tbody> + <tr class="row" *ngFor="let data of vidInfoData"> + <td class="col-md-4" id="vidJobStatus" [attr.data-tests-id]="'vidJobStatus'"> + <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat"></custom-ellipsis> + </td> + <td class="col-md-4" id="vidStatusTime"> + <custom-ellipsis [id]="data?.vidCreated" + [value]="data?.createdDate | date:'MMM dd, yyyy HH:mm'"></custom-ellipsis> + </td> + <td class="col-md-4" id="vidFinalStatus"> + <custom-ellipsis [id]="data?.final" + [value]="data?.final ? 'Yes' : 'No'"></custom-ellipsis> + </td> + </tr> + </tbody> + </table> + <div class="no-result" *ngIf="!isLoading && vidInfoData?.length == 0">There is no data.</div> + </div> + + <div class="row"> + <div class="col-md-6 leftColumn"><span class="table-title">MSO status</span></div> + <div class="col-md-6 rightColumn"><span><a id="glossary_link" target="_blank" href="#" (click)="onNavigate()">Building Block (BB) glossary</a></span></div> + </div> + <table id="service-instantiation-audit-info-mso" class="table table-bordered"> + <thead class="thead-dark row"> + <tr class="row"> + <th scope="col" class="request-id">Request ID</th> + <th *ngIf="isAlaCarte&&isALaCarteFlagOn" id="instanceName" class="col-md-2" scope="col">Instance Name</th> + <th class="col-md-2" scope="col">Status</th> + <th class="col-md-2" scope="col">Status time</th> + <th class="col-md-2" scope="col">Additional info</th> + </tr> + </thead> + <tbody> + <tr class="row" *ngFor="let data of msoInfoData"> + <td id="msoRequestId" class="request-id"> + <custom-ellipsis [id]="data?.requestId" [value]="data?.requestId"></custom-ellipsis> + </td> + <td *ngIf="isAlaCarte && isALaCarteFlagOn" class="msoInstanceName col-md-2"> + <custom-ellipsis [id]="data?.instanceName" [value]="data?.instanceType + ': ' + data?.instanceName"></custom-ellipsis> + </td> + <td class="col-md-2" id="msoJobStatus"> + <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat"></custom-ellipsis> + </td> + <td class="col-md-2" id="msoStatusTime"> + <custom-ellipsis [id]="data?.vidCreated" + [value]="data?.createdDate | date:'MMM dd, yyyy HH:mm'"></custom-ellipsis> + </td> + <td class="col-md-2" id="msoAdditionalInfo"> + <custom-ellipsis [id]="data?.additionalInfo" [value]="data?.additionalInfo"></custom-ellipsis> + </td> + </tr> + </tbody> + </table> + <div class="no-result" *ngIf="!isLoading && msoInfoData?.length == 0">There is no data.</div> + </div> + + </div> + <div class="modal-footer row"> + <button style= "font-size: 12px" id="cancelButton" type="button" class="btn btn-default cancel" (click)="onCancelClick()"> + Close + </button> + </div> + </div> + </div> +</div> diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss new file mode 100644 index 000000000..f36b8b41d --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss @@ -0,0 +1,175 @@ +.templatebody.modal-open{ + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; + opacity: 0.5; +} +.modal{ + + #audit-info-modal { + .leftColumn { + padding-left: 0; + } + + .rightColumn { + padding-right: 0; + text-align: right; + } + .modal-content{ + border-radius: 0px; + border: none; + .modal-header{ + background: #009FDB; + font-size: 24px; + color: #ffffff; + .close{ + font-size: 32px; + font-weight: 200; + color: #ffffff; + text-shadow: none; + filter: none; + opacity: 1; + &:hover{ + color: #d2d2d2; + } + } + .modal-title{ + + } + } + .modal-body{ + padding: 0px; + margin: 0px; + display: flex; + .left-panel{ + background: #f2f2f2; + border-right: 1px solid #D2D2D2; + padding-right: 0px; + .row:first-child{ + border-bottom: 1px solid #D2D2D2; + height: 50px; + font-size: 12px; + line-height: 50px; + padding-left: 30px; + font-weight: 700; + margin-right: 0px; + } + .service-model{ + padding-left: 30px; + padding-top: 15px; + } + } + .right-panel{ + padding: 30px 30px 15px 30px; + .row{ + margin: 0px; + } + .table-title{ + font-size: 12px; + text-transform: uppercase; + font-weight: bold; + } + .no-result{ + margin-bottom: 20px; + text-align: center; + border: 1px solid #d2d2d2; + padding: 20px; + margin-top: -23px; + } + + .table-bordered{ + width: 100%; + margin-top: 10px; + font-family: OpenSans-Semibold; + font-size: 12px; + overflow-x: auto; + display: block; + color: #5A5A5A; + .request-id { + width: 85px; + } + thead { + position: sticky; + top: 0; + z-index: 100; + display: block; + background: rgb(242, 242, 242); + border-bottom: 1px solid #d2d2d2; + tr { + display: flex; + th { + flex-grow: 1; + border-right: 1px solid #d2d2d2; + &:last-child{ + border-right: none; + } + &.request-id { + flex-grow: 0; + } + } + } + } + + tbody { + border: none !important; + max-height: 152px; + display: block; + + tr { + display: flex; + border-bottom: 1px solid #d2d2d2; + &:last-child{ + border-bottom: none; + } + td { + border: none; + border-right: 1px solid #d2d2d2; + flex-grow: 1; + &:last-child{ + border-right: none; + } + &.request-id { + flex-grow: 0; + } + } + } + } + + th { + background: #f2f2f2; + font-family: OpenSans-Semibold; + color: #000000; + font-weight: bold; + border: none; + } + + tr.odd { + background-color: rgb(242, 242, 242); + } + + tr:hover { + background: #e1e1e1; + } + } + } + } + .modal-footer{ + margin: 0px; + .cancel{ + width: 120px; + height: 36px; + background: #009fdb; + border-radius: 2px; + font-family: OpenSans-Regular; + font-size: 14px; + color: #ffffff; + line-height: 16px; + } + } + } + } +} diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.spec.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.spec.ts new file mode 100644 index 000000000..35b5fbfe5 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.spec.ts @@ -0,0 +1,274 @@ + +import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing"; +import {getTestBed, TestBed} from "@angular/core/testing"; +import {NgRedux} from "@angular-redux/store"; +import {AuditInfoModalComponentService} from "./auditInfoModal.component.service"; +import {ModelInformationItem} from "../model-information/model-information.component"; + +class MockAppStore<T> { + getState() { + return { + "service": { + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "instanceParams": [], + "bulkSize": 1, + "action": "None", + "instanceName": "PQijmEmzhVma4zujr", + "instanceId": "service-instance-id", + "orchStatus": "GARBAGE DATA", + "productFamilyId": null, + "lcpCloudRegionId": null, + "tenantId": null, + "modelInfo": { + "modelInvariantId": "d27e42cf-087e-4d31-88ac-6c4b7585f800", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "vf_vEPDG", + "modelType": "service", + "modelVersion": "5.0" + }, + "globalSubscriberId": "global-customer-id", + "subscriptionServiceType": "service-instance-type", + "owningEntityId": null, + "owningEntityName": null, + "tenantName": null, + "aicZoneId": null, + "aicZoneName": null, + "projectName": null, + "rollbackOnFailure": null, + "isALaCarte": false + } + }, + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "global-customer-id", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } + } + } +} + +describe("Audit info modal component service", () => { + let injector; + let httpMock: HttpTestingController; + let auditInfoModalComponentService: AuditInfoModalComponentService; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + AuditInfoModalComponentService, + {provide: NgRedux, useClass: MockAppStore} + ] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + httpMock = injector.get(HttpTestingController); + auditInfoModalComponentService = injector.get(AuditInfoModalComponentService); + + })().then(done).catch(done.fail)); + + + test('auditInfoModalComponentService service should be defined', () => { + expect(auditInfoModalComponentService).toBeDefined(); + }); + + test('getModelInfo: VNF information from existing instance with model', () => { + const model = getVNFModel(); + const instance = getVNFInstance(); + const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44"); + expect(results.find((item) => item.label === 'Model customization ID').values[0]).toEqual("91415b44-753d-494c-926a-456a9172bbb9"); + expect(results.find((item) => item.label === 'Model version').values[0]).toEqual("2.0"); + expect(results.find((item) => item.label === 'Model name').values[0]).toEqual("VF_vMee"); + expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("4O61SmpFAdCm1oVEs"); + expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("66cbb3b5-c823-470c-9520-4e0b85112250"); + expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber + expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type"); + }); + + test('getModelInfo: Network information from existing instance without model', () => { + const model = getNetworkModel(); + const instance = getNetworkInstance(); + const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44"); + expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("KADmyK6e3sVWNfGbA"); + expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("712cad2d-fc1c-40c7-aaff-d2d6e17ac2b6"); + expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber + expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type"); + }); + + test('getModelInfo: VFModule information from existing instance with model', () => { + const model = getVFModule(); + const instance = getVFModuleInstance(); + const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44"); + expect(results.find((item) => item.label === 'Model customization ID').values[0]).toEqual("55b1be94-671a-403e-a26c-667e9c47d091"); + expect(results.find((item) => item.label === 'Model version').values[0]).toEqual("2"); + expect(results.find((item) => item.label === 'Model name').values[0]).toEqual("VfVmee..vmme_vlc..module-1"); + expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("ss820f_0918_db"); + expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("2c1ca484-cbc2-408b-ab86-25a2c15ce280"); + expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber + expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type"); + }); + + test('getModelInfo: VNFGroup information from existing instance with model', () => { + const model = getVNFGroupModel(); + const instance = getVNFGroupInstance(); + const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44"); + expect(results.find((item) => item.label === 'Model version').values[0]).toEqual("1"); + expect(results.find((item) => item.label === 'Model name').values[0]).toEqual("groupingservicefortest..ResourceInstanceGroup..0"); + expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("VNF_GROUP1_INSTANCE_NAME"); + expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("VNF_GROUP1_INSTANCE_ID"); + expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber + expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type"); + }); + + + test('setModalTitlesType: should return modal title', () => { + expect(AuditInfoModalComponentService.setModalTitle('VNF')).toEqual('VNF Instantiation Information'); + expect(AuditInfoModalComponentService.setModalTitle('VFMODULE')).toEqual('VfModule Instantiation Information'); + expect(AuditInfoModalComponentService.setModalTitle('NETWORK')).toEqual('Network Instantiation Information'); + expect(AuditInfoModalComponentService.setModalTitle('VNFGROUP')).toEqual('Vnf Group Instantiation Information'); + }); + + test('setModalTitlesType: should return modal title type', () => { + expect(AuditInfoModalComponentService.setModalTitlesType('VNF')).toEqual('VNF'); + expect(AuditInfoModalComponentService.setModalTitlesType('VFMODULE')).toEqual('VfModule'); + expect(AuditInfoModalComponentService.setModalTitlesType('NETWORK')).toEqual('Network'); + expect(AuditInfoModalComponentService.setModalTitlesType('VNFGROUP')).toEqual('Vnf Group'); + }); + + test('getInstanceModelName: should return model name if exist', () => { + expect(AuditInfoModalComponentService.getInstanceModelName({name : 'some name'})).toEqual('some name'); + expect(AuditInfoModalComponentService.getInstanceModelName(null)).toEqual(''); + }); + + test('createModelInformationItemsJob: should return job information', () => { + let service = { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "cfef8302-d90f-475f-87cc-3f49a62ef14c", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "true", + "instantiationType": "Macro", + "inputs": {}, + "vidNotions": { + "instantiationUI": "legacy", + "modelCategory": "other", + "viewEditUI": "legacy" + } + }; + const results = AuditInfoModalComponentService.createModelInformationItemsJob(<any>service); + }); + + + function getVNFModel(){ + return {"name":"VF_vMee","version":"2.0","description":"VSP_vMee","uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","max":1,"min":0,"customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","isEcompGeneratedNaming":true,"type":"VF","modelCustomizationName":"VF_vMee 0","vfcInstanceGroups":{},"properties":{"gpb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-egress_rule_application":"any","sctp-b-ipv6-egress_src_start_port":"0","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","ncb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress_rule_protocol":"icmp","sctp-b-ingress_action":"pass","sctp-a-egress_rule_application":"any","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-egress_src_addresses":"local","fsb_volume_size_0":"320.0","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-egress_src_addresses":"local","sctp-b-egress-src_start_port":"0.0","sctp-a-ingress_rule_protocol":"icmp","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-a-ingress_ethertype":"IPv4","sctp-a-egress-src_start_port":"0.0","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","sctp-b-egress_dst_subnet_prefix_len":"0.0","gpb1_Internal1_mac":"00:11:22:EF:AC:DF","Internal2_net_cidr":"10.0.0.10","sctp-a-ingress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-egress-dst_start_port":"0.0","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-egress_action":"pass","sctp-b-ipv6-egress_rule_application":"any","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress-src_start_port":"0.0","fsb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"10.0.0.10","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-a-ipv6-ingress_rule_application":"any","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","ecomp_generated_naming":"true","sctp-a-IPv6_ethertype":"IPv6","vlc_st_virtualization_type":"virtual-machine","vlc2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-dst_end_port":"65535.0","sctp-b-ingress-dst_start_port":"0.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","vlc_flavor_name":"nd.c16r64d1","int2_sec_group_name":"int2-sec-group","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress-dst_start_port":"0","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_shared":"false","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","fsb2_Internal2_mac":"00:11:22:EF:AC:DF","Internal2_forwarding_mode":"l2","sctp-a-ipv6-egress_dst_end_port":"65535","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-a-ingress_dst_addresses":"local","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_sctp_a":"left","vlc_st_version":"2","sctp-a-src_subnet_prefix_v6":"::","vlc_st_interface_type_sctp_b":"right","sctp-a-ingress_rule_application":"any","sctp-b-egress_ethertype":"IPv4","sctp-a-ipv6-egress_src_start_port":"0","instance_ip_family_v6":"v6","gpb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-src_start_port":"0.0","fsb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress_dst_addresses":"local","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"10.0.0.10","sctp-a-ipv6-ingress-dst_end_port":"65535","Internal1_net_gateway":"10.0.0.10","sctp-b-ipv6-egress-dst_start_port":"0","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-b-ipv6-egress_action":"pass","sctp-a-egress_rule_protocol":"icmp","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-b-egress_rule_protocol":"icmp","sctp-a-ingress_action":"pass","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","vlc2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-ingress-dst_start_port":"0","vlc_st_availability_zone":"true","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","gpb_flavor_name":"nv.c20r64d1","Internal1_allow_transit":"true","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-ingress_ethertype":"IPv4","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","vlc1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-ingress-src_end_port":"65535.0","sctp-b-egress_rule_application":"any","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"}}; + } + + function getVNFInstance(){ + return {"action":"None","instanceName":"4O61SmpFAdCm1oVEs","instanceId":"66cbb3b5-c823-470c-9520-4e0b85112250","orchStatus":null,"productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationName":"VF_vMee 0","modelInvariantId":"vnf-instance-model-invariant-id","modelVersionId":"d6557200-ecf2-4641-8094-5393ae3aae60","modelType":"vnf"},"instanceType":"7538ifdSoTccmbEkr","provStatus":null,"inMaint":true,"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","originalName":"VF_vMee 0","legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"VF_vMee 0:004","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"vf_vmee0..VfVmee..vmme_vlc..module-1:008":{"action":"None","instanceName":"ss820f_0918_db","instanceId":"2c1ca484-cbc2-408b-ab86-25a2c15ce280","orchStatus":"deleted","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationName":"VfVmee..vmme_vlc..module-1","modelCustomizationId":"b200727a-1bf9-4e7c-bd06-b5f4c9d920b9","modelInvariantId":"09edc9ef-85d0-4b26-80de-1f569d49e750","modelVersionId":"522159d5-d6e0-4c2a-aa44-5a542a12a830","modelType":"vfModule"},"instanceType":null,"provStatus":null,"inMaint":true,"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","originalName":"VfVmee..vmme_vlc..module-1","legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"vf_vmee0..VfVmee..vmme_vlc..module-1:008","isBase":false,"volumeGroupName":null}},"dc229cd8-c132-4455-8517-5c1787c18b14":{"dc229cd8-c132-4455-8517-5c1787c18b14:009":{"action":"None","instanceName":"ss820f_0918_base","instanceId":"3ef042c4-259f-45e0-9aba-0989bd8d1cc5","orchStatus":"Assigned","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationId":"8ad8670b-0541-4499-8101-275bbd0e8b6a","modelInvariantId":"1e463c9c-404d-4056-ba56-28fd102608de","modelVersionId":"dc229cd8-c132-4455-8517-5c1787c18b14","modelType":"vfModule"},"instanceType":null,"provStatus":null,"inMaint":false,"uuid":"dc229cd8-c132-4455-8517-5c1787c18b14","originalName":null,"legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"dc229cd8-c132-4455-8517-5c1787c18b14:009","isBase":true,"volumeGroupName":null}}},"networks":{}}; + } + + function getVFModule(){ + return {"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc","baseModule":false},"inputs":{},"volumeGroupAllowed":false}; + } + + function getVFModuleInstance() { + return{"action":"None","instanceName":"ss820f_0918_db","instanceId":"2c1ca484-cbc2-408b-ab86-25a2c15ce280","orchStatus":"deleted","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationName":"VfVmee..vmme_vlc..module-1","modelCustomizationId":"b200727a-1bf9-4e7c-bd06-b5f4c9d920b9","modelInvariantId":"09edc9ef-85d0-4b26-80de-1f569d49e750","modelVersionId":"522159d5-d6e0-4c2a-aa44-5a542a12a830","modelType":"vfModule"},"instanceType":null,"provStatus":null,"inMaint":true,"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","originalName":"VfVmee..vmme_vlc..module-1","legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"vf_vmee0..VfVmee..vmme_vlc..module-1:008","isBase":false,"volumeGroupName":null}; + } + + function getNetworkModel(){ + return null; + } + + function getNetworkInstance(){ + return {"action":"None","instanceName":"KADmyK6e3sVWNfGbA","instanceId":"712cad2d-fc1c-40c7-aaff-d2d6e17ac2b6","orchStatus":"Assigned","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelInvariantId":"network-instance-model-invariant-id","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelType":"network"},"instanceType":"CONTRAIL30_BASIC","provStatus":"nvtprov","inMaint":false,"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","originalName":null,"legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"ddc3f20c-08b5-40fd-af72-c6d14636b986:001"}; + } + + function getVNFGroupModel(){ + return {"name":"groupingservicefortest..ResourceInstanceGroup..0","version":"1","uuid":"daeb6568-cef8-417f-9075-ed259ce59f48","invariantUuid":"4bb2e27e-ddab-4790-9c6d-1f731bc14a45","max":1,"min":0,"isEcompGeneratedNaming":true,"type":"VnfGroup","modelCustomizationName":"groupingservicefortest..ResourceInstanceGroup..0","properties":{"contained_resource_type":"VF","role":"SERVICE-ACCESS","function":"DATA","description":"DDD0","type":"LOAD-GROUP","ecomp_generated_naming":"true"},"members":{"vdbe_svc_vprs_proxy 0":{"uuid":"65fadfa8-a0d9-443f-95ad-836cd044e26c","invariantUuid":"f4baae0c-b3a5-4ca1-a777-afbffe7010bc","description":"A Proxy for Service vDBE_Svc_vPRS","name":"vDBE_Svc_vPRS Service Proxy","version":"1.0","customizationUuid":"bdb63d23-e132-4ce7-af2c-a493b4cafac9","inputs":{},"commands":{},"properties":{"ecomp_generated_naming":"false"},"type":"Service Proxy","sourceModelUuid":"da7827a2-366d-4be6-8c68-a69153c61274","sourceModelInvariant":"24632e6b-584b-4f45-80d4-fefd75fd9f14","sourceModelName":"vDBE_Svc_vPRS"}}}; + } + + function getVNFGroupInstance(){ + return {"originalName":"groupingservicefortest..ResourceInstanceGroup..0","trackById":"groupingservicefortest..ResourceInstanceGroup..0:001","instanceName":"VNF_GROUP1_INSTANCE_NAME","action":"None","instanceId":"VNF_GROUP1_INSTANCE_ID","instanceType":"VNF_GROUP1_INSTANCE_TYPE","orchStatus":"Active","provStatus":null,"inMaint":false,"modelInfo":{"modelType":"instanceGroup","modelCustomizationName":"groupingservicefortest..ResourceInstanceGroup..0","modelInvariantId":"4bb2e27e-ddab-4790-9c6d-1f731bc14a45","modelVersionId":"daeb6568-cef8-417f-9075-ed259ce59f48"},"uuid":"daeb6568-cef8-417f-9075-ed259ce59f48","vnfs":{}}; + } +}); diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.ts new file mode 100644 index 000000000..cd36ece25 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.ts @@ -0,0 +1,79 @@ +import {Injectable} from "@angular/core"; +import {ModelInformationItem} from "../model-information/model-information.component"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../store/reducers"; +import {Subscriber} from "../../models/subscriber"; +import {ServiceInfoModel} from "../../server/serviceInfo/serviceInfo.model"; +import * as _ from 'lodash'; + +@Injectable() +export class AuditInfoModalComponentService { + constructor(private _store: NgRedux<AppState>){} + + getModelInfo(model, instance, serviceModelId: string): ModelInformationItem[] { + const serviceInstance = this._store.getState().service.serviceInstance[serviceModelId]; + const modelInformation = !_.isNil(model) ? [ + new ModelInformationItem('Model name', 'model_name', [model.name]), + new ModelInformationItem('Model version', 'model_version', [model.version]), + new ModelInformationItem('Model customization ID', 'model_customization_ID', [model.customizationUuid]), + new ModelInformationItem('Base module', 'base_module', [!_.isNil(model.properties) ? model.properties.baseModule : null]) + ] : []; + + const instanceInfo = !_.isNil(instance) ? [ + new ModelInformationItem('Instance name', 'instance_name', [instance.instanceName]), + new ModelInformationItem('Instance ID', 'instance_ID', [instance.instanceId]) + ] : []; + + const serviceInfo = !_.isNil(serviceInstance) ? [ + new ModelInformationItem("Subscriber name", "subscriberName", [this.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId, this._store)]), + new ModelInformationItem('Service type', 'service_type', [serviceInstance.subscriptionServiceType]) + ] : []; + + const result = [modelInformation, instanceInfo, serviceInfo]; + return _.uniq(_.flatten(result)); + } + + static createModelInformationItemsJob(serviceModel: ServiceInfoModel): ModelInformationItem[] { + return [ + new ModelInformationItem('Subscriber name', 'subscriberName', [serviceModel.subscriberName]), + new ModelInformationItem('Service type', 'serviceType', [serviceModel.serviceType]), + new ModelInformationItem('Service model version', 'serviceModelVersion', [serviceModel.serviceModelVersion]), + new ModelInformationItem('Service instance name', 'serviceInstanceName', [serviceModel.serviceInstanceName || 'Automatically generated'], '', true), + new ModelInformationItem('Service instance ID', 'serviceInstanceId', [serviceModel.serviceInstanceId]), + new ModelInformationItem('Requestor User ID', 'userId', [serviceModel.userId]), + ]; + } + + static getInstanceModelName(model) : string { + return !_.isNil(model) && model.name ? model.name : ''; + } + + static setModalTitlesType(type : string) : string { + return !_.isNil(type) ? AuditInfoModalComponentService.getTypeMap()[type] : 'Service' ; + } + + static getTypeMap(){ + return { + SERVICE : 'Service', + VNFGROUP : 'Vnf Group', + NETWORK : 'Network', + VFMODULE : 'VfModule', + VNF : 'VNF' + }; + } + + static setModalTitle(type : string) : string { + return !_.isNil(type) ? (AuditInfoModalComponentService.getTypeMap()[type] + " Instantiation Information") : 'Service Instantiation Information'; + } + + extractSubscriberNameBySubscriberId(subscriberId: string, store: NgRedux<AppState>) { + let result: string = null; + let filteredArray: any = _.filter(store.getState().service.subscribers, function (o: Subscriber) { + return o.id === subscriberId + }); + if (filteredArray.length > 0) { + result = filteredArray[0].name; + } + return result; + } +} diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts new file mode 100644 index 000000000..ecce68daf --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts @@ -0,0 +1,203 @@ +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {ContextMenuModule, ContextMenuService} from 'ngx-contextmenu'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {AuditInfoModalComponent} from "./auditInfoModal.component"; +import {NgRedux} from "@angular-redux/store"; +import {FeatureFlagsService} from "../../services/featureFlag/feature-flags.service"; +import {AaiService} from "../../services/aaiService/aai.service"; +import {HttpClientTestingModule} from "@angular/common/http/testing"; +import {ScrollToModule} from "@nicky-lenaers/ngx-scroll-to"; +import {RouterTestingModule} from "@angular/router/testing"; +import {ModalModule} from "ngx-bootstrap"; +import {CapitalizeAndFormatPipe} from "../../pipes/capitalize/capitalize-and-format.pipe"; +import {ServiceInfoService} from "../../server/serviceInfo/serviceInfo.service"; +import {IframeService} from "../../utils/iframe.service"; +import {AuditInfoModalComponentService} from "./auditInfoModal.component.service"; +import {ServiceInfoModel} from "../../server/serviceInfo/serviceInfo.model"; +import {HttpClient} from '@angular/common/http'; +import {getTestBed} from "@angular/core/testing"; +import {of} from 'rxjs'; + +class MockAppStore<T> { + getState() { + return { + global: { + flags: { + 'FLAG_1902_NEW_VIEW_EDIT': true + } + }, + service: { + serviceInstance: {} + } + } + } + + dispatch() { + + } +} + + +describe('Audit Info Modal Component_serviceInfoService', () => { + let component: AuditInfoModalComponent; + let fixture: ComponentFixture<AuditInfoModalComponent>; + let _serviceInfoService: ServiceInfoService; + let injector; + beforeAll(done => (async () => { + + TestBed.configureTestingModule({ + imports: [ + HttpClientTestingModule, + ContextMenuModule, + ScrollToModule.forRoot(), + RouterTestingModule, + ModalModule.forRoot() + ], + providers: [ + ServiceInfoService, + AaiService, + IframeService, + AuditInfoModalComponentService, + ContextMenuService, + FeatureFlagsService, + {provide: NgRedux, useClass: MockAppStore} + ], + declarations: [AuditInfoModalComponent, CapitalizeAndFormatPipe], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + _serviceInfoService = injector.get(ServiceInfoService); + fixture = TestBed.createComponent(AuditInfoModalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })().then(done).catch(done.fail)); + + + test('component should be defined', () => { + expect(component).toBeDefined(); + }); + + test('setModalTitles should set modal title according to type', () => { + component.setModalTitles('VNF'); + expect(component.type).toEqual('VNF'); + expect(component.title).toEqual('VNF Instantiation Information'); + }); + + test('initializeProperties should init some component properties', () => { + component.initializeProperties(); + expect(component.modelInfoItems).toBeNull(); + expect(component.vidInfoData).toEqual([]); + expect(component.msoInfoData).toEqual([]); + expect(component.isLoading).toEqual(true); + }); + + test('openAuditInfoModal', () => { + const jobData: ServiceInfoModel = new ServiceInfoModel(); + spyOn(AuditInfoModalComponentService, 'createModelInformationItemsJob'); + spyOn(component, 'initAuditInfoData'); + spyOn(component.auditInfoModal, 'show'); + component.openAuditInfoModal(jobData); + + expect(AuditInfoModalComponentService.createModelInformationItemsJob).toHaveBeenCalledWith(jobData); + expect(component.initAuditInfoData).toHaveBeenCalledWith(jobData); + expect(component.auditInfoModal.show).toHaveBeenCalled(); + }); + + test('onCancelClick', () => { + spyOn(component, 'initializeProperties'); + spyOn(component.auditInfoModal, 'hide'); + component.onCancelClick(); + + expect(component.initializeProperties).toHaveBeenCalledWith(); + expect(component.auditInfoModal.hide).toHaveBeenCalled(); + }); + + test('openInstanceAuditInfoModal calls to getAuditStatusForRetry function', () => { + spyOn(component.auditInfoModalComponentService, 'getModelInfo').and.returnValue([]); + spyOn(component, 'initializeProperties'); + spyOn(component, 'setModalTitles'); + spyOn(component.auditInfoModal, 'show'); + spyOn(_serviceInfoService, 'getAuditStatusForRetry'); + jest.spyOn(_serviceInfoService, 'getAuditStatusForRetry').mockReturnValue(of([])) + + spyOn(AuditInfoModalComponentService, 'getInstanceModelName'); + const instanceId: string = "instanceID"; + const type: string = 'VNF'; + const model = {}; + const instance = {}; + const isInstanceFailed: boolean = true; + const trackById = "trackById"; + + AuditInfoModalComponent.openInstanceAuditInfoModal.next({ + instanceId: instanceId, + type: type, + model: model, + instance: instance, + isInstanceFailed: isInstanceFailed, + trackById: trackById + }); + + expect(component.showVidStatus).toEqual(false); + expect(component.initializeProperties).toHaveBeenCalled(); + expect(component.setModalTitles).toHaveBeenCalled(); + expect(_serviceInfoService.getAuditStatusForRetry).toHaveBeenCalledWith(trackById); + expect(component.auditInfoModal.show).toHaveBeenCalled(); + expect(AuditInfoModalComponentService.getInstanceModelName).toHaveBeenCalledWith(model); + }); + + test('openInstanceAuditInfoModal calls to getInstanceAuditStatus function', () => { + spyOn(component.auditInfoModalComponentService, 'getModelInfo').and.returnValue([]); + spyOn(component, 'initializeProperties'); + spyOn(component, 'setModalTitles'); + spyOn(component.auditInfoModal, 'show'); + spyOn(_serviceInfoService, 'getAuditStatusForRetry'); + jest.spyOn(_serviceInfoService, 'getInstanceAuditStatus').mockReturnValue(of([])) + + spyOn(AuditInfoModalComponentService, 'getInstanceModelName'); + const instanceId: string = "instanceID"; + const type: string = 'VNF'; + const model = {}; + const instance = {}; + const isInstanceFailed: boolean = false; + const trackById = "trackById"; + + AuditInfoModalComponent.openInstanceAuditInfoModal.next({ + instanceId: instanceId, + type: type, + model: model, + instance: instance, + isInstanceFailed: isInstanceFailed, + trackById: trackById + }); + + expect(component.showVidStatus).toEqual(false); + expect(component.initializeProperties).toHaveBeenCalled(); + expect(component.setModalTitles).toHaveBeenCalled(); + expect(_serviceInfoService.getInstanceAuditStatus).toHaveBeenCalledWith(instanceId, type); + expect(component.auditInfoModal.show).toHaveBeenCalled(); + expect(AuditInfoModalComponentService.getInstanceModelName).toHaveBeenCalledWith(model); + }); + + test('openInstanceAuditInfoModal : openModal : with job data', () => { + spyOn(component.auditInfoModalComponentService, 'getModelInfo').and.returnValue([]); + spyOn(component, 'initializeProperties'); + spyOn(component.auditInfoModal, 'show'); + spyOn(AuditInfoModalComponentService, 'getInstanceModelName'); + const jobData: ServiceInfoModel = new ServiceInfoModel(); + jobData.aLaCarte = true; + AuditInfoModalComponent.openModal.next(jobData); + + expect(component.showVidStatus).toEqual(true); + expect(component.initializeProperties).toHaveBeenCalled(); + expect(component.auditInfoModal.show).toHaveBeenCalled(); + }); + + test('openInstanceAuditInfoModal : openModal : without job data', () => { + spyOn(component.auditInfoModal, 'hide'); + const jobData: ServiceInfoModel = null; + AuditInfoModalComponent.openModal.next(jobData); + expect(component.auditInfoModal.hide).toHaveBeenCalled(); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts new file mode 100644 index 000000000..cf385d767 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts @@ -0,0 +1,122 @@ +import {Component, ViewChild} from '@angular/core'; +import {Subject} from 'rxjs/Subject'; +import {ModalDirective} from 'ngx-bootstrap' +import {ModelInformationItem} from '../model-information/model-information.component'; +import {ServiceModel} from '../../models/serviceModel'; +import {ServiceInfoService} from '../../server/serviceInfo/serviceInfo.service'; +import {ServiceInfoModel} from '../../server/serviceInfo/serviceInfo.model'; +import {AuditStatus} from '../../server/serviceInfo/AuditStatus.model'; +import {IframeService} from "../../utils/iframe.service"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../store/reducers"; +import {AuditInfoModalComponentService} from "./auditInfoModal.component.service"; + +@Component({ + selector: 'audit-info-modal', + templateUrl: './auditInfoModal.component.html', + styleUrls: ['./auditInfoModal.component.scss'] +}) +export class AuditInfoModalComponent { + static openModal: Subject<ServiceInfoModel> = new Subject<ServiceInfoModel>(); + static openInstanceAuditInfoModal: Subject<{instanceId , type, model, instance, isInstanceFailed?, trackById?}> = new Subject<{instanceId , type, model, instance, isInstanceFailed, trackById}>(); + @ViewChild('auditInfoModal') public auditInfoModal: ModalDirective; + title: string = 'Service Instantiation Information'; + modelInfoItems: ModelInformationItem[] = []; + serviceModel: ServiceModel; + serviceModelName: string; + vidInfoData: AuditStatus[] = []; + msoInfoData: AuditStatus[] = []; + isAlaCarte: boolean; + parentElementClassName = 'content'; + isLoading = true; + model: any; + instanceId: string; + isALaCarteFlagOn: boolean; + type : string = "Service"; + showVidStatus : boolean = true; + auditInfoModalComponentService : AuditInfoModalComponentService; + constructor(private _serviceInfoService: ServiceInfoService, private _iframeService : IframeService, + private _auditInfoModalComponentService : AuditInfoModalComponentService, + private store: NgRedux<AppState>) { + this.auditInfoModalComponentService = this._auditInfoModalComponentService; + AuditInfoModalComponent.openModal.subscribe((jobData: ServiceInfoModel) => { + this.isALaCarteFlagOn = this.store.getState().global.flags['FLAG_A_LA_CARTE_AUDIT_INFO']; + this.initializeProperties(); + this.showVidStatus = true; + if (jobData) { + this.isAlaCarte = jobData.aLaCarte; + this.openAuditInfoModal(jobData); + _iframeService.addClassOpenModal(this.parentElementClassName); + this.serviceModelName = jobData.serviceModelName ? jobData.serviceModelName : ''; + this.auditInfoModal.show(); + } else { + _iframeService.removeClassCloseModal(this.parentElementClassName); + this.auditInfoModal.hide(); + } + }); + + AuditInfoModalComponent.openInstanceAuditInfoModal.subscribe(({instanceId , type , model, instance, isInstanceFailed, trackById}) => { + this.showVidStatus = false; + this.initializeProperties(); + this.setModalTitles(type); + this.serviceModelName = AuditInfoModalComponentService.getInstanceModelName(model); + + if (isInstanceFailed) { + this._serviceInfoService.getAuditStatusForRetry(trackById).subscribe((res: AuditStatus) => { + this.msoInfoData = [res]; + }); + }else{ + this._serviceInfoService.getInstanceAuditStatus(instanceId, type).subscribe((res : AuditStatus[]) =>{ + this.msoInfoData = res; + }); + } + this.modelInfoItems = this.auditInfoModalComponentService.getModelInfo(model, instance, instanceId); + _iframeService.addClassOpenModal(this.parentElementClassName); + this.auditInfoModal.show(); + }); + } + + + setModalTitles(type : string) : void{ + this.type = AuditInfoModalComponentService.setModalTitlesType(type) ; + this.title = AuditInfoModalComponentService.setModalTitle(type); + } + + initializeProperties() : void { + this.modelInfoItems = null; + this.vidInfoData = []; + this.msoInfoData = []; + this.isLoading = true; + } + + openAuditInfoModal(jobData: ServiceInfoModel): void { + this.modelInfoItems = AuditInfoModalComponentService.createModelInformationItemsJob(jobData); + this.initAuditInfoData(jobData); + this.auditInfoModal.onHide.subscribe(()=>{ + this._iframeService.removeClassCloseModal(this.parentElementClassName); + this.initializeProperties(); + }); + this.auditInfoModal.show(); + } + + initAuditInfoData(jobData: ServiceInfoModel) { + this._serviceInfoService.getJobAuditStatus(jobData) + .subscribe((res: AuditStatus[][]) => { + this.vidInfoData = res[0]; + this.msoInfoData = res[1]; + this.isLoading = false; + }); + } + + onCancelClick() { + this._iframeService.removeClassCloseModal(this.parentElementClassName); + this.initializeProperties(); + this.auditInfoModal.hide(); + } + + + onNavigate(){ + window.open("https://wiki.onap.org/display/DW/SO+Building+blocks", "_blank"); + } +} + diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.spec.ts b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.spec.ts new file mode 100644 index 000000000..6194aad5e --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.spec.ts @@ -0,0 +1,157 @@ +import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing"; +import {DynamicInputsComponent} from "./dynamic-inputs.component"; +import {async, ComponentFixture, getTestBed, TestBed} from "@angular/core/testing"; +import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core"; +import {FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn} from "@angular/forms"; +import {BrowserModule} from "@angular/platform-browser"; +import {CommonModule} from "@angular/common"; +import {RouterTestingModule} from "@angular/router/testing"; +import {DynamicInputLabelPipe} from "../../pipes/dynamicInputLabel/dynamic-input-label.pipe"; +import {DynamicNumber} from "../../models/dynamicInput"; + + +describe('DynamicInputs Component', () => { + let component: DynamicInputsComponent; + let fixture: ComponentFixture<DynamicInputsComponent>; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [BrowserModule, CommonModule, FormsModule, HttpClientTestingModule, RouterTestingModule, ReactiveFormsModule], + declarations: [DynamicInputsComponent, DynamicInputLabelPipe], + providers : [FormBuilder], + schemas: [ CUSTOM_ELEMENTS_SCHEMA ] + }); + await TestBed.compileComponents(); + + fixture = TestBed.createComponent(DynamicInputsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })().then(done).catch(done.fail)); + + test('should be defined', () => { + expect(component).toBeDefined(); + }); + + test('isDynamicNumber should return item', () => { + let options = { + minLength : 10, + maxLength : 10 + }; + + let dynamicNumber : DynamicNumber = new DynamicNumber(<any>options); + expect(component.isDynamicNumber(dynamicNumber)).toBeDefined(); + }); + + test('buildValidators should return validator', () => { + let options = { + minLength : 10, + maxLength : 10, + max : 10, + min : 1 + }; + + let dynamicNumber : DynamicNumber = new DynamicNumber(<any>options); + let validator : ValidatorFn = component.buildValidators(dynamicNumber); + expect(validator).toBeDefined(); + }); + + + test('ngOnInit', ()=>{ + component.group = new FormGroup({ + + }); + component.list = [ + { + type : 'select', + value : 'optionName', + name : 'multiSelectControl', + optionList : [{ + isDataLoading : true, + name : 'optionName', + id : 'id' + }] + }, + { + type : 'select', + value : 'optionName', + name : 'multiSelectControl', + optionList : [{ + isDataLoading : true, + name : 'optionName', + id : 'id' + }] + }, + { + type : 'multi_select', + value : 'optionName', + name : 'selectControl', + optionList : [{ + isDataLoading : true, + name : 'optionName', + id : 'id' + }] + }, + { + type : 'multi_select', + value : 'optionName', + name : 'selectControl', + optionList : [{ + isDataLoading : true, + name : 'optionName' + }] + }, + { + type : 'boolean', + value : true, + name : 'booleanControl' + }, + { + type : 'boolean', + name : 'booleanControl2' + }, + { + type : 'number', + value : 100, + name : 'numberControl' + }, + { + type : 'file', + value : 'someValue', + name : 'fileControl' + }, + { + type : 'checkbox', + value : true, + name : 'checkboxControl' + }, + { + type : 'map', + value : true, + name : 'mapControl' + }, + { + type : 'list', + value : true, + name : 'listControl' + }, + { + type : 'default', + value : true, + name : 'defaultControl' + } + ]; + + component.ngOnInit(); + expect(component.group.controls['multiSelectControl'].value).toEqual('id'); + expect(component.group.controls['selectControl'].value).toEqual('optionName'); + expect(component.group.controls['booleanControl'].value).toEqual(true); + expect(component.group.controls['booleanControl2'].value).toEqual(false); + expect(component.group.controls['numberControl'].value).toEqual(100); + expect(component.group.controls['fileControl'].value).toEqual('someValue'); + expect(component.group.controls['checkboxControl'].value).toEqual(true); + expect(component.group.controls['mapControl'].value).toEqual(true); + expect(component.group.controls['listControl'].value).toEqual(true); + expect(component.group.controls['defaultControl'].value).toEqual(true); + }) + +}); diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.ts b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.ts new file mode 100644 index 000000000..096a51eb7 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.ts @@ -0,0 +1,80 @@ +import {Component, Input, OnInit} from '@angular/core'; +import {FormControl, FormGroup, Validators} from "@angular/forms"; +import {DynamicInput, DynamicMultiSelect, DynamicNumber, DynamicSelect} from "../../models/dynamicInput"; + +@Component({ + selector: 'dynamic-inputs', + templateUrl: './dynamic-inputs.html', + styleUrls: ['./dynamic-inputs.scss'] +}) + +export class DynamicInputsComponent implements OnInit{ + @Input() public list:any[] = []; + @Input() public group: FormGroup; + + private dynamicList:DynamicInput<any>[] = []; + + isDynamicNumber(item: any): item is DynamicNumber { + return item; + } + + buildValidators(item: DynamicInput<any>) { + let validatorArr = []; + item.maxLength && validatorArr.push(Validators.maxLength(item.maxLength)); + item.minLength && validatorArr.push(Validators.minLength(item.minLength)); + if(this.isDynamicNumber(item)) { + item.max && validatorArr.push(Validators.max(item.max)); + item.min && validatorArr.push(Validators.min(item.min)); + } + return Validators.compose(validatorArr); + } + + ngOnInit(): void { + this.list.forEach((item)=> { + let dynamicItem: DynamicInput<any>; + switch (item.type) { + case 'multi_select': + item.optionList.forEach(function(option) { option.id = option.id||option.name; + option.itemName = option.name;}); + item.settings = { + disabled: !item.isEnabled, + text: item.prompt, + }; + dynamicItem = new DynamicMultiSelect(item); + break; + case 'select': + let defaultValue:any = item.optionList.find((option) => option.isDataLoading && option.name); + item.value = defaultValue && defaultValue.id; + dynamicItem = new DynamicSelect(item); + break; + case 'boolean': + item.value = item.value || false; + item.optionList = [{name: true, isPermitted: true, isDataLoading: item.value}, {name: false, isPermitted: true, isDataLoading: !item.value}]; + + dynamicItem = new DynamicSelect(item); + break; + case 'number': + dynamicItem = new DynamicNumber(item); + break; + case 'file': + dynamicItem = new DynamicInput<any>(item); + break; + case 'checkbox': + dynamicItem = new DynamicInput<boolean>(item); + break; + case 'map': + item.prompt = "{<key1>: <value1>,\.\.\.,<keyN>: <valueN>}"; + dynamicItem = new DynamicInput<string>(item); + break; + case 'list': + item.prompt = "[<value1>,...,<valueN>]"; + dynamicItem = new DynamicInput<string>(item); + break; + default: dynamicItem = new DynamicInput<string>(item); + } + this.dynamicList.push(dynamicItem); + this.group.addControl(dynamicItem.name, new FormControl({value: dynamicItem.value, disabled: !dynamicItem.isEnabled}, this.buildValidators(dynamicItem))); + }) + } + +} diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.html b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.html new file mode 100644 index 000000000..740b798e4 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.html @@ -0,0 +1,22 @@ +<div *ngFor="let item of dynamicList"> + <div id="{{item.id}}" class="details-item" [ngSwitch]="item.type" [formGroup]="group" [hidden]="!item.isVisible"> + <label [ngClass]="{'required' : item.isRequired && item.isVisible}">{{item.name | dynamicInputLabel }}</label> + <select *ngSwitchCase="item.type === 'select'|| item.type === 'boolean'? item.type: ''" name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" title="{{item.description}}" [required]="item.isRequired && item.isVisible" maxlength="{{item.maxLength}}" minlength="{{item.minLength}}"> + <option value="null" [selected]="item.value == null || item.value == undefined" hidden disabled>{{item.prompt}}</option> + <option *ngFor="let option of item.optionList" [ngValue]="option.id || option.name" [disabled]="!option.isPermitted" [selected]="option.isDataLoading">{{option.name}}</option> + </select> + <angular2-multiselect *ngSwitchCase="'multi_select'" [formControlName]="item.name" [(ngModel)]="item.selectedItems" [data]="item.optionList" [settings]="item.settings" title="{{item.description}}" [required]="item.isRequired && item.isVisible"></angular2-multiselect> + <input *ngSwitchCase="'number'" name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" type="number" placeholder="{{item.prompt}}" title="{{item.description}}" min="{{item.min}}" max="{{item.max}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible"> + <div *ngSwitchCase="'file'"> + + <label class="dynamicFileName" for="dynamicFileInput-{{item.name}}"> + <input id="dynamicFileInput-{{item.name}}" name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" type="file" placeholder="{{item.prompt}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible"> + <label for="dynamicFileInput-{{item.name}}" class="labelForImage"> + <span class="icon-browse"></span> + </label> + </label> + </div> + <input *ngSwitchCase="'checkbox'" name="{{item.name}}" [formControlName]="item.name" type="checkbox" data-toggle="toggle" title="{{item.description}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible"> + <input *ngSwitchDefault name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" placeholder="{{item.prompt}}" title="{{item.description}}" maxlength="{{item.maxLength}}" minlength="{{item.minLength}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible"/> + </div> +</div> diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.scss b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.scss new file mode 100644 index 000000000..11a141420 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.scss @@ -0,0 +1,58 @@ +input[type=file] { + opacity: 0; + position: relative; + z-index: 1; + width: 0.5px; + height: 0.5px; + display: inline-block; + input { + display: none; + } +} + +.dynamicFileName { + width: 100%; + height: 34px; + background: #FFFFFF; + border: 1px solid #D2D2D2; + border-radius: 2px; + display: inline-block; + line-height: 34px; + font-weight: normal !important; + padding-left: 3px; + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.labelForImage { + background: #F2F2F2; + border-left: 1px solid #D2D2D2; + float: right; + height: 32px; +} + +.icon-browse:before { + content: "\e90d"; + color: #5A5A5A; + font-size: 15px; + cursor: pointer; + width: 34px; + height: 100%; + line-height: 34px; + text-align: center; + display: inline-block; + vertical-align: super; + border-radius: 2px; + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.icon-browse:hover::before { + background-color: #E6F6FB; + color: #009FDB; +} + +.icon-browse:active::before { + background-color: #E6F6FB; + color: #009FDB; +} diff --git a/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts b/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts index fd58b6507..bce06953c 100644 --- a/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts +++ b/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts @@ -1,12 +1,17 @@ -import { Component, Input } from '@angular/core'; +import {Component, Input, OnChanges, SimpleChanges} from '@angular/core'; +import {HighlightPipe} from "../../pipes/highlight/highlight-filter.pipe"; +import * as _ from 'lodash'; @Component({ selector : 'custom-ellipsis', template: ` - <span + <span + sdc-tooltip class="ellipsis" id="{{id}}" - tooltip="{{value}}">{{value}}</span>`, + [innerHtml]="displayValue | safe : 'html'" + [tooltip-text]="value"> + </span>`, styles : [ ` .ellipsis { @@ -18,10 +23,23 @@ import { Component, Input } from '@angular/core'; text-align: left; } ` - ] + ], + providers : [HighlightPipe] }) -export class EllipsisComponent { +export class EllipsisComponent implements OnChanges{ @Input() value : string; @Input() id : string; + @Input() hightlight : string; + displayValue : string; + constructor(private _highlightPipe : HighlightPipe){ + this.displayValue = this.value; + } + + ngOnChanges(changes: SimpleChanges): void { + this.displayValue = this.value; + if(!_.isNil(this.hightlight)){ + this.displayValue = this._highlightPipe.transform(this.value ,this.hightlight ? this.hightlight : ''); + } + } } diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.html b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.html new file mode 100644 index 000000000..6fb46c256 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.html @@ -0,0 +1,5 @@ +<div [attr.data-tests-id]="'error-msg-wrapper'" class="error-msg-wrapper" *ngIf="errorMsgService?.errorMsgObject"> + <div class="title" [attr.data-tests-id]="'error-msg-title'">{{errorMsgService?.errorMsgObject?.title}}</div> + <div class="sub-title" [attr.data-tests-id]="'error-msg-sub-title'">{{errorMsgService?.errorMsgObject?.subtitle}}</div> + <div *ngIf="errorMsgService?.errorMsgObject?.description" class="description" [attr.data-tests-id]="'error-msg-description'">{{errorMsgService?.errorMsgObject?.description}}</div> +</div> diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.scss b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.scss new file mode 100644 index 000000000..98c7e8480 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.scss @@ -0,0 +1,22 @@ +.error-msg-wrapper{ + display: block; + border-top: 6px solid #CF2A2A; + border-bottom: 1px solid #D2D2D2; + padding: 20px 45px; + font-family: OpenSans-Regular; + font-size: 14px; + .title{ + color: #CF2A2A; + margin-bottom: 10px; + font-family: OpenSans-SemiBold; + font-size: 16px; + } + .sub-title{ + color: #CF2A2A; + margin-bottom: 5px; + } + .description{ + color: #191919; + } +} + diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.spec.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.spec.ts new file mode 100644 index 000000000..2ca72c533 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.spec.ts @@ -0,0 +1,48 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import { ErrorMsgComponent } from './error-msg.component'; +import {ErrorMsgService} from "./error-msg.service"; +import {ErrorMsgObject} from "./error-msg.model"; + +describe('ErrorMsgComponent', () => { + + let component: ErrorMsgComponent; + let fixture: ComponentFixture<ErrorMsgComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ErrorMsgComponent], + providers: [ErrorMsgService] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ErrorMsgComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + test('should create', () => { + expect(component).toBeTruthy(); + }); + + test('should triggerShowError fill error msg object', () => { + let errorMsgObj:ErrorMsgObject = new ErrorMsgObject("Title", "SubTitle", "Description") + component.errorMsgService.triggerShowError.next(errorMsgObj); + let errorMsg = component.errorMsgService.errorMsgObject; + expect(errorMsg).toBeDefined(); + expect(errorMsg.title).toBe('Title'); + expect(errorMsg.subtitle).toBe('SubTitle'); + expect(errorMsg.description).toBe('Description'); + }); + + test('should triggerClearError delete error msg object', () => { + let errorMsgObj:ErrorMsgObject = new ErrorMsgObject("Title", "SubTitle", "Description") + component.errorMsgService.triggerShowError.next(errorMsgObj); + let errorMsg = component.errorMsgService.errorMsgObject; + expect(errorMsg).toBeDefined(); + component.errorMsgService.triggerClearError.next(); + expect(component.errorMsgService.errorMsgObject).toBeNull(); + + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.ts new file mode 100644 index 000000000..e47a06ca6 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.ts @@ -0,0 +1,28 @@ +import {Component, OnChanges, SimpleChanges} from '@angular/core'; +import {ErrorMsgService} from "./error-msg.service"; +import {ErrorMsgObject} from "./error-msg.model"; + +@Component({ + selector: 'error-msg', + templateUrl: './error-msg.component.html', + styleUrls: ['./error-msg.component.scss'] +}) + +export class ErrorMsgComponent implements OnChanges { + + errorMsgService: ErrorMsgService; + constructor(private _errorMsgService: ErrorMsgService) { + this.errorMsgService = _errorMsgService; + this._errorMsgService.triggerShowError.subscribe((error: ErrorMsgObject) => { + this.errorMsgService.errorMsgObject = error; + }); + + this._errorMsgService.triggerClearError.subscribe(() => { + this.errorMsgService.errorMsgObject = null; + }); + } + + ngOnChanges(changes: SimpleChanges): void { + } +} + diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.model.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.model.ts new file mode 100644 index 000000000..0cdb74290 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.model.ts @@ -0,0 +1,11 @@ +export class ErrorMsgObject { + title: string; + subtitle: string; + description: string; + + constructor(title: string, subtitle: string, description: string) { + this.title = title; + this.subtitle = subtitle; + this.description = description; + } +} diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.spec.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.spec.ts new file mode 100644 index 000000000..faaef8d41 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.spec.ts @@ -0,0 +1,38 @@ +import {TestBed, getTestBed } from '@angular/core/testing'; +import {ErrorMsgService} from "./error-msg.service"; + +describe('Error msg Service', () => { + let injector; + let service: ErrorMsgService; + + beforeAll(done => (async () => { + + TestBed.configureTestingModule( + { + providers: [ + ErrorMsgService + ] + }); + await TestBed.compileComponents(); + injector = getTestBed(); + service = injector.get(ErrorMsgService); + })().then(done).catch(done.fail)); + + test('should return error msg object when call to getScalingErrorObject', () => { + let errorMsgObject = service.getScalingErrorObject(); + expect(errorMsgObject).toBeDefined(); + expect(errorMsgObject.title).toBe('Error : Too many members'); + expect(errorMsgObject.subtitle).toBe('One or more VNF groups, marked below, exceeds the maximum allowed number of members to associate'); + expect(errorMsgObject.description).toBe('Please make sure the total amount of VNF instances is less than that amount.'); + }); + + test('should return error msg object when call to getRetryErrorObject', () => { + let errorMsgObject = service.getRetryErrorObject(1); + expect(errorMsgObject).toBeDefined(); + expect(errorMsgObject.title).toBe('ERROR!'); + expect(errorMsgObject.subtitle).toBe(`Attention: You are currently viewing instances from the MSO. \n 1 of the instances failed, please try again.`); + expect(errorMsgObject.description).toBe(null); + }); + +}); + diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.ts new file mode 100644 index 000000000..e1bcd423f --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.ts @@ -0,0 +1,22 @@ +import {Injectable} from '@angular/core'; +import {Subject} from 'rxjs/Subject'; +import {ErrorMsgObject} from "./error-msg.model"; + +@Injectable() +export class ErrorMsgService { + triggerShowError: Subject<ErrorMsgObject> = new Subject<ErrorMsgObject>(); + triggerClearError: Subject<boolean> = new Subject<boolean>(); + errorMsgObject: ErrorMsgObject = null; + + getScalingErrorObject(): ErrorMsgObject { + return new ErrorMsgObject("Error : Too many members", + "One or more VNF groups, marked below, exceeds the maximum allowed number of members to associate", + "Please make sure the total amount of VNF instances is less than that amount."); + } + + getRetryErrorObject(numberOfFailed: number): ErrorMsgObject { + return new ErrorMsgObject("ERROR!", + `Attention: You are currently viewing instances from the MSO. \n ${numberOfFailed} of the instances failed, please try again.`, + null); + } +} diff --git a/vid-webpack-master/src/app/shared/components/error/error.component.service.ts b/vid-webpack-master/src/app/shared/components/error/error.component.service.ts index 35b83f0b6..c573d16e9 100644 --- a/vid-webpack-master/src/app/shared/components/error/error.component.service.ts +++ b/vid-webpack-master/src/app/shared/components/error/error.component.service.ts @@ -1,18 +1,16 @@ import {Injectable} from "@angular/core"; -import {Subject} from "rxjs/Subject"; -import { MessageBoxService } from '../messageBox/messageBox.service'; -import { MessageBoxData, ModalSize, ModalType } from '../messageBox/messageBox.data'; - +import {MessageBoxService } from '../messageBox/messageBox.service'; +import {MessageBoxData} from '../messageBox/messageBox.data'; +import { SdcUiCommon} from "onap-ui-angular"; @Injectable() export class ErrorService { static showErrorWithMessage(error : ErrorMessage) : void { setTimeout(()=>{ let messageBoxData : MessageBoxData = new MessageBoxData( - error.title, // modal title + error.title, error.text, - - ModalType.error, - ModalSize.medium, + SdcUiCommon.ModalType.error, + SdcUiCommon.ModalSize.medium, [ {text:"Close", size:"large", closeModal:true} ]); @@ -33,3 +31,4 @@ export class ErrorMessage { this.errorNumber = errorNumber; } } + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.html new file mode 100644 index 000000000..26362ebed --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.html @@ -0,0 +1,11 @@ +<div class="details-item"> + <input type="checkbox" + id="{{data?.dataTestId}}" + [attr.data-tests-id]="data?.dataTestId" + [checked]="data?.value" + name="{{data?.controlName}}" + [formControl]="form?.controls[data?.controlName]" + data-toggle="toggle"> + <label class="checkbox-label" + for="{{data?.dataTestId}}">{{data?.displayName}}</label> +</div> diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.ts new file mode 100644 index 000000000..f9ba48308 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.ts @@ -0,0 +1,13 @@ +import {Component, Input} from "@angular/core"; +import {FormControlModel} from "../../../../models/formControlModels/formControl.model"; +import {FormGroup} from "@angular/forms"; + +@Component({ + selector: 'checkbox-form-control', + templateUrl: './checkbox.formControl.component.html' +}) +export class CheckboxFormControlComponent{ + @Input() data: FormControlModel; + @Input() form: FormGroup; + +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.html new file mode 100644 index 000000000..6d13e52f8 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.html @@ -0,0 +1,21 @@ +<div class="details-item" *ngIf="data != null && form != null"> + <label [ngClass]="{'required': data.isRequired()}" + for="{{data?.dataTestId}}-select">{{data?.displayName}}:</label> + <select class="form-control input-text" + id="{{data?.dataTestId}}-select" + [attr.data-tests-id]="data?.dataTestId" + name="{{data?.name}}" + [formControl]="form.controls[data.controlName]" + [ngClass]="{'error-style' : (form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors) || data?.hasEmptyOptions , + 'grayColor': form?.controls[data?.controlName]?.value == null || form?.controls[data?.controlName]?.value == undefined, + 'blackColor' : form?.controls[data?.controlName]?.value != null}" + (blur)="data.onBlur()"> + + <option [value]="null" hidden>{{data?.placeHolder}}</option> + <option *ngFor="let option of data?.options$ | orderBy : {property : 'name', direction : 1} ; let i = index" class="{{option?.id}} {{data?.dataTestId}}Option" + [value]="option[data.ngValue]" [disabled]="!option?.isPermitted && option?.isPermitted != undefined">{{option.name}} + </option> + </select> + <form-control-error *ngIf="data?.hasEmptyOptions" [message]="'No results for this request. Please change criteria.'"></form-control-error> +</div> + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.scss b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.scss new file mode 100644 index 000000000..9826332cc --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.scss @@ -0,0 +1,7 @@ +.grayColor { + color: gray !important; +} + +.blackColor { + color: black !important; +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.ts new file mode 100644 index 000000000..550feca22 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.ts @@ -0,0 +1,27 @@ +import {Component, Input, OnChanges, SimpleChanges} from "@angular/core"; +import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model"; +import {FormGroup} from "@angular/forms"; + +@Component({ + selector: 'dropdown-form-control', + templateUrl: './dropdown.formControl.component.html', + styleUrls : ['./dropdown.formControl.component.scss'] +}) +export class DropdownFormControlComponent implements OnChanges{ + @Input() data: DropdownFormControl = null; + @Input() form: FormGroup = null; + + ngOnChanges(changes: SimpleChanges): void { + if (changes["data"] !== undefined && changes["data"].currentValue !== changes["data"].previousValue && changes["data"].firstChange) { + if(this.data.onInit){ + this.data.onInit(this.data, this.form); + } + } + + if (changes["data"] !== undefined) { + this.form.controls[this.data.controlName].valueChanges.subscribe((value)=>{ + this.data.onChange(value, this.form); + }) + } + } +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.html new file mode 100644 index 000000000..bcbe91e5e --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.html @@ -0,0 +1,22 @@ +<div class="details-item file-form-control"> + <label [ngClass]="{'required': data.isRequired()}" for="{{data?.controlName}}">{{data?.displayName}}:</label> + <label for="{{data?.controlName}}" class="file-input-wrapper" [ngClass]="{'file-uploaded': fileUploader.files && fileUploader.files[0] || data.selectedFile != data.placeHolder}"> + <span data-tests-id="file-name" class="file-name"> + {{ fileUploader.files && fileUploader.files[0] ? fileUploader.files[0].name : data.selectedFile}} + </span> + <input id="{{data?.controlName}}" + name="{{data?.controlName}}" + class="form-control input-text" + [formControl]="form?.controls[data?.controlName]" + [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}" + type="file" + #fileUploader + accept="{{data?.acceptedExtentions}}" + (change)="data?.onChange($event.target.files, form)"> + <input *ngFor="let hiddenFile of data?.hiddenFile" type="hidden" id="{{hiddenFile.controlName}}" name="{{hiddenFile.controlName}}" + [formControl]="form?.controls[hiddenFile.controlName]"/> + <span class="delete" data-tests-id="remove-uploaded-file" (click)="onDelete($event, data, form)">X</span> + <span class="icon-browse"></span> + </label> +</div> + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.scss b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.scss new file mode 100644 index 000000000..98fae0249 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.scss @@ -0,0 +1,87 @@ +.file-form-control{ + label{ + color: #191919; + } + input[type=file] { + opacity: 0; + flex: 0; + } + .file-input-wrapper{ + display: flex; + background: #FFFFFF; + border: 1px solid #D2D2D2; + border-radius: 2px; + height: 38px; + &:hover{ + cursor: pointer; + border: 1px solid #009FDB; + .icon-browse{ + background: #E6F6FB; + border-left: 1px solid #009FDB; + &:before{ + color: #009FDB; + } + } + } + &:active{ + .icon-browse{ + background: #1EB9F3; + border-left: 1px solid #009FDB; + &:before{ + color: #ffffff; + } + } + } + .file-name { + font-family: OpenSans-Italic; + font-weight: normal; + font-size: 14px; + color: #959595; + margin: 9px; + width: 100%; + } + .icon-browse{ + z-index: 1; + margin-left: auto; + margin-bottom: 0; + cursor: pointer; + content: "\e90d"; + color: #5A5A5A; + font-size: 30px; + display: block; + text-align: center; + padding-top: 4px; + background: #F2F2F2; + border-left: 1px solid #D2D2D2; + width: 36px; + height:100%; + &:before{ + content: "\e90d"; + color: #5A5A5A; + } + } + .delete{ + visibility: hidden; + cursor: pointer; + font-size: 14px; + margin-right: 10px; + margin-top: 9px; + color: #5a5a5a; + margin-left: 10px; + z-index: 1; + &:hover{ + color: #000000; + } + } + &.file-uploaded{ + .file-name{ + font-family: OpenSans-Regular; + font-size: 14px; + color: #000000; + } + .delete{ + visibility: visible; + } + } + } +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.spec.ts b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.spec.ts new file mode 100644 index 000000000..e27f5115a --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.spec.ts @@ -0,0 +1,62 @@ +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core' +import {FileFormControlComponent} from "./file.formControl.component"; +import {CommonModule} from "@angular/common"; +import {FormBuilder, FormControl, ReactiveFormsModule, Validators} from "@angular/forms"; +import {ValidatorModel, ValidatorOptions} from "../../../../models/formControlModels/formControl.model"; +import {FormControlMessageErrorComponent} from "../../errorMessage/formControlMessageError.component"; +import {BrowserModule} from "@angular/platform-browser"; +import {TooltipModule} from "ngx-tooltip"; +import {FileFormControl} from "../../../../models/formControlModels/fileFormControl.model"; + +describe('File Form Control Component', () => { + let component: FileFormControlComponent; + let fixture: ComponentFixture<FileFormControlComponent>; + let fb: FormBuilder; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [CommonModule, BrowserModule, ReactiveFormsModule, TooltipModule], + providers: [FormBuilder], + declarations: [FileFormControlComponent, FormControlMessageErrorComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }); + await TestBed.compileComponents(); + + fixture = TestBed.createComponent(FileFormControlComponent); + component = fixture.componentInstance; + fb = TestBed.get(FormBuilder); + + })().then(done).catch(done.fail)); + + test('file component should initialize basic parameters', () => { + component.data = new FileFormControl({ + displayName: "display Name", + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + dataTestId: "data-test-id", + placeHolder: "place holder", + controlName: 'testFile', + acceptedExtentions: "json" + }); + + component.form = fb.group({ + 'testFile': new FormControl({ + value: component.data.selectedFile, + disabled: false + }, + Validators.compose(component.data.validations.map(item => item.validator)) + ), + }); + + component.data.onDelete = function () { + component.form.controls['testFile'].setValue('onDelete'); + }; + + expect(component.form.controls['testFile'].value).toEqual("place holder"); + let event = new Event("onDelete", null); + component.data.onDelete(event, component.data, component.form); + expect(component.form.controls['testFile'].value).toEqual('onDelete'); + }) +}); + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.ts new file mode 100644 index 000000000..2c2172005 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.ts @@ -0,0 +1,27 @@ +import {Component, ElementRef, Input, ViewChild} from "@angular/core"; +import {FormGroup} from "@angular/forms"; +import {FileFormControl} from "../../../../models/formControlModels/fileFormControl.model"; + +@Component({ + selector : 'file-form-control', + templateUrl : './file.formControl.component.html', + styleUrls : ['./file.formControl.component.scss'] +}) + +export class FileFormControlComponent { + @Input() data: FileFormControl = null; + @Input() form: FormGroup; + @ViewChild('fileUploader') + fileUploader:ElementRef ; + + onDelete(event, data, form) { + event.stopPropagation(); + event.preventDefault(); + form.value[data.controlName] = this.fileUploader.nativeElement.value = ""; + data.selectedFile = data.placeHolder; + if (data.onDelete){ + data.onDelete(form); + } + + } +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/fileUnit.enum.ts b/vid-webpack-master/src/app/shared/components/formControls/component/file/fileUnit.enum.ts new file mode 100644 index 000000000..d875e486c --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/fileUnit.enum.ts @@ -0,0 +1,7 @@ +export enum FileUnit { + b, + B, + KB, + MB, + GB +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.html new file mode 100644 index 000000000..90ac7c698 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.html @@ -0,0 +1,25 @@ +<div class="details-item" *ngIf="data?.isVisible"> + <label + [tooltip]="data?.tooltip ? data.tooltip : null" + id="{{data?.dataTestId}}-label" + [ngClass]="{'required' : data?.isRequired()}"> + {{data?.displayName}}: </label> + <input + #customInput + + [disabled]="data?.isDisabled ? data.isDisabled : false" + [type]="data?.inputType ? data?.inputType : 'text'" + [attr.data-tests-id]="data?.dataTestId" + class="form-control input-text" + id="{{data?.dataTestId}}" + [placeholder]="data?.placeHolder ? data?.placeHolder : ''" + [formControl]="form?.controls[data?.controlName]" + [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}" + minlength="{{data?.minLength}}" + maxlength="{{data?.maxLength}}" + (blur)="data.onBlur($event, form)" + (keypress)="data?.onKeypress($event)"> +</div> + + + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.scss b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.scss new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.scss diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.spec.ts b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.spec.ts new file mode 100644 index 000000000..84d379d1a --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.spec.ts @@ -0,0 +1,68 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core' +import {InputFormControlComponent} from "./input.formControl.component"; +import {CommonModule} from "@angular/common"; +import {FormBuilder, FormControl, ReactiveFormsModule, Validators} from "@angular/forms"; +import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model"; +import {ValidatorModel, ValidatorOptions} from "../../../../models/formControlModels/formControl.model"; +import {FormControlMessageErrorComponent} from "../../errorMessage/formControlMessageError.component"; +import {BrowserModule} from "@angular/platform-browser"; +import {TooltipModule} from "ngx-tooltip"; + +describe('Input Form Control Component', () => { + let component: InputFormControlComponent; + let fixture: ComponentFixture<InputFormControlComponent>; + let fb: FormBuilder; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [CommonModule, BrowserModule, ReactiveFormsModule, TooltipModule], + providers: [FormBuilder], + declarations: [InputFormControlComponent, FormControlMessageErrorComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }); + await TestBed.compileComponents(); + + fixture = TestBed.createComponent(InputFormControlComponent); + component = fixture.componentInstance; + fb = TestBed.get(FormBuilder); + + })().then(done).catch(done.fail)); + + test('component should initialize basic parameters', () => { + component.data = new InputFormControl({ + value: "value", + displayName: "display Name", + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + dataTestId: "data-test-id", + placeHolder: "place holder", + controlName: 'testInstanceName' + }); + + component.data.hasErrors = function () { + return this.formGroup.controls[this.controlName].touched && this.formGroup.controls[this.controlName].errors ? ['error-style'] : []; + }; + + component.data.onBlur = function () { + component.form.controls['testInstanceName'].setValue('onBlur'); + }; + + component.form = fb.group({ + 'testInstanceName': new FormControl({ + value: component.data.value, + disabled: false + }, Validators.compose(component.data.validations.map(item => item.validator))) + }); + + + component.form.controls['testInstanceName'].setValue('newValue'); + expect(component.form.controls['testInstanceName'].errors).toBeFalsy(); + component.form.controls['testInstanceName'].setValue(''); + expect(component.form.controls['testInstanceName'].errors.required).toBeTruthy(); + component.data.onBlur(); + expect(component.form.controls['testInstanceName'].value).toEqual('onBlur'); + expect(component.form.controls['testInstanceName'].errors).toBeFalsy(); + } + ) +}); + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.ts new file mode 100644 index 000000000..1e8c28104 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.ts @@ -0,0 +1,18 @@ +import {Component, ElementRef, Input, ViewChild} from "@angular/core"; +import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model"; +import {FormGroup} from "@angular/forms"; + +@Component({ + selector : 'form-control-input', + templateUrl : './input.formControl.component.html', + styleUrls : ['./input.formControl.component.scss'] +}) + +export class InputFormControlComponent{ + @ViewChild('customInput') element:ElementRef; + @Input() data: InputFormControl = null; + @Input() form: FormGroup; + + + +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.html new file mode 100644 index 000000000..f7c4894b2 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.html @@ -0,0 +1,16 @@ +<div> + <div class="details-item" *ngIf="data != null && form != null"> + <label [ngClass]="{'required': data.isRequired()}" + for="{{data?.dataTestId}}">{{data?.displayName}}:</label> + <angular2-multiselect id="{{data?.dataTestId}}" + [attr.data-tests-id]="data?.dataTestId" + [formControl]="form.controls[data.controlName]" + [(ngModel)]="data.selectedItems" + [data]="data?.options$" + [settings]="data?.settings" + title="{{data.tooltip}}" + [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}"> + </angular2-multiselect> + </div> +</div> + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.spec.ts b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.spec.ts new file mode 100644 index 000000000..81c8d4679 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.spec.ts @@ -0,0 +1,74 @@ +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core' +import {CommonModule} from "@angular/common"; +import {FormBuilder, FormControl, ReactiveFormsModule, Validators} from "@angular/forms"; +import { + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {FormControlMessageErrorComponent} from "../../errorMessage/formControlMessageError.component"; +import {BrowserModule} from "@angular/platform-browser"; +import {MultiselectFormControlComponent} from "./multiselect.formControl.component"; +import {MultiselectFormControl} from "../../../../models/formControlModels/multiselectFormControl.model"; +import { of } from "rxjs"; +describe('Dropdown Form Control Component', () => { + let component: MultiselectFormControlComponent; + let fixture: ComponentFixture<MultiselectFormControlComponent>; + let fb: FormBuilder; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [CommonModule, BrowserModule, ReactiveFormsModule], + providers: [FormBuilder], + declarations: [MultiselectFormControlComponent, FormControlMessageErrorComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }); + await TestBed.compileComponents(); + + fixture = TestBed.createComponent(MultiselectFormControlComponent); + component = fixture.componentInstance; + fb = TestBed.get(FormBuilder); + + })().then(done).catch(done.fail)); + + test('component should initialize basic parameters', () => { + component.data = new MultiselectFormControl({ + displayName: "display Name", + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + dataTestId: "data-test-id", + placeHolder: "place holder", + controlName: 'testDropdown', + options: of([ + 'option1', + 'option2', + 'option3', + 'onBlur' + ]) + }); + + component.data.hasErrors = function () { + return this.formGroup.controls[this.controlName].touched && this.formGroup.controls[this.controlName].errors ? ['error-style'] : []; + }; + + component.data.onBlur = function () { + component.form.controls['testDropdown'].setValue('onBlur'); + }; + + component.form = fb.group({ + 'testDropdown': new FormControl({ + value: component.data.value, + disabled: false + }, Validators.compose(component.data.validations.map(item => item.validator))) + }); + + component.form.controls['testDropdown'].setValue(''); + expect(component.form.controls['testDropdown'].errors.required).toBeTruthy(); + component.form.controls['testDropdown'].setValue('option2'); + expect(component.form.controls['testDropdown'].errors).toBeFalsy(); + component.data.onBlur(); + expect(component.form.controls['testDropdown'].value).toEqual('onBlur'); + expect(component.form.controls['testDropdown'].errors).toBeFalsy(); + } + ) +}); + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.ts new file mode 100644 index 000000000..4b98c7e26 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.ts @@ -0,0 +1,20 @@ +import {Component, Input, OnChanges, SimpleChanges} from "@angular/core"; +import {FormGroup} from "@angular/forms"; +import {MultiselectFormControl} from "../../../../models/formControlModels/multiselectFormControl.model"; + +@Component({ + selector: 'multiselect-form-control', + templateUrl: './multiselect.formControl.component.html' +}) +export class MultiselectFormControlComponent implements OnChanges{ + @Input() data: MultiselectFormControl = null; + @Input() form: FormGroup = null; + + ngOnChanges(changes: SimpleChanges): void { + if (changes["data"] !== undefined && changes["data"].currentValue !== changes["data"].previousValue && changes["data"].firstChange) { + if(this.data.onInit){ + this.data.onInit(this.data, this.form); + } + } + } +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.html new file mode 100644 index 000000000..3763764d5 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.html @@ -0,0 +1,13 @@ +<div> + <div class="details-item" *ngIf="data != null && form != null"> + <label [ngClass]="{'required': data.isRequired()}" + for="{{data?.dataTestId}}">{{data?.displayName}}:</label> + <input id="{{data?.dataTestId}}" [attr.data-tests-id]="data?.dataTestId" + name="{{data?.controlName}}" class="form-control input-text" + [formControl]="form.controls[data.controlName]" type="number" + placeholder="{{data?.placeHolder}}" title="{{data?.tooltip}}" + [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}" + min="{{data?.min}}" max="{{data?.max}}"> + </div> +</div> + diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.ts new file mode 100644 index 000000000..bd25ded81 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.ts @@ -0,0 +1,12 @@ +import {Component, Input} from "@angular/core"; +import {FormGroup} from "@angular/forms"; +import {NumberFormControl} from "../../../../models/formControlModels/numberFormControl.model"; + +@Component({ + selector: 'number-form-control', + templateUrl: './number.formControl.component.html' +}) +export class NumberFormControlComponent { + @Input() data: NumberFormControl = null; + @Input() form: FormGroup = null; +} diff --git a/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.html b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.html new file mode 100644 index 000000000..4d89854d5 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.html @@ -0,0 +1,5 @@ +<div *ngIf="form != null && formControl != null && form.controls[formControl.controlName]?.errors"> + <div *ngFor="let validatorModel of formControl?.validations"> + <form-control-error *ngIf="form.controls[formControl?.controlName]?.errors[validatorModel?.validatorName]" [message]="validatorModel?.errorMsg"></form-control-error> + </div> +</div> diff --git a/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.ts b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.ts new file mode 100644 index 000000000..02ec57e43 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.ts @@ -0,0 +1,15 @@ +import {Component, Input, OnChanges, SimpleChanges} from "@angular/core"; +import {FormGroup} from "@angular/forms"; +import {FormControlModel} from "../../../models/formControlModels/formControl.model"; + +@Component({ + selector : 'form-control-message-error', + templateUrl : './formControlMessageError.component.html' +}) +export class FormControlMessageErrorComponent implements OnChanges{ + @Input() formControl: FormControlModel = null; + @Input() form: FormGroup = null; + + ngOnChanges(changes: SimpleChanges): void { + } +} diff --git a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss index 5271cad49..988d12cd6 100644 --- a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss +++ b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss @@ -32,6 +32,7 @@ .parentbox { padding-right: 0; + line-height: 67px; } .parentbox:before { diff --git a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.service.ts b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.service.ts new file mode 100644 index 000000000..1550e0820 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.service.ts @@ -0,0 +1,7 @@ +import {Injectable} from "@angular/core"; +import {Subject} from "rxjs"; + +@Injectable() +export class FormGeneralErrorsService { + static checkForErrorTrigger : Subject<boolean> = new Subject<boolean>(); +} diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.spec.ts new file mode 100644 index 000000000..4189fba05 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.spec.ts @@ -0,0 +1,48 @@ +import {getTestBed, TestBed} from '@angular/core/testing'; +import {AaiService} from "../../../services/aaiService/aai.service"; +import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../../models/formControlModels/formControl.model"; +import {FeatureFlagsService} from "../../../services/featureFlag/feature-flags.service"; +import {BasicControlGenerator} from "./basic.control.generator"; +import {NgRedux} from '@angular-redux/store'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; + +class MockAppStore<T> {} + +class MockFeatureFlagsService {} + +describe('Basic Control Generator', () => { + let injector; + let service: BasicControlGenerator; + let httpMock: HttpTestingController; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [BasicControlGenerator, + AaiService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockAppStore}] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(BasicControlGenerator); + httpMock = injector.get(HttpTestingController); + + })().then(done).catch(done.fail)); + + + test('getlegacyRegion with JANET25 - isVisible true', () => { + const instance = {lcpCloudRegionId : 'JANET25'}; + const legacyRegionControl: FormControlModel = service.getLegacyRegion(instance); + expect(legacyRegionControl.isVisible).toBeTruthy(); + }); + + test('getlegacyRegion without JANET25 - isVisible false', () => { + const instance = {lcpCloudRegionId : 'olson3'}; + const legacyRegionControl: FormControlModel = service.getLegacyRegion(instance); + expect(legacyRegionControl.isVisible).toBeFalsy(); + }); +}); + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.ts new file mode 100644 index 000000000..cbbff3c39 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.ts @@ -0,0 +1,240 @@ +import {Injectable} from "@angular/core"; +import {DropdownFormControl} from "../../../models/formControlModels/dropdownFormControl.model"; +import {FormGroup} from "@angular/forms"; +import { + CustomValidatorOptions, + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../models/formControlModels/formControl.model"; +import {InputFormControl} from "../../../models/formControlModels/inputFormControl.model"; +import {AppState} from "../../../store/reducers"; +import {NgRedux} from "@angular-redux/store"; +import {NumberFormControl} from "../../../models/formControlModels/numberFormControl.model"; +import {FormControlType} from "../../../models/formControlModels/formControlTypes.enum"; +import {FileFormControl} from "../../../models/formControlModels/fileFormControl.model"; +import {SelectOption} from "../../../models/selectOption"; +import * as _ from 'lodash'; +import {DynamicInputLabelPipe} from "../../../pipes/dynamicInputLabel/dynamic-input-label.pipe"; +import {AaiService} from "../../../services/aaiService/aai.service"; +import {FormGeneralErrorsService} from "../../formGeneralErrors/formGeneralErrors.service"; +import {Observable, of} from "rxjs"; +import {NodeModel} from "../../../models/nodeModel"; +import {Constants} from "../../../utils/constants"; + + +@Injectable() +export class BasicControlGenerator { + + public static readonly INSTANCE_NAME_REG_EX:RegExp = /^[a-zA-Z0-9._-]*$/; + public static readonly GENERATED_NAME_REG_EX:RegExp = /[^a-zA-Z0-9._-]/g; + + constructor(private _store : NgRedux<AppState>, + private _aaiService : AaiService){} + getSubscribeResult(subscribeFunction : Function, control : DropdownFormControl) : Observable<any>{ + return subscribeFunction(this).subscribe((res) => { + control.options$ = res; + control.hasEmptyOptions = res.length === 0; + FormGeneralErrorsService.checkForErrorTrigger.next(); + return of(res); + }); + } + + getSubscribeInitResult(subscribeFunction : Function, control : DropdownFormControl, form : FormGroup) : Observable<any>{ + return subscribeFunction(this).subscribe((res) => { + if(!_.isNil(control['onInitSelectedField'])){ + let result = res; + for(let key of control['onInitSelectedField']){ + result = !_.isNil(result[key]) ? result[key] : []; + } + control.options$ = result; + control.hasEmptyOptions = _.isNil(result) || result.length === 0; + } else{ + control.options$ = !_.isNil(res) ? res : []; + control.hasEmptyOptions = _.isNil(res) || res.length === 0; + } + + FormGeneralErrorsService.checkForErrorTrigger.next(); + return of(res); + }); + } + + getInstanceNameController(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, model: NodeModel): FormControlModel { + let validations: ValidatorModel[] = this.createValidationsForInstanceName(instance, serviceId, isEcompGeneratedNaming); + return new InputFormControl({ + controlName: 'instanceName', + displayName: 'Instance name', + dataTestId: 'instanceName', + placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided', + validations: validations, + isVisible : true, + value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName))) + ? this.getDefaultInstanceName(instance, model) : null, + onKeypress : (event) => { + const pattern:RegExp = BasicControlGenerator.INSTANCE_NAME_REG_EX; + if(pattern){ + if(!pattern.test(event['key'])){ + event.preventDefault(); + } + } + return event; + } + }); + } + + getInstanceName(instance : any, serviceId : string, isEcompGeneratedNaming: boolean): FormControlModel { + let formControlModel:FormControlModel = this.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, new NodeModel()); + formControlModel.value = instance ? instance.instanceName : null; + return formControlModel; + } + + isLegacyRegionShouldBeVisible(instance : any) : boolean { + if(!_.isNil(instance) && !_.isNil(instance.lcpCloudRegionId)) { + return Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId) !== -1; + } + return false; + } + + getLegacyRegion(instance: any): FormControlModel { + return new InputFormControl({ + controlName: 'legacyRegion', + displayName: 'Legacy Region', + dataTestId: 'lcpRegionText', + placeHolder: 'Type Legacy Region', + validations: [], + isVisible: this.isLegacyRegionShouldBeVisible(instance), + isDisabled : _.isNil(instance) ? true : Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId), + value: instance ? instance.legacyRegion : null + }); + } + + private createValidationsForInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): ValidatorModel[] { + let validations: ValidatorModel[] = [ + new ValidatorModel(ValidatorOptions.pattern, 'Instance name may include only alphanumeric characters and underscore.', BasicControlGenerator.INSTANCE_NAME_REG_EX), + new ValidatorModel(CustomValidatorOptions.uniqueInstanceNameValidator, 'some error', [this._store, serviceId, instance && instance.instanceName]) + ]; + if (!isEcompGeneratedNaming) { + validations.push(new ValidatorModel(ValidatorOptions.required, 'is required')); + } + return validations; + } + + getInputsOptions = (options: any[]) : Observable<SelectOption[]> =>{ + let optionList: SelectOption[] = []; + options.forEach((option) => { + optionList.push(new SelectOption({ + id: option.id || option.name, + name: option.name + })); + }); + return of(optionList); + }; + + getProductFamilyControl = (instance : any, controls : FormControlModel[], isMandatory?: boolean) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : 'productFamilyId', + displayName : 'Product family', + dataTestId : 'productFamily', + placeHolder : 'Select Product Family', + isDisabled : false, + name : "product-family-select", + value : instance ? instance.productFamilyId : null, + validations : _.isNil(isMandatory) || isMandatory === true ? [new ValidatorModel(ValidatorOptions.required, 'is required')]: [], + onInit : this.getSubscribeResult.bind(this, this._aaiService.getProductFamilies), + }) + }; + + + + getDynamicInputsByType(dynamicInputs : any, serviceModelId : string, storeKey : string, type: string ) : FormControlModel[] { + let result : FormControlModel[] = []; + if(dynamicInputs) { + let nodeInstance = null; + if (_.has(this._store.getState().service.serviceInstance[serviceModelId][type], storeKey)) { + nodeInstance = Object.assign({}, this._store.getState().service.serviceInstance[serviceModelId][type][storeKey]); + } + result = this.getDynamicInputs(dynamicInputs, nodeInstance); + } + return result; + } + + + getServiceDynamicInputs(dynamicInputs : any, serviceModelId : string) : FormControlModel[] { + let result: FormControlModel[] = []; + if (dynamicInputs) { + let serviceInstance = null; + if (_.has(this._store.getState().service.serviceInstance, serviceModelId)) { + serviceInstance = Object.assign({}, this._store.getState().service.serviceInstance[serviceModelId]); + } + result = this.getDynamicInputs(dynamicInputs, serviceInstance); + } + return result; + } + + getDynamicInputs(dynamicInputs : any, instance :any) : FormControlModel[]{ + let result : FormControlModel[] = []; + if(dynamicInputs) { + dynamicInputs.forEach((input)=> { + let validations: ValidatorModel[] = []; + if(input.isRequired) { + validations.push(new ValidatorModel(ValidatorOptions.required, 'is required')) + } + if(input.minLength) { + validations.push(new ValidatorModel(ValidatorOptions.minLength, '', input.minLength)) + } + if(input.maxLength) { + validations.push(new ValidatorModel(ValidatorOptions.maxLength, '', input.maxLength)) + } + + let dynamicInputLabelPipe: DynamicInputLabelPipe = new DynamicInputLabelPipe(); + let data:any = { + controlName: input.name, + displayName: dynamicInputLabelPipe.transform(input.name).slice(0, -1), + dataTestId: input.id, + placeHolder: input.prompt, + tooltip: input.description, + validations: validations, + isVisible: input.isVisible, + value: !_.isNil(instance) && !_.isNil(instance.instanceParams) && instance.instanceParams.length > 0 ? instance.instanceParams[0][input.name] : input.value + }; + + switch (input.type) { + case 'select' : + case 'boolean' :{ + data.value = data.value || input.optionList.filter((option) => option.isDefault ? option.id || option.name: null); + data.onInit = this.getSubscribeInitResult.bind(null, this.getInputsOptions.bind(this, input.optionList)); + result.push(new DropdownFormControl(data)); + break; + } + case 'checkbox': { + data.type = FormControlType.CHECKBOX; + result.push(new FormControlModel(data)); + break; + } + case 'number': { + data.min = input.min; + data.max = input.max; + result.push(new NumberFormControl(data)); + break; + } + case 'file': { + result.push(new FileFormControl(data)); + break; + } + default: { + result.push(new InputFormControl(data)); + } + } + }) + } + + return result; + } + + getDefaultInstanceName(instance: any, model: NodeModel) : string { + const initialInstanceName = (!_.isNil(instance) && instance.instanceName) || (!_.isNil(model.name) ? model.name.replace(BasicControlGenerator.GENERATED_NAME_REG_EX, "") : model.name); + return initialInstanceName; + } + +} diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.spec.ts new file mode 100644 index 000000000..97c6ddf59 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.spec.ts @@ -0,0 +1,1979 @@ +import {getTestBed, TestBed} from '@angular/core/testing'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {NgRedux} from '@angular-redux/store'; +import {BasicControlGenerator} from "../basic.control.generator"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {GenericFormService} from "../../generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import {LogService} from "../../../../utils/log/log.service"; +import {FormControlNames, NetworkControlGenerator} from "./network.control.generator"; +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; + +class MockAppStore<T> { + getState(){ + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "ecomp_generated_naming" : "false", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + }, + "ExtVL 1": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b987", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL1", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "ecomp_generated_naming" : "true", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "networks" : {}, + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [ + {} + ], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "instanceParams": [ + {} + ], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": { + "d6557200-ecf2-4641-8094-5393ae3aae60": 1 + }, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [ + { + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, + { + "id": "hvf6", + "name": "hvf6", + "isPermitted": true + } + ], + "lcpRegionsTenantsMap": { + "JANET25": [ + { + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + } + ], + "hvf6": [ + { + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, + { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, + { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, + { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, + { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, + { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, + { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, + { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, + { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, + { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, + { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, + { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, + { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, + { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, + { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, + { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, + { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, + { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, + { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, + { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, + { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, + { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, + { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, + { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, + { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, + { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, + { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, + { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, + { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, + { + "id": "cbb99fe4ada84631b7baf046b6fd2044", + "name": "DN5242-Nov16-T3", + "isPermitted": true + } + ] + } + }, + "productFamilies": [ + { + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, + { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, + { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, + { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, + { + "id": "vTerrance", + "name": "vTerrance", + "isPermitted": true + }, + { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, + { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, + { + "id": "db171b8f-115c-4992-a2e3-ee04cae357e0", + "name": "LINDSEY", + "isPermitted": true + }, + { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, + { + "id": "vRosemarie", + "name": "HNGATEWAY", + "isPermitted": true + }, + { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", + "name": "VROUTER", + "isPermitted": true + }, + { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, + { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, + { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, + { + "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", + "name": "Transport", + "isPermitted": true + }, + { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, + { + "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", + "name": "Josefina", + "isPermitted": true + }, + { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, + { + "id": "12a96a9d-4b4c-4349-a950-fe1159602621", + "name": "DARREN MCGEE", + "isPermitted": true + } + ], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [ + { + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, + { + "id": "1", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "3", + "name": "vJamie", + "isPermitted": false + }, + { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, + { + "id": "5", + "name": "Kennedy", + "isPermitted": false + }, + { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, + { + "id": "7", + "name": "vVM", + "isPermitted": false + }, + { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, + { + "id": "9", + "name": "vMME", + "isPermitted": false + }, + { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, + { + "id": "11", + "name": "vSCP", + "isPermitted": false + }, + { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, + { + "id": "13", + "name": "vMMSC", + "isPermitted": false + }, + { + "id": "14", + "name": "SSD", + "isPermitted": false + }, + { + "id": "15", + "name": "vMOG", + "isPermitted": false + }, + { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, + { + "id": "17", + "name": "JOHANNA_SANTOS", + "isPermitted": false + }, + { + "id": "18", + "name": "vCarroll", + "isPermitted": false + } + ] + }, + "aicZones": [ + { + "id": "NFT1", + "name": "NFTJSSSS-NFT1" + }, + { + "id": "JAG1", + "name": "YUDFJULP-JAG1" + }, + { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, + { + "id": "BAN1", + "name": "VSDKYUTP-BAN1" + }, + { + "id": "DKJ1", + "name": "DKJSJDKA-DKJ1" + }, + { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, + { + "id": "UIO1", + "name": "uioclli1-UIO1" + }, + { + "id": "RAJ1", + "name": "YGBIJNLQ-RAJ1" + }, + { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, + { + "id": "SDE1", + "name": "ZXCVBNMA-SDE1" + }, + { + "id": "VEN2", + "name": "FGHJUHIL-VEN2" + }, + { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, + { + "id": "JAD1", + "name": "JADECLLI-JAD1" + }, + { + "id": "ZXL1", + "name": "LWLWCANN-ZXL1" + }, + { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, + { + "id": "SDF1", + "name": "sdfclli1-SDF1" + }, + { + "id": "RAD1", + "name": "RADICAL1-RAD1" + }, + { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, + { + "id": "REL1", + "name": "INGERFGT-REL1" + }, + { + "id": "JNL1", + "name": "CJALSDAC-JNL1" + }, + { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, + { + "id": "CHI1", + "name": "CHILLIWE-CHI1" + }, + { + "id": "UUU4", + "name": "UUUAAAUU-UUU4" + }, + { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, + { + "id": "KJN1", + "name": "CKALDKSA-KJN1" + }, + { + "id": "SAM1", + "name": "SNDGCA64-SAN1" + }, + { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, + { + "id": "HJH1", + "name": "AOEEQQQD-HJH1" + }, + { + "id": "HGD1", + "name": "SDFQWHGD-HGD1" + }, + { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, + { + "id": "ATL43", + "name": "AICLOCID-ATL43" + }, + { + "id": "ATL54", + "name": "AICFTAAI-ATL54" + }, + { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, + { + "id": "VEL1", + "name": "BNMLKUIK-VEL1" + }, + { + "id": "ICC1", + "name": "SANJITAT-ICC1" + }, + { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, + { + "id": "DEF2", + "name": "WSBHGTYL-DEF2" + }, + { + "id": "MAD11", + "name": "SDFQWGKL-MAD11" + }, + { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, + { + "id": "GAR1", + "name": "NGFVSJKO-GAR1" + }, + { + "id": "SAN22", + "name": "GNVLSCTL-SAN22" + }, + { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, + { + "id": "JCS1", + "name": "JCSJSCJS-JCS1" + }, + { + "id": "DHA12", + "name": "WSXEDECF-DHA12" + }, + { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, + { + "id": "NCA1", + "name": "NCANCANN-NCA1" + }, + { + "id": "IOP1", + "name": "iopclli1-IOP1" + }, + { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, + { + "id": "KAP1", + "name": "HIOUYTRQ-KAP1" + }, + { + "id": "ZEN1", + "name": "ZENCLLI1-ZEN1" + }, + { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, + { + "id": "CQK1", + "name": "CQKSCAKK-CQK1" + }, + { + "id": "SAI1", + "name": "UBEKQLPD-SAI1" + }, + { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, + { + "id": "IBB1", + "name": "PLMKOIJU-IBB1" + }, + { + "id": "TIR2", + "name": "PLKINHYI-TIR2" + }, + { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, + { + "id": "SLF78", + "name": "SDCTLFN1-SLF78" + }, + { + "id": "SEE78", + "name": "SDCTEEE4-SEE78" + }, + { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, + { + "id": "SAA78", + "name": "SDCTAAA1-SAA78" + }, + { + "id": "LUC1", + "name": "ATLDFGYC-LUC1" + }, + { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, + { + "id": "TOR1", + "name": "TOROONXN-TOR1" + }, + { + "id": "QWE1", + "name": "QWECLLI1-QWE1" + }, + { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, + { + "id": "CAL33", + "name": "CALIFORN-CAL33" + }, + { + "id": "SHH78", + "name": "SDIT1HHH-SHH78" + }, + { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, + { + "id": "CLG1", + "name": "CLGRABAD-CLG1" + }, + { + "id": "BNA1", + "name": "BNARAGBK-BNA1" + }, + { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, + { + "id": "APP1", + "name": "WBHGTYUI-APP1" + }, + { + "id": "RJN1", + "name": "RJNRBZAW-RJN1" + }, + { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, + { + "id": "mac10", + "name": "PKGTESTF-mac10" + }, + { + "id": "SXB78", + "name": "SDCTGXB1-SXB78" + }, + { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, + { + "id": "SYD1", + "name": "SYDNAUBV-SYD1" + }, + { + "id": "TOK1", + "name": "TOKYJPFA-TOK1" + }, + { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, + { + "id": "DCC1b", + "name": "POIUYTGH-DCC1b" + }, + { + "id": "SKK78", + "name": "SDCTKKK1-SKK78" + }, + { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, + { + "id": "SJJ78", + "name": "SDCTJJJ1-SJJ78" + }, + { + "id": "SBX78", + "name": "SDCTBXG1-SBX78" + }, + { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, + { + "id": "IAA1", + "name": "QAZXSWED-IAA1" + }, + { + "id": "POI1", + "name": "PLMNJKIU-POI1" + }, + { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, + { + "id": "PBL1", + "name": "PBLAPBAI-PBL1" + }, + { + "id": "LAG45", + "name": "LARGIZON-LAG1a" + }, + { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, + { + "id": "HST70", + "name": "HSTNTX70-HST70" + }, + { + "id": "DCC1a", + "name": "POIUYTGH-DCC1a" + }, + { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, + { + "id": "LON1", + "name": "LONEENCO-LON1" + }, + { + "id": "SJU78", + "name": "SDIT1JUB-SJU78" + }, + { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, + { + "id": "SSW56", + "name": "ss8126GT-SSW56" + }, + { + "id": "SBB78", + "name": "SDIT1BBB-SBB78" + }, + { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, + { + "id": "GNV1", + "name": "GNVLSCTL-GNV1" + }, + { + "id": "WAS1", + "name": "WASHDCSW-WAS1" + }, + { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, + { + "id": "STT1", + "name": "STTLWA02-STT1" + }, + { + "id": "STG1", + "name": "STTGGE62-STG1" + }, + { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, + { + "id": "SBU78", + "name": "SDIT1BUB-SBU78" + }, + { + "id": "ATL2", + "name": "ATLNGANW-ATL2" + }, + { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, + { + "id": "SNG1", + "name": "SNGPSIAU-SNG1" + }, + { + "id": "NYC1", + "name": "NYCMNY54-NYC1" + }, + { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, + { + "id": "AMD15", + "name": "AMDFAA01-AMD15" + }, + { + "id": "SNA1", + "name": "SNANTXCA-SNA1" + }, + { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, + { + "id": "TLP1", + "name": "TLPNXM18-TLP1" + }, + { + "id": "SDD81", + "name": "SAIT1DD6-SDD81" + }, + { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, + { + "id": "DCC2", + "name": "POIUYTGH-DCC2" + }, + { + "id": "OKC1", + "name": "OKCBOK55-OKC1" + }, + { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, + { + "id": "TES36", + "name": "ABCEETES-TES36" + }, + { + "id": "COM1", + "name": "PLMKOPIU-COM1" + }, + { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, + { + "id": "SDG78", + "name": "SDIT1BDG-SDG78" + }, + { + "id": "mac20", + "name": "PKGTESTF-mac20" + }, + { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, + { + "id": "HST25", + "name": "HSTNTX01-HST25" + }, + { + "id": "AMD18", + "name": "AUDIMA01-AMD18" + }, + { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, + { + "id": "SSA56", + "name": "SSIT2AA7-SSA56" + }, + { + "id": "SDD82", + "name": "SAIT1DD9-SDD82" + }, + { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, + { + "id": "SUL2", + "name": "WERTYUJK-SUL2" + }, + { + "id": "PUR1", + "name": "purelyde-PUR1" + }, + { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, + { + "id": "SITE", + "name": "LONEENCO-SITE" + }, + { + "id": "ATL1", + "name": "ATLNGAMA-ATL1" + }, + { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, + { + "id": "TAT34", + "name": "TESAAISB-TAT34" + }, + { + "id": "XCP12", + "name": "CHKGH123-XCP12" + }, + { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, + { + "id": "HPO1", + "name": "ATLNGAUP-HPO1" + }, + { + "id": "KJF12", + "name": "KJFDH123-KJF12" + }, + { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, + { + "id": "SAA12", + "name": "SAIT9AF8-SAA12" + }, + { + "id": "SAA14", + "name": "SAIT1AA9-SAA14" + }, + { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, + { + "id": "CWY1", + "name": "CWYMOWBS-CWY1" + }, + { + "id": "ATL76", + "name": "TELEPAAI-ATL76" + }, + { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, + { + "id": "ATL53", + "name": "AAIATLTE-ATL53" + }, + { + "id": "SAA11", + "name": "SAIT9AA2-SAA11" + }, + { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, + { + "id": "AUG1", + "name": "ASDFGHJK-AUG1" + }, + { + "id": "POI22", + "name": "POIUY123-POI22" + }, + { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, + { + "id": "BHY17", + "name": "BHYTFRF3-BHY17" + }, + { + "id": "LIS1", + "name": "HOSTPROF-LIS1" + }, + { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, + { + "id": "ATL99", + "name": "TEESTAAI-ATL43" + }, + { + "id": "ATL64", + "name": "FORLOAAJ-ATL64" + }, + { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, + { + "id": "RAD10", + "name": "INDIPUNE-RAD10" + }, + { + "id": "RTW5", + "name": "BHYTFRY4-RTW5" + }, + { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, + { + "id": "ATL98", + "name": "TEESTAAI-ATL43" + }, + { + "id": "WAN1", + "name": "LEIWANGW-WAN1" + }, + { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, + { + "id": "RTD2", + "name": "BHYTFRk4-RTD2" + }, + { + "id": "NIR1", + "name": "ORFLMANA-NIR1" + }, + { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, + { + "id": "NUM1", + "name": "QWERTYUI-NUM1" + }, + { + "id": "MTN32", + "name": "MDTWNJ21-MTN32" + }, + { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, + { + "id": "ATL56", + "name": "ATLSANAC-ATL56" + }, + { + "id": "AMS1", + "name": "AMSTNLBW-AMS1" + }, + { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, + { + "id": "JAN1", + "name": "ORFLMATT-JAN1" + }, + { + "id": "ABC14", + "name": "TESAAISA-ABC14" + }, + { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, + { + "id": "MIC54", + "name": "MICHIGAN-MIC54" + }, + { + "id": "ABC11", + "name": "ATLSANAI-ABC11" + }, + { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, + { + "id": "ATL63", + "name": "ATLSANEW-ATL63" + }, + { + "id": "ABC12", + "name": "ATLSECIA-ABC12" + }, + { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, + { + "id": "ABC15", + "name": "AAITESAN-ABC15" + }, + { + "id": "AVT1", + "name": "AVTRFLHD-AVT1" + }, + { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + } + ], + "categoryParameters": { + "owningEntityList": [ + { + "id": "aaa1", + "name": "aaa1" + }, + { + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, + { + "id": "Melissa", + "name": "Melissa" + } + ], + "projectList": [ + { + "id": "WATKINS", + "name": "WATKINS" + }, + { + "id": "x1", + "name": "x1" + }, + { + "id": "yyy1", + "name": "yyy1" + } + ], + "lineOfBusinessList": [ + { + "id": "ONAP", + "name": "ONAP" + }, + { + "id": "zzz1", + "name": "zzz1" + } + ], + "platformList": [ + { + "id": "platform", + "name": "platform" + }, + { + "id": "xxx1", + "name": "xxx1" + } + ] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } +} +} +} + +class MockFeatureFlagsService {} + +describe('Network Control Generator', () => { + let injector; + let service: NetworkControlGenerator; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [NetworkControlGenerator, + GenericFormService, + BasicControlGenerator, + AaiService, + FormBuilder, + LogService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockAppStore}] + }); + + injector = getTestBed(); + service = injector.get(NetworkControlGenerator); + httpMock = injector.get(HttpTestingController); + }); + + test('getMacroFormControls check for mandatory controls', () => { + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const networkName : string = "ExtVL 0"; + const networkStoreKey : string = "ExtVL 0"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false); + + const mandatoryControls : string[] = [ + FormControlNames.LCPCLOUD_REGION_ID, + 'tenantId', + 'platformName' + ]; + for(let i = 0 ; i < mandatoryControls.length ; i++){ + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + + test('getMacroFormControls should return instance name if isEcompName is true', () => { + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const networkName : string = "ExtVL 1"; + const networkStoreKey : string = "ExtVL 1"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.PRODUCT_FAMILY_ID, + FormControlNames.LCPCLOUD_REGION_ID , + 'legacyRegion', + 'tenantId', + 'platformName', + 'lineOfBusiness']; + + + + expect(controls.length).toEqual(7); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + test('getMacroFormControls should return the correct order of controls', () => { + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const networkName : string = "ExtVL 0"; + const networkStoreKey : string = "ExtVL 0"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.PRODUCT_FAMILY_ID, + FormControlNames.LCPCLOUD_REGION_ID , + 'legacyRegion', + 'tenantId', + 'platformName', + 'lineOfBusiness']; + + + + expect(controls.length).toEqual(7); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + test('getMacroFormControls should not return the rollback status', () => { + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const networkName : string = "ExtVL 0"; + const networkStoreKey : string = "ExtVL 0"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.PRODUCT_FAMILY_ID, + FormControlNames.LCPCLOUD_REGION_ID , + 'legacyRegion', + 'tenantId', + 'platformName', + 'lineOfBusiness', + FormControlNames.ROLLBACK_ON_FAILURE + ]; + + + + expect(controls.length).toEqual(7); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + test('getAlacartFormControls should return the correct order of controls', () => { + const controls:FormControlModel[] = getAlaCarteFormControls(); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.PRODUCT_FAMILY_ID, + FormControlNames.LCPCLOUD_REGION_ID, + 'legacyRegion', + 'tenantId', + 'platformName', + 'lineOfBusiness', + 'rollbackOnFailure']; + expect(controls.length).toEqual(8); + for(let i = 0 ; i < controls.length ; i++) { + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + function getAlaCarteFormControls(): FormControlModel[] { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const networkName: string = "ExtVL 0"; + const networkStoreKey: string = "ExtVL 0"; + const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, networkStoreKey, networkName, false); + return controls; + } + + test('getAlacartFormControls instance name control validator shall have the expected regex', () => { + const controls:FormControlModel[] = getAlaCarteFormControls(); + + const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME); + const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern); + expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/); + }); + + test('getAlacartFormControls check for mandatory controls', () => { + const controls:FormControlModel[] = getAlaCarteFormControls(); + + const mandatoryControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.LCPCLOUD_REGION_ID, + 'tenantId', + 'platformName', + 'rollbackOnFailure' + ]; + for(let i = 0 ; i < mandatoryControls.length ; i++){ + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); +}); + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.ts new file mode 100644 index 000000000..c3a622338 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.ts @@ -0,0 +1,247 @@ +import {Injectable} from "@angular/core"; +import {GenericFormService} from "../../generic-form.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {NgRedux} from "@angular-redux/store"; +import {HttpClient} from "@angular/common/http"; +import {BasicControlGenerator} from "../basic.control.generator"; +import * as _ from 'lodash'; +import {Observable, of} from "rxjs"; + +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../../utils/log/log.service"; +import {AppState} from "../../../../store/reducers"; +import {FormGroup} from "@angular/forms"; +import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model"; +import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum"; +import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model"; +import {SelectOption} from "../../../../models/selectOption"; +import {NetworkInstance} from "../../../../models/networkInstance"; +import {NetworkModel} from "../../../../models/networkModel"; +import {Constants} from "../../../../utils/constants"; + +export enum FormControlNames { + INSTANCE_NAME = 'instanceName', + GLOBAL_SUBSCRIBER_ID = 'globalSubscriberId', + PRODUCT_FAMILY_ID = 'productFamilyId', + LCPCLOUD_REGION_ID = 'lcpCloudRegionId', + TENANT_ID = 'tenantId', + AICZONE_ID = 'aicZoneId', + ROLLBACK_ON_FAILURE = 'rollbackOnFailure', + LEGACY_REGION = 'legacyRegion' +} + + +enum InputType { + LCP_REGION = "lcpCloudRegionId", + TENANT = "tenantId", + LOB = "lineOfBusiness", + PLATFORM = "platformName", + ROLLBACK = "rollbackOnFailure", + PRODUCT_FAMILY = "productFamilyId", + VG = "volumeGroupName" +} + +@Injectable() +export class NetworkControlGenerator { + aaiService: AaiService; + + constructor(private genericFormService: GenericFormService, + private _basicControlGenerator: BasicControlGenerator, + private store: NgRedux<AppState>, + private http: HttpClient, + private _aaiService: AaiService, + private _logService: LogService) { + this.aaiService = _aaiService; + } + + getNetworkInstance = (serviceId: string, networkName: string, isUpdateMode : boolean): NetworkInstance => { + let networkInstance : NetworkInstance = null; + if (isUpdateMode && this.store.getState().service.serviceInstance[serviceId] && _.has(this.store.getState().service.serviceInstance[serviceId].networks, networkName)) { + networkInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId].networks[networkName]); + } + return networkInstance; + }; + + + getMacroFormControls(serviceId: string, networkStoreKey: string, networkName: string, isUpdateMode : boolean): FormControlModel[] { + networkStoreKey = _.isNil(networkStoreKey) ? networkName : networkStoreKey; + + if (_.isNil(serviceId) || _.isNil(networkStoreKey) || _.isNil(networkName)) { + this._logService.error('should provide serviceId, networkName, networkStoreKey', serviceId); + return []; + } + + const networkInstance = this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode); + const networkModel = new NetworkModel(this.store.getState().service.serviceHierarchy[serviceId].networks[networkName]); + let result: FormControlModel[] = []; + + if (!_.isNil(networkModel)) { + result.push(this.getInstanceName(networkInstance, serviceId, networkName, networkModel.isEcompGeneratedNaming)); + result.push(this._basicControlGenerator.getProductFamilyControl(networkInstance, result, false)); + result.push(this.getLcpRegionControl(serviceId, networkInstance, result)); + result.push(this._basicControlGenerator.getLegacyRegion(networkInstance)); + result.push(this.getTenantControl(serviceId, networkInstance, result)); + result.push(this.getPlatformControl(networkInstance, result)); + result.push(this.getLineOfBusinessControl(networkInstance, result)); + } + return result; + + } + + getAlaCarteFormControls(serviceId: string, networkStoreKey: string, networkName: string, isUpdateMode : boolean): FormControlModel[] { + networkStoreKey = _.isNil(networkStoreKey) ? networkName : networkStoreKey; + if (_.isNil(serviceId) || _.isNil(networkStoreKey) || _.isNil(networkName)) { + this._logService.error('should provide serviceId, networkName, networkStoreKey', serviceId); + return []; + } + + let result: FormControlModel[] = []; + const networkInstance = this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode); + const networkModel = new NetworkModel(this.store.getState().service.serviceHierarchy[serviceId].networks[networkName]); + + if (!_.isNil(networkModel)) { + result.push(this.getInstanceName(networkInstance, serviceId, networkName, networkModel.isEcompGeneratedNaming)); + result.push(this._basicControlGenerator.getProductFamilyControl(networkInstance, result, false)); + result.push(this.getLcpRegionControl(serviceId, networkInstance, result)); + result.push(this._basicControlGenerator.getLegacyRegion(networkInstance)); + result.push(this.getTenantControl(serviceId, networkInstance, result)); + result.push(this.getPlatformControl(networkInstance, result)); + result.push(this.getLineOfBusinessControl(networkInstance, result)); + result.push(this.getRollbackOnFailureControl(networkInstance, result)); + } + return result; + + } + + isInputShouldBeShown = (inputType: any): boolean => { + let networkInputs = [InputType.LCP_REGION, InputType.LOB, InputType.TENANT, InputType.PRODUCT_FAMILY, InputType.PLATFORM, InputType.ROLLBACK]; + return networkInputs.indexOf(inputType) > -1; + }; + + getInstanceName(instance : any, serviceId : string, networkName : string, isEcompGeneratedNaming: boolean): FormControlModel { + const networkModel : NetworkModel = this.store.getState().service.serviceHierarchy[serviceId].networks[networkName]; + return this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, networkModel); + } + + getLineOfBusinessControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'lineOfBusiness', + displayName: 'Line of business', + dataTestId: 'lineOfBusiness', + placeHolder: 'Select Line Of Business', + isDisabled: false, + name: "lineOfBusiness", + value: instance ? instance.lineOfBusiness : null, + validations: [], + onInitSelectedField: ['lineOfBusinessList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters) + }) + }; + + getPlatformControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'platformName', + displayName: 'Platform', + dataTestId: 'platform', + placeHolder: 'Select Platform', + isDisabled: false, + name: "platform", + value: instance ? instance.platformName : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInitSelectedField: ['platformList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters) + }) + }; + + getTenantControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.TENANT_ID, + displayName: 'Tenant', + dataTestId: 'tenant', + placeHolder: 'Select Tenant', + name: "tenant", + isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId), + onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null, + value: instance ? instance.tenantId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInit : instance ? this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this.aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : ()=>{}, + }) + }; + + getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'lcpCloudRegionId', + displayName: 'LCP region', + dataTestId: 'lcpRegion', + placeHolder: 'Select LCP Region', + name: "lcpRegion", + isDisabled: false, + value: instance ? instance.lcpCloudRegionId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInitSelectedField: ['lcpRegionList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)), + onChange: (param: string, form: FormGroup) => { + form.controls[FormControlNames.TENANT_ID].enable(); + form.controls[FormControlNames.TENANT_ID].reset(); + if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) { + this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => { + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param]; + if(res.lcpRegionsTenantsMap[param]){ + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0; + } + })); + } + + if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) { + form.controls['legacyRegion'].enable(); + controls.find(item => item.controlName === 'legacyRegion').isVisible = true; + + } else { + controls.find(item => item.controlName === 'legacyRegion').isVisible = false; + form.controls['legacyRegion'].setValue(null); + form.controls['legacyRegion'].reset(); + form.controls['legacyRegion'].disable(); + } + } + }) + }; + + getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.ROLLBACK_ON_FAILURE, + displayName: 'Rollback on failure', + dataTestId: 'rollback', + placeHolder: 'Rollback on failure', + isDisabled: false, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + value: instance ? instance.rollbackOnFailure : 'true', + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions) + }) + }; + + getRollBackOnFailureOptions = (): Observable<SelectOption[]> => { + return of([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }; +} diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.spec.ts new file mode 100644 index 000000000..b7a728c6d --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.spec.ts @@ -0,0 +1,1859 @@ +import {getTestBed, TestBed} from '@angular/core/testing'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {NgRedux} from '@angular-redux/store'; +import {FormControlNames, ServiceControlGenerator} from "./service.control.generator"; +import {BasicControlGenerator} from "./basic.control.generator"; +import {AaiService} from "../../../services/aaiService/aai.service"; +import {GenericFormService} from "../generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../utils/log/log.service"; +import {FormControlType} from "../../../models/formControlModels/formControlTypes.enum"; +import {DropdownFormControl} from "../../../models/formControlModels/dropdownFormControl.model"; +import {FeatureFlagsService} from "../../../services/featureFlag/feature-flags.service"; + +class MockAppStore<T> { + getState(){ + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": {}, + "lcpRegionsAndTenants": { + "lcpRegionList": [ + { + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, + { + "id": "hvf6", + "name": "hvf6", + "isPermitted": true + } + ], + "lcpRegionsTenantsMap": { + "JANET25": [ + { + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + } + ], + "hvf6": [ + { + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, + { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, + { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, + { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, + { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, + { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, + { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, + { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, + { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, + { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, + { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, + { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, + { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, + { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, + { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, + { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, + { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, + { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, + { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, + { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, + { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, + { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, + { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, + { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, + { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, + { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, + { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, + { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, + { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, + { + "id": "cbb99fe4ada84631b7baf046b6fd2044", + "name": "DN5242-Nov16-T3", + "isPermitted": true + } + ] + } + }, + "productFamilies": [ + { + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, + { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, + { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, + { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, + { + "id": "vTerrance", + "name": "vTerrance", + "isPermitted": true + }, + { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, + { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, + { + "id": "db171b8f-115c-4992-a2e3-ee04cae357e0", + "name": "LINDSEY", + "isPermitted": true + }, + { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, + { + "id": "vRosemarie", + "name": "HNGATEWAY", + "isPermitted": true + }, + { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", + "name": "VROUTER", + "isPermitted": true + }, + { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, + { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, + { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, + { + "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", + "name": "Transport", + "isPermitted": true + }, + { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, + { + "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", + "name": "Josefina", + "isPermitted": true + }, + { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, + { + "id": "12a96a9d-4b4c-4349-a950-fe1159602621", + "name": "DARREN MCGEE", + "isPermitted": true + } + ], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [ + { + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, + { + "id": "1", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "3", + "name": "vJamie", + "isPermitted": false + }, + { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, + { + "id": "5", + "name": "Kennedy", + "isPermitted": false + }, + { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, + { + "id": "7", + "name": "vVM", + "isPermitted": false + }, + { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, + { + "id": "9", + "name": "vMME", + "isPermitted": false + }, + { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, + { + "id": "11", + "name": "vSCP", + "isPermitted": false + }, + { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, + { + "id": "13", + "name": "vMMSC", + "isPermitted": false + }, + { + "id": "14", + "name": "SSD", + "isPermitted": false + }, + { + "id": "15", + "name": "vMOG", + "isPermitted": false + }, + { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, + { + "id": "17", + "name": "JOHANNA_SANTOS", + "isPermitted": false + }, + { + "id": "18", + "name": "vCarroll", + "isPermitted": false + } + ] + }, + "aicZones": [ + { + "id": "NFT1", + "name": "NFTJSSSS-NFT1" + }, + { + "id": "JAG1", + "name": "YUDFJULP-JAG1" + }, + { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, + { + "id": "BAN1", + "name": "VSDKYUTP-BAN1" + }, + { + "id": "DKJ1", + "name": "DKJSJDKA-DKJ1" + }, + { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, + { + "id": "UIO1", + "name": "uioclli1-UIO1" + }, + { + "id": "RAJ1", + "name": "YGBIJNLQ-RAJ1" + }, + { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, + { + "id": "SDE1", + "name": "ZXCVBNMA-SDE1" + }, + { + "id": "VEN2", + "name": "FGHJUHIL-VEN2" + }, + { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, + { + "id": "JAD1", + "name": "JADECLLI-JAD1" + }, + { + "id": "ZXL1", + "name": "LWLWCANN-ZXL1" + }, + { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, + { + "id": "SDF1", + "name": "sdfclli1-SDF1" + }, + { + "id": "RAD1", + "name": "RADICAL1-RAD1" + }, + { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, + { + "id": "REL1", + "name": "INGERFGT-REL1" + }, + { + "id": "JNL1", + "name": "CJALSDAC-JNL1" + }, + { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, + { + "id": "CHI1", + "name": "CHILLIWE-CHI1" + }, + { + "id": "UUU4", + "name": "UUUAAAUU-UUU4" + }, + { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, + { + "id": "KJN1", + "name": "CKALDKSA-KJN1" + }, + { + "id": "SAM1", + "name": "SNDGCA64-SAN1" + }, + { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, + { + "id": "HJH1", + "name": "AOEEQQQD-HJH1" + }, + { + "id": "HGD1", + "name": "SDFQWHGD-HGD1" + }, + { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, + { + "id": "ATL43", + "name": "AICLOCID-ATL43" + }, + { + "id": "ATL54", + "name": "AICFTAAI-ATL54" + }, + { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, + { + "id": "VEL1", + "name": "BNMLKUIK-VEL1" + }, + { + "id": "ICC1", + "name": "SANJITAT-ICC1" + }, + { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, + { + "id": "DEF2", + "name": "WSBHGTYL-DEF2" + }, + { + "id": "MAD11", + "name": "SDFQWGKL-MAD11" + }, + { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, + { + "id": "GAR1", + "name": "NGFVSJKO-GAR1" + }, + { + "id": "SAN22", + "name": "GNVLSCTL-SAN22" + }, + { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, + { + "id": "JCS1", + "name": "JCSJSCJS-JCS1" + }, + { + "id": "DHA12", + "name": "WSXEDECF-DHA12" + }, + { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, + { + "id": "NCA1", + "name": "NCANCANN-NCA1" + }, + { + "id": "IOP1", + "name": "iopclli1-IOP1" + }, + { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, + { + "id": "KAP1", + "name": "HIOUYTRQ-KAP1" + }, + { + "id": "ZEN1", + "name": "ZENCLLI1-ZEN1" + }, + { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, + { + "id": "CQK1", + "name": "CQKSCAKK-CQK1" + }, + { + "id": "SAI1", + "name": "UBEKQLPD-SAI1" + }, + { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, + { + "id": "IBB1", + "name": "PLMKOIJU-IBB1" + }, + { + "id": "TIR2", + "name": "PLKINHYI-TIR2" + }, + { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, + { + "id": "SLF78", + "name": "SDCTLFN1-SLF78" + }, + { + "id": "SEE78", + "name": "SDCTEEE4-SEE78" + }, + { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, + { + "id": "SAA78", + "name": "SDCTAAA1-SAA78" + }, + { + "id": "LUC1", + "name": "ATLDFGYC-LUC1" + }, + { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, + { + "id": "TOR1", + "name": "TOROONXN-TOR1" + }, + { + "id": "QWE1", + "name": "QWECLLI1-QWE1" + }, + { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, + { + "id": "CAL33", + "name": "CALIFORN-CAL33" + }, + { + "id": "SHH78", + "name": "SDIT1HHH-SHH78" + }, + { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, + { + "id": "CLG1", + "name": "CLGRABAD-CLG1" + }, + { + "id": "BNA1", + "name": "BNARAGBK-BNA1" + }, + { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, + { + "id": "APP1", + "name": "WBHGTYUI-APP1" + }, + { + "id": "RJN1", + "name": "RJNRBZAW-RJN1" + }, + { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, + { + "id": "mac10", + "name": "PKGTESTF-mac10" + }, + { + "id": "SXB78", + "name": "SDCTGXB1-SXB78" + }, + { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, + { + "id": "SYD1", + "name": "SYDNAUBV-SYD1" + }, + { + "id": "TOK1", + "name": "TOKYJPFA-TOK1" + }, + { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, + { + "id": "DCC1b", + "name": "POIUYTGH-DCC1b" + }, + { + "id": "SKK78", + "name": "SDCTKKK1-SKK78" + }, + { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, + { + "id": "SJJ78", + "name": "SDCTJJJ1-SJJ78" + }, + { + "id": "SBX78", + "name": "SDCTBXG1-SBX78" + }, + { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, + { + "id": "IAA1", + "name": "QAZXSWED-IAA1" + }, + { + "id": "POI1", + "name": "PLMNJKIU-POI1" + }, + { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, + { + "id": "PBL1", + "name": "PBLAPBAI-PBL1" + }, + { + "id": "LAG45", + "name": "LARGIZON-LAG1a" + }, + { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, + { + "id": "HST70", + "name": "HSTNTX70-HST70" + }, + { + "id": "DCC1a", + "name": "POIUYTGH-DCC1a" + }, + { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, + { + "id": "LON1", + "name": "LONEENCO-LON1" + }, + { + "id": "SJU78", + "name": "SDIT1JUB-SJU78" + }, + { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, + { + "id": "SSW56", + "name": "ss8126GT-SSW56" + }, + { + "id": "SBB78", + "name": "SDIT1BBB-SBB78" + }, + { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, + { + "id": "GNV1", + "name": "GNVLSCTL-GNV1" + }, + { + "id": "WAS1", + "name": "WASHDCSW-WAS1" + }, + { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, + { + "id": "STT1", + "name": "STTLWA02-STT1" + }, + { + "id": "STG1", + "name": "STTGGE62-STG1" + }, + { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, + { + "id": "SBU78", + "name": "SDIT1BUB-SBU78" + }, + { + "id": "ATL2", + "name": "ATLNGANW-ATL2" + }, + { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, + { + "id": "SNG1", + "name": "SNGPSIAU-SNG1" + }, + { + "id": "NYC1", + "name": "NYCMNY54-NYC1" + }, + { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, + { + "id": "AMD15", + "name": "AMDFAA01-AMD15" + }, + { + "id": "SNA1", + "name": "SNANTXCA-SNA1" + }, + { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, + { + "id": "TLP1", + "name": "TLPNXM18-TLP1" + }, + { + "id": "SDD81", + "name": "SAIT1DD6-SDD81" + }, + { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, + { + "id": "DCC2", + "name": "POIUYTGH-DCC2" + }, + { + "id": "OKC1", + "name": "OKCBOK55-OKC1" + }, + { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, + { + "id": "TES36", + "name": "ABCEETES-TES36" + }, + { + "id": "COM1", + "name": "PLMKOPIU-COM1" + }, + { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, + { + "id": "SDG78", + "name": "SDIT1BDG-SDG78" + }, + { + "id": "mac20", + "name": "PKGTESTF-mac20" + }, + { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, + { + "id": "HST25", + "name": "HSTNTX01-HST25" + }, + { + "id": "AMD18", + "name": "AUDIMA01-AMD18" + }, + { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, + { + "id": "SSA56", + "name": "SSIT2AA7-SSA56" + }, + { + "id": "SDD82", + "name": "SAIT1DD9-SDD82" + }, + { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, + { + "id": "SUL2", + "name": "WERTYUJK-SUL2" + }, + { + "id": "PUR1", + "name": "purelyde-PUR1" + }, + { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, + { + "id": "SITE", + "name": "LONEENCO-SITE" + }, + { + "id": "ATL1", + "name": "ATLNGAMA-ATL1" + }, + { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, + { + "id": "TAT34", + "name": "TESAAISB-TAT34" + }, + { + "id": "XCP12", + "name": "CHKGH123-XCP12" + }, + { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, + { + "id": "HPO1", + "name": "ATLNGAUP-HPO1" + }, + { + "id": "KJF12", + "name": "KJFDH123-KJF12" + }, + { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, + { + "id": "SAA12", + "name": "SAIT9AF8-SAA12" + }, + { + "id": "SAA14", + "name": "SAIT1AA9-SAA14" + }, + { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, + { + "id": "CWY1", + "name": "CWYMOWBS-CWY1" + }, + { + "id": "ATL76", + "name": "TELEPAAI-ATL76" + }, + { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, + { + "id": "ATL53", + "name": "AAIATLTE-ATL53" + }, + { + "id": "SAA11", + "name": "SAIT9AA2-SAA11" + }, + { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, + { + "id": "AUG1", + "name": "ASDFGHJK-AUG1" + }, + { + "id": "POI22", + "name": "POIUY123-POI22" + }, + { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, + { + "id": "BHY17", + "name": "BHYTFRF3-BHY17" + }, + { + "id": "LIS1", + "name": "HOSTPROF-LIS1" + }, + { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, + { + "id": "ATL99", + "name": "TEESTAAI-ATL43" + }, + { + "id": "ATL64", + "name": "FORLOAAJ-ATL64" + }, + { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, + { + "id": "RAD10", + "name": "INDIPUNE-RAD10" + }, + { + "id": "RTW5", + "name": "BHYTFRY4-RTW5" + }, + { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, + { + "id": "ATL98", + "name": "TEESTAAI-ATL43" + }, + { + "id": "WAN1", + "name": "LEIWANGW-WAN1" + }, + { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, + { + "id": "RTD2", + "name": "BHYTFRk4-RTD2" + }, + { + "id": "NIR1", + "name": "ORFLMANA-NIR1" + }, + { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, + { + "id": "NUM1", + "name": "QWERTYUI-NUM1" + }, + { + "id": "MTN32", + "name": "MDTWNJ21-MTN32" + }, + { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, + { + "id": "ATL56", + "name": "ATLSANAC-ATL56" + }, + { + "id": "AMS1", + "name": "AMSTNLBW-AMS1" + }, + { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, + { + "id": "JAN1", + "name": "ORFLMATT-JAN1" + }, + { + "id": "ABC14", + "name": "TESAAISA-ABC14" + }, + { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, + { + "id": "MIC54", + "name": "MICHIGAN-MIC54" + }, + { + "id": "ABC11", + "name": "ATLSANAI-ABC11" + }, + { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, + { + "id": "ATL63", + "name": "ATLSANEW-ATL63" + }, + { + "id": "ABC12", + "name": "ATLSECIA-ABC12" + }, + { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, + { + "id": "ABC15", + "name": "AAITESAN-ABC15" + }, + { + "id": "AVT1", + "name": "AVTRFLHD-AVT1" + }, + { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + } + ], + "categoryParameters": { + "owningEntityList": [ + { + "id": "aaa1", + "name": "aaa1" + }, + { + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, + { + "id": "Melissa", + "name": "Melissa" + } + ], + "projectList": [ + { + "id": "WATKINS", + "name": "WATKINS" + }, + { + "id": "x1", + "name": "x1" + }, + { + "id": "yyy1", + "name": "yyy1" + } + ], + "lineOfBusinessList": [ + { + "id": "ONAP", + "name": "ONAP" + }, + { + "id": "zzz1", + "name": "zzz1" + } + ], + "platformList": [ + { + "id": "platform", + "name": "platform" + }, + { + "id": "xxx1", + "name": "xxx1" + } + ] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } + } + } +} + +class MockFeatureFlagsService {} + +describe('Service Control Generator', () => { + let injector; + let service: ServiceControlGenerator; + let httpMock: HttpTestingController; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ServiceControlGenerator, + GenericFormService, + BasicControlGenerator, + AaiService, + FormBuilder, + LogService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockAppStore}] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(ServiceControlGenerator); + httpMock = injector.get(HttpTestingController); + + })().then(done).catch(done.fail)); + + + test('ServiceControlGenerator should return the correct controls with correct order', () => { + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId); + const globalSubscriberIdControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.GLOBAL_SUBSCRIBER_ID); + + expect(globalSubscriberIdControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined(); + expect(globalSubscriberIdControl.dataTestId).toEqual('subscriberName'); + expect(globalSubscriberIdControl.type).toEqual(FormControlType.DROPDOWN); + expect(globalSubscriberIdControl.isDisabled).toBeFalsy(); + expect(globalSubscriberIdControl.placeHolder).toEqual('Select Subscriber Name'); + expect(globalSubscriberIdControl.displayName).toEqual('Subscriber name'); + expect(globalSubscriberIdControl.onInit).toBeDefined(); + expect(globalSubscriberIdControl.onChange).toBeDefined(); + + const serviceTypeControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.SUBSCRIPTION_SERVICE_TYPE); + expect(serviceTypeControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined(); + expect(serviceTypeControl.dataTestId).toEqual('serviceType'); + expect(serviceTypeControl.type).toEqual(FormControlType.DROPDOWN); + expect(serviceTypeControl.isDisabled).toBeTruthy(); + expect(serviceTypeControl.placeHolder).toEqual('Select Service Type'); + expect(serviceTypeControl.displayName).toEqual('Service type'); + expect(serviceTypeControl.onInit).toBeDefined(); + expect(serviceTypeControl.onChange).toBeDefined(); + + const productFamilyControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.PRODUCT_FAMILY_ID); + expect(productFamilyControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined(); + expect(productFamilyControl.dataTestId).toEqual('productFamily'); + expect(productFamilyControl.type).toEqual(FormControlType.DROPDOWN); + expect(productFamilyControl.isDisabled).toBeFalsy(); + expect(productFamilyControl.placeHolder).toEqual('Select Product Family'); + expect(productFamilyControl.displayName).toEqual('Product family'); + expect(productFamilyControl.onInit).toBeDefined(); + + const lcpRegionControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.LCPCLOUD_REGION_ID); + expect(lcpRegionControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined(); + expect(lcpRegionControl.dataTestId).toEqual('lcpRegion'); + expect(lcpRegionControl.type).toEqual(FormControlType.DROPDOWN); + expect(lcpRegionControl.isDisabled).toBeTruthy(); + expect(lcpRegionControl.placeHolder).toEqual('Select LCP Region'); + expect(lcpRegionControl.displayName).toEqual('LCP region'); + expect(lcpRegionControl.onInit).toBeDefined(); + expect(lcpRegionControl.onChange).toBeDefined(); + + const tenantControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.TENANT_ID); + expect(tenantControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined(); + expect(tenantControl.dataTestId).toEqual('tenant'); + expect(tenantControl.type).toEqual(FormControlType.DROPDOWN); + expect(tenantControl.isDisabled).toBeTruthy(); + expect(tenantControl.placeHolder).toEqual('Select Tenant'); + expect(tenantControl.displayName).toEqual('Tenant'); + expect(tenantControl.onInit).toBeDefined(); + expect(tenantControl.onChange).toBeDefined(); + + const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME); + const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern); + expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/); + }); + + + test('getMacroFormControls should return the correct order of controls', () => { + // Order the fields + // 1. Instance name + // 2. Subscriber name + // 3. Service type + // 4. Owning entity (fix Entity to entity) + // 5. Product family + // 6. LCP region + // 7. Tenant + // 8. AIC zone (fix Zone to zone) + // 9. Pause on pause points + // 10. Project + // 11. Rollback on failure + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId); + + + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.GLOBAL_SUBSCRIBER_ID, + FormControlNames.SUBSCRIPTION_SERVICE_TYPE , + FormControlNames.OWNING_ENTITY_ID , + FormControlNames.PRODUCT_FAMILY_ID , + FormControlNames.LCPCLOUD_REGION_ID , + FormControlNames.TENANT_ID , + FormControlNames.AICZONE_ID , + FormControlNames.PAUSE, + FormControlNames.PROJECT_NAME , + FormControlNames.ROLLBACK_ON_FAILURE]; + expect(controls.length).toEqual(11); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + test('getAlacartFormControls should return the correct order of controls', () => { + // Order the fields + // 1. Instance name + // 2. Subscriber name + // 3. Service type + // 4. Owning entity (fix Entity to entity) + // 5. Project + // 6. Rollback on failure + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const controls :FormControlModel[] = service.getAlaCartControls(serviceId); + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.GLOBAL_SUBSCRIBER_ID, + FormControlNames.SUBSCRIPTION_SERVICE_TYPE , + FormControlNames.OWNING_ENTITY_ID , + FormControlNames.PROJECT_NAME , + FormControlNames.ROLLBACK_ON_FAILURE]; + + expect(controls.length).toEqual(6); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + +}); + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.ts new file mode 100644 index 000000000..539f848d5 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.ts @@ -0,0 +1,331 @@ +import {Injectable} from "@angular/core"; +import {GenericFormService} from "../generic-form.service"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../store/reducers"; +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../models/formControlModels/formControl.model"; +import {DropdownFormControl} from "../../../models/formControlModels/dropdownFormControl.model"; +import * as _ from 'lodash'; +import {BasicControlGenerator} from "./basic.control.generator"; +import {AaiService} from "../../../services/aaiService/aai.service"; +import {FormGroup} from "@angular/forms"; +import {FormControlType} from "../../../models/formControlModels/formControlTypes.enum"; +import {HttpClient} from "@angular/common/http"; +import {SelectOption} from "../../../models/selectOption"; +import {Observable} from "rxjs"; +import {LogService} from "../../../utils/log/log.service"; +import {ServiceModel} from "../../../models/serviceModel"; +import {of} from "rxjs"; + +import {CheckboxFormControl} from "../../../models/formControlModels/checkboxFormControl.model"; + +export enum FormControlNames { + INSTANCE_NAME = 'instanceName', + GLOBAL_SUBSCRIBER_ID = 'globalSubscriberId', + SUBSCRIPTION_SERVICE_TYPE = 'subscriptionServiceType', + PRODUCT_FAMILY_ID = 'productFamilyId', + LCPCLOUD_REGION_ID = 'lcpCloudRegionId', + TENANT_ID = 'tenantId', + AICZONE_ID = 'aicZoneId', + PROJECT_NAME = 'projectName', + OWNING_ENTITY_ID = 'owningEntityId', + ROLLBACK_ON_FAILURE = 'rollbackOnFailure', + PAUSE = 'pause' +} + +@Injectable() +export class ServiceControlGenerator { + aaiService : AaiService; + constructor(private genericFormService : GenericFormService, + private _basicControlGenerator : BasicControlGenerator, + private store: NgRedux<AppState>, + private http: HttpClient, + private _aaiService : AaiService, + private _logService : LogService){ + this.aaiService = _aaiService; + } + + getServiceInstance = (serviceId : string) : any => { + let serviceInstance = null; + if (_.has(this.store.getState().service.serviceInstance, serviceId)) { + serviceInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId]); + } + + return serviceInstance; + }; + + getAlaCartControls(serviceId: string, dynamicInputs?: any[]) : FormControlModel[] { + if(_.isNil(serviceId)){ + this._logService.error('should provide serviceId', serviceId); + return []; + } + const serviceInstance = this.getServiceInstance(serviceId); + + let result : FormControlModel[] = []; + + const serviceModel = new ServiceModel(this.store.getState().service.serviceHierarchy[serviceId]); + if(!_.isNil(serviceModel)){ + result.push(this._basicControlGenerator.getInstanceName(serviceInstance, serviceId, serviceModel.isEcompGeneratedNaming)); + result.push(this.getGlobalSubscriberControl(serviceInstance, result)); + result.push(this.getServiceTypeControl(serviceInstance, result, false)); + result.push(this.getOwningEntityControl(serviceInstance, result)); + result.push(this.getProjectControl(serviceInstance, result)); + result.push(this.getRollbackOnFailureControl(serviceInstance, result)); + } + + this._logService.info('Generate dynamic service controls, is edit mode: ' + serviceInstance != null , result); + return result; + } + + getMacroFormControls(serviceId: string, dynamicInputs?: any[]) : FormControlModel[] { + if(_.isNil(serviceId)){ + this._logService.error('should provide serviceId', serviceId); + return []; + } + + const serviceInstance = this.getServiceInstance(serviceId); + + let result : FormControlModel[] = []; + const serviceModel = new ServiceModel(this.store.getState().service.serviceHierarchy[serviceId]); + if(!_.isNil(serviceModel)){ + result.push(this._basicControlGenerator.getInstanceName(serviceInstance, serviceId, serviceModel.isEcompGeneratedNaming)); + result.push(this.getGlobalSubscriberControl(serviceInstance, result)); + result.push(this.getServiceTypeControl(serviceInstance, result, true)); + result.push(this.getOwningEntityControl(serviceInstance, result)); + result.push(this.getProductFamilyControl(serviceInstance, result)); + result.push(this.getLcpRegionControl(serviceInstance, result)); + result.push(this.getTenantControl(serviceInstance, result),); + result.push(this.getAICZoneControl(serviceInstance, result)); + + if(serviceModel.isMultiStepDesign){ + result.push(new CheckboxFormControl({ + controlName : FormControlNames.PAUSE, + displayName : 'Pause on pause points', + dataTestId : 'Pause', + isDisabled : false, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required')], + value : serviceInstance ? serviceInstance.pause : null, + })); + } + + result.push(this.getProjectControl(serviceInstance, result)); + result.push(this.getRollbackOnFailureControl(serviceInstance, result)); + } + + + this._logService.info('Generate dynamic service controls, is edit mode: ' + serviceInstance != null , result); + return result; + } + + getRollBackOnFailureOptions = () : Observable<SelectOption[]> =>{ + return of([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }; + + getGlobalSubscriberControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.GLOBAL_SUBSCRIBER_ID, + displayName : 'Subscriber name', + dataTestId : 'subscriberName', + placeHolder : 'Select Subscriber Name', + isDisabled : false, + name : "subscriber-name-select", + value : serviceInstance ? serviceInstance.globalSubscriberId : null, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInit : this._basicControlGenerator.getSubscribeInitResult.bind(this._aaiService, this.aaiService.getSubscribers), + onChange : (param: string, form : FormGroup) => { + form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].reset(); + if(!_.isNil(param)){ + form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].enable(); + this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getServiceTypes(param).subscribe(res =>{ + controls.find(item => item.controlName === FormControlNames.SUBSCRIPTION_SERVICE_TYPE)['options$'] = res; + })); + } + else { + form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].disable(); + } + } + }) + }; + + getServiceTypeControl = (serviceInstance : any, controls : FormControlModel[], isMacro?: boolean) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.SUBSCRIPTION_SERVICE_TYPE, + displayName : 'Service type', + dataTestId : 'serviceType', + placeHolder : 'Select Service Type', + selectedField : 'name', + name : "service-type", + isDisabled : _.isNil(serviceInstance), + value : serviceInstance ? serviceInstance.subscriptionServiceType : null, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInit : serviceInstance ? this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this.aaiService.getServiceTypes.bind(this, serviceInstance.globalSubscriberId)) : ()=>{}, + onChange : (param: string, form : FormGroup) => { + if(isMacro){ + form.controls[FormControlNames.LCPCLOUD_REGION_ID].reset(); + if(!_.isNil(param)) { + form.controls[FormControlNames.LCPCLOUD_REGION_ID].enable(); + const globalCustomerId: string = form.controls[FormControlNames.GLOBAL_SUBSCRIBER_ID].value; + if (!_.isNil(globalCustomerId)) { + this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, param).subscribe(res => { + controls.find(item => item.controlName === FormControlNames.LCPCLOUD_REGION_ID)['options$'] = res.lcpRegionList; + })); + } + } + else { + form.controls[FormControlNames.LCPCLOUD_REGION_ID].disable(); + } + } + + } + }) + }; + + getOwningEntityControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.OWNING_ENTITY_ID, + displayName : 'Owning entity', + dataTestId : 'owningEntity', + placeHolder : 'Select Owning Entity', + name :"owningEntity", + isDisabled : false, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required'),], + onInitSelectedField : ['owningEntityList'], + value : serviceInstance ? serviceInstance.owningEntityId : null, + onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters) + }) + }; + + getProductFamilyControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.PRODUCT_FAMILY_ID, + displayName : 'Product family', + dataTestId : 'productFamily', + placeHolder : 'Select Product Family', + isDisabled : false, + name : "product-family-select", + value : serviceInstance ? serviceInstance.productFamilyId : null, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInit : this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getProductFamilies), + }) + }; + + getLcpRegionControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.LCPCLOUD_REGION_ID, + displayName : 'LCP region', + dataTestId : 'lcpRegion', + placeHolder : 'Select LCP Region', + name : "lcpRegion", + isDisabled : _.isNil(serviceInstance), + value : serviceInstance ? serviceInstance.lcpCloudRegionId : null, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInitSelectedField : ['lcpRegionList'], + onInit : serviceInstance ? this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this.aaiService.getLcpRegionsAndTenants.bind(this, serviceInstance.globalSubscriberId, serviceInstance.subscriptionServiceType)) : ()=>{}, + onChange : (param: string, form : FormGroup) => { + form.controls[FormControlNames.TENANT_ID].reset(); + if(param) { + form.controls[FormControlNames.TENANT_ID].enable(); + } + else { + form.controls[FormControlNames.TENANT_ID].disable(); + } + const globalCustomerId : string = form.controls[FormControlNames.GLOBAL_SUBSCRIBER_ID].value; + const serviceType : string = form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].value; + if(!_.isNil(globalCustomerId) && !_.isNil(serviceType)){ + this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res =>{ + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param]; + })); + } + } + }) + }; + + getTenantControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.TENANT_ID, + displayName : 'Tenant', + dataTestId : 'tenant', + placeHolder : 'Select Tenant', + name : "tenant", + isDisabled : _.isNil(serviceInstance), + onInitSelectedField :serviceInstance ? ['lcpRegionsTenantsMap', serviceInstance.lcpCloudRegionId] : null, + onInit : serviceInstance ? this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this.aaiService.getLcpRegionsAndTenants.bind(this, serviceInstance.globalSubscriberId, serviceInstance.subscriptionServiceType)) : ()=>{}, + value : serviceInstance ? serviceInstance.tenantId : null, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required')], + }) + }; + + getAICZoneControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.AICZONE_ID, + displayName : 'AIC zone', + dataTestId : 'aic_zone', + placeHolder : 'Select AIC zone', + name : "aicZone", + value : serviceInstance ? serviceInstance.aicZoneId : null, + isDisabled : false, + validations : [], + onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getAicZones) + }) + }; + + getPauseControl = (serviceInstance : any, controls : FormControlModel[]) :CheckboxFormControl => { + return new CheckboxFormControl({ + controlName : FormControlNames.PAUSE, + displayName : 'Pause on pause points', + dataTestId : 'Pause', + isDisabled : false, + value : serviceInstance ? serviceInstance.pause : null, + }) + }; + + getProjectControl = (serviceInstance : any, controls : FormControlModel[]) :DropdownFormControl =>{ + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.PROJECT_NAME, + displayName : 'Project', + dataTestId : 'project', + placeHolder : 'Select Project', + name : "project", + isDisabled : false, + validations : [], + value : serviceInstance ? serviceInstance.projectName : null, + onInitSelectedField : ['projectList'], + onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters) + }) + }; + + getRollbackOnFailureControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => { + return new DropdownFormControl({ + type : FormControlType.DROPDOWN, + controlName : FormControlNames.ROLLBACK_ON_FAILURE, + displayName : 'Rollback on failure', + dataTestId : 'rollback', + isDisabled : false, + validations : [new ValidatorModel(ValidatorOptions.required, 'is required')], + value : serviceInstance ? serviceInstance.rollbackOnFailure : 'true', + onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions) + }) + }; +} + + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.spec.ts new file mode 100644 index 000000000..36be1bdfa --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.spec.ts @@ -0,0 +1,2008 @@ +import {getTestBed, TestBed} from '@angular/core/testing'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {NgRedux} from '@angular-redux/store'; +import {BasicControlGenerator} from "../basic.control.generator"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {GenericFormService} from "../../generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import {LogService} from "../../../../utils/log/log.service"; +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {FormControlNames, VfModuleControlGenerator} from "./vfModule.control.generator"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; + +class MockAppStore<T> { + getState() { + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "serviceEcompNaming" : "true", + "properties": { + "ecomp_generated_naming": "false", + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "ecomp_generated_naming": "false", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "networks": {}, + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [ + {} + ], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "instanceParams": [ + {} + ], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": { + "d6557200-ecf2-4641-8094-5393ae3aae60": 1 + }, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isEcompGeneratedNaming": true, + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [ + { + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, + { + "id": "hvf6", + "name": "hvf6", + "isPermitted": true + } + ], + "lcpRegionsTenantsMap": { + "JANET25": [ + { + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + } + ], + "hvf6": [ + { + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, + { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, + { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, + { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, + { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, + { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, + { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, + { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, + { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, + { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, + { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, + { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, + { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, + { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, + { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, + { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, + { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, + { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, + { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, + { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, + { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, + { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, + { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, + { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, + { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, + { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, + { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, + { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, + { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, + { + "id": "cbb99fe4ada84631b7baf046b6fd2044", + "name": "DN5242-Nov16-T3", + "isPermitted": true + } + ] + } + }, + "productFamilies": [ + { + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, + { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, + { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, + { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, + { + "id": "vTerrance", + "name": "vTerrance", + "isPermitted": true + }, + { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, + { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, + { + "id": "db171b8f-115c-4992-a2e3-ee04cae357e0", + "name": "LINDSEY", + "isPermitted": true + }, + { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, + { + "id": "vRosemarie", + "name": "HNGATEWAY", + "isPermitted": true + }, + { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", + "name": "VROUTER", + "isPermitted": true + }, + { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, + { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, + { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, + { + "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", + "name": "Transport", + "isPermitted": true + }, + { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, + { + "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", + "name": "Josefina", + "isPermitted": true + }, + { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, + { + "id": "12a96a9d-4b4c-4349-a950-fe1159602621", + "name": "DARREN MCGEE", + "isPermitted": true + } + ], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [ + { + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, + { + "id": "1", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "3", + "name": "vJamie", + "isPermitted": false + }, + { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, + { + "id": "5", + "name": "Kennedy", + "isPermitted": false + }, + { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, + { + "id": "7", + "name": "vVM", + "isPermitted": false + }, + { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, + { + "id": "9", + "name": "vMME", + "isPermitted": false + }, + { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, + { + "id": "11", + "name": "vSCP", + "isPermitted": false + }, + { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, + { + "id": "13", + "name": "vMMSC", + "isPermitted": false + }, + { + "id": "14", + "name": "SSD", + "isPermitted": false + }, + { + "id": "15", + "name": "vMOG", + "isPermitted": false + }, + { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, + { + "id": "17", + "name": "JOHANNA_SANTOS", + "isPermitted": false + }, + { + "id": "18", + "name": "vCarroll", + "isPermitted": false + } + ] + }, + "aicZones": [ + { + "id": "NFT1", + "name": "NFTJSSSS-NFT1" + }, + { + "id": "JAG1", + "name": "YUDFJULP-JAG1" + }, + { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, + { + "id": "BAN1", + "name": "VSDKYUTP-BAN1" + }, + { + "id": "DKJ1", + "name": "DKJSJDKA-DKJ1" + }, + { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, + { + "id": "UIO1", + "name": "uioclli1-UIO1" + }, + { + "id": "RAJ1", + "name": "YGBIJNLQ-RAJ1" + }, + { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, + { + "id": "SDE1", + "name": "ZXCVBNMA-SDE1" + }, + { + "id": "VEN2", + "name": "FGHJUHIL-VEN2" + }, + { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, + { + "id": "JAD1", + "name": "JADECLLI-JAD1" + }, + { + "id": "ZXL1", + "name": "LWLWCANN-ZXL1" + }, + { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, + { + "id": "SDF1", + "name": "sdfclli1-SDF1" + }, + { + "id": "RAD1", + "name": "RADICAL1-RAD1" + }, + { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, + { + "id": "REL1", + "name": "INGERFGT-REL1" + }, + { + "id": "JNL1", + "name": "CJALSDAC-JNL1" + }, + { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, + { + "id": "CHI1", + "name": "CHILLIWE-CHI1" + }, + { + "id": "UUU4", + "name": "UUUAAAUU-UUU4" + }, + { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, + { + "id": "KJN1", + "name": "CKALDKSA-KJN1" + }, + { + "id": "SAM1", + "name": "SNDGCA64-SAN1" + }, + { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, + { + "id": "HJH1", + "name": "AOEEQQQD-HJH1" + }, + { + "id": "HGD1", + "name": "SDFQWHGD-HGD1" + }, + { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, + { + "id": "ATL43", + "name": "AICLOCID-ATL43" + }, + { + "id": "ATL54", + "name": "AICFTAAI-ATL54" + }, + { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, + { + "id": "VEL1", + "name": "BNMLKUIK-VEL1" + }, + { + "id": "ICC1", + "name": "SANJITAT-ICC1" + }, + { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, + { + "id": "DEF2", + "name": "WSBHGTYL-DEF2" + }, + { + "id": "MAD11", + "name": "SDFQWGKL-MAD11" + }, + { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, + { + "id": "GAR1", + "name": "NGFVSJKO-GAR1" + }, + { + "id": "SAN22", + "name": "GNVLSCTL-SAN22" + }, + { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, + { + "id": "JCS1", + "name": "JCSJSCJS-JCS1" + }, + { + "id": "DHA12", + "name": "WSXEDECF-DHA12" + }, + { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, + { + "id": "NCA1", + "name": "NCANCANN-NCA1" + }, + { + "id": "IOP1", + "name": "iopclli1-IOP1" + }, + { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, + { + "id": "KAP1", + "name": "HIOUYTRQ-KAP1" + }, + { + "id": "ZEN1", + "name": "ZENCLLI1-ZEN1" + }, + { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, + { + "id": "CQK1", + "name": "CQKSCAKK-CQK1" + }, + { + "id": "SAI1", + "name": "UBEKQLPD-SAI1" + }, + { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, + { + "id": "IBB1", + "name": "PLMKOIJU-IBB1" + }, + { + "id": "TIR2", + "name": "PLKINHYI-TIR2" + }, + { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, + { + "id": "SLF78", + "name": "SDCTLFN1-SLF78" + }, + { + "id": "SEE78", + "name": "SDCTEEE4-SEE78" + }, + { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, + { + "id": "SAA78", + "name": "SDCTAAA1-SAA78" + }, + { + "id": "LUC1", + "name": "ATLDFGYC-LUC1" + }, + { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, + { + "id": "TOR1", + "name": "TOROONXN-TOR1" + }, + { + "id": "QWE1", + "name": "QWECLLI1-QWE1" + }, + { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, + { + "id": "CAL33", + "name": "CALIFORN-CAL33" + }, + { + "id": "SHH78", + "name": "SDIT1HHH-SHH78" + }, + { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, + { + "id": "CLG1", + "name": "CLGRABAD-CLG1" + }, + { + "id": "BNA1", + "name": "BNARAGBK-BNA1" + }, + { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, + { + "id": "APP1", + "name": "WBHGTYUI-APP1" + }, + { + "id": "RJN1", + "name": "RJNRBZAW-RJN1" + }, + { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, + { + "id": "mac10", + "name": "PKGTESTF-mac10" + }, + { + "id": "SXB78", + "name": "SDCTGXB1-SXB78" + }, + { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, + { + "id": "SYD1", + "name": "SYDNAUBV-SYD1" + }, + { + "id": "TOK1", + "name": "TOKYJPFA-TOK1" + }, + { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, + { + "id": "DCC1b", + "name": "POIUYTGH-DCC1b" + }, + { + "id": "SKK78", + "name": "SDCTKKK1-SKK78" + }, + { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, + { + "id": "SJJ78", + "name": "SDCTJJJ1-SJJ78" + }, + { + "id": "SBX78", + "name": "SDCTBXG1-SBX78" + }, + { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, + { + "id": "IAA1", + "name": "QAZXSWED-IAA1" + }, + { + "id": "POI1", + "name": "PLMNJKIU-POI1" + }, + { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, + { + "id": "PBL1", + "name": "PBLAPBAI-PBL1" + }, + { + "id": "LAG45", + "name": "LARGIZON-LAG1a" + }, + { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, + { + "id": "HST70", + "name": "HSTNTX70-HST70" + }, + { + "id": "DCC1a", + "name": "POIUYTGH-DCC1a" + }, + { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, + { + "id": "LON1", + "name": "LONEENCO-LON1" + }, + { + "id": "SJU78", + "name": "SDIT1JUB-SJU78" + }, + { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, + { + "id": "SSW56", + "name": "ss8126GT-SSW56" + }, + { + "id": "SBB78", + "name": "SDIT1BBB-SBB78" + }, + { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, + { + "id": "GNV1", + "name": "GNVLSCTL-GNV1" + }, + { + "id": "WAS1", + "name": "WASHDCSW-WAS1" + }, + { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, + { + "id": "STT1", + "name": "STTLWA02-STT1" + }, + { + "id": "STG1", + "name": "STTGGE62-STG1" + }, + { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, + { + "id": "SBU78", + "name": "SDIT1BUB-SBU78" + }, + { + "id": "ATL2", + "name": "ATLNGANW-ATL2" + }, + { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, + { + "id": "SNG1", + "name": "SNGPSIAU-SNG1" + }, + { + "id": "NYC1", + "name": "NYCMNY54-NYC1" + }, + { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, + { + "id": "AMD15", + "name": "AMDFAA01-AMD15" + }, + { + "id": "SNA1", + "name": "SNANTXCA-SNA1" + }, + { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, + { + "id": "TLP1", + "name": "TLPNXM18-TLP1" + }, + { + "id": "SDD81", + "name": "SAIT1DD6-SDD81" + }, + { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, + { + "id": "DCC2", + "name": "POIUYTGH-DCC2" + }, + { + "id": "OKC1", + "name": "OKCBOK55-OKC1" + }, + { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, + { + "id": "TES36", + "name": "ABCEETES-TES36" + }, + { + "id": "COM1", + "name": "PLMKOPIU-COM1" + }, + { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, + { + "id": "SDG78", + "name": "SDIT1BDG-SDG78" + }, + { + "id": "mac20", + "name": "PKGTESTF-mac20" + }, + { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, + { + "id": "HST25", + "name": "HSTNTX01-HST25" + }, + { + "id": "AMD18", + "name": "AUDIMA01-AMD18" + }, + { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, + { + "id": "SSA56", + "name": "SSIT2AA7-SSA56" + }, + { + "id": "SDD82", + "name": "SAIT1DD9-SDD82" + }, + { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, + { + "id": "SUL2", + "name": "WERTYUJK-SUL2" + }, + { + "id": "PUR1", + "name": "purelyde-PUR1" + }, + { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, + { + "id": "SITE", + "name": "LONEENCO-SITE" + }, + { + "id": "ATL1", + "name": "ATLNGAMA-ATL1" + }, + { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, + { + "id": "TAT34", + "name": "TESAAISB-TAT34" + }, + { + "id": "XCP12", + "name": "CHKGH123-XCP12" + }, + { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, + { + "id": "HPO1", + "name": "ATLNGAUP-HPO1" + }, + { + "id": "KJF12", + "name": "KJFDH123-KJF12" + }, + { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, + { + "id": "SAA12", + "name": "SAIT9AF8-SAA12" + }, + { + "id": "SAA14", + "name": "SAIT1AA9-SAA14" + }, + { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, + { + "id": "CWY1", + "name": "CWYMOWBS-CWY1" + }, + { + "id": "ATL76", + "name": "TELEPAAI-ATL76" + }, + { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, + { + "id": "ATL53", + "name": "AAIATLTE-ATL53" + }, + { + "id": "SAA11", + "name": "SAIT9AA2-SAA11" + }, + { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, + { + "id": "AUG1", + "name": "ASDFGHJK-AUG1" + }, + { + "id": "POI22", + "name": "POIUY123-POI22" + }, + { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, + { + "id": "BHY17", + "name": "BHYTFRF3-BHY17" + }, + { + "id": "LIS1", + "name": "HOSTPROF-LIS1" + }, + { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, + { + "id": "ATL99", + "name": "TEESTAAI-ATL43" + }, + { + "id": "ATL64", + "name": "FORLOAAJ-ATL64" + }, + { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, + { + "id": "RAD10", + "name": "INDIPUNE-RAD10" + }, + { + "id": "RTW5", + "name": "BHYTFRY4-RTW5" + }, + { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, + { + "id": "ATL98", + "name": "TEESTAAI-ATL43" + }, + { + "id": "WAN1", + "name": "LEIWANGW-WAN1" + }, + { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, + { + "id": "RTD2", + "name": "BHYTFRk4-RTD2" + }, + { + "id": "NIR1", + "name": "ORFLMANA-NIR1" + }, + { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, + { + "id": "NUM1", + "name": "QWERTYUI-NUM1" + }, + { + "id": "MTN32", + "name": "MDTWNJ21-MTN32" + }, + { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, + { + "id": "ATL56", + "name": "ATLSANAC-ATL56" + }, + { + "id": "AMS1", + "name": "AMSTNLBW-AMS1" + }, + { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, + { + "id": "JAN1", + "name": "ORFLMATT-JAN1" + }, + { + "id": "ABC14", + "name": "TESAAISA-ABC14" + }, + { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, + { + "id": "MIC54", + "name": "MICHIGAN-MIC54" + }, + { + "id": "ABC11", + "name": "ATLSANAI-ABC11" + }, + { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, + { + "id": "ATL63", + "name": "ATLSANEW-ATL63" + }, + { + "id": "ABC12", + "name": "ATLSECIA-ABC12" + }, + { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, + { + "id": "ABC15", + "name": "AAITESAN-ABC15" + }, + { + "id": "AVT1", + "name": "AVTRFLHD-AVT1" + }, + { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + } + ], + "categoryParameters": { + "owningEntityList": [ + { + "id": "aaa1", + "name": "aaa1" + }, + { + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, + { + "id": "Melissa", + "name": "Melissa" + } + ], + "projectList": [ + { + "id": "WATKINS", + "name": "WATKINS" + }, + { + "id": "x1", + "name": "x1" + }, + { + "id": "yyy1", + "name": "yyy1" + } + ], + "lineOfBusinessList": [ + { + "id": "ONAP", + "name": "ONAP" + }, + { + "id": "zzz1", + "name": "zzz1" + } + ], + "platformList": [ + { + "id": "platform", + "name": "platform" + }, + { + "id": "xxx1", + "name": "xxx1" + } + ] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } + } + } +} + +class MockFeatureFlagsService {} + +describe('VFModule Control Generator', () => { + let injector; + let service: VfModuleControlGenerator; + let httpMock: HttpTestingController; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [VfModuleControlGenerator, + GenericFormService, + BasicControlGenerator, + AaiService, + FormBuilder, + LogService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockAppStore}] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(VfModuleControlGenerator); + httpMock = injector.get(HttpTestingController); + jest.spyOn(console, 'error'); + + })().then(done).catch(done.fail)); + + test(' getMacroFormControls gets vnfStoreKey === null', () => { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfStoreKey: string = null; + const vfModuleStoreKey: string = 'vf_vmee0..VfVmee..base_vmme..module-0'; + const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830"; + const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, vfModuleUUID, true); + + expect(controls).toEqual([]); + expect(console.error).toHaveBeenCalled(); + }); + + test('getAlaCarteFormControls check for mandatory controls', () => { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfStoreKey: string = 'VF_vMee 0'; + const vfModuleStoreKey: string = 'vf_vmee0..VfVmee..base_vmme..module-0'; + const uuidData: Object = { + modelId : "522159d5-d6e0-4c2a-aa44-5a542a12a830", + modelName : "vf_vmee0..VfVmee..base_vmme..module-0", + serviceId : "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + type : "VFmodule", + vFModuleStoreKey : "vf_vmee0..VfVmee..base_vmme..module-0vmvzo", + vnfStoreKey : "VF_vMee 0" + }; + const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, uuidData, true); + + const mandatoryControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.LCPCLOUD_REGION_ID, + FormControlNames.TENANT_ID, + FormControlNames.ROLLBACK_ON_FAILURE, + ]; + + for(let i = 0 ; i < mandatoryControls.length ; i++) { + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + test('getMacroFormControls check for mandatory controls', () => { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfStoreKey: string = 'VF_vMee 0'; + const uuidData: Object = { + modelId : "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + modelName : "vf_vmee0..VfVmee..base_vmme..module-0", + serviceId : "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + type : "VFmodule", + vFModuleStoreKey : "vf_vmee0..VfVmee..base_vmme..module-0vmvzo", + vnfStoreKey : "VF_vMee 0" + }; + const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfStoreKey, uuidData, true); + + const mandatoryControls : string[] = [ + 'instanceName' + ]; + + for(let i = 0 ; i < mandatoryControls.length ; i++) { + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + test(' getMacroFormControls gets null vnfStoreKey', () => { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfStoreKey: string = null; + const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830"; + const uuidData: Object = {}; + const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vfModuleUUID, uuidData,true); + + expect(controls).toEqual([]); + expect(console.error).toHaveBeenCalled(); + }); + + test('getAlaCarteFormControls should return the correct order of controls', () => { + const controls:FormControlModel[] = getAlaCarteFormControls(); + + const orderedControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.VOLUME_GROUP_NAME, + FormControlNames.LCPCLOUD_REGION_ID, + FormControlNames.LEGACY_REGION, + FormControlNames.TENANT_ID, + FormControlNames.ROLLBACK_ON_FAILURE, + FormControlNames.SDN_C_PRE_LOAD + ]; + + expect(controls.length).toEqual(7); + for(let i = 0 ; i < orderedControls.length ; i++) { + expect(controls[i].controlName).toEqual(orderedControls[i]); + } + }); + + function getAlaCarteFormControls():FormControlModel[] { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfStoreKey: string = 'VF_vMee 0'; + const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830"; + const uuidData: Object = { + modelId: "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + modelName: "vf_vmee0..VfVmee..base_vmme..module-0", + serviceId: "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + type: "VFmodule", + vFModuleStoreKey: "vf_vmee0..VfVmee..base_vmme..module-0vmvzo", + vnfStoreKey: "VF_vMee 0" + }; + const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleUUID, uuidData, true); + return controls; + } + + test('getAlaCarteFormControls responce with wrong order of controls', () => { + const controls:FormControlModel[] = getAlaCarteFormControls(); + + const orderedControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.VOLUME_GROUP_NAME, + FormControlNames.LCPCLOUD_REGION_ID, + FormControlNames.TENANT_ID, // TENANT_ID must be after LEGACY_REGION + FormControlNames.LEGACY_REGION, + FormControlNames.ROLLBACK_ON_FAILURE, + FormControlNames.SDN_C_PRE_LOAD + ]; + + for(let i = 0 ; i < orderedControls.length ; i++) { + if (controls[i].controlName === 'legacyRegion') { + expect(orderedControls[i]).toEqual('tenantId'); + } + } + }); + + test('getMacroFormControls should return the correct order of controls', () => { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfStoreKey: string = 'VF_vMee 0'; + const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830"; + const uuidData: Object = { + modelId : "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + modelName : "vf_vmee0..VfVmee..base_vmme..module-0", + serviceId : "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + type : "VFmodule", + vFModuleStoreKey : "vf_vmee0..VfVmee..base_vmme..module-0vmvzo", + vnfStoreKey : "VF_vMee 0" + }; + const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vfModuleUUID, uuidData, true); + + const orderedControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.VOLUME_GROUP_NAME + ]; + + for(let i = 0 ; i < orderedControls.length ; i++) { + expect(controls[i].controlName).toEqual(orderedControls[i]); + } + }); + + test.each` + controllerName + ${'instanceName'} + ${'volumeGroupName'} + `('getAlacartFormControls $controllerName control validator shall have the expected regex', ({controllerName}) => { + const controls:FormControlModel[] = getAlaCarteFormControls(); + + const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName == controllerName); + const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern); + expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/); + }); + + test(' getAlaCarteFormControls gets null service', () => { + const controls:FormControlModel[] = getAlaCarteFormControls(); + expect(controls.length).toEqual(7); + + const orderedControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.VOLUME_GROUP_NAME, + FormControlNames.LCPCLOUD_REGION_ID, + FormControlNames.LEGACY_REGION, + FormControlNames.TENANT_ID, + FormControlNames.ROLLBACK_ON_FAILURE, + FormControlNames.SDN_C_PRE_LOAD + ]; + + for(let i = 0 ; i < orderedControls.length ; i++) { + expect(controls[i].controlName).toEqual(orderedControls[i]); + } + }); +}); + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts new file mode 100644 index 000000000..3012c139c --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts @@ -0,0 +1,349 @@ +import {Injectable} from "@angular/core"; +import {GenericFormService} from "../../generic-form.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {NgRedux} from "@angular-redux/store"; +import {HttpClient} from "@angular/common/http"; +import {BasicControlGenerator} from "../basic.control.generator"; +import * as _ from 'lodash'; +import {Observable, of} from "rxjs"; + +import { + CustomValidatorOptions, + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../../utils/log/log.service"; +import {AppState} from "../../../../store/reducers"; +import {FormGroup} from "@angular/forms"; +import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model"; +import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum"; +import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model"; +import {SelectOption} from "../../../../models/selectOption"; +import {VfModuleInstance} from "../../../../models/vfModuleInstance"; +import {VfModule} from "../../../../models/vfModule"; +import {VNFModel} from "../../../../models/vnfModel"; +import {VnfInstance} from "../../../../models/vnfInstance"; +import {FileFormControl} from "../../../../models/formControlModels/fileFormControl.model"; +import {CheckboxFormControl} from "../../../../models/formControlModels/checkboxFormControl.model"; +import {FileUnit} from "../../../formControls/component/file/fileUnit.enum"; +import {Constants} from "../../../../utils/constants"; + + +export enum FormControlNames { + INSTANCE_NAME = 'instanceName', + VOLUME_GROUP_NAME = 'volumeGroupName', + LCPCLOUD_REGION_ID = 'lcpCloudRegionId', + LEGACY_REGION = 'legacyRegion', + TENANT_ID = 'tenantId', + ROLLBACK_ON_FAILURE = 'rollbackOnFailure', + SDN_C_PRE_LOAD = 'sdncPreLoad', + SUPPLEMENTARY_FILE = 'supplementaryFile' +} + + +@Injectable() +export class VfModuleControlGenerator { + aaiService: AaiService; + vfModuleModel: VfModule; + vfModuleName : string; + isUpdateMode : boolean; + + constructor(private genericFormService: GenericFormService, + private _basicControlGenerator: BasicControlGenerator, + private store: NgRedux<AppState>, + private http: HttpClient, + private _aaiService: AaiService, + private _logService: LogService) { + this.aaiService = _aaiService; + } + + setVFModuleStoreKey = (serviceId: string, vfModuleUuid: string) => { + const vfModules = this.store.getState().service.serviceHierarchy[serviceId].vfModules; + const vfModulesKeys = Object.keys(vfModules); + for(let key of vfModulesKeys){ + if(vfModules[key].uuid === vfModuleUuid){ + this.vfModuleName = key; + return; + } + } + }; + + + getVfModuleInstance = (serviceId: string, vnfStoreKey: string, UUIDData: Object, isUpdateMode: boolean): VfModuleInstance => { + let vfModuleInstance: VfModuleInstance = null; + if (isUpdateMode && this.store.getState().service.serviceInstance[serviceId] && + _.has(this.store.getState().service.serviceInstance[serviceId].vnfs, vnfStoreKey) && + _.has(this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules, UUIDData['modelName'])) { + vfModuleInstance = Object.assign({},this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules[UUIDData['modelName']][UUIDData['vFModuleStoreKey']]); + } + return vfModuleInstance; + }; + + extractVfAccordingToVfModuleUuid(serviceId: string, UUIDData: Object): VfModule { + const vfModule = this.store.getState().service.serviceHierarchy[serviceId].vfModules[UUIDData['modelName']]; + this.vfModuleModel = vfModule; + return vfModule; + } + + getMacroFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] { + this.isUpdateMode = isUpdateMode; + this.extractVfAccordingToVfModuleUuid(serviceId, uuidData); + if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) { + if(isUpdateMode){ + this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId); + return []; + } + } + + const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode); + const vfModuleModel = this.vfModuleModel; + const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey]; + const vnfModelName: string = vnf.originalName; + const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]); + + let result: FormControlModel[] = []; + + if (!_.isNil(vfModuleModel)) { + result.push(this.getInstanceName(vfModuleInstance, serviceId, vnfModel.isEcompGeneratedNaming)); + if (this.vfModuleModel.volumeGroupAllowed) { + result.push(this.getVolumeGroupName(vfModuleInstance, serviceId, vnfStoreKey, vfModuleInstance && vfModuleInstance.volumeGroupName, vnfModel.isEcompGeneratedNaming)); + } + } + if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) { + let suppFileInput:FileFormControl = <FileFormControl>(this.getSupplementaryFile(vfModuleInstance)); + result.push(suppFileInput); + result = result.concat(suppFileInput.hiddenFile); + } + return result; + } + + getAlaCarteFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] { + this.isUpdateMode = isUpdateMode; + this.extractVfAccordingToVfModuleUuid(serviceId, uuidData); + if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) { + if(isUpdateMode){ + this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId); + return []; + } + } + const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey]; + const vnfModelName: string = vnf.originalName; + const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]); + + const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode); + let result: FormControlModel[] = []; + result.push(this.getInstanceName(vfModuleInstance, serviceId, vnfModel.isEcompGeneratedNaming)); + + if (this.vfModuleModel.volumeGroupAllowed) { + result.push(this.getVolumeGroupName(vfModuleInstance, serviceId, vnfStoreKey, this.vfModuleName, vnfModel.isEcompGeneratedNaming)); + } + result.push(this.getLcpRegionControl(serviceId, vfModuleInstance, result)); + result.push(this._basicControlGenerator.getLegacyRegion(vfModuleInstance)); + result.push(this.getTenantControl(serviceId, vfModuleInstance, result)); + result.push(this.getRollbackOnFailureControl(vfModuleInstance, result)); + result.push(this.getSDNCControl(vfModuleInstance, result)); + if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) { + let suppFileInput:FileFormControl = <FileFormControl>(this.getSupplementaryFile(vfModuleInstance)); + result.push(suppFileInput); + result = result.concat(suppFileInput.hiddenFile); + } + return result; + + } + + getInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): FormControlModel { + let formControlModel:FormControlModel = this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, this.vfModuleModel); + formControlModel.onBlur = (event, form : FormGroup) => { + if(!_.isNil(form.controls['volumeGroupName'])&& event.target.value.length > 0){ + form.controls['volumeGroupName'].setValue(event.target.value + "_vol"); + } + }; + + return formControlModel; + } + + getDefaultVolumeGroupName(instance: any, vfModuleName: string, isEcompGeneratedNaming: boolean): string { + if ((!_.isNil(instance) && instance.volumeGroupName)) { + return instance.volumeGroupName; + } + if (isEcompGeneratedNaming) { + return null; + } + return this._basicControlGenerator.getDefaultInstanceName(instance, this.vfModuleModel) + "_vol"; + } + + getVolumeGroupName(instance: any, serviceId: string, vnfStoreKey: string, vfModuleName: string, isEcompGeneratedNaming: boolean): FormControlModel { + let validations: ValidatorModel[] = [ + new ValidatorModel(ValidatorOptions.pattern, 'Instance name may include only alphanumeric characters and underscore.', BasicControlGenerator.INSTANCE_NAME_REG_EX), + new ValidatorModel(CustomValidatorOptions.uniqueInstanceNameValidator, 'Volume Group instance name is already in use, please pick another name', [this.store, serviceId, instance && instance.volumeGroupName]) + ]; + // comment out because if not provided vid won't create VG + // if (!isEcompGeneratedNaming) { + // validations.push(new ValidatorModel(ValidatorOptions.required, 'is required')); + // } + return new InputFormControl({ + controlName: 'volumeGroupName', + displayName: 'Volume Group Name', + dataTestId: 'volumeGroupName', + // placeHolder: (!isEcompGeneratedNaming) ? 'Volume Group Name' : 'Automatically generated when not provided', + validations: validations, + tooltip : 'When filled, VID will create a Volume Group by this name and associate with this module.\n' + + 'When empty, the module is created without a Volume Group.', + isVisible: true, + value: this.getDefaultVolumeGroupName(instance, vfModuleName, isEcompGeneratedNaming), + onKeypress: (event) => { + const pattern:RegExp = BasicControlGenerator.INSTANCE_NAME_REG_EX; + if (pattern) { + if (!pattern.test(event['key'])) { + event.preventDefault(); + } + } + return event; + } + }); + } + + getSupplementaryFile(instance: any): FormControlModel { + return new FileFormControl({ + controlName: FormControlNames.SUPPLEMENTARY_FILE, + displayName: 'Supplementary Data File (JSON format)', + dataTestId: 'SupplementaryFile', + placeHolder: 'Choose file', + selectedFile: !_.isNil(instance) ? instance.supplementaryFileName: null, + isVisible: true, + acceptedExtentions: "application/json", + hiddenFile : [new InputFormControl({ + controlName: FormControlNames.SUPPLEMENTARY_FILE + "_hidden", + isVisible: false, + validations: [new ValidatorModel(CustomValidatorOptions.isFileTooBig, "File size exceeds 5MB.", [FileUnit.MB, 5])] + }), + new InputFormControl({ + controlName: FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content", + isVisible: false, + validations: [new ValidatorModel(CustomValidatorOptions.isValidJson, + "File is invalid, please make sure a legal JSON file is uploaded using name:value pairs.",[]), + new ValidatorModel(CustomValidatorOptions.isStringContainTags, + "File is invalid, please remove tags <>.",[])], + value: !_.isNil(instance) ? (instance.supplementaryFile_hidden_content): null, + }) + ], + onDelete : (form : FormGroup) => { + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(null); + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(null); + }, + onChange : (files: FileList, form : FormGroup) => { + if (files.length > 0) { + const file = files.item(0); + let reader = new FileReader(); + reader.onload = function(event) { + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(reader.result); + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(file); + }; + reader.readAsText(file); + } + else { + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(null); + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(null); + } + } + }) + }; + + getTenantControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.TENANT_ID, + displayName: 'Tenant', + dataTestId: 'tenant', + placeHolder: 'Select Tenant', + name: "tenant", + isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId), + onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null, + value: instance ? instance.tenantId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInit: instance ? this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this.aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : () => { + }, + }) + }; + + getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'lcpCloudRegionId', + displayName: 'LCP region', + dataTestId: 'lcpRegion', + placeHolder: 'Select LCP Region', + name: "lcpRegion", + isDisabled: false, + value: instance ? instance.lcpCloudRegionId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInitSelectedField: ['lcpRegionList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)), + onChange: (param: string, form: FormGroup) => { + form.controls[FormControlNames.TENANT_ID].enable(); + form.controls[FormControlNames.TENANT_ID].reset(); + if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) { + this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => { + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param]; + if (res.lcpRegionsTenantsMap[param]) { + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0; + } + })); + } + + if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) { + form.controls['legacyRegion'].enable(); + controls.find(item => item.controlName === 'legacyRegion').isVisible = true; + + } else { + controls.find(item => item.controlName === 'legacyRegion').isVisible = false; + form.controls['legacyRegion'].setValue(null); + form.controls['legacyRegion'].reset(); + form.controls['legacyRegion'].disable(); + } + } + }) + }; + + getSDNCControl = (instance: any, controls: FormControlModel[]): CheckboxFormControl => { + return new CheckboxFormControl({ + type: FormControlType.CHECKBOX, + controlName: 'sdncPreLoad', + displayName: 'SDN-C pre-load', + dataTestId: 'sdncPreLoad', + value: instance ? instance.sdncPreLoad : false, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')] + }) + }; + + getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.ROLLBACK_ON_FAILURE, + displayName: 'Rollback on failure', + dataTestId: 'rollback', + isDisabled: false, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + value: instance ? instance.rollbackOnFailure : 'true', + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions) + }) + }; + + getRollBackOnFailureOptions = (): Observable<SelectOption[]> => { + return of([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }; +} diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts new file mode 100644 index 000000000..d15a57bcf --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts @@ -0,0 +1,1943 @@ +import {getTestBed, TestBed} from '@angular/core/testing'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {NgRedux} from '@angular-redux/store'; +import {FormControlNames} from "../service.control.generator"; +import {BasicControlGenerator} from "../basic.control.generator"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {GenericFormService} from "../../generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../../utils/log/log.service"; +import {VnfControlGenerator} from "./vnf.control.generator"; +import {Observable} from "rxjs"; +import {SelectOption} from "../../../../models/selectOption"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; + +class MockAppStore<T> { + getState(){ + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [ + {} + ], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "instanceParams": [ + {} + ], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": { + "d6557200-ecf2-4641-8094-5393ae3aae60": 1 + }, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [ + { + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, + { + "id": "hvf6", + "name": "hvf6", + "isPermitted": true + } + ], + "lcpRegionsTenantsMap": { + "JANET25": [ + { + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + } + ], + "hvf6": [ + { + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, + { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, + { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, + { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, + { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, + { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, + { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, + { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, + { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, + { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, + { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, + { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, + { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, + { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, + { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, + { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, + { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, + { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, + { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, + { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, + { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, + { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, + { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, + { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, + { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, + { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, + { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, + { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, + { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, + { + "id": "cbb99fe4ada84631b7baf046b6fd2044", + "name": "DN5242-Nov16-T3", + "isPermitted": true + } + ] + } + }, + "productFamilies": [ + { + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, + { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, + { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, + { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, + { + "id": "vTerrance", + "name": "vTerrance", + "isPermitted": true + }, + { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, + { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, + { + "id": "db171b8f-115c-4992-a2e3-ee04cae357e0", + "name": "LINDSEY", + "isPermitted": true + }, + { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, + { + "id": "vRosemarie", + "name": "HNGATEWAY", + "isPermitted": true + }, + { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", + "name": "VROUTER", + "isPermitted": true + }, + { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, + { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, + { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, + { + "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", + "name": "Transport", + "isPermitted": true + }, + { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, + { + "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", + "name": "Josefina", + "isPermitted": true + }, + { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, + { + "id": "12a96a9d-4b4c-4349-a950-fe1159602621", + "name": "DARREN MCGEE", + "isPermitted": true + } + ], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [ + { + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, + { + "id": "1", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "3", + "name": "vJamie", + "isPermitted": false + }, + { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, + { + "id": "5", + "name": "Kennedy", + "isPermitted": false + }, + { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, + { + "id": "7", + "name": "vVM", + "isPermitted": false + }, + { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, + { + "id": "9", + "name": "vMME", + "isPermitted": false + }, + { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, + { + "id": "11", + "name": "vSCP", + "isPermitted": false + }, + { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, + { + "id": "13", + "name": "vMMSC", + "isPermitted": false + }, + { + "id": "14", + "name": "SSD", + "isPermitted": false + }, + { + "id": "15", + "name": "vMOG", + "isPermitted": false + }, + { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, + { + "id": "17", + "name": "JOHANNA_SANTOS", + "isPermitted": false + }, + { + "id": "18", + "name": "vCarroll", + "isPermitted": false + } + ] + }, + "aicZones": [ + { + "id": "NFT1", + "name": "NFTJSSSS-NFT1" + }, + { + "id": "JAG1", + "name": "YUDFJULP-JAG1" + }, + { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, + { + "id": "BAN1", + "name": "VSDKYUTP-BAN1" + }, + { + "id": "DKJ1", + "name": "DKJSJDKA-DKJ1" + }, + { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, + { + "id": "UIO1", + "name": "uioclli1-UIO1" + }, + { + "id": "RAJ1", + "name": "YGBIJNLQ-RAJ1" + }, + { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, + { + "id": "SDE1", + "name": "ZXCVBNMA-SDE1" + }, + { + "id": "VEN2", + "name": "FGHJUHIL-VEN2" + }, + { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, + { + "id": "JAD1", + "name": "JADECLLI-JAD1" + }, + { + "id": "ZXL1", + "name": "LWLWCANN-ZXL1" + }, + { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, + { + "id": "SDF1", + "name": "sdfclli1-SDF1" + }, + { + "id": "RAD1", + "name": "RADICAL1-RAD1" + }, + { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, + { + "id": "REL1", + "name": "INGERFGT-REL1" + }, + { + "id": "JNL1", + "name": "CJALSDAC-JNL1" + }, + { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, + { + "id": "CHI1", + "name": "CHILLIWE-CHI1" + }, + { + "id": "UUU4", + "name": "UUUAAAUU-UUU4" + }, + { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, + { + "id": "KJN1", + "name": "CKALDKSA-KJN1" + }, + { + "id": "SAM1", + "name": "SNDGCA64-SAN1" + }, + { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, + { + "id": "HJH1", + "name": "AOEEQQQD-HJH1" + }, + { + "id": "HGD1", + "name": "SDFQWHGD-HGD1" + }, + { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, + { + "id": "ATL43", + "name": "AICLOCID-ATL43" + }, + { + "id": "ATL54", + "name": "AICFTAAI-ATL54" + }, + { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, + { + "id": "VEL1", + "name": "BNMLKUIK-VEL1" + }, + { + "id": "ICC1", + "name": "SANJITAT-ICC1" + }, + { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, + { + "id": "DEF2", + "name": "WSBHGTYL-DEF2" + }, + { + "id": "MAD11", + "name": "SDFQWGKL-MAD11" + }, + { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, + { + "id": "GAR1", + "name": "NGFVSJKO-GAR1" + }, + { + "id": "SAN22", + "name": "GNVLSCTL-SAN22" + }, + { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, + { + "id": "JCS1", + "name": "JCSJSCJS-JCS1" + }, + { + "id": "DHA12", + "name": "WSXEDECF-DHA12" + }, + { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, + { + "id": "NCA1", + "name": "NCANCANN-NCA1" + }, + { + "id": "IOP1", + "name": "iopclli1-IOP1" + }, + { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, + { + "id": "KAP1", + "name": "HIOUYTRQ-KAP1" + }, + { + "id": "ZEN1", + "name": "ZENCLLI1-ZEN1" + }, + { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, + { + "id": "CQK1", + "name": "CQKSCAKK-CQK1" + }, + { + "id": "SAI1", + "name": "UBEKQLPD-SAI1" + }, + { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, + { + "id": "IBB1", + "name": "PLMKOIJU-IBB1" + }, + { + "id": "TIR2", + "name": "PLKINHYI-TIR2" + }, + { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, + { + "id": "SLF78", + "name": "SDCTLFN1-SLF78" + }, + { + "id": "SEE78", + "name": "SDCTEEE4-SEE78" + }, + { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, + { + "id": "SAA78", + "name": "SDCTAAA1-SAA78" + }, + { + "id": "LUC1", + "name": "ATLDFGYC-LUC1" + }, + { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, + { + "id": "TOR1", + "name": "TOROONXN-TOR1" + }, + { + "id": "QWE1", + "name": "QWECLLI1-QWE1" + }, + { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, + { + "id": "CAL33", + "name": "CALIFORN-CAL33" + }, + { + "id": "SHH78", + "name": "SDIT1HHH-SHH78" + }, + { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, + { + "id": "CLG1", + "name": "CLGRABAD-CLG1" + }, + { + "id": "BNA1", + "name": "BNARAGBK-BNA1" + }, + { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, + { + "id": "APP1", + "name": "WBHGTYUI-APP1" + }, + { + "id": "RJN1", + "name": "RJNRBZAW-RJN1" + }, + { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, + { + "id": "mac10", + "name": "PKGTESTF-mac10" + }, + { + "id": "SXB78", + "name": "SDCTGXB1-SXB78" + }, + { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, + { + "id": "SYD1", + "name": "SYDNAUBV-SYD1" + }, + { + "id": "TOK1", + "name": "TOKYJPFA-TOK1" + }, + { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, + { + "id": "DCC1b", + "name": "POIUYTGH-DCC1b" + }, + { + "id": "SKK78", + "name": "SDCTKKK1-SKK78" + }, + { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, + { + "id": "SJJ78", + "name": "SDCTJJJ1-SJJ78" + }, + { + "id": "SBX78", + "name": "SDCTBXG1-SBX78" + }, + { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, + { + "id": "IAA1", + "name": "QAZXSWED-IAA1" + }, + { + "id": "POI1", + "name": "PLMNJKIU-POI1" + }, + { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, + { + "id": "PBL1", + "name": "PBLAPBAI-PBL1" + }, + { + "id": "LAG45", + "name": "LARGIZON-LAG1a" + }, + { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, + { + "id": "HST70", + "name": "HSTNTX70-HST70" + }, + { + "id": "DCC1a", + "name": "POIUYTGH-DCC1a" + }, + { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, + { + "id": "LON1", + "name": "LONEENCO-LON1" + }, + { + "id": "SJU78", + "name": "SDIT1JUB-SJU78" + }, + { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, + { + "id": "SSW56", + "name": "ss8126GT-SSW56" + }, + { + "id": "SBB78", + "name": "SDIT1BBB-SBB78" + }, + { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, + { + "id": "GNV1", + "name": "GNVLSCTL-GNV1" + }, + { + "id": "WAS1", + "name": "WASHDCSW-WAS1" + }, + { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, + { + "id": "STT1", + "name": "STTLWA02-STT1" + }, + { + "id": "STG1", + "name": "STTGGE62-STG1" + }, + { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, + { + "id": "SBU78", + "name": "SDIT1BUB-SBU78" + }, + { + "id": "ATL2", + "name": "ATLNGANW-ATL2" + }, + { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, + { + "id": "SNG1", + "name": "SNGPSIAU-SNG1" + }, + { + "id": "NYC1", + "name": "NYCMNY54-NYC1" + }, + { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, + { + "id": "AMD15", + "name": "AMDFAA01-AMD15" + }, + { + "id": "SNA1", + "name": "SNANTXCA-SNA1" + }, + { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, + { + "id": "TLP1", + "name": "TLPNXM18-TLP1" + }, + { + "id": "SDD81", + "name": "SAIT1DD6-SDD81" + }, + { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, + { + "id": "DCC2", + "name": "POIUYTGH-DCC2" + }, + { + "id": "OKC1", + "name": "OKCBOK55-OKC1" + }, + { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, + { + "id": "TES36", + "name": "ABCEETES-TES36" + }, + { + "id": "COM1", + "name": "PLMKOPIU-COM1" + }, + { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, + { + "id": "SDG78", + "name": "SDIT1BDG-SDG78" + }, + { + "id": "mac20", + "name": "PKGTESTF-mac20" + }, + { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, + { + "id": "HST25", + "name": "HSTNTX01-HST25" + }, + { + "id": "AMD18", + "name": "AUDIMA01-AMD18" + }, + { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, + { + "id": "SSA56", + "name": "SSIT2AA7-SSA56" + }, + { + "id": "SDD82", + "name": "SAIT1DD9-SDD82" + }, + { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, + { + "id": "SUL2", + "name": "WERTYUJK-SUL2" + }, + { + "id": "PUR1", + "name": "purelyde-PUR1" + }, + { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, + { + "id": "SITE", + "name": "LONEENCO-SITE" + }, + { + "id": "ATL1", + "name": "ATLNGAMA-ATL1" + }, + { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, + { + "id": "TAT34", + "name": "TESAAISB-TAT34" + }, + { + "id": "XCP12", + "name": "CHKGH123-XCP12" + }, + { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, + { + "id": "HPO1", + "name": "ATLNGAUP-HPO1" + }, + { + "id": "KJF12", + "name": "KJFDH123-KJF12" + }, + { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, + { + "id": "SAA12", + "name": "SAIT9AF8-SAA12" + }, + { + "id": "SAA14", + "name": "SAIT1AA9-SAA14" + }, + { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, + { + "id": "CWY1", + "name": "CWYMOWBS-CWY1" + }, + { + "id": "ATL76", + "name": "TELEPAAI-ATL76" + }, + { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, + { + "id": "ATL53", + "name": "AAIATLTE-ATL53" + }, + { + "id": "SAA11", + "name": "SAIT9AA2-SAA11" + }, + { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, + { + "id": "AUG1", + "name": "ASDFGHJK-AUG1" + }, + { + "id": "POI22", + "name": "POIUY123-POI22" + }, + { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, + { + "id": "BHY17", + "name": "BHYTFRF3-BHY17" + }, + { + "id": "LIS1", + "name": "HOSTPROF-LIS1" + }, + { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, + { + "id": "ATL99", + "name": "TEESTAAI-ATL43" + }, + { + "id": "ATL64", + "name": "FORLOAAJ-ATL64" + }, + { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, + { + "id": "RAD10", + "name": "INDIPUNE-RAD10" + }, + { + "id": "RTW5", + "name": "BHYTFRY4-RTW5" + }, + { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, + { + "id": "ATL98", + "name": "TEESTAAI-ATL43" + }, + { + "id": "WAN1", + "name": "LEIWANGW-WAN1" + }, + { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, + { + "id": "RTD2", + "name": "BHYTFRk4-RTD2" + }, + { + "id": "NIR1", + "name": "ORFLMANA-NIR1" + }, + { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, + { + "id": "NUM1", + "name": "QWERTYUI-NUM1" + }, + { + "id": "MTN32", + "name": "MDTWNJ21-MTN32" + }, + { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, + { + "id": "ATL56", + "name": "ATLSANAC-ATL56" + }, + { + "id": "AMS1", + "name": "AMSTNLBW-AMS1" + }, + { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, + { + "id": "JAN1", + "name": "ORFLMATT-JAN1" + }, + { + "id": "ABC14", + "name": "TESAAISA-ABC14" + }, + { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, + { + "id": "MIC54", + "name": "MICHIGAN-MIC54" + }, + { + "id": "ABC11", + "name": "ATLSANAI-ABC11" + }, + { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, + { + "id": "ATL63", + "name": "ATLSANEW-ATL63" + }, + { + "id": "ABC12", + "name": "ATLSECIA-ABC12" + }, + { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, + { + "id": "ABC15", + "name": "AAITESAN-ABC15" + }, + { + "id": "AVT1", + "name": "AVTRFLHD-AVT1" + }, + { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + } + ], + "categoryParameters": { + "owningEntityList": [ + { + "id": "aaa1", + "name": "aaa1" + }, + { + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, + { + "id": "Melissa", + "name": "Melissa" + } + ], + "projectList": [ + { + "id": "WATKINS", + "name": "WATKINS" + }, + { + "id": "x1", + "name": "x1" + }, + { + "id": "yyy1", + "name": "yyy1" + } + ], + "lineOfBusinessList": [ + { + "id": "ONAP", + "name": "ONAP" + }, + { + "id": "zzz1", + "name": "zzz1" + } + ], + "platformList": [ + { + "id": "platform", + "name": "platform" + }, + { + "id": "xxx1", + "name": "xxx1" + } + ] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } + } + } +} + +class MockFeatureFlagsService {} + +describe('VNF Control Generator', () => { + let injector; + let service: VnfControlGenerator; + let httpMock: HttpTestingController; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [VnfControlGenerator, + GenericFormService, + BasicControlGenerator, + AaiService, + FormBuilder, + LogService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockAppStore}] + }); + await TestBed.compileComponents(); + + + injector = getTestBed(); + service = injector.get(VnfControlGenerator); + httpMock = injector.get(HttpTestingController); + + })().then(done).catch(done.fail)); + + + test('getMacroFormControls check for mandatory controls', () => { + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfName : string = "VF_vMee 0"; + const vnfStoreKey : string = "VF_vMee 0"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfName, []); + + const mandatoryControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.LCPCLOUD_REGION_ID, + FormControlNames.TENANT_ID, + 'platformName' + ]; + + for(let i = 0 ; i < mandatoryControls.length ; i++){ + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + test('should provide empty array on getMacroFormControls when serviceId, vnfName and vnfStoreKey equals to null', () => { + + let vnfStoreKey = null; + const serviceId = null; + const vnfName : string = null; + const result:FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfName, []); + expect(result).toEqual([]); + }); + + test('should provide empty array on getAlaCarteFormControls when serviceId, vnfName and vnfStoreKey equals to null', () => { + let vnfStoreKey = null; + const serviceId = null; + const vnfName : string = null; + const result:FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vnfName, []); + expect(result).toEqual([]); + }); + + function getALaCarteFormControls(vnfStoreKey: string): FormControlModel[] { + const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfName: string = "VF_vMee 0"; + const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vnfName, []); + return controls; + } + + test('getMacroFormControls should return the correct order of controls', () => { + const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + const vnfName : string = "VF_vMee 0"; + const vnfStoreKey : string = null; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfName, []); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.PRODUCT_FAMILY_ID, + FormControlNames.LCPCLOUD_REGION_ID , + 'legacyRegion', + 'tenantId', + 'platformName', + 'lineOfBusiness']; + + expect(controls.length).toEqual(7); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + test('getAlacartFormControls should return the correct order of controls', () => { + const controls = getALaCarteFormControls(null); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.PRODUCT_FAMILY_ID, + FormControlNames.LCPCLOUD_REGION_ID, + 'legacyRegion', + 'tenantId', + 'platformName', + 'lineOfBusiness', + 'rollbackOnFailure']; + expect(controls.length).toEqual(8); + for(let i = 0 ; i < controls.length ; i++) { + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + + test('getAlacartFormControls check for mandatory controls', () => { + const controls = getALaCarteFormControls("VF_vMee 0"); + const mandatoryControls : string[] = [ + FormControlNames.INSTANCE_NAME, + FormControlNames.LCPCLOUD_REGION_ID, + 'tenantId', + 'platformName', + 'rollbackOnFailure' + ]; + for(let i = 0 ; i < mandatoryControls.length ; i++){ + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + test('getAlacartFormControls instance name control validator shall have the expected regex', () => { + const controls:FormControlModel[] = getALaCarteFormControls("VF_vMee 0"); + + const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME); + const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern); + expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/); + }); + + test('rollback should return observable of true, false', () => { + let result : Observable<SelectOption[]> = service.getRollBackOnFailureOptions(); + result.subscribe((val)=>{ + expect(val).toEqual([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }); + }); +}); + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts new file mode 100644 index 000000000..3484038b1 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts @@ -0,0 +1,243 @@ +import {Injectable} from "@angular/core"; +import {GenericFormService} from "../../generic-form.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {NgRedux} from "@angular-redux/store"; +import {HttpClient} from "@angular/common/http"; +import {BasicControlGenerator} from "../basic.control.generator"; +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../../utils/log/log.service"; +import {VNFModel} from "../../../../models/vnfModel"; +import {AppState} from "../../../../store/reducers"; +import {FormGroup} from "@angular/forms"; +import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model"; +import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum"; +import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model"; +import {Observable, of} from "rxjs"; +import {SelectOption} from "../../../../models/selectOption"; +import * as _ from 'lodash'; +import {Constants} from "../../../../utils/constants"; + +export enum FormControlNames { + INSTANCE_NAME = 'instanceName', + GLOBAL_SUBSCRIBER_ID = 'globalSubscriberId', + SUBSCRIPTION_SERVICE_TYPE = 'subscriptionServiceType', + PRODUCT_FAMILY_ID = 'productFamilyId', + LCPCLOUD_REGION_ID = 'lcpCloudRegionId', + TENANT_ID = 'tenantId', + AICZONE_ID = 'aicZoneId', + PROJECT_NAME = 'projectName', + OWNING_ENTITY_ID = 'owningEntityId', + ROLLBACK_ON_FAILURE = 'rollbackOnFailure', + PAUSE = 'pause' +} + +enum InputType { + LCP_REGION = "lcpCloudRegionId", + TENANT = "tenantId", + LOB = "lineOfBusiness", + PLATFORM = "platformName", + ROLLBACK = "rollbackOnFailure", + PRODUCT_FAMILY = "productFamilyId", + VG = "volumeGroupName" +} + +@Injectable() +export class VnfControlGenerator { + aaiService: AaiService; + constructor(private genericFormService: GenericFormService, + private _basicControlGenerator: BasicControlGenerator, + private store: NgRedux<AppState>, + private http: HttpClient, + private _aaiService: AaiService, + private _logService: LogService) { + this.aaiService = _aaiService; + } + + getVnfInstance = (serviceId: string, vnfStoreKey: string): any => { + let vnfInstance = null; + if (this.store.getState().service.serviceInstance[serviceId] && _.has(this.store.getState().service.serviceInstance[serviceId].vnfs, vnfStoreKey)) { + vnfInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey]); + } + return vnfInstance; + }; + + getMacroFormControls(serviceId: string, vnfStoreKey: string, vnfName: string, dynamicInputs?: any[]): FormControlModel[] { + vnfStoreKey = _.isNil(vnfStoreKey) ? vnfName : vnfStoreKey; + + if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vnfName)) { + this._logService.error('should provide serviceId, vnfName, vnfStoreKey', serviceId); + return []; + } + + const vnfInstance = this.getVnfInstance(serviceId, vnfStoreKey); + const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]); + let result: FormControlModel[] = []; + + if (!_.isNil(vnfModel)) { + result.push(this.getInstanceName(vnfInstance, serviceId, vnfName, vnfModel.isEcompGeneratedNaming)); + result.push(this._basicControlGenerator.getProductFamilyControl(vnfInstance, result, false)); + result.push(this.getLcpRegionControl(serviceId, vnfInstance, result)); + result.push(this._basicControlGenerator.getLegacyRegion(vnfInstance)); + result.push(this.getTenantControl(serviceId, vnfInstance, result)); + result.push(this.getPlatformControl(vnfInstance, result)); + result.push(this.getLineOfBusinessControl(vnfInstance, result)); + } + return result; + } + + getAlaCarteFormControls(serviceId: string, vnfStoreKey: string, vnfName: string, dynamicInputs?: any[]): FormControlModel[] { + vnfStoreKey = _.isNil(vnfStoreKey) ? vnfName : vnfStoreKey; + if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vnfName)) { + this._logService.error('should provide serviceId, vnfName, vnfStoreKey', serviceId); + return []; + } + + let result: FormControlModel[] = []; + const vnfInstance = this.getVnfInstance(serviceId, vnfStoreKey); + const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]); + + if (!_.isNil(vnfModel)) { + result.push(this.getInstanceName(vnfInstance, serviceId, vnfName, vnfModel.isEcompGeneratedNaming)); + result.push(this._basicControlGenerator.getProductFamilyControl(vnfInstance, result, false)); + result.push(this.getLcpRegionControl(serviceId, vnfInstance, result)); + result.push(this._basicControlGenerator.getLegacyRegion(vnfInstance)); + result.push(this.getTenantControl(serviceId, vnfInstance, result)); + result.push(this.getPlatformControl(vnfInstance, result)); + result.push(this.getLineOfBusinessControl(vnfInstance, result)); + result.push(this.getRollbackOnFailureControl(vnfInstance, result)); + } + return result; + } + + isInputShouldBeShown = (inputType: any): boolean => { + let vnfInputs = [InputType.LCP_REGION, InputType.LOB, InputType.TENANT, InputType.PRODUCT_FAMILY, InputType.PLATFORM, InputType.ROLLBACK]; + return vnfInputs.indexOf(inputType) > -1; + }; + + getInstanceName(instance : any, serviceId : string, vnfName : string, isEcompGeneratedNaming: boolean): FormControlModel { + const vnfModel : VNFModel = this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]; + return this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, vnfModel); + } + + getLineOfBusinessControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'lineOfBusiness', + displayName: 'Line of business', + dataTestId: 'lineOfBusiness', + placeHolder: 'Select Line Of Business', + isDisabled: false, + name: "lineOfBusiness", + value: instance ? instance.lineOfBusiness : null, + validations: [], + onInitSelectedField: ['lineOfBusinessList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters) + }) + }; + + getPlatformControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'platformName', + displayName: 'Platform', + dataTestId: 'platform', + placeHolder: 'Select Platform', + isDisabled: false, + name: "platform", + value: instance ? instance.platformName : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInitSelectedField: ['platformList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters) + }) + }; + + getTenantControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.TENANT_ID, + displayName: 'Tenant', + dataTestId: 'tenant', + placeHolder: 'Select Tenant', + name: "tenant", + isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId), + onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null, + value: instance ? instance.tenantId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInit : instance ? this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this.aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : ()=>{}, + }) + }; + + getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'lcpCloudRegionId', + displayName: 'LCP region', + dataTestId: 'lcpRegion', + placeHolder: 'Select LCP Region', + name: "lcpRegion", + isDisabled: false, + value: instance ? instance.lcpCloudRegionId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInitSelectedField: ['lcpRegionList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)), + onChange: (param: string, form: FormGroup) => { + form.controls[FormControlNames.TENANT_ID].enable(); + form.controls[FormControlNames.TENANT_ID].reset(); + if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) { + this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => { + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param]; + if(res.lcpRegionsTenantsMap[param]){ + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0; + } + })); + } + + if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) { + form.controls['legacyRegion'].enable(); + controls.find(item => item.controlName === 'legacyRegion').isVisible = true; + + } else { + controls.find(item => item.controlName === 'legacyRegion').isVisible = false; + form.controls['legacyRegion'].setValue(null); + form.controls['legacyRegion'].reset(); + form.controls['legacyRegion'].disable(); + } + } + }) + }; + + getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.ROLLBACK_ON_FAILURE, + displayName: 'Rollback on failure', + dataTestId: 'rollback', + placeHolder: 'Rollback on failure', + isDisabled: false, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + value: instance ? instance.rollbackOnFailure : 'true', + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions) + }) + }; + + getRollBackOnFailureOptions = (): Observable<SelectOption[]> => { + return of([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }; +} diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.spec.ts new file mode 100644 index 000000000..6dcaa8235 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.spec.ts @@ -0,0 +1,364 @@ +import {getTestBed, TestBed} from '@angular/core/testing'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {NgRedux} from '@angular-redux/store'; +import {FormControlNames} from "../service.control.generator"; +import {BasicControlGenerator} from "../basic.control.generator"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {GenericFormService} from "../../generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../../utils/log/log.service"; +import {VnfGroupControlGenerator} from "./vnfGroup.control.generator"; +import {Observable} from "rxjs"; +import {SelectOption} from "../../../../models/selectOption"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; + +class MockAppStore<T> { + getState(){ + return { + "global": { + "name": null, + "type": "UPDATE_DRAWING_BOARD_STATUS", + "drawingBoardStatus": "CREATE", + "flags": { + "CREATE_INSTANCE_TEST": false, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "FLAG_ADD_MSO_TESTAPI_FIELD": true, + "FLAG_UNASSIGN_SERVICE": false, + "FLAG_SERVICE_MODEL_CACHE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_DEFAULT_VNF": true, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": true, + "FLAG_A_LA_CARTE_AUDIT_INFO": true, + "FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST": true, + "FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS": true, + "FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE": true, + "FLAG_1902_NEW_VIEW_EDIT": true + } + }, + "service": { + "serviceHierarchy": { + "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": { + "service": { + "vidNotions": { + "instantiationUI": "serviceWithVnfGrouping", + "modelCategory": "other", + "viewEditUI": "serviceWithVnfGrouping" + }, + "uuid": "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", + "invariantUuid": "7ee41ce4-4827-44b0-a48e-2707a59905d2", + "name": "Grouping Service for Test", + "version": "1.0", + "toscaModelURL": null, + "category": "Network L4+", + "serviceType": "INFRASTRUCTURE", + "serviceRole": "GROUPING", + "description": "xxx", + "serviceEcompNaming": "false", + "instantiationType": "A-La-Carte", + "inputs": {} + }, + "vnfs": {}, + "networks": {}, + "collectionResource": {}, + "configurations": {}, + "fabricConfigurations": {}, + "serviceProxies": { + "vdbe_svc_vprs_proxy 0": { + "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c", + "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc", + "description": "A Proxy for Service vDBE_Svc_vPRS", + "name": "vDBE_Svc_vPRS Service Proxy", + "version": "1.0", + "customizationUuid": "bdb63d23-e132-4ce7-af2c-a493b4cafac9", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Service Proxy", + "sourceModelUuid": "da7827a2-366d-4be6-8c68-a69153c61274", + "sourceModelInvariant": "24632e6b-584b-4f45-80d4-fefd75fd9f14", + "sourceModelName": "vDBE_Svc_vPRS" + }, + "tsbc0001vm001_svc_proxy 0": { + "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c", + "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc", + "description": "A Proxy for Service tsbc0001vm001_Svc", + "name": "tsbc0001vm001_Svc Service Proxy", + "version": "1.0", + "customizationUuid": "3d814462-30fb-4c62-b997-9aa360d27ead", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Service Proxy", + "sourceModelUuid": "28aeb8f6-5620-4148-8bfb-a5fb406f0309", + "sourceModelInvariant": "c989ab9a-33c7-46ec-b521-1b2daef5f047", + "sourceModelName": "tsbc0001vm001_Svc" + } + }, + "vfModules": {}, + "volumeGroups": {}, + "pnfs": {}, + "vnfGroups": { + "groupingservicefortest..ResourceInstanceGroup..0": { + "type": "VnfGroup", + "invariantUuid": "4bb2e27e-ddab-4790-9c6d-1f731bc14a45", + "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48", + "version": "1", + "name": "groupingservicefortest..ResourceInstanceGroup..0", + "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..0", + "properties": { + "ecomp_generated_naming": "false", + "contained_resource_type": "VF", + "role": "SERVICE-ACCESS", + "function": "DATA", + "description": "DDD0", + "type": "LOAD-GROUP" + }, + "members": { + "vdbe_svc_vprs_proxy 0": { + "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c", + "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc", + "description": "A Proxy for Service vDBE_Svc_vPRS", + "name": "vDBE_Svc_vPRS Service Proxy", + "version": "1.0", + "customizationUuid": "bdb63d23-e132-4ce7-af2c-a493b4cafac9", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Service Proxy", + "sourceModelUuid": "da7827a2-366d-4be6-8c68-a69153c61274", + "sourceModelInvariant": "24632e6b-584b-4f45-80d4-fefd75fd9f14", + "sourceModelName": "vDBE_Svc_vPRS" + } + } + }, + "groupingservicefortest..ResourceInstanceGroup..1": { + "type": "VnfGroup", + "invariantUuid": "a704112d-dbc6-4e56-8d4e-aec57e95ef9a", + "uuid": "c2b300e6-45de-4e5e-abda-3032bee2de56", + "version": "1", + "name": "groupingservicefortest..ResourceInstanceGroup..1", + "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..1", + "properties": { + "ecomp_generated_naming": "true", + "contained_resource_type": "VF", + "role": "SERVICE-ACCESS", + "function": "SIGNALING", + "description": "DDD1", + "type": "LOAD-GROUP" + }, + "members": { + "tsbc0001vm001_svc_proxy 0": { + "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c", + "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc", + "description": "A Proxy for Service tsbc0001vm001_Svc", + "name": "tsbc0001vm001_Svc Service Proxy", + "version": "1.0", + "customizationUuid": "3d814462-30fb-4c62-b997-9aa360d27ead", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Service Proxy", + "sourceModelUuid": "28aeb8f6-5620-4148-8bfb-a5fb406f0309", + "sourceModelInvariant": "c989ab9a-33c7-46ec-b521-1b2daef5f047", + "sourceModelName": "tsbc0001vm001_Svc" + } + } + } + } + } + }, + "serviceInstance": { + "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": { + "existingVNFCounterMap": {}, + "existingVnfGroupCounterMap": { + "daeb6568-cef8-417f-9075-ed259ce59f48": 1, + "c2b300e6-45de-4e5e-abda-3032bee2de56": 0 + }, + "existingNetworksCounterMap": {}, + "vnfs": {}, + "vnfGroups": { + "groupingservicefortest..ResourceInstanceGroup..0": { + "inMaint": false, + "rollbackOnFailure": "true", + "originalName": "groupingservicefortest..ResourceInstanceGroup..0", + "isMissingData": false, + "trackById": "johjmxpmrlk", + "vnfGroupStoreKey": "groupingservicefortest..ResourceInstanceGroup..0", + "instanceName": "groupingservicefortestResourceInstanceGroup0", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "4bb2e27e-ddab-4790-9c6d-1f731bc14a45", + "modelVersionId": "daeb6568-cef8-417f-9075-ed259ce59f48", + "modelName": "groupingservicefortest..ResourceInstanceGroup..0", + "modelVersion": "1", + "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..0", + "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48" + }, + "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48" + } + }, + "isEcompGeneratedNaming": false, + "existingNames": {} + } + } + } + } + } +} + +class MockFeatureFlagsService {} + +describe('VNF Group Control Generator', () => { + let injector; + let service: VnfGroupControlGenerator; + let httpMock: HttpTestingController; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [VnfGroupControlGenerator, + GenericFormService, + BasicControlGenerator, + AaiService, + FormBuilder, + LogService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockAppStore}] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(VnfGroupControlGenerator); + httpMock = injector.get(HttpTestingController); + + })().then(done).catch(done.fail)); + + + + test('getMacroFormControls check for mandatory controls', () => { + const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc"; + const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0"; + const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..0"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []); + + const mandatoryControls : string[] = [ + FormControlNames.INSTANCE_NAME + ]; + + for(let i = 0 ; i < mandatoryControls.length ; i++){ + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + test('getMacroFormControls should return the correct order of controls', () => { + const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc"; + const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0"; + const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..0"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + 'rollbackOnFailure']; + + expect(controls.length).toEqual(1); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + test('getMacroFormControls check for mandatory controls when ecomp naming = true', () => { + const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc"; + const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..1"; + const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..1"; + const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []); + + let isOptional = controls.find(ctrl => ctrl.controlName === 'instanceName').validations.find(item => item.validatorName !== 'required'); + expect(isOptional).toBeTruthy(); + }); + + test('getAlacartFormControls should return the correct order of controls', () => { + const controls:FormControlModel[] = getALaCarteFormControls(); + + const controlsOrderNames = [ + FormControlNames.INSTANCE_NAME, + 'rollbackOnFailure']; + expect(controls.length).toEqual(2); + for(let i = 0 ; i < controls.length ; i++) { + expect(controls[i].controlName).toEqual(controlsOrderNames[i]); + } + }); + + + test('getAlacartFormControls check for mandatory controls', () => { + const controls:FormControlModel[] = getALaCarteFormControls(); + + const mandatoryControls : string[] = [ + FormControlNames.INSTANCE_NAME, + 'rollbackOnFailure' + ]; + for(let i = 0 ; i < mandatoryControls.length ; i++){ + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + test('getAlacartFormControls with ecomp_naming true check for mandatory controls', () => { + const controls:FormControlModel[] = getALaCarteFormControls(); + + const mandatoryControls : string[] = [ + 'rollbackOnFailure' + ]; + for(let i = 0 ; i < mandatoryControls.length ; i++){ + let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required'); + expect(requiredExist).toBeDefined(); + } + }); + + test('default instanceName', () => { + const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc"; + const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0"; + let result:FormControlModel = service.getInstanceName(null, serviceId, vnfGroupName, false); + expect(result.value).toEqual("groupingservicefortest..ResourceInstanceGroup..0"); + }); + + test('rollbackOnFailure', () => { + let result : Observable<SelectOption[]> = service.getRollBackOnFailureOptions(); + result.subscribe((val)=>{ + expect(val).toEqual([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }); + }); + + test('getAlacartFormControls instance name control validator shall have the expected regex', () => { + const controls:FormControlModel[] = getALaCarteFormControls(); + + const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME); + const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern); + expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/); + }); + + function getALaCarteFormControls():FormControlModel[] { + const serviceId: string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc"; + const vnfGroupName: string = "groupingservicefortest..ResourceInstanceGroup..0"; + const vnfGroupStoreKey: string = "groupingservicefortest..ResourceInstanceGroup..0"; + const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []); + return controls; + } +}); + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.ts new file mode 100644 index 000000000..e503f4d2a --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.ts @@ -0,0 +1,118 @@ +import {Injectable} from "@angular/core"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {NgRedux} from "@angular-redux/store"; +import {BasicControlGenerator} from "../basic.control.generator"; +import { + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../../utils/log/log.service"; +import {AppState} from "../../../../store/reducers"; +import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model"; +import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum"; +import {SelectOption} from "../../../../models/selectOption"; +import {VnfGroupModel} from "../../../../models/vnfGroupModel"; +import * as _ from 'lodash'; +import {Observable, of} from "rxjs"; + + +export enum FormControlNames { + INSTANCE_NAME = 'instanceName', + ROLLBACK_ON_FAILURE = 'rollbackOnFailure', +} + +enum InputType { + ROLLBACK = "rollbackOnFailure" +} + +@Injectable() +export class VnfGroupControlGenerator { + aaiService: AaiService; + constructor(private _basicControlGenerator: BasicControlGenerator, + private store: NgRedux<AppState>, + private _aaiService: AaiService, + private _logService: LogService) { + this.aaiService = _aaiService; + } + + getVnfGroupInstance = (serviceId: string, vnfGroupStoreKey: string): any => { + let vnfGroupInstance = null; + if (this.store.getState().service.serviceInstance[serviceId] && _.has(this.store.getState().service.serviceInstance[serviceId].vnfGroups, vnfGroupStoreKey)) { + vnfGroupInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId].vnfGroups[vnfGroupStoreKey]); + } + return vnfGroupInstance; + }; + + getMacroFormControls(serviceId: string, vnfGroupStoreKey: string, vnfGroupName: string, dynamicInputs?: Array<any>): Array<FormControlModel> { + vnfGroupStoreKey = _.isNil(vnfGroupStoreKey) ? vnfGroupName : vnfGroupStoreKey; + + if (_.isNil(serviceId) || _.isNil(vnfGroupStoreKey) || _.isNil(vnfGroupName)) { + this._logService.error('should provide serviceId, vnfGroupName, vnfGroupStoreKey', serviceId); + return []; + } + + const vnfGroupInstance = this.getVnfGroupInstance(serviceId, vnfGroupStoreKey); + const vnfGroupModel = new VnfGroupModel(this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]); + let result: FormControlModel[] = []; + + if (!_.isNil(vnfGroupModel)) { + result.push(this.getInstanceName(vnfGroupInstance, serviceId, vnfGroupName, vnfGroupModel.isEcompGeneratedNaming)); + } + return result; + } + + getAlaCarteFormControls(serviceId: string, vnfGroupStoreKey: string, vnfGroupName: string, dynamicInputs?: any[]): FormControlModel[] { + vnfGroupStoreKey = _.isNil(vnfGroupStoreKey) ? vnfGroupName : vnfGroupStoreKey; + if (_.isNil(serviceId) || _.isNil(vnfGroupStoreKey) || _.isNil(vnfGroupName)) { + this._logService.error('should provide serviceId, vnfGroupName, vnfGroupStoreKey', serviceId); + return []; + } + + let result: FormControlModel[] = []; + const vnfGroupInstance = this.getVnfGroupInstance(serviceId, vnfGroupStoreKey); + const vnfGroupModel = new VnfGroupModel(this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]); + + if (!_.isNil(vnfGroupModel)) { + result.push(this.getInstanceName(vnfGroupInstance, serviceId, vnfGroupName, vnfGroupModel.isEcompGeneratedNaming)); + result.push(this.getRollbackOnFailureControl(vnfGroupInstance, result)); + } + return result; + } + + isInputShouldBeShown = (inputType: any): boolean => { + let vnfGroupInputs = [InputType.ROLLBACK]; + return vnfGroupInputs.indexOf(inputType) > -1; + }; + + getDefaultInstanceName(instance : any, serviceId : string, vnfGroupName : string) : string { + const vnfGroupModel: VnfGroupModel = this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]; + return this._basicControlGenerator.getDefaultInstanceName(instance, vnfGroupModel); + } + + getInstanceName(instance : any, serviceId : string, vnfGroupName : string, isEcompGeneratedNaming: boolean): FormControlModel { + const vnfGroupModel : VnfGroupModel = this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]; + return this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, vnfGroupModel); + } + + getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.ROLLBACK_ON_FAILURE, + displayName: 'Rollback on failure', + dataTestId: 'rollback', + placeHolder: 'Rollback on failure', + isDisabled: false, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + value: instance ? instance.rollbackOnFailure : 'true', + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions) + }) + }; + + getRollBackOnFailureOptions = (): Observable<SelectOption[]> => { + return of([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }; +} diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.html b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.html new file mode 100644 index 000000000..d4c5118b3 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.html @@ -0,0 +1,29 @@ +<div id="form-details" *ngIf="formControls != null && dynamicFormGroup != null"> + <form [formGroup]="dynamicFormGroup"> + <div *ngFor="let formControl of formControls" class="form-conrtols"> + <div [ngSwitch]="formControl.type"> + <form-control-input *ngSwitchCase="'INPUT'" [data]="formControl" [form]="dynamicFormGroup"></form-control-input> + <checkbox-form-control *ngSwitchCase="'CHECKBOX'" [data]="formControl" [form]="dynamicFormGroup" ></checkbox-form-control> + <dropdown-form-control *ngSwitchCase="'DROPDOWN'" [data]="formControl" [form]="dynamicFormGroup" ></dropdown-form-control> + <file-form-control *ngSwitchCase="'FILE'" [data]="formControl" [form]="dynamicFormGroup"></file-form-control> + </div> + <div *ngIf="dynamicFormGroup != null && formControl != null && dynamicFormGroup.controls[formControl.controlName]?.errors"> + <div *ngFor="let validatorModel of formControl?.validations"> + <form-control-error *ngIf="validatorModel?.validatorName != 'required' && dynamicFormGroup.controls[formControl?.controlName]?.errors[validatorModel?.validatorName]" [message]="validatorModel?.errorMsg"></form-control-error> + </div> + </div> + </div> + <div *ngFor="let dynamicInputs of dynamicInputs" class="form-conrtols"> + <div [ngSwitch]="dynamicInputs.type"> + <form-control-input *ngSwitchCase="'INPUT'" [data]="dynamicInputs" [form]="dynamicFormGroup.controls['instanceParams']"></form-control-input> + <checkbox-form-control *ngSwitchCase="'CHECKBOX'" [data]="dynamicInputs" [form]="dynamicFormGroup.controls['instanceParams']" ></checkbox-form-control> + <dropdown-form-control *ngSwitchCase="'DROPDOWN'" [data]="dynamicInputs" [form]="dynamicFormGroup.controls['instanceParams']" ></dropdown-form-control> + </div> + <div *ngIf="dynamicFormGroup?.controls['instanceParams'] != null && dynamicInputs != null && dynamicFormGroup.controls['instanceParams'].controls[dynamicInputs.controlName]?.errors"> + <div *ngFor="let validatorModel of dynamicInputs?.validations"> + <form-control-error *ngIf="validatorModel?.validatorName != 'required' && dynamicFormGroup.controls['instanceParams'].controls[dynamicInputs?.controlName]?.errors[validatorModel?.validatorName]" [message]="validatorModel?.errorMsg"></form-control-error> + </div> + </div> + </div> + </form> +</div> diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.scss b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.scss new file mode 100644 index 000000000..b8f26d8b3 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.scss @@ -0,0 +1,68 @@ +#form-details { + position: relative; + + #notification-area { + color: #959595; + font-size: 12px; + position: absolute; + top: 3px; + left: 30px; + } + + height: 100%; + overflow: auto; + padding: 30px; + + /deep/ { + .form-control { + border-radius: 2px; + box-shadow: none; + border-color: #D2D2D2; + } + + label { + font-family: OpenSans-Semibold; + font-size: 12px; + } + + select { + @extend .form-control; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: url('../../../../assets/img/chevron.svg') 0 0 no-repeat; + background-size: 24px; + background-position-x: right; + background-position-y: center; + font-family: OpenSans-Italic; + font-size: 14px; + color: #959595; + height: 38px; + } + + input:not([type='checkbox']) { + @extend .form-control; + height: 38px; + } + + .form-control[disabled], fieldset[disabled] .form-control { + opacity: 0.5; + } + .input-text { + border: 1px solid #D2D2D2; + border-radius: 2px; + color: black; + } + + .form-conrtols { + margin-top: 20px; + &:first-child{ + margin-top: 0px; + } + } + } + + .checkbox-label { + font-family: OpenSans-Regular; + } +} diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.ts b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.ts new file mode 100644 index 000000000..6febd66d6 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.ts @@ -0,0 +1,45 @@ +import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core'; +import {GenericFormService} from "./generic-form.service"; +import {FormControlModel} from "../../models/formControlModels/formControl.model"; +import {FormGroup} from "@angular/forms"; +import * as _ from 'lodash'; + +@Component({ + selector : 'generic-form', + templateUrl : './generic-form.component.html', + styleUrls : ['./generic-form.component.scss'] +}) + +export class GenericFormComponent implements OnChanges{ + genericFormService: GenericFormService = null; + dynamicFormGroup: FormGroup = null; + + @Input() formControls : FormControlModel[] = null; + @Input() dynamicInputs : FormControlModel[] = null; + @Input() isValidForm : boolean = false; + @Output() onFormChanged = new EventEmitter(); + + constructor(private _genericFormService: GenericFormService){ + this.genericFormService = _genericFormService; + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes["formControls"] !== undefined && changes["formControls"].currentValue !== changes["formControls"].previousValue) { + this.dynamicFormGroup = this._genericFormService.generateFormBuilder(this.formControls, this.dynamicInputs); + this.onFormChanged.next(this.dynamicFormGroup); + this.dynamicFormGroup.valueChanges.subscribe(() => { + this.onFormChanged.next(this.dynamicFormGroup); + }) + } + } + + hasApiError(controlName: string, data: any[], form: FormGroup) { + if (!_.isNil(data)) { + if (!form.controls[controlName].disabled && data.length === 0) { + return true; + } + } + return false; + } +} + diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.spec.ts new file mode 100644 index 000000000..7a993cfa1 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.spec.ts @@ -0,0 +1,140 @@ + +import { TestBed, getTestBed} from '@angular/core/testing'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {GenericFormService} from './generic-form.service'; +import {FormBuilder, FormGroup} from '@angular/forms'; +import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../models/formControlModels/formControl.model"; +import {FormControlType} from "../../models/formControlModels/formControlTypes.enum"; + +describe('Generic Form Service', () => { + + let injector; + let service: GenericFormService; + let httpMock: HttpTestingController; + let form : FormGroup; + let fb : FormBuilder; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [GenericFormService, FormBuilder] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(GenericFormService); + httpMock = injector.get(HttpTestingController); + fb = injector.get(FormBuilder); + + })().then(done).catch(done.fail)); + + let controls : FormControlModel[] = [ + generateFormControlModel(FormControlType.INPUT, 'InputControlName','Test Value', false, generateFormValidators([ValidatorOptions.required])), + generateFormControlModel(FormControlType.INPUT, 'InputControlName_1', 'Test InputControlName_1', true, generateFormValidators([ValidatorOptions.required])), + generateFormControlModel(FormControlType.INPUT, 'InputControlName_2', 'Test InputControlName_2', false, [generateFormValidatorWithArg(ValidatorOptions.minLength, 4)]), + generateFormControlModel(FormControlType.INPUT, 'InputControlName_3', 'Exact 14 chars', false, [generateFormValidatorWithArg(ValidatorOptions.maxLength, 14)]), + generateFormControlModel(FormControlType.INPUT, 'InputControlName_4', 'Test pattern', false, [generateFormValidatorWithArg(ValidatorOptions.pattern, '^[a-zA-Z]+$')]) + ]; + + describe('generateFormBuilder', ()=> { + test('validators should work correct', () => { + const controlName: string = 'InputControlName'; + let form : FormGroup = service.generateFormBuilder(controls, []); + + expect(form instanceof FormGroup).toBeTruthy(); + expect(form.controls[controlName]).toBeDefined(); + expect(form.controls[controlName].value).toEqual('Test Value'); + expect(form.controls[controlName].disabled).toBeFalsy(); + expect(form.controls[controlName].valid).toBeTruthy(); + expect(form.controls[controlName].errors).toBeNull(); + + form.controls[controlName].setValue(''); + expect(form.controls[controlName].valid).toBeFalsy(); + expect(form.controls[controlName].errors.required).toBeTruthy(); + }); + + test('validators should prevent the value to appear', () => { + const controlName: string = 'InputControlName_1'; + let form : FormGroup = service.generateFormBuilder(controls, []); + + expect(form instanceof FormGroup).toBeTruthy(); + expect(form.controls[controlName]).toBeDefined(); + expect(form.controls[controlName].disabled).toBeTruthy(); + expect(form.controls[controlName].value).toEqual('Test InputControlName_1'); + expect(form.controls[controlName].errors).toBeNull(); + }); + + test('validators with minimum length args', () => { + const controlName: string = 'InputControlName_2'; + let form : FormGroup = service.generateFormBuilder(controls, []); + + expect(form instanceof FormGroup).toBeTruthy(); + expect(form.controls[controlName]).toBeDefined(); + expect(form.controls[controlName].disabled).toBeFalsy(); + expect(form.controls[controlName].value).toEqual('Test InputControlName_2'); + expect(form.controls[controlName].errors).toBeNull(); + + form.controls[controlName].setValue('123'); // less then 4 characters. -> error + expect(form.controls[controlName].errors.minlength).toBeDefined(); + form.controls[controlName].setValue('1234'); + expect(form.controls[controlName].errors).toBeNull(); + }); + + test('validators with maximum length args', () => { + const controlName: string = 'InputControlName_3'; + let form : FormGroup = service.generateFormBuilder(controls, []); + + expect(form instanceof FormGroup).toBeTruthy(); + expect(form.controls[controlName]).toBeDefined(); + expect(form.controls[controlName].disabled).toBeFalsy(); + expect(form.controls[controlName].value).toEqual('Exact 14 chars'); + expect(form.controls[controlName].errors).toBeNull(); + + form.controls[controlName].setValue('More than max length'); // more than max characters. -> error + expect(form.controls[controlName].errors.maxlength).toBeDefined(); + form.controls[controlName].setValue('Exact 14 chars'); + expect(form.controls[controlName].errors).toBeNull(); + }); + + test('pattern validator letters only', () => { + const controlName: string = 'InputControlName_4'; + let form : FormGroup = service.generateFormBuilder(controls, []); + + + expect(form.controls[controlName].errors.pattern).toBeDefined(); + form.controls[controlName].setValue('AAAAAAAA'); + expect(form.controls[controlName].errors).toBeNull(); + }); + }); + + + + function generateFormValidators(validatorsNames :ValidatorOptions[]){ + let validators : ValidatorModel[] = []; + for(let validatorName of validatorsNames){ + validators.push(new ValidatorModel(validatorName, 'error ' + validatorName)); + } + return validators; + } + + function generateFormValidatorWithArg(validatorName :ValidatorOptions, arg : any){ + return new ValidatorModel(validatorName, 'error ' + validatorName, arg); + } + + function generateFormControlModel(type : FormControlType, + controlName: string, + value: any, + isDisabled: boolean, + validations: ValidatorModel[]){ + let data : any = { + type : type, + isDisabled : isDisabled, + validations : validations, + value : value, + controlName :controlName + }; + + return new FormControlModel(data); + } +}); diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.ts b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.ts new file mode 100644 index 000000000..15089cafe --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.ts @@ -0,0 +1,54 @@ +import {Injectable} from '@angular/core'; +import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'; +import {FormControlModel} from "../../models/formControlModels/formControl.model"; +import * as _ from 'lodash'; + +@Injectable() +export class GenericFormService { + constructor(private _formBuilder: FormBuilder){} + + generateFormBuilder(controls : FormControlModel[], dynamicInputs : FormControlModel[]) : FormGroup { + let controlsList = {}; + if(!_.isNil(controls)){ + for(let control of controls){ + controlsList[control.controlName] = new FormControl( + { + value: _.isNil(control.value) ? null :control.value, + disabled: control.isDisabled + }, Validators.compose(control.validations.map(item => item.validator))); + } + } + + if(!_.isNil(dynamicInputs)){ + let dynamicControlsList = {}; + if(!_.isNil(dynamicInputs)){ + for(let control of dynamicInputs){ + dynamicControlsList[control.controlName] = new FormControl( + { + value: control.value ? control.value : null, + disabled: control.isDisabled + }, Validators.compose(control.validations.map(item => item.validator))); + } + } + controlsList['instanceParams'] = this._formBuilder.group(dynamicControlsList); + } + + + return this._formBuilder.group(controlsList); + } + + shouldDisplayValidationError(form: FormGroup, controlName : string): boolean{ + if(!_.isNil(form) && !_.isNil(form.controls[controlName])){ + if(!form.controls[controlName].touched){ + return false; + } else if(form.controls[controlName].disabled) { + return false + }else if(_.isNil(form.controls[controlName].errors)){ + return false; + }else { + return true; + } + } + return false; + } +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html new file mode 100644 index 000000000..57064f658 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html @@ -0,0 +1,70 @@ +<div id="instance-popup" class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" + class="close" + (click)="formPopupDetails?.onCancel(formPopupDetails.that,dynamicForm)" >× + </button> + <span [attr.data-tests-id]="'create-modal-title'" + class="modal-title">{{formPopupDetails?.title}} + </span> + </div> + <div class="modal-body popup-content"> + + <div class="header-left"> + <div>MODEL: <span>"{{formPopupDetails?.leftSubTitle}}"</span></div> + </div> + + <div class="header-right"> + {{formPopupDetails?.rightSubTitle}} + </div> + + + <label class="quantity-label" *ngIf="formPopupDetails?.UUIDData['type'] == 'service'">Qty:</label> + <div class="quantity" *ngIf="formPopupDetails?.UUIDData['type'] == 'service'"> + <select [disabled]="formPopupDetails?.UUIDData['isMacro'] !== true" + class="quantity-select" + [(ngModel)]="formPopupDetails.UUIDData['bulkSize']" + name="quantity" + id="quantity-select" + required> + <option *ngFor="let qty of quantityOptions" [value]="qty">{{qty}}</option> + </select> + </div> + + <div class="model-information"> + <model-information [modelInformationItems]="formPopupDetails?.modelInformationItems"></model-information> + </div> + + <div class="instance-form"> + <div style="position: relative;height: 100%;overflow: auto;"> + <label id="notification-area" *ngIf="shouldShowNotification() == true" style="color: #959595;font-size: 12px;left: 30px;margin-left: 30px;">Data entered will apply to all service instances</label> + <generic-form [formControls]="formPopupDetails?.formControlList" + [dynamicInputs]="formPopupDetails?.dynamicInputsControlList" + (onFormChanged)="dynamicForm = $event" ></generic-form> + </div> + </div> + + </div> + <div class="modal-footer row" style="padding: 0"> + <div class="col-md-6"> + <div *ngIf="hasSomeError(formPopupDetails, dynamicForm) == true"> + <form-general-error [message]="errorMsg"></form-general-error> + </div> + </div> + <div class="col-md-6" style="padding: 15px;padding-right: 35px;"> + <button + [attr.data-tests-id]="'cancelButton'" + type="button" class="btn btn-default cancel" + (click)="formPopupDetails.onCancel(formPopupDetails.that, dynamicForm)"><span>Cancel</span></button> + + <input type="submit" + value="Set" + data-tests-id="form-set" + class="btn btn-success submit" + [disabled]="!dynamicForm?.valid" + (click)="formPopupDetails.onSubmit(formPopupDetails.that, dynamicForm, servicesQty)"> + </div> + </div> + </div> +</div> diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.scss b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.scss new file mode 100644 index 000000000..5057b44a5 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.scss @@ -0,0 +1,182 @@ +$grid-border: 1px #d2d2d2 solid; + +#instance-popup { + color: #191919; + + .left-panel { + background: #f2f2f2; + border-right: $grid-border; + } + + .header-common { + height: 100%; + align-items: center; + display: flex; + font-family: OpenSans-Semibold; + font-size: 12px; + } + + .header-text { + padding-left: 30px; + @extend .header-common; + } + + .header-left { + grid-area: header-left; + @extend .header-text; + @extend .left-panel; + border-bottom: $grid-border; + + span { + font-family: OpenSans-Regular; + font-size: 14px; + }; + } + + .header-right { + grid-area: header-right; + + @extend .header-text; + } + + .quantity-label { + grid-area: quantity-label; + @extend .header-common; + height: 100%; + font-family: OpenSans-Regular; + } + .quantity { + grid-area: quantity; + border-left: $grid-border; + border-top-style: none; + font-family: OpenSans-Semibold; + text-align: start; + text-indent: 10px; + .quantity-select { + width: 78px; + height: 100%; + border: 0; + background: white; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: url('../../../../assets/img/chevron.svg') 0 0 no-repeat; + background-size: 24px; + background-position-x: right; + background-position-y: center; + } + } + + input[type="number"]:hover::-webkit-inner-spin-button { + height: 20px; + } + + .model-information { + grid-area: model-information; + border-top: $grid-border; + padding: 30px; + overflow: auto; + @extend .left-panel; + } + + .instance-form { + border-top: $grid-border; + grid-area: instance-form; + } + + .popup-content { + display: grid; + grid-template-columns: 400px auto 30px 93px; + grid-template-rows: 50px calc(100vh - 180px); + grid-template-areas: + "header-left header-right quantity-label quantity" + "model-information instance-form instance-form instance-form"; + padding: 0; + } +} + +.modal { + background-color: #191919; + opacity: 0.8; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0; +} +@media (min-width: 1150px) { + .popup-content { + grid-template-rows: 30px 680px; + } +} + +.modal-content { + border-radius: 0; + box-shadow: none; + border: none; +} + +.modal-footer { + .cancel { + width: 120px; + height: 36px; + background: #ffffff; + border: 1px solid #009fdb; + border-radius: 2px; + span { + font-family: OpenSans-Regular; + font-size: 14px; + color: #009fdb; + line-height: 16px; + } + } + + .submit { + width: 120px; + height: 36px; + background: #009fdb; + border-radius: 2px; + border-color: #009fdb; + span { + font-family: OpenSans-Regular; + font-size: 14px; + color: #FFFFFF; + line-height: 16px; + } + } +} + +.modal-header { + background-color: #009fdb; + + padding-bottom: 13px; + padding-top: 13px; + padding-left: 29px; + padding-right: 21px; + + .close { + font-size: 32px; + font-weight: 200; + color: #d8d8d8; + text-shadow: none; + filter: none; + opacity: 1; + } + + .modal-title { + font-family: OpenSans-Regular; + font-size: 24px; + color: #fff; + line-height: 34px; + } +} +// +//@media (min-width: 1200px) { +// .service-model, +// .service-instance { +// width: 1050px; +// margin: 30px auto; +// } +//} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts new file mode 100644 index 000000000..2b6417e33 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts @@ -0,0 +1,145 @@ +import {Component, OnChanges, OnDestroy, OnInit} from '@angular/core'; +import {FormPopupDetails} from "../../models/formControlModels/formPopupDetails.model"; +import {DialogComponent, DialogService} from "ng2-bootstrap-modal"; +import {FormGroup} from "@angular/forms"; +import {IframeService} from "../../utils/iframe.service"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import * as _ from "lodash"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../store/reducers"; +import {ServicePopupService} from "./genericFormServices/service/service.popup.service"; +import {ActivatedRoute} from "@angular/router"; +import {AaiService} from "../../services/aaiService/aai.service"; +import {GenericFormPopupService} from "./generic-form-popup.service"; +import {FormControlModel} from "../../models/formControlModels/formControl.model"; +import {FormGeneralErrorsService} from "../formGeneralErrors/formGeneralErrors.service"; + + +export interface PopupModel { + type : PopupType; + uuidData : UUIDData; + node : ITreeNode; + isUpdateMode : boolean; +} + +export enum PopupType{ + SERVICE = 'service', + VNF = 'vnf', + NETWORK = 'network', + VF_MODULE = 'vf_module', + VNF_GROUP = 'vnf_group' +} + + +@Component({ + selector : 'generic-form-popup', + templateUrl : 'generic-form-popup.component.html', + styleUrls : ['generic-form-popup.component.scss'] +}) + +export class GenericFormPopupComponent extends DialogComponent<PopupModel, boolean> implements OnInit, OnDestroy{ + formPopupDetails : FormPopupDetails = null; + dynamicForm : FormGroup; + type : PopupType; + uuidData : UUIDData; + isUpdateMode : boolean; + node : ITreeNode = null; + hasGeneralApiError : boolean = false; + parentElementClassName = 'content'; + errorMsg = 'Page contains errors. Please see details next to the relevant fields.'; + + servicesQty = 1; + quantityOptions = _.range(1, 51) + constructor(dialogService: DialogService , + private _iframeService : IframeService, + private _store: NgRedux<AppState>, + private _servicePopupService : ServicePopupService, + private _activatedRoute : ActivatedRoute, + private _aaiService : AaiService, + private _route: ActivatedRoute, + private _genericFormPopupService : GenericFormPopupService){ + super(dialogService); + } + + closeDialog(that) : void{ + this._iframeService.removeClassCloseModal(that.parentElementClassName); + this.dialogService.removeDialog(this); + setTimeout(() => { + window.parent.postMessage("closeIframe", "*"); + }, 15); + } + + shouldShowNotification() : boolean { + return this.formPopupDetails && this.formPopupDetails.UUIDData['bulkSize'] > 1 + } + + ngOnInit(): void { + this._route + .queryParams + .subscribe(params => { + console.log('changed'); + if(params['serviceModelId'] && params['isCreate']=="true"){ + this._genericFormPopupService.initReduxOnCreateNewService().then((serviceModelId : string)=>{ + this.uuidData = <any>{ + bulkSize : 1, + isMacro : this._store.getState().service.serviceHierarchy[serviceModelId].service.instantiationType === 'Macro', + type : PopupType.SERVICE, + serviceId: serviceModelId, + popupService: this._servicePopupService, + }; + + this.uuidData.popupService.closeDialogEvent.subscribe((that)=>{ + this.closeDialog(that); + }); + + this.formPopupDetails = this.uuidData.popupService.getGenericFormPopupDetails( + this.uuidData['serviceId'], + null, + null, + this.node, + this.uuidData, + false + ); + }); + } + }); + + FormGeneralErrorsService.checkForErrorTrigger.subscribe(()=>{ + this.hasSomeError(this.formPopupDetails, this.dynamicForm); + }); + + if(!_.isNil(this.uuidData)){ + this.uuidData.popupService.closeDialogEvent.subscribe((that)=>{ + this.closeDialog(that); + }); + + this.uuidData['isMacro'] = this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].service.instantiationType === 'Macro'; + this.formPopupDetails = this._genericFormPopupService.getGenericFormDetails(this.uuidData, this.node, this.isUpdateMode); + } + } + + hasSomeError(formPopupDetails : FormPopupDetails, form : FormGroup) : boolean{ + if(_.isNil(formPopupDetails)) return false; + else { + for(let controlName in form.controls){ + if(form.controls[controlName].errors){ + let error: string[] = Object.keys(form.controls[controlName].errors); + if(error.length === 1 && error[0] === 'required'){ + continue; + }else if(Object.keys(form.controls[controlName].errors).length > 0 ){ + return true; + } + } + } + } + + return formPopupDetails.formControlList.filter((item : FormControlModel) =>item.type === 'DROPDOWN' && item['hasEmptyOptions']).length > 0 + } +} + + +export class UUIDData extends Object{ + type : string; + popupService : any; +} + diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.spec.ts new file mode 100644 index 000000000..02e545569 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.spec.ts @@ -0,0 +1,1938 @@ +import {getTestBed, TestBed} from '@angular/core/testing'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {FormBuilder, FormGroup} from '@angular/forms'; +import {GenericFormPopupService} from "./generic-form-popup.service"; +import {IframeService} from "../../utils/iframe.service"; +import {NgRedux} from "@angular-redux/store"; +import {ServicePopupService} from "./genericFormServices/service/service.popup.service"; +import {BasicControlGenerator} from "../genericForm/formControlsServices/basic.control.generator"; +import {AaiService} from "../../services/aaiService/aai.service"; +import {ServiceControlGenerator} from "../genericForm/formControlsServices/service.control.generator"; +import {GenericFormService} from "../genericForm/generic-form.service"; +import {LogService} from "../../utils/log/log.service"; +import {DefaultDataGeneratorService} from "../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {BasicPopupService} from "./genericFormServices/basic.popup.service"; +import {ActivatedRoute} from "@angular/router"; +import {UUIDData} from "./generic-form-popup.component"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {NetworkPopupService} from "./genericFormServices/network/network.popup.service"; +import {NetworkControlGenerator} from "../genericForm/formControlsServices/networkGenerator/network.control.generator"; +import {VfModulePopuopService} from "./genericFormServices/vfModule/vfModule.popuop.service"; +import {VfModuleControlGenerator} from "../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator"; +import {FeatureFlagsService} from "../../services/featureFlag/feature-flags.service"; + +class MockAppStore<T>{ + getState() { + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "serviceEcompNaming" : "true", + "properties": { + "ecomp_generated_naming": "false", + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "ecomp_generated_naming": "false", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "networks": {}, + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [ + {} + ], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "instanceParams": [ + {} + ], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": { + "d6557200-ecf2-4641-8094-5393ae3aae60": 1 + }, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isEcompGeneratedNaming": true, + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [ + { + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, + { + "id": "hvf6", + "name": "hvf6", + "isPermitted": true + } + ], + "lcpRegionsTenantsMap": { + "JANET25": [ + { + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + } + ], + "hvf6": [ + { + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, + { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, + { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, + { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, + { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, + { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, + { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, + { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, + { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, + { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, + { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, + { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, + { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, + { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, + { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, + { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, + { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, + { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, + { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, + { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, + { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, + { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, + { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, + { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, + { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, + { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, + { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, + { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, + { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, + { + "id": "cbb99fe4ada84631b7baf046b6fd2044", + "name": "DN5242-Nov16-T3", + "isPermitted": true + } + ] + } + }, + "productFamilies": [ + { + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, + { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, + { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, + { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, + { + "id": "vTerrance", + "name": "vTerrance", + "isPermitted": true + }, + { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, + { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, + { + "id": "db171b8f-115c-4992-a2e3-ee04cae357e0", + "name": "LINDSEY", + "isPermitted": true + }, + { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, + { + "id": "vRosemarie", + "name": "HNGATEWAY", + "isPermitted": true + }, + { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", + "name": "VROUTER", + "isPermitted": true + }, + { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, + { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, + { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, + { + "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", + "name": "Transport", + "isPermitted": true + }, + { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, + { + "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", + "name": "Josefina", + "isPermitted": true + }, + { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, + { + "id": "12a96a9d-4b4c-4349-a950-fe1159602621", + "name": "DARREN MCGEE", + "isPermitted": true + } + ], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [ + { + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, + { + "id": "1", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "3", + "name": "vJamie", + "isPermitted": false + }, + { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, + { + "id": "5", + "name": "Kennedy", + "isPermitted": false + }, + { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, + { + "id": "7", + "name": "vVM", + "isPermitted": false + }, + { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, + { + "id": "9", + "name": "vMME", + "isPermitted": false + }, + { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, + { + "id": "11", + "name": "vSCP", + "isPermitted": false + }, + { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, + { + "id": "13", + "name": "vMMSC", + "isPermitted": false + }, + { + "id": "14", + "name": "SSD", + "isPermitted": false + }, + { + "id": "15", + "name": "vMOG", + "isPermitted": false + }, + { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, + { + "id": "17", + "name": "JOHANNA_SANTOS", + "isPermitted": false + }, + { + "id": "18", + "name": "vCarroll", + "isPermitted": false + } + ] + }, + "aicZones": [ + { + "id": "NFT1", + "name": "NFTJSSSS-NFT1" + }, + { + "id": "JAG1", + "name": "YUDFJULP-JAG1" + }, + { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, + { + "id": "BAN1", + "name": "VSDKYUTP-BAN1" + }, + { + "id": "DKJ1", + "name": "DKJSJDKA-DKJ1" + }, + { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, + { + "id": "UIO1", + "name": "uioclli1-UIO1" + }, + { + "id": "RAJ1", + "name": "YGBIJNLQ-RAJ1" + }, + { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, + { + "id": "SDE1", + "name": "ZXCVBNMA-SDE1" + }, + { + "id": "VEN2", + "name": "FGHJUHIL-VEN2" + }, + { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, + { + "id": "JAD1", + "name": "JADECLLI-JAD1" + }, + { + "id": "ZXL1", + "name": "LWLWCANN-ZXL1" + }, + { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, + { + "id": "SDF1", + "name": "sdfclli1-SDF1" + }, + { + "id": "RAD1", + "name": "RADICAL1-RAD1" + }, + { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, + { + "id": "REL1", + "name": "INGERFGT-REL1" + }, + { + "id": "JNL1", + "name": "CJALSDAC-JNL1" + }, + { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, + { + "id": "CHI1", + "name": "CHILLIWE-CHI1" + }, + { + "id": "UUU4", + "name": "UUUAAAUU-UUU4" + }, + { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, + { + "id": "KJN1", + "name": "CKALDKSA-KJN1" + }, + { + "id": "SAM1", + "name": "SNDGCA64-SAN1" + }, + { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, + { + "id": "HJH1", + "name": "AOEEQQQD-HJH1" + }, + { + "id": "HGD1", + "name": "SDFQWHGD-HGD1" + }, + { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, + { + "id": "ATL43", + "name": "AICLOCID-ATL43" + }, + { + "id": "ATL54", + "name": "AICFTAAI-ATL54" + }, + { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, + { + "id": "VEL1", + "name": "BNMLKUIK-VEL1" + }, + { + "id": "ICC1", + "name": "SANJITAT-ICC1" + }, + { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, + { + "id": "DEF2", + "name": "WSBHGTYL-DEF2" + }, + { + "id": "MAD11", + "name": "SDFQWGKL-MAD11" + }, + { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, + { + "id": "GAR1", + "name": "NGFVSJKO-GAR1" + }, + { + "id": "SAN22", + "name": "GNVLSCTL-SAN22" + }, + { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, + { + "id": "JCS1", + "name": "JCSJSCJS-JCS1" + }, + { + "id": "DHA12", + "name": "WSXEDECF-DHA12" + }, + { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, + { + "id": "NCA1", + "name": "NCANCANN-NCA1" + }, + { + "id": "IOP1", + "name": "iopclli1-IOP1" + }, + { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, + { + "id": "KAP1", + "name": "HIOUYTRQ-KAP1" + }, + { + "id": "ZEN1", + "name": "ZENCLLI1-ZEN1" + }, + { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, + { + "id": "CQK1", + "name": "CQKSCAKK-CQK1" + }, + { + "id": "SAI1", + "name": "UBEKQLPD-SAI1" + }, + { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, + { + "id": "IBB1", + "name": "PLMKOIJU-IBB1" + }, + { + "id": "TIR2", + "name": "PLKINHYI-TIR2" + }, + { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, + { + "id": "SLF78", + "name": "SDCTLFN1-SLF78" + }, + { + "id": "SEE78", + "name": "SDCTEEE4-SEE78" + }, + { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, + { + "id": "SAA78", + "name": "SDCTAAA1-SAA78" + }, + { + "id": "LUC1", + "name": "ATLDFGYC-LUC1" + }, + { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, + { + "id": "TOR1", + "name": "TOROONXN-TOR1" + }, + { + "id": "QWE1", + "name": "QWECLLI1-QWE1" + }, + { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, + { + "id": "CAL33", + "name": "CALIFORN-CAL33" + }, + { + "id": "SHH78", + "name": "SDIT1HHH-SHH78" + }, + { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, + { + "id": "CLG1", + "name": "CLGRABAD-CLG1" + }, + { + "id": "BNA1", + "name": "BNARAGBK-BNA1" + }, + { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, + { + "id": "APP1", + "name": "WBHGTYUI-APP1" + }, + { + "id": "RJN1", + "name": "RJNRBZAW-RJN1" + }, + { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, + { + "id": "mac10", + "name": "PKGTESTF-mac10" + }, + { + "id": "SXB78", + "name": "SDCTGXB1-SXB78" + }, + { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, + { + "id": "SYD1", + "name": "SYDNAUBV-SYD1" + }, + { + "id": "TOK1", + "name": "TOKYJPFA-TOK1" + }, + { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, + { + "id": "DCC1b", + "name": "POIUYTGH-DCC1b" + }, + { + "id": "SKK78", + "name": "SDCTKKK1-SKK78" + }, + { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, + { + "id": "SJJ78", + "name": "SDCTJJJ1-SJJ78" + }, + { + "id": "SBX78", + "name": "SDCTBXG1-SBX78" + }, + { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, + { + "id": "IAA1", + "name": "QAZXSWED-IAA1" + }, + { + "id": "POI1", + "name": "PLMNJKIU-POI1" + }, + { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, + { + "id": "PBL1", + "name": "PBLAPBAI-PBL1" + }, + { + "id": "LAG45", + "name": "LARGIZON-LAG1a" + }, + { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, + { + "id": "HST70", + "name": "HSTNTX70-HST70" + }, + { + "id": "DCC1a", + "name": "POIUYTGH-DCC1a" + }, + { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, + { + "id": "LON1", + "name": "LONEENCO-LON1" + }, + { + "id": "SJU78", + "name": "SDIT1JUB-SJU78" + }, + { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, + { + "id": "SSW56", + "name": "ss8126GT-SSW56" + }, + { + "id": "SBB78", + "name": "SDIT1BBB-SBB78" + }, + { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, + { + "id": "GNV1", + "name": "GNVLSCTL-GNV1" + }, + { + "id": "WAS1", + "name": "WASHDCSW-WAS1" + }, + { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, + { + "id": "STT1", + "name": "STTLWA02-STT1" + }, + { + "id": "STG1", + "name": "STTGGE62-STG1" + }, + { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, + { + "id": "SBU78", + "name": "SDIT1BUB-SBU78" + }, + { + "id": "ATL2", + "name": "ATLNGANW-ATL2" + }, + { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, + { + "id": "SNG1", + "name": "SNGPSIAU-SNG1" + }, + { + "id": "NYC1", + "name": "NYCMNY54-NYC1" + }, + { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, + { + "id": "AMD15", + "name": "AMDFAA01-AMD15" + }, + { + "id": "SNA1", + "name": "SNANTXCA-SNA1" + }, + { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, + { + "id": "TLP1", + "name": "TLPNXM18-TLP1" + }, + { + "id": "SDD81", + "name": "SAIT1DD6-SDD81" + }, + { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, + { + "id": "DCC2", + "name": "POIUYTGH-DCC2" + }, + { + "id": "OKC1", + "name": "OKCBOK55-OKC1" + }, + { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, + { + "id": "TES36", + "name": "ABCEETES-TES36" + }, + { + "id": "COM1", + "name": "PLMKOPIU-COM1" + }, + { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, + { + "id": "SDG78", + "name": "SDIT1BDG-SDG78" + }, + { + "id": "mac20", + "name": "PKGTESTF-mac20" + }, + { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, + { + "id": "HST25", + "name": "HSTNTX01-HST25" + }, + { + "id": "AMD18", + "name": "AUDIMA01-AMD18" + }, + { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, + { + "id": "SSA56", + "name": "SSIT2AA7-SSA56" + }, + { + "id": "SDD82", + "name": "SAIT1DD9-SDD82" + }, + { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, + { + "id": "SUL2", + "name": "WERTYUJK-SUL2" + }, + { + "id": "PUR1", + "name": "purelyde-PUR1" + }, + { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, + { + "id": "SITE", + "name": "LONEENCO-SITE" + }, + { + "id": "ATL1", + "name": "ATLNGAMA-ATL1" + }, + { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, + { + "id": "TAT34", + "name": "TESAAISB-TAT34" + }, + { + "id": "XCP12", + "name": "CHKGH123-XCP12" + }, + { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, + { + "id": "HPO1", + "name": "ATLNGAUP-HPO1" + }, + { + "id": "KJF12", + "name": "KJFDH123-KJF12" + }, + { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, + { + "id": "SAA12", + "name": "SAIT9AF8-SAA12" + }, + { + "id": "SAA14", + "name": "SAIT1AA9-SAA14" + }, + { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, + { + "id": "CWY1", + "name": "CWYMOWBS-CWY1" + }, + { + "id": "ATL76", + "name": "TELEPAAI-ATL76" + }, + { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, + { + "id": "ATL53", + "name": "AAIATLTE-ATL53" + }, + { + "id": "SAA11", + "name": "SAIT9AA2-SAA11" + }, + { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, + { + "id": "AUG1", + "name": "ASDFGHJK-AUG1" + }, + { + "id": "POI22", + "name": "POIUY123-POI22" + }, + { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, + { + "id": "BHY17", + "name": "BHYTFRF3-BHY17" + }, + { + "id": "LIS1", + "name": "HOSTPROF-LIS1" + }, + { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, + { + "id": "ATL99", + "name": "TEESTAAI-ATL43" + }, + { + "id": "ATL64", + "name": "FORLOAAJ-ATL64" + }, + { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, + { + "id": "RAD10", + "name": "INDIPUNE-RAD10" + }, + { + "id": "RTW5", + "name": "BHYTFRY4-RTW5" + }, + { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, + { + "id": "ATL98", + "name": "TEESTAAI-ATL43" + }, + { + "id": "WAN1", + "name": "LEIWANGW-WAN1" + }, + { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, + { + "id": "RTD2", + "name": "BHYTFRk4-RTD2" + }, + { + "id": "NIR1", + "name": "ORFLMANA-NIR1" + }, + { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, + { + "id": "NUM1", + "name": "QWERTYUI-NUM1" + }, + { + "id": "MTN32", + "name": "MDTWNJ21-MTN32" + }, + { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, + { + "id": "ATL56", + "name": "ATLSANAC-ATL56" + }, + { + "id": "AMS1", + "name": "AMSTNLBW-AMS1" + }, + { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, + { + "id": "JAN1", + "name": "ORFLMATT-JAN1" + }, + { + "id": "ABC14", + "name": "TESAAISA-ABC14" + }, + { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, + { + "id": "MIC54", + "name": "MICHIGAN-MIC54" + }, + { + "id": "ABC11", + "name": "ATLSANAI-ABC11" + }, + { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, + { + "id": "ATL63", + "name": "ATLSANEW-ATL63" + }, + { + "id": "ABC12", + "name": "ATLSECIA-ABC12" + }, + { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, + { + "id": "ABC15", + "name": "AAITESAN-ABC15" + }, + { + "id": "AVT1", + "name": "AVTRFLHD-AVT1" + }, + { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + } + ], + "categoryParameters": { + "owningEntityList": [ + { + "id": "aaa1", + "name": "aaa1" + }, + { + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, + { + "id": "Melissa", + "name": "Melissa" + } + ], + "projectList": [ + { + "id": "WATKINS", + "name": "WATKINS" + }, + { + "id": "x1", + "name": "x1" + }, + { + "id": "yyy1", + "name": "yyy1" + } + ], + "lineOfBusinessList": [ + { + "id": "ONAP", + "name": "ONAP" + }, + { + "id": "zzz1", + "name": "zzz1" + } + ], + "platformList": [ + { + "id": "platform", + "name": "platform" + }, + { + "id": "xxx1", + "name": "xxx1" + } + ] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } + } + } +} +class ActivatedRouteMock<T>{ + queryParams() { + return { + serviceModelId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44' + } + } +} + +class MockFeatureFlagsService {} + +describe('Generic Form popup Service', () => { + let injector; + let service: GenericFormPopupService; + let httpMock: HttpTestingController; + let form : FormGroup; + let fb : FormBuilder; + let netwokPopupService : NetworkPopupService; + let vfModulePopupService : VfModulePopuopService; + let servicePopupService : ServicePopupService; + let _aaiService : AaiService; + let _activatedRoute : ActivatedRoute; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [GenericFormPopupService, + FormBuilder, + IframeService, + ServicePopupService, + BasicControlGenerator, + ServiceControlGenerator, + GenericFormService, + LogService, + DefaultDataGeneratorService, + BasicPopupService, + AaiService, + NetworkPopupService, + NetworkControlGenerator, + VfModulePopuopService, + VfModuleControlGenerator, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: ActivatedRoute, useClass: ActivatedRouteMock}, + {provide: NgRedux, useClass: MockAppStore}] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(GenericFormPopupService); + httpMock = injector.get(HttpTestingController); + fb = injector.get(FormBuilder); + netwokPopupService = injector.get(NetworkPopupService); + vfModulePopupService = injector.get(VfModulePopuopService); + servicePopupService = injector.get(ServicePopupService); + _aaiService = injector.get(AaiService); + _activatedRoute = injector.get(ActivatedRoute); + + })().then(done).catch(done.fail)); + + + test('VL: getGenericFormDetails should return FormPopupDetails', () => { + let uuidData : UUIDData = <any>{ + type : 'VL', + serviceId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44', + networkId : 'ExtVL 0', + networkStoreKey : 'ExtVL 0', + popupService : netwokPopupService + }; + let node : ITreeNode = <any>{data : {} }; + + jest.spyOn(uuidData.popupService ,'getGenericFormPopupDetails'); + service.getGenericFormDetails(uuidData, node,true); + + expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledTimes(1); + expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledWith(uuidData['serviceId'], + uuidData['networkId'], + uuidData['networkStoreKey'], + node, + uuidData, + true + ); + }); + + test('VFmodule: getGenericFormDetails should return FormPopupDetails', () => { + let uuidData : UUIDData = <any>{ + type : 'VFmodule', + serviceId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44', + vnfStoreKey : 'VF_vMee 0', + vFModuleStoreKey : 'vf_vmee0..VfVmee..vmme_vlc..module-1', + popupService : vfModulePopupService + }; + let node : ITreeNode = <any>{data : {}}; + + spyOn(uuidData.popupService ,'getGenericFormPopupDetails'); + service.getGenericFormDetails(uuidData, node,true); + + expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledTimes(1) + expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledWith( + uuidData['serviceId'], + uuidData['vnfStoreKey'], + uuidData['vFModuleStoreKey'], + node, + uuidData, + true + ); + }); + + + test('service: getGenericFormDetails should return FormPopupDetails', () => { + let uuidData : UUIDData = <any>{ + type : 'service', + serviceId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44', + popupService : servicePopupService + }; + let node : ITreeNode = <any>{data : {}}; + + jest.spyOn(uuidData.popupService ,'getGenericFormPopupDetails'); + service.getGenericFormDetails(uuidData, node,true); + + expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledTimes(1); + expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledWith( + uuidData['serviceId'], + null, + null, + node, + uuidData, + true + ); + }); + + + test('initReduxOnCreateNewService',() => { + jest.spyOn(_aaiService, 'getServiceModelById'); + service.initReduxOnCreateNewService(); + }) +}); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.ts new file mode 100644 index 000000000..6636a54f2 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.ts @@ -0,0 +1,93 @@ +import {Injectable} from "@angular/core"; +import {IframeService} from "../../utils/iframe.service"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../store/reducers"; +import {ServicePopupService} from "./genericFormServices/service/service.popup.service"; +import {ActivatedRoute} from "@angular/router"; +import {AaiService} from "../../services/aaiService/aai.service"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {UUIDData} from "./generic-form-popup.component"; +import {FormPopupDetails} from "../../models/formControlModels/formPopupDetails.model"; +import {Subject} from "rxjs"; +import {deleteAllServiceInstances} from "../../storeUtil/utils/service/service.actions"; + +@Injectable() +export class GenericFormPopupService { + constructor(private _iframeService : IframeService, + private _store: NgRedux<AppState>, + private _servicePopupService : ServicePopupService, + public _activatedRoute : ActivatedRoute, + private _aaiService : AaiService){ + + } + getGenericFormDetails(uuidData : UUIDData, node : ITreeNode, isUpdateMode : boolean) : FormPopupDetails { + switch (uuidData.type){ + case 'VL' : { + return uuidData.popupService.getGenericFormPopupDetails( + uuidData['serviceId'], + uuidData['networkId'], + uuidData['networkStoreKey'], + node, + uuidData, + isUpdateMode + ); + } + case 'VFmodule' : { + return uuidData.popupService.getGenericFormPopupDetails( + uuidData['serviceId'], + uuidData['vnfStoreKey'], + uuidData['vFModuleStoreKey'], + node, + uuidData, + isUpdateMode + ); + } + case 'VF' : { + return uuidData.popupService.getGenericFormPopupDetails( + uuidData['serviceId'], + uuidData['modelName'], + uuidData['vnfStoreKey'], + node, + uuidData, + isUpdateMode + ); + } + case 'VnfGroup' : { + return uuidData.popupService.getGenericFormPopupDetails( + uuidData['serviceId'], + uuidData['modelName'], + uuidData['vnfGroupStoreKey'], + node, + uuidData, + isUpdateMode + ); + } + case 'service' : { + uuidData['bulkSize'] = this._store.getState().service.serviceInstance[uuidData['serviceId']].bulkSize || 1; + return uuidData.popupService.getGenericFormPopupDetails( + uuidData['serviceId'], + null, + null, + node, + uuidData, + isUpdateMode + ); + } + } + } + + initReduxOnCreateNewService() : Promise<string> { + return new Promise((resolve, reject) => { + this._activatedRoute + .queryParams + .subscribe(params => { + this._store.dispatch(deleteAllServiceInstances()); + this._aaiService.getServiceModelById(params.serviceModelId).subscribe(()=>{ + resolve(params.serviceModelId); + }); + }); + }); + } + + refreshModalCheckForGeneralErrorTrigger : Subject<boolean> = new Subject<boolean>(); +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.spec.ts new file mode 100644 index 000000000..521e5fb59 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.spec.ts @@ -0,0 +1,92 @@ +import {NetworkPopupService} from "./network/network.popup.service"; +import {LogService} from "../../../utils/log/log.service"; +import {ReflectiveInjector} from "@angular/core"; +import {NgRedux} from "@angular-redux/store"; +import {BasicControlGenerator} from "../../genericForm/formControlsServices/basic.control.generator"; +import {AaiService} from "../../../services/aaiService/aai.service"; +import {HttpClient} from "@angular/common/http"; +import {NetworkControlGenerator} from "../../genericForm/formControlsServices/networkGenerator/network.control.generator"; +import {GenericFormService} from "../../genericForm/generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import {IframeService} from "../../../utils/iframe.service"; +import {DefaultDataGeneratorService} from "../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {FormControlModel} from "../../../models/formControlModels/formControl.model"; +import {BasicPopupService} from "./basic.popup.service"; +import {SdcUiServices} from "onap-ui-angular"; +import {FeatureFlagsService} from "../../../services/featureFlag/feature-flags.service"; +import {getTestBed, TestBed} from "@angular/core/testing"; + +class MockAppStore<T> {} + +class MockModalService<T> {} + +class MockFeatureFlagsService {} + +class MockReduxStore<T> { + getState() { + return {"global":{"name":null,"flags":{"FLAG_NETWORK_TO_ASYNC_INSTANTIATION":false,"FLAG_SHOW_ASSIGNMENTS":true,"FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS":true,"FLAG_UNASSIGN_SERVICE":true,"FLAG_SHOW_VERIFY_SERVICE":false,"FLAG_COLLECTION_RESOURCE_SUPPORT":true,"FLAG_DUPLICATE_VNF":true,"FLAG_SERVICE_MODEL_CACHE":true,"FLAG_ADVANCED_PORTS_FILTER":true,"CREATE_INSTANCE_TEST":false,"FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD":false,"FLAG_REGION_ID_FROM_REMOTE":true,"FLAG_ASYNC_INSTANTIATION":true,"FLAG_ASYNC_JOBS":true,"EMPTY_DRAWING_BOARD_TEST":false,"FLAG_ADD_MSO_TESTAPI_FIELD":true},"type":"[FLAGS] Update"},"service":{"serviceHierarchy":{"6e59c5de-f052-46fa-aa7e-2fca9d674c44":{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Emanuel","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"false","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"max_instances":10,"min_instances":1,"gpb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:11:22:EF:AC:DF","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"10.0.0.10","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"10.0.0.10","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"false","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:11:22:EF:AC:DF","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_oam":"management","multi_stage_design":"true","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"10.0.0.10","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"10.0.0.10","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":true},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":true},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}},"6b528779-44a3-4472-bdff-9cd15ec93450":{"service":{"uuid":"6b528779-44a3-4472-bdff-9cd15ec93450","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"action-data","version":"1.0","toscaModelURL":null,"category":"","serviceType":"","serviceRole":"","description":"","serviceEcompNaming":"false","instantiationType":"A-La-Carte","inputs":{"2017488_adiodvpe0_ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"}}},"vnfs":{"2017-388_ADIOD-vPE 1":{"uuid":"0903e1c0-8e03-4936-b5c2-260653b96413","invariantUuid":"00beb8f9-6d39-452f-816d-c709b9cbb87d","description":"Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM","name":"2017-388_ADIOD-vPE","version":"1.0","customizationUuid":"280dec31-f16d-488b-9668-4aae55d6648a","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{"vnf_config_template_version":{"displayName":"vnf_config_template_version","command":"get_input","inputName":"2017488_adiodvpe0_vnf_config_template_version"},"bandwidth_units":{"displayName":"bandwidth_units","command":"get_input","inputName":"adiodvpe0_bandwidth_units"},"bandwidth":{"displayName":"bandwidth","command":"get_input","inputName":"adiodvpe0_bandwidth"},"AIC_CLLI":{"displayName":"AIC_CLLI","command":"get_input","inputName":"2017488_adiodvpe0_AIC_CLLI"},"ASN":{"displayName":"ASN","command":"get_input","inputName":"2017488_adiodvpe0_ASN"},"vnf_instance_name":{"displayName":"vnf_instance_name","command":"get_input","inputName":"2017488_adiodvpe0_vnf_instance_name"}},"properties":{"vmxvre_retype":"RE-VMX","vnf_config_template_version":"get_input:2017488_adiodvpe0_vnf_config_template_version","sriov44_net_id":"48d399b3-11ee-48a8-94d2-f0ea94d6be8d","int_ctl_net_id":"2f323477-6936-4d01-ac53-d849430281d9","vmxvpfe_sriov41_0_port_mac":"00:11:22:EF:AC:DF","int_ctl_net_name":"VMX-INTXI","vmx_int_ctl_prefix":"10.0.0.10","sriov43_net_id":"da349ca1-6de9-4548-be88-2d88e99bfef5","sriov42_net_id":"760669ba-013d-4d9b-b0e7-4151fe2e6279","sriov41_net_id":"25ad52d5-c165-40f8-b3b0-ddfc2373280a","nf_type":"vPE","vmxvpfe_int_ctl_ip_1":"10.0.0.10","is_AVPN_service":"false","vmx_RSG_name":"vREXI-affinity","vmx_int_ctl_forwarding":"l2","vmxvre_oam_ip_0":"10.0.0.10","vmxvpfe_sriov44_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_sriov41_0_port_vlanstrip":"false","vmxvpfe_sriov42_0_port_vlanfilter":"4001","vmxvpfe_sriov44_0_port_unknownunicastallow":"true","vmxvre_image_name_0":"VRE-ENGINE_17.2-S2.1.qcow2","vmxvre_instance":"0","vmxvpfe_sriov43_0_port_mac":"00:11:22:EF:AC:DF","vmxvre_flavor_name":"ns.c1r16d32.v5","vmxvpfe_volume_size_0":"40.0","vmxvpfe_sriov43_0_port_vlanfilter":"4001","nf_naming":"{ecomp_generated_naming=false}","nf_naming_code":"Navneet","vmxvre_name_0":"vREXI","vmxvpfe_sriov42_0_port_vlanstrip":"false","vmxvpfe_volume_name_0":"vPFEXI_FBVolume","vmx_RSG_id":"bd89a33c-13c3-4a04-8fde-1a57eb123141","vmxvpfe_image_name_0":"VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2","vmxvpfe_sriov43_0_port_unknownunicastallow":"true","vmxvpfe_sriov44_0_port_unknownmulticastallow":"true","vmxvre_console":"vidconsole","vmxvpfe_sriov44_0_port_vlanfilter":"4001","vmxvpfe_sriov42_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_volume_id_0":"47cede15-da2f-4397-a101-aa683220aff3","vmxvpfe_sriov42_0_port_unknownmulticastallow":"true","vmxvpfe_sriov44_0_port_vlanstrip":"false","vf_module_id":"123","nf_function":"JAI","vmxvpfe_sriov43_0_port_unknownmulticastallow":"true","vmxvre_int_ctl_ip_0":"10.0.0.10","ecomp_generated_naming":"false","AIC_CLLI":"get_input:2017488_adiodvpe0_AIC_CLLI","vnf_name":"mtnj309me6vre","vmxvpfe_sriov41_0_port_unknownunicastallow":"true","vmxvre_volume_type_1":"HITACHI","vmxvpfe_sriov44_0_port_broadcastallow":"true","vmxvre_volume_type_0":"HITACHI","vmxvpfe_volume_type_0":"HITACHI","vmxvpfe_sriov43_0_port_broadcastallow":"true","bandwidth_units":"get_input:adiodvpe0_bandwidth_units","vnf_id":"123","vmxvre_oam_prefix":"24","availability_zone_0":"mtpocfo-kvm-az01","ASN":"get_input:2017488_adiodvpe0_ASN","vmxvre_chassis_i2cid":"161","vmxvpfe_name_0":"vPFEXI","bandwidth":"get_input:adiodvpe0_bandwidth","availability_zone_max_count":"1","vmxvre_volume_size_0":"45.0","vmxvre_volume_size_1":"50.0","vmxvpfe_sriov42_0_port_broadcastallow":"true","vmxvre_oam_gateway":"10.0.0.10","vmxvre_volume_name_1":"vREXI_FAVolume","vmxvre_ore_present":"0","vmxvre_volume_name_0":"vREXI_FBVolume","vmxvre_type":"0","vnf_instance_name":"get_input:2017488_adiodvpe0_vnf_instance_name","vmxvpfe_sriov41_0_port_unknownmulticastallow":"true","oam_net_id":"b95eeb1d-d55d-4827-abb4-8ebb94941429","vmx_int_ctl_len":"24","vmxvpfe_sriov43_0_port_vlanstrip":"false","vmxvpfe_sriov41_0_port_broadcastallow":"true","vmxvre_volume_id_1":"6e86797e-03cd-4fdc-ba72-2957119c746d","vmxvpfe_sriov41_0_port_vlanfilter":"4001","nf_role":"Testing","vmxvre_volume_id_0":"f4eacb79-f687-4e9d-b760-21847c8bb15a","vmxvpfe_sriov42_0_port_unknownunicastallow":"true","vmxvpfe_flavor_name":"ns.c20r16d25.v5"},"type":"VF","modelCustomizationName":"2017-388_ADIOD-vPE 1","vfModules":{},"volumeGroups":{},"vfcInstanceGroups":{}},"2017-388_ADIOD-vPE 0":{"uuid":"afacccf6-397d-45d6-b5ae-94c39734b168","invariantUuid":"72e465fe-71b1-4e7b-b5ed-9496118ff7a8","description":"Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM","name":"2017-388_ADIOD-vPE","version":"4.0","customizationUuid":"b3c76f73-eeb5-4fb6-9d31-72a889f1811c","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{"vnf_config_template_version":{"displayName":"vnf_config_template_version","command":"get_input","inputName":"2017488_adiodvpe0_vnf_config_template_version"},"bandwidth_units":{"displayName":"bandwidth_units","command":"get_input","inputName":"adiodvpe0_bandwidth_units"},"bandwidth":{"displayName":"bandwidth","command":"get_input","inputName":"adiodvpe0_bandwidth"},"AIC_CLLI":{"displayName":"AIC_CLLI","command":"get_input","inputName":"2017488_adiodvpe0_AIC_CLLI"},"ASN":{"displayName":"ASN","command":"get_input","inputName":"2017488_adiodvpe0_ASN"},"vnf_instance_name":{"displayName":"vnf_instance_name","command":"get_input","inputName":"2017488_adiodvpe0_vnf_instance_name"}},"properties":{"vmxvre_retype":"RE-VMX","vnf_config_template_version":"get_input:2017488_adiodvpe0_vnf_config_template_version","sriov44_net_id":"48d399b3-11ee-48a8-94d2-f0ea94d6be8d","int_ctl_net_id":"2f323477-6936-4d01-ac53-d849430281d9","vmxvpfe_sriov41_0_port_mac":"00:11:22:EF:AC:DF","int_ctl_net_name":"VMX-INTXI","vmx_int_ctl_prefix":"10.0.0.10","sriov43_net_id":"da349ca1-6de9-4548-be88-2d88e99bfef5","sriov42_net_id":"760669ba-013d-4d9b-b0e7-4151fe2e6279","sriov41_net_id":"25ad52d5-c165-40f8-b3b0-ddfc2373280a","nf_type":"vPE","vmxvpfe_int_ctl_ip_1":"10.0.0.10","is_AVPN_service":"false","vmx_RSG_name":"vREXI-affinity","vmx_int_ctl_forwarding":"l2","vmxvre_oam_ip_0":"10.0.0.10","vmxvpfe_sriov44_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_sriov41_0_port_vlanstrip":"false","vmxvpfe_sriov42_0_port_vlanfilter":"4001","vmxvpfe_sriov44_0_port_unknownunicastallow":"true","vmxvre_image_name_0":"VRE-ENGINE_17.2-S2.1.qcow2","vmxvre_instance":"0","vmxvpfe_sriov43_0_port_mac":"00:11:22:EF:AC:DF","vmxvre_flavor_name":"ns.c1r16d32.v5","vmxvpfe_volume_size_0":"40.0","vmxvpfe_sriov43_0_port_vlanfilter":"4001","nf_naming":"{ecomp_generated_naming=false}","nf_naming_code":"Navneet","vmxvre_name_0":"vREXI","vmxvpfe_sriov42_0_port_vlanstrip":"false","vmxvpfe_volume_name_0":"vPFEXI_FBVolume","vmx_RSG_id":"bd89a33c-13c3-4a04-8fde-1a57eb123141","vmxvpfe_image_name_0":"VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2","vmxvpfe_sriov43_0_port_unknownunicastallow":"true","vmxvpfe_sriov44_0_port_unknownmulticastallow":"true","vmxvre_console":"vidconsole","vmxvpfe_sriov44_0_port_vlanfilter":"4001","vmxvpfe_sriov42_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_volume_id_0":"47cede15-da2f-4397-a101-aa683220aff3","vmxvpfe_sriov42_0_port_unknownmulticastallow":"true","min_instances":"1","vmxvpfe_sriov44_0_port_vlanstrip":"false","vf_module_id":"123","nf_function":"JAI","vmxvpfe_sriov43_0_port_unknownmulticastallow":"true","vmxvre_int_ctl_ip_0":"10.0.0.10","ecomp_generated_naming":"false","AIC_CLLI":"get_input:2017488_adiodvpe0_AIC_CLLI","vnf_name":"mtnj309me6vre","vmxvpfe_sriov41_0_port_unknownunicastallow":"true","vmxvre_volume_type_1":"HITACHI","vmxvpfe_sriov44_0_port_broadcastallow":"true","vmxvre_volume_type_0":"HITACHI","vmxvpfe_volume_type_0":"HITACHI","vmxvpfe_sriov43_0_port_broadcastallow":"true","bandwidth_units":"get_input:adiodvpe0_bandwidth_units","vnf_id":"123","vmxvre_oam_prefix":"24","availability_zone_0":"mtpocfo-kvm-az01","ASN":"get_input:2017488_adiodvpe0_ASN","vmxvre_chassis_i2cid":"161","vmxvpfe_name_0":"vPFEXI","bandwidth":"get_input:adiodvpe0_bandwidth","availability_zone_max_count":"1","vmxvre_volume_size_0":"45.0","vmxvre_volume_size_1":"50.0","vmxvpfe_sriov42_0_port_broadcastallow":"true","vmxvre_oam_gateway":"10.0.0.10","vmxvre_volume_name_1":"vREXI_FAVolume","vmxvre_ore_present":"0","vmxvre_volume_name_0":"vREXI_FBVolume","vmxvre_type":"0","vnf_instance_name":"get_input:2017488_adiodvpe0_vnf_instance_name","vmxvpfe_sriov41_0_port_unknownmulticastallow":"true","oam_net_id":"b95eeb1d-d55d-4827-abb4-8ebb94941429","vmx_int_ctl_len":"24","vmxvpfe_sriov43_0_port_vlanstrip":"false","vmxvpfe_sriov41_0_port_broadcastallow":"true","vmxvre_volume_id_1":"6e86797e-03cd-4fdc-ba72-2957119c746d","vmxvpfe_sriov41_0_port_vlanfilter":"4001","nf_role":"Testing","vmxvre_volume_id_0":"f4eacb79-f687-4e9d-b760-21847c8bb15a","vmxvpfe_sriov42_0_port_unknownunicastallow":"true","vmxvpfe_flavor_name":"ns.c20r16d25.v5"},"type":"VF","modelCustomizationName":"2017-388_ADIOD-vPE 0","vfModules":{},"volumeGroups":{},"vfcInstanceGroups":{}},"2017-488_ADIOD-vPE 0":{"uuid":"69e09f68-8b63-4cc9-b9ff-860960b5db09","invariantUuid":"72e465fe-71b1-4e7b-b5ed-9496118ff7a8","description":"Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM","name":"2017-488_ADIOD-vPE","version":"5.0","customizationUuid":"1da7b585-5e61-4993-b95e-8e6606c81e45","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{"vnf_config_template_version":{"displayName":"vnf_config_template_version","command":"get_input","inputName":"2017488_adiodvpe0_vnf_config_template_version"},"bandwidth_units":{"displayName":"bandwidth_units","command":"get_input","inputName":"adiodvpe0_bandwidth_units"},"bandwidth":{"displayName":"bandwidth","command":"get_input","inputName":"adiodvpe0_bandwidth"},"AIC_CLLI":{"displayName":"AIC_CLLI","command":"get_input","inputName":"2017488_adiodvpe0_AIC_CLLI"},"ASN":{"displayName":"ASN","command":"get_input","inputName":"2017488_adiodvpe0_ASN"},"vnf_instance_name":{"displayName":"vnf_instance_name","command":"get_input","inputName":"2017488_adiodvpe0_vnf_instance_name"}},"properties":{"vmxvre_retype":"RE-VMX","vnf_config_template_version":"get_input:2017488_adiodvpe0_vnf_config_template_version","sriov44_net_id":"48d399b3-11ee-48a8-94d2-f0ea94d6be8d","int_ctl_net_id":"2f323477-6936-4d01-ac53-d849430281d9","vmxvpfe_sriov41_0_port_mac":"00:11:22:EF:AC:DF","int_ctl_net_name":"VMX-INTXI","vmx_int_ctl_prefix":"10.0.0.10","sriov43_net_id":"da349ca1-6de9-4548-be88-2d88e99bfef5","sriov42_net_id":"760669ba-013d-4d9b-b0e7-4151fe2e6279","sriov41_net_id":"25ad52d5-c165-40f8-b3b0-ddfc2373280a","nf_type":"vPE","vmxvpfe_int_ctl_ip_1":"10.0.0.10","is_AVPN_service":"false","vmx_RSG_name":"vREXI-affinity","vmx_int_ctl_forwarding":"l2","vmxvre_oam_ip_0":"10.0.0.10","vmxvpfe_sriov44_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_sriov41_0_port_vlanstrip":"false","vmxvpfe_sriov42_0_port_vlanfilter":"4001","vmxvpfe_sriov44_0_port_unknownunicastallow":"true","vmxvre_image_name_0":"VRE-ENGINE_17.2-S2.1.qcow2","vmxvre_instance":"0","vmxvpfe_sriov43_0_port_mac":"00:11:22:EF:AC:DF","vmxvre_flavor_name":"ns.c1r16d32.v5","vmxvpfe_volume_size_0":"40.0","vmxvpfe_sriov43_0_port_vlanfilter":"4001","nf_naming":"{ecomp_generated_naming=false}","nf_naming_code":"Navneet","vmxvre_name_0":"vREXI","vmxvpfe_sriov42_0_port_vlanstrip":"false","vmxvpfe_volume_name_0":"vPFEXI_FBVolume","max_instances":"3","vmx_RSG_id":"bd89a33c-13c3-4a04-8fde-1a57eb123141","vmxvpfe_image_name_0":"VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2","vmxvpfe_sriov43_0_port_unknownunicastallow":"true","vmxvpfe_sriov44_0_port_unknownmulticastallow":"true","vmxvre_console":"vidconsole","vmxvpfe_sriov44_0_port_vlanfilter":"4001","vmxvpfe_sriov42_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_volume_id_0":"47cede15-da2f-4397-a101-aa683220aff3","vmxvpfe_sriov42_0_port_unknownmulticastallow":"true","min_instances":"1","vmxvpfe_sriov44_0_port_vlanstrip":"false","vf_module_id":"123","nf_function":"JAI","vmxvpfe_sriov43_0_port_unknownmulticastallow":"true","vmxvre_int_ctl_ip_0":"10.0.0.10","ecomp_generated_naming":"false","AIC_CLLI":"get_input:2017488_adiodvpe0_AIC_CLLI","vnf_name":"mtnj309me6vre","vmxvpfe_sriov41_0_port_unknownunicastallow":"true","vmxvre_volume_type_1":"HITACHI","vmxvpfe_sriov44_0_port_broadcastallow":"true","vmxvre_volume_type_0":"HITACHI","vmxvpfe_volume_type_0":"HITACHI","vmxvpfe_sriov43_0_port_broadcastallow":"true","bandwidth_units":"get_input:adiodvpe0_bandwidth_units","vnf_id":"123","vmxvre_oam_prefix":"24","availability_zone_0":"mtpocfo-kvm-az01","ASN":"get_input:2017488_adiodvpe0_ASN","vmxvre_chassis_i2cid":"161","vmxvpfe_name_0":"vPFEXI","bandwidth":"get_input:adiodvpe0_bandwidth","availability_zone_max_count":"1","vmxvre_volume_size_0":"45.0","vmxvre_volume_size_1":"50.0","vmxvpfe_sriov42_0_port_broadcastallow":"true","vmxvre_oam_gateway":"10.0.0.10","vmxvre_volume_name_1":"vREXI_FAVolume","vmxvre_ore_present":"0","vmxvre_volume_name_0":"vREXI_FBVolume","vmxvre_type":"0","vnf_instance_name":"get_input:2017488_adiodvpe0_vnf_instance_name","vmxvpfe_sriov41_0_port_unknownmulticastallow":"true","oam_net_id":"b95eeb1d-d55d-4827-abb4-8ebb94941429","vmx_int_ctl_len":"24","vmxvpfe_sriov43_0_port_vlanstrip":"false","vmxvpfe_sriov41_0_port_broadcastallow":"true","vmxvre_volume_id_1":"6e86797e-03cd-4fdc-ba72-2957119c746d","vmxvpfe_sriov41_0_port_vlanfilter":"4001","nf_role":"Testing","vmxvre_volume_id_0":"f4eacb79-f687-4e9d-b760-21847c8bb15a","vmxvpfe_sriov42_0_port_unknownunicastallow":"true","vmxvpfe_flavor_name":"ns.c20r16d25.v5"},"type":"VF","modelCustomizationName":"2017-488_ADIOD-vPE 0","vfModules":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}},"volumeGroupAllowed":true},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0":{"uuid":"f8360508-3f17-4414-a2ed-6bc71161e8db","invariantUuid":"b34833bb-6aa9-4ad6-a831-70b06367a091","customizationUuid":"a55961b2-2065-4ab0-a5b7-2fcee1c227e3","description":null,"name":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","version":"5","modelCustomizationName":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"ADIOD_base_vPE_BV"},"inputs":{},"volumeGroupAllowed":false},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}}},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{},"properties":{"min_instances":1,"max_instances":10,"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{},"fabricConfigurations":{},"serviceProxies":{},"vfModules":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}},"volumeGroupAllowed":true},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0":{"uuid":"f8360508-3f17-4414-a2ed-6bc71161e8db","invariantUuid":"b34833bb-6aa9-4ad6-a831-70b06367a091","customizationUuid":"a55961b2-2065-4ab0-a5b7-2fcee1c227e3","description":null,"name":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","version":"5","modelCustomizationName":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"ADIOD_base_vPE_BV"},"inputs":{},"volumeGroupAllowed":false},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}}},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{}}},"pnfs":{}}},"serviceInstance":{"6e59c5de-f052-46fa-aa7e-2fca9d674c44":{"vnfs":{"VF_vMee 0":{"rollbackOnFailure":"true","vfModules":{"vf_vmee0..VfVmee..base_vmme..module-0":{"vf_vmee0..VfVmee..base_vmme..module-0vmvzo":{"isMissingData":false,"sdncPreReload":null,"modelInfo":{"modelType":"VFmodule","modelInvariantId":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","modelVersionId":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","modelName":"VfVmee..base_vmme..module-0","modelVersion":"2","modelCustomizationId":"f8c040f1-7e51-4a11-aca8-acf256cfd861","modelCustomizationName":"VfVmee..base_vmme..module-0"},"instanceParams":[{}],"trackById":"wmtm6sy2uj"}}},"isMissingData":true,"originalName":"VF_vMee 0","vnfStoreKey":"VF_vMee 0","trackById":"p3wk448m5do","uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","productFamilyId":"36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e","lcpCloudRegionId":null,"tenantId":null,"lineOfBusiness":null,"platformName":null,"modelInfo":{"modelType":"VF","modelInvariantId":"4160458e-f648-4b30-a176-43881ffffe9e","modelVersionId":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","modelName":"VF_vMee","modelVersion":"2.0","modelCustomizationName":"VF_vMee 0"}}},"networks":{},"instanceParams":[{}],"validationCounter":1,"existingNames":{},"existingVNFCounterMap":{"d6557200-ecf2-4641-8094-5393ae3aae60":1},"globalSubscriberId":"e433710f-9217-458d-a79d-1c7aff376d89","subscriptionServiceType":"TYLER SILVIA","owningEntityId":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","productFamilyId":"36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","aicZoneId":"JAG1","projectName":"x1","rollbackOnFailure":"true","bulkSize":1,"modelInfo":{"modelInvariantId":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","modelVersionId":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","modelName":"ComplexService","modelVersion":"1.0","uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44"},"isALaCarte":false,"name":"ComplexService","version":"1.0","description":"ComplexService","category":"Emanuel","uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","serviceType":"","serviceRole":"","isEcompGeneratedNaming":true,"isMultiStepDesign":false},"6b528779-44a3-4472-bdff-9cd15ec93450":{"networks":{"ExtVL 0":{"rollbackOnFailure":"true","isMissingData":false,"originalName":"ExtVL 0","networkStoreKey":"ExtVL 0","trackById":"sf3zth68xjf","productFamilyId":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","platformName":"xxx1","lineOfBusiness":"ONAP","instanceParams":[{}],"modelInfo":{"modelInvariantId":"379f816b-a7aa-422f-be30-17114ff50b7c","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelName":"ExtVL","modelVersion":"37.0","modelCustomizationId":"94fdd893-4a36-4d70-b16a-ec29c54c184f","modelCustomizationName":"ExtVL 0","uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"ExtVL 0:0001":{"rollbackOnFailure":"true","isMissingData":false,"originalName":"ExtVL 0","networkStoreKey":"ExtVL 0","trackById":"2mdxioxca9h","productFamilyId":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","platformName":"xxx1","lineOfBusiness":"ONAP","instanceParams":[{}],"modelInfo":{"modelInvariantId":"379f816b-a7aa-422f-be30-17114ff50b7c","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelName":"ExtVL","modelVersion":"37.0","modelCustomizationId":"94fdd893-4a36-4d70-b16a-ec29c54c184f","modelCustomizationName":"ExtVL 0","uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"ExtVL 0_1":{"rollbackOnFailure":"true","isMissingData":false,"originalName":"ExtVL 0","networkStoreKey":"ExtVL 0_1","trackById":"z7vd1gmpbs","instanceName":"ExtVL","productFamilyId":"17cc1042-527b-11e6-beb8-9e71128cae77","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","platformName":"xxx1","lineOfBusiness":"zzz1","instanceParams":[{"vnf_config_template_version":"17.2","bandwidth_units":"Gbps","bandwidth":"10","AIC_CLLI":"ATLMY8GA","ASN":"AV_vPE","vnf_instance_name":"yoav"}],"modelInfo":{"modelInvariantId":"379f816b-a7aa-422f-be30-17114ff50b7c","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelName":"ExtVL","modelVersion":"37.0","modelCustomizationId":"94fdd893-4a36-4d70-b16a-ec29c54c184f","modelCustomizationName":"ExtVL 0","uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"}},"vnfs":{"2017-488_ADIOD-vPE 0":{"rollbackOnFailure":"true","vfModules":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi":{"instanceName":"yoav","volumeGroupName":"123","modelInfo":{"modelInvariantId":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","modelVersionId":"25284168-24bb-4698-8cb4-3f509146eca5","modelName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","modelVersion":"6","modelCustomizationId":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","uuid":"25284168-24bb-4698-8cb4-3f509146eca5"},"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","isMissingData":false,"instanceParams":[{"adiodvpe0_bandwidth":"10","2017488_adiodvpe0_vnf_instance_name":"mtnj309me6","2017488_adiodvpe0_vnf_config_template_version":"17.2","2017488_adiodvpe0_AIC_CLLI":"ATLMY8GA","adiodvpe0_bandwidth_units":"Gbps"}]}}},"isMissingData":false,"originalName":"2017-488_ADIOD-vPE 0","vnfStoreKey":"2017-488_ADIOD-vPE 0","trackById":"o65b26t2thj","instanceName":"2017488_ADIODvPE","productFamilyId":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","lcpCloudRegionId":"hvf6","tenantId":"bae71557c5bb4d5aac6743a4e5f1d054","platformName":"platform","lineOfBusiness":"ONAP","instanceParams":[{}],"modelInfo":{"modelInvariantId":"72e465fe-71b1-4e7b-b5ed-9496118ff7a8","modelVersionId":"69e09f68-8b63-4cc9-b9ff-860960b5db09","modelName":"2017-488_ADIOD-vPE","modelVersion":"5.0","modelCustomizationId":"1da7b585-5e61-4993-b95e-8e6606c81e45","modelCustomizationName":"2017-488_ADIOD-vPE 0","uuid":"69e09f68-8b63-4cc9-b9ff-860960b5db09"},"uuid":"69e09f68-8b63-4cc9-b9ff-860960b5db09"}},"instanceParams":[{"2017488_adiodvpe0_ASN":"AV_vPE"}],"validationCounter":0,"existingNames":{"123":"","instancename":"","yoav":"","extvl":""},"existingVNFCounterMap":{"69e09f68-8b63-4cc9-b9ff-860960b5db09":1},"existingNetworksCounterMap":{"ddc3f20c-08b5-40fd-af72-c6d14636b986":3},"instanceName":"InstanceName","globalSubscriberId":"e433710f-9217-458d-a79d-1c7aff376d89","subscriptionServiceType":"TYLER SILVIA","owningEntityId":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","productFamilyId":"17cc1042-527b-11e6-beb8-9e71128cae77","lcpCloudRegionId":"JANET25","tenantId":"092eb9e8e4b7412e8787dd091bc58e86","aicZoneId":"JAG1","projectName":null,"rollbackOnFailure":"true","aicZoneName":"YUDFJULP-JAG1","owningEntityName":"WayneHolland","testApi":"GR_API","isEcompGeneratedNaming":false,"tenantName":"USP-SIP-IC-24335-T-01","bulkSize":1,"modelInfo":{"modelInvariantId":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","modelVersionId":"6b528779-44a3-4472-bdff-9cd15ec93450","modelName":"action-data","modelVersion":"1.0","uuid":"6b528779-44a3-4472-bdff-9cd15ec93450"},"isALaCarte":false,"name":"action-data","version":"1.0","description":"","category":"","uuid":"6b528779-44a3-4472-bdff-9cd15ec93450","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","serviceType":"","serviceRole":"","isMultiStepDesign":false}},"lcpRegionsAndTenants":{"lcpRegionList":[{"id":"JANET25","name":"JANET25","isPermitted":true},{"id":"hvf6","name":"hvf6","isPermitted":true}],"lcpRegionsTenantsMap":{"JANET25":[{"id":"092eb9e8e4b7412e8787dd091bc58e86","name":"USP-SIP-IC-24335-T-01","isPermitted":true}],"hvf6":[{"id":"bae71557c5bb4d5aac6743a4e5f1d054","name":"AIN Web Tool-15-D-testalexandria","isPermitted":true},{"id":"229bcdc6eaeb4ca59d55221141d01f8e","name":"AIN Web Tool-15-D-STTest2","isPermitted":true},{"id":"1178612d2b394be4834ad77f567c0af2","name":"AIN Web Tool-15-D-SSPtestcustome","isPermitted":true},{"id":"19c5ade915eb461e8af52fb2fd8cd1f2","name":"AIN Web Tool-15-D-UncheckedEcopm","isPermitted":true},{"id":"de007636e25249238447264a988a927b","name":"AIN Web Tool-15-D-dfsdf","isPermitted":true},{"id":"62f29b3613634ca6a3065cbe0e020c44","name":"AIN/SMS-16-D-Multiservices1","isPermitted":true},{"id":"649289e30d3244e0b48098114d63c2aa","name":"AIN Web Tool-15-D-SSPST66","isPermitted":true},{"id":"3f21eeea6c2c486bba31dab816c05a32","name":"AIN Web Tool-15-D-ASSPST47","isPermitted":true},{"id":"f60ce21d3ee6427586cff0d22b03b773","name":"CESAR-100-D-sspjg67246","isPermitted":true},{"id":"8774659e425f479895ae091bb5d46560","name":"CESAR-100-D-sspjg68359","isPermitted":true},{"id":"624eb554b0d147c19ff8885341760481","name":"AINWebTool-15-D-iftach","isPermitted":true},{"id":"214f55f5fc414c678059c383b03e4962","name":"CESAR-100-D-sspjg612401","isPermitted":true},{"id":"c90666c291664841bb98e4d981ff1db5","name":"CESAR-100-D-sspjg621340","isPermitted":true},{"id":"ce5b6bc5c7b348e1bf4b91ac9a174278","name":"sspjg621351cloned","isPermitted":true},{"id":"b386b768a3f24c8e953abbe0b3488c02","name":"AINWebTool-15-D-eteancomp","isPermitted":true},{"id":"dc6c4dbfd225474e9deaadd34968646c","name":"AINWebTool-15-T-SPFET","isPermitted":true},{"id":"02cb5030e9914aa4be120bd9ed1e19eb","name":"AINWebTool-15-X-eeweww","isPermitted":true},{"id":"f2f3830e4c984d45bcd00e1a04158a79","name":"CESAR-100-D-spjg61909","isPermitted":true},{"id":"05b91bd5137f4929878edd965755c06d","name":"CESAR-100-D-sspjg621512cloned","isPermitted":true},{"id":"7002fbe8482d4a989ddf445b1ce336e0","name":"AINWebTool-15-X-vdr","isPermitted":true},{"id":"4008522be43741dcb1f5422022a2aa0b","name":"AINWebTool-15-D-ssasa","isPermitted":true},{"id":"f44e2e96a1b6476abfda2fa407b00169","name":"AINWebTool-15-D-PFNPT","isPermitted":true},{"id":"b69a52bec8a84669a37a1e8b72708be7","name":"AINWebTool-15-X-vdre","isPermitted":true},{"id":"fac7d9fd56154caeb9332202dcf2969f","name":"AINWebTool-15-X-NONPODECOMP","isPermitted":true},{"id":"2d34d8396e194eb49969fd61ffbff961","name":"DN5242-Nov16-T5","isPermitted":true},{"id":"cb42a77ff45b48a8b8deb83bb64acc74","name":"ro-T11","isPermitted":true},{"id":"fa45ca53c80b492fa8be5477cd84fc2b","name":"ro-T112","isPermitted":true},{"id":"4914ab0ab3a743e58f0eefdacc1dde77","name":"DN5242-Nov21-T1","isPermitted":true},{"id":"d0a3e3f2964542259d155a81c41aadc3","name":"test-hvf6-09","isPermitted":true},{"id":"cbb99fe4ada84631b7baf046b6fd2044","name":"DN5242-Nov16-T3","isPermitted":true}]}},"productFamilies":[{"id":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","name":"SCOTTIE","isPermitted":true},{"id":"17cc1042-527b-11e6-beb8-9e71128cae77","name":"IGNACIO","isPermitted":true},{"id":"36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e","name":"Christie","isPermitted":true},{"id":"a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7","name":"Enhanced Services","isPermitted":true},{"id":"vTerrance","name":"vTerrance","isPermitted":true},{"id":"323d69d9-2efe-4r45-ay0a-89ea7ard4e6f","name":"vSCP","isPermitted":true},{"id":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb","name":"Emanuel","isPermitted":true},{"id":"d8a6ed93-251c-47ca-adc9-86671fd19f4c","name":"BVOIP","isPermitted":true},{"id":"db171b8f-115c-4992-a2e3-ee04cae357e0","name":"LINDSEY","isPermitted":true},{"id":"LRSI-OSPF","name":"LRSI-OSPF","isPermitted":true},{"id":"vRosemarie","name":"HNGATEWAY","isPermitted":true},{"id":"vHNPaas","name":"WILKINS","isPermitted":true},{"id":"e433710f-9217-458d-a79d-1c7aff376d89","name":"TYLER SILVIA","isPermitted":true},{"id":"b6a3f28c-eebf-494c-a900-055cc7c874ce","name":"VROUTER","isPermitted":true},{"id":"Cisneros","name":"vMuriel","isPermitted":true},{"id":"0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1","name":"CARA Griffin","isPermitted":true},{"id":"c7611ebe-c324-48f1-8085-94aef0c6ef3d","name":"DARREN MCGEE","isPermitted":true},{"id":"e30755dc-5673-4b6b-9dcf-9abdd96b93d1","name":"Transport","isPermitted":true},{"id":"vSalvatore","name":"vSalvatore","isPermitted":true},{"id":"d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4","name":"Josefina","isPermitted":true},{"id":"vHubbard","name":"vHubbard","isPermitted":true},{"id":"12a96a9d-4b4c-4349-a950-fe1159602621","name":"DARREN MCGEE","isPermitted":true}],"serviceTypes":{"e433710f-9217-458d-a79d-1c7aff376d89":[{"id":"0","name":"vRichardson","isPermitted":false},{"id":"1","name":"TYLER SILVIA","isPermitted":true},{"id":"2","name":"Emanuel","isPermitted":false},{"id":"3","name":"vJamie","isPermitted":false},{"id":"4","name":"vVoiceMail","isPermitted":false},{"id":"5","name":"Kennedy","isPermitted":false},{"id":"6","name":"vSEGW","isPermitted":false},{"id":"7","name":"vVM","isPermitted":false},{"id":"8","name":"vOTA","isPermitted":false},{"id":"9","name":"vMME","isPermitted":false},{"id":"10","name":"vMNS","isPermitted":false},{"id":"11","name":"vSCP","isPermitted":false},{"id":"12","name":"VPMS","isPermitted":false},{"id":"13","name":"vMMSC","isPermitted":false},{"id":"14","name":"SSD","isPermitted":false},{"id":"15","name":"vMOG","isPermitted":false},{"id":"16","name":"LINDSEY","isPermitted":false},{"id":"17","name":"JOHANNA_SANTOS","isPermitted":false},{"id":"18","name":"vCarroll","isPermitted":false}]},"aicZones":[{"id":"NFT1","name":"NFTJSSSS-NFT1"},{"id":"JAG1","name":"YUDFJULP-JAG1"},{"id":"YYY1","name":"UUUAIAAI-YYY1"},{"id":"BAN1","name":"VSDKYUTP-BAN1"},{"id":"DKJ1","name":"DKJSJDKA-DKJ1"},{"id":"MCS1","name":"ASACMAMS-MCS1"},{"id":"UIO1","name":"uioclli1-UIO1"},{"id":"RAJ1","name":"YGBIJNLQ-RAJ1"},{"id":"OPA1","name":"opaclli1-OPA1"},{"id":"SDE1","name":"ZXCVBNMA-SDE1"},{"id":"VEN2","name":"FGHJUHIL-VEN2"},{"id":"ORL1","name":"ORLDFLMA-ORL1"},{"id":"JAD1","name":"JADECLLI-JAD1"},{"id":"ZXL1","name":"LWLWCANN-ZXL1"},{"id":"CKL1","name":"CLKSKCKK-CKL1"},{"id":"SDF1","name":"sdfclli1-SDF1"},{"id":"RAD1","name":"RADICAL1-RAD1"},{"id":"KIT1","name":"BHYJFGLN-KIT1"},{"id":"REL1","name":"INGERFGT-REL1"},{"id":"JNL1","name":"CJALSDAC-JNL1"},{"id":"OLK1","name":"OLKOLKLS-OLK1"},{"id":"CHI1","name":"CHILLIWE-CHI1"},{"id":"UUU4","name":"UUUAAAUU-UUU4"},{"id":"TUF1","name":"TUFCLLI1-TUF1"},{"id":"KJN1","name":"CKALDKSA-KJN1"},{"id":"SAM1","name":"SNDGCA64-SAN1"},{"id":"SCK1","name":"SCKSCKSK-SCK1"},{"id":"HJH1","name":"AOEEQQQD-HJH1"},{"id":"HGD1","name":"SDFQWHGD-HGD1"},{"id":"KOR1","name":"HYFLNBVT-KOR1"},{"id":"ATL43","name":"AICLOCID-ATL43"},{"id":"ATL54","name":"AICFTAAI-ATL54"},{"id":"ATL66","name":"CLLIAAII-ATL66"},{"id":"VEL1","name":"BNMLKUIK-VEL1"},{"id":"ICC1","name":"SANJITAT-ICC1"},{"id":"MNT11","name":"WSXEFBTH-MNT11"},{"id":"DEF2","name":"WSBHGTYL-DEF2"},{"id":"MAD11","name":"SDFQWGKL-MAD11"},{"id":"OLG1","name":"OLHOLHOL-OLG1"},{"id":"GAR1","name":"NGFVSJKO-GAR1"},{"id":"SAN22","name":"GNVLSCTL-SAN22"},{"id":"HRG1","name":"HRGHRGGS-HRG1"},{"id":"JCS1","name":"JCSJSCJS-JCS1"},{"id":"DHA12","name":"WSXEDECF-DHA12"},{"id":"HJE1","name":"AOEEWWWD-HJE1"},{"id":"NCA1","name":"NCANCANN-NCA1"},{"id":"IOP1","name":"iopclli1-IOP1"},{"id":"RTY1","name":"rtyclli1-RTY1"},{"id":"KAP1","name":"HIOUYTRQ-KAP1"},{"id":"ZEN1","name":"ZENCLLI1-ZEN1"},{"id":"HKA1","name":"JAKHLASS-HKA1"},{"id":"CQK1","name":"CQKSCAKK-CQK1"},{"id":"SAI1","name":"UBEKQLPD-SAI1"},{"id":"ERT1","name":"ertclli1-ERT1"},{"id":"IBB1","name":"PLMKOIJU-IBB1"},{"id":"TIR2","name":"PLKINHYI-TIR2"},{"id":"HSD1","name":"CHASKCDS-HSD1"},{"id":"SLF78","name":"SDCTLFN1-SLF78"},{"id":"SEE78","name":"SDCTEEE4-SEE78"},{"id":"SAN13","name":"TOKYJPFA-SAN13"},{"id":"SAA78","name":"SDCTAAA1-SAA78"},{"id":"LUC1","name":"ATLDFGYC-LUC1"},{"id":"AMD13","name":"MEMATLAN-AMD13"},{"id":"TOR1","name":"TOROONXN-TOR1"},{"id":"QWE1","name":"QWECLLI1-QWE1"},{"id":"ZOG1","name":"ZOGASTRO-ZOG1"},{"id":"CAL33","name":"CALIFORN-CAL33"},{"id":"SHH78","name":"SDIT1HHH-SHH78"},{"id":"DSA1","name":"LKJHGFDS-DSA1"},{"id":"CLG1","name":"CLGRABAD-CLG1"},{"id":"BNA1","name":"BNARAGBK-BNA1"},{"id":"ATL84","name":"CANTTCOC-ATL84"},{"id":"APP1","name":"WBHGTYUI-APP1"},{"id":"RJN1","name":"RJNRBZAW-RJN1"},{"id":"EHH78","name":"SDCSHHH5-EHH78"},{"id":"mac10","name":"PKGTESTF-mac10"},{"id":"SXB78","name":"SDCTGXB1-SXB78"},{"id":"SAX78","name":"SDCTAXG1-SAX78"},{"id":"SYD1","name":"SYDNAUBV-SYD1"},{"id":"TOK1","name":"TOKYJPFA-TOK1"},{"id":"KGM2","name":"KGMTNC20-KGM2"},{"id":"DCC1b","name":"POIUYTGH-DCC1b"},{"id":"SKK78","name":"SDCTKKK1-SKK78"},{"id":"SGG78","name":"SDCTGGG1-SGG78"},{"id":"SJJ78","name":"SDCTJJJ1-SJJ78"},{"id":"SBX78","name":"SDCTBXG1-SBX78"},{"id":"LAG1","name":"LARGIZON-LAG1"},{"id":"IAA1","name":"QAZXSWED-IAA1"},{"id":"POI1","name":"PLMNJKIU-POI1"},{"id":"LAG1a","name":"LARGIZON-LAG1a"},{"id":"PBL1","name":"PBLAPBAI-PBL1"},{"id":"LAG45","name":"LARGIZON-LAG1a"},{"id":"MAR1","name":"MNBVCXZM-MAR1"},{"id":"HST70","name":"HSTNTX70-HST70"},{"id":"DCC1a","name":"POIUYTGH-DCC1a"},{"id":"TOL1","name":"TOLDOH21-TOL1"},{"id":"LON1","name":"LONEENCO-LON1"},{"id":"SJU78","name":"SDIT1JUB-SJU78"},{"id":"STN27","name":"HSTNTX01-STN27"},{"id":"SSW56","name":"ss8126GT-SSW56"},{"id":"SBB78","name":"SDIT1BBB-SBB78"},{"id":"DCC3","name":"POIUYTGH-DCC3"},{"id":"GNV1","name":"GNVLSCTL-GNV1"},{"id":"WAS1","name":"WASHDCSW-WAS1"},{"id":"TOY1","name":"TORYONNZ-TOY1"},{"id":"STT1","name":"STTLWA02-STT1"},{"id":"STG1","name":"STTGGE62-STG1"},{"id":"SLL78","name":"SDCTLLL1-SLL78"},{"id":"SBU78","name":"SDIT1BUB-SBU78"},{"id":"ATL2","name":"ATLNGANW-ATL2"},{"id":"BOT1","name":"BOTHWAKY-BOT1"},{"id":"SNG1","name":"SNGPSIAU-SNG1"},{"id":"NYC1","name":"NYCMNY54-NYC1"},{"id":"LAG1b","name":"LARGIZON-LAG1b"},{"id":"AMD15","name":"AMDFAA01-AMD15"},{"id":"SNA1","name":"SNANTXCA-SNA1"},{"id":"PLT1","name":"PLTNCA60-PLT1"},{"id":"TLP1","name":"TLPNXM18-TLP1"},{"id":"SDD81","name":"SAIT1DD6-SDD81"},{"id":"DCC1","name":"POIUYTGH-DCC1"},{"id":"DCC2","name":"POIUYTGH-DCC2"},{"id":"OKC1","name":"OKCBOK55-OKC1"},{"id":"PAR1","name":"PARSFRCG-PAR1"},{"id":"TES36","name":"ABCEETES-TES36"},{"id":"COM1","name":"PLMKOPIU-COM1"},{"id":"ANI1","name":"ATLNGTRE-ANI1"},{"id":"SDG78","name":"SDIT1BDG-SDG78"},{"id":"mac20","name":"PKGTESTF-mac20"},{"id":"DSF45","name":"DSFBG123-DSF45"},{"id":"HST25","name":"HSTNTX01-HST25"},{"id":"AMD18","name":"AUDIMA01-AMD18"},{"id":"SAA80","name":"SAIT9AA3-SAA80"},{"id":"SSA56","name":"SSIT2AA7-SSA56"},{"id":"SDD82","name":"SAIT1DD9-SDD82"},{"id":"JCV1","name":"JCVLFLBW-JCV1"},{"id":"SUL2","name":"WERTYUJK-SUL2"},{"id":"PUR1","name":"purelyde-PUR1"},{"id":"FDE55","name":"FDERT555-FDE55"},{"id":"SITE","name":"LONEENCO-SITE"},{"id":"ATL1","name":"ATLNGAMA-ATL1"},{"id":"JUL1","name":"ZXCVBNMM-JUL1"},{"id":"TAT34","name":"TESAAISB-TAT34"},{"id":"XCP12","name":"CHKGH123-XCP12"},{"id":"RAI1","name":"poiuytre-RAI1"},{"id":"HPO1","name":"ATLNGAUP-HPO1"},{"id":"KJF12","name":"KJFDH123-KJF12"},{"id":"SCC80","name":"SAIT9CC3-SCC80"},{"id":"SAA12","name":"SAIT9AF8-SAA12"},{"id":"SAA14","name":"SAIT1AA9-SAA14"},{"id":"ATL35","name":"TTESSAAI-ATL35"},{"id":"CWY1","name":"CWYMOWBS-CWY1"},{"id":"ATL76","name":"TELEPAAI-ATL76"},{"id":"DSL12","name":"DSLFK242-DSL12"},{"id":"ATL53","name":"AAIATLTE-ATL53"},{"id":"SAA11","name":"SAIT9AA2-SAA11"},{"id":"ATL62","name":"TESSASCH-ATL62"},{"id":"AUG1","name":"ASDFGHJK-AUG1"},{"id":"POI22","name":"POIUY123-POI22"},{"id":"SAA13","name":"SAIT1AA9-SAA13"},{"id":"BHY17","name":"BHYTFRF3-BHY17"},{"id":"LIS1","name":"HOSTPROF-LIS1"},{"id":"SIP1","name":"ZXCVBNMK-SIP1"},{"id":"ATL99","name":"TEESTAAI-ATL43"},{"id":"ATL64","name":"FORLOAAJ-ATL64"},{"id":"TAT33","name":"TESAAISA-TAT33"},{"id":"RAD10","name":"INDIPUNE-RAD10"},{"id":"RTW5","name":"BHYTFRY4-RTW5"},{"id":"JGS1","name":"KSJKKKKK-JGS1"},{"id":"ATL98","name":"TEESTAAI-ATL43"},{"id":"WAN1","name":"LEIWANGW-WAN1"},{"id":"ATL44","name":"ATLSANAB-ATL44"},{"id":"RTD2","name":"BHYTFRk4-RTD2"},{"id":"NIR1","name":"ORFLMANA-NIR1"},{"id":"ATL75","name":"SANAAIRE-ATL75"},{"id":"NUM1","name":"QWERTYUI-NUM1"},{"id":"MTN32","name":"MDTWNJ21-MTN32"},{"id":"RTZ4","name":"BHYTFRZ6-RTZ4"},{"id":"ATL56","name":"ATLSANAC-ATL56"},{"id":"AMS1","name":"AMSTNLBW-AMS1"},{"id":"RCT1","name":"AMSTERNL-RCT1"},{"id":"JAN1","name":"ORFLMATT-JAN1"},{"id":"ABC14","name":"TESAAISA-ABC14"},{"id":"TAT37","name":"TESAAISD-TAT37"},{"id":"MIC54","name":"MICHIGAN-MIC54"},{"id":"ABC11","name":"ATLSANAI-ABC11"},{"id":"AMF11","name":"AMDOCS01-AMF11"},{"id":"ATL63","name":"ATLSANEW-ATL63"},{"id":"ABC12","name":"ATLSECIA-ABC12"},{"id":"MTN20","name":"MDTWNJ21-MTN20"},{"id":"ABC15","name":"AAITESAN-ABC15"},{"id":"AVT1","name":"AVTRFLHD-AVT1"},{"id":"ATL34","name":"ATLSANAI-ATL34"}],"categoryParameters":{"owningEntityList":[{"id":"aaa1","name":"aaa1"},{"id":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","name":"WayneHolland"},{"id":"Melissa","name":"Melissa"}],"projectList":[{"id":"WATKINS","name":"WATKINS"},{"id":"x1","name":"x1"},{"id":"yyy1","name":"yyy1"}],"lineOfBusinessList":[{"id":"ONAP","name":"ONAP"},{"id":"zzz1","name":"zzz1"}],"platformList":[{"id":"platform","name":"platform"},{"id":"xxx1","name":"xxx1"}]},"type":"[LCP_REGIONS_AND_TENANTS] Update","subscribers":[{"id":"CAR_2020_ER","name":"CAR_2020_ER","isPermitted":true},{"id":"21014aa2-526b-11e6-beb8-9e71128cae77","name":"JULIO ERICKSON","isPermitted":false},{"id":"DHV1707-TestSubscriber-2","name":"DALE BRIDGES","isPermitted":false},{"id":"DHV1707-TestSubscriber-1","name":"LLOYD BRIDGES","isPermitted":false},{"id":"jimmy-example","name":"JimmyExampleCust-20161102","isPermitted":false},{"id":"jimmy-example2","name":"JimmyExampleCust-20161103","isPermitted":false},{"id":"ERICA5779-TestSub-PWT-102","name":"ERICA5779-TestSub-PWT-102","isPermitted":false},{"id":"ERICA5779-TestSub-PWT-101","name":"ERICA5779-TestSub-PWT-101","isPermitted":false},{"id":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb","name":"Emanuel","isPermitted":false},{"id":"ERICA5779-Subscriber-4","name":"ERICA5779-Subscriber-5","isPermitted":false},{"id":"ERICA5779-TestSub-PWT-103","name":"ERICA5779-TestSub-PWT-103","isPermitted":false},{"id":"ERICA5779-Subscriber-2","name":"ERICA5779-Subscriber-2","isPermitted":false},{"id":"e433710f-9217-458d-a79d-1c7aff376d89","name":"SILVIA ROBBINS","isPermitted":true},{"id":"ERICA5779-Subscriber-3","name":"ERICA5779-Subscriber-3","isPermitted":false},{"id":"31739f3e-526b-11e6-beb8-9e71128cae77","name":"CRAIG/ROBERTS","isPermitted":false}]}}; + } +} + +describe('Basic popup service', () => { + let injector; + let service: BasicPopupService; + let genericFormService : GenericFormService; + let defaultDataGeneratorService : DefaultDataGeneratorService; + let fb : FormBuilder; + let iframeService : IframeService; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + providers : [ + NetworkPopupService, + BasicControlGenerator, + NetworkControlGenerator, + DefaultDataGeneratorService, + GenericFormService, + FormBuilder, + IframeService, + AaiService, + LogService, + BasicPopupService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockReduxStore}, + {provide: HttpClient, useClass: MockAppStore}, + {provide: SdcUiServices.ModalService, useClass: MockModalService} + ] + }); + await TestBed.compileComponents(); + injector = getTestBed(); + service = injector.get(BasicPopupService); + genericFormService = injector.get(GenericFormService); + defaultDataGeneratorService = injector.get(DefaultDataGeneratorService); + fb = injector.get(FormBuilder); + iframeService = injector.get(IframeService); + + })().then(done).catch(done.fail)); + + + + + test('getDynamicInputs should list of formControl model', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const networkModel : string = 'ExtVL 0'; + const networkStoreKey : string = null; + const controls : FormControlModel[] = service.getDynamicInputs(serviceId, networkModel, networkStoreKey, 'networks'); + expect(controls.length).toEqual(6); + for(let i = 0 ; i < controls.length ; i++){ + expect(controls[i].type).toEqual('INPUT'); + expect(controls[i].isVisible).toBeTruthy(); + } + }); + + test('getModelFromResponse should return undefined if raw model not exist', () => { + const result= service.getModelFromResponse({ + "modelType" : { + "modelName" : null + } + }, 'modelType', 'modelName'); + expect(result).toBeUndefined(); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.ts new file mode 100644 index 000000000..5d4d16567 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.ts @@ -0,0 +1,54 @@ +import {Injectable} from "@angular/core"; +import {Subscriber} from "../../../models/subscriber"; +import {NetworkModel} from "../../../models/networkModel"; +import {AppState} from "../../../store/reducers"; +import {NgRedux} from "@angular-redux/store"; +import {FormControlModel} from "../../../models/formControlModels/formControl.model"; +import {DefaultDataGeneratorService} from "../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {BasicControlGenerator} from "../../genericForm/formControlsServices/basic.control.generator"; +import * as _ from 'lodash'; +import {VfModule} from "../../../models/vfModule"; +import {VNFModel} from "../../../models/vnfModel"; +import {VnfGroupModel} from "../../../models/vnfGroupModel"; + +@Injectable() +export class BasicPopupService { + constructor(private _store: NgRedux<AppState>, + private _defaultDataGeneratorService : DefaultDataGeneratorService, + private _basicControlGenerator : BasicControlGenerator){} + + extractSubscriberNameBySubscriberId(subsriberId: string) { + let result: string = null; + let filteredArray: any = _.filter(this._store.getState().service.subscribers, function (o: Subscriber) { + return o.id === subsriberId + }); + if (filteredArray.length > 0) { + result = filteredArray[0].name; + } + return result; + } + + getModelFromResponse(result: any, modelType: string, modelName: string) { + let rawModel = result[modelType][modelName]; + if (!rawModel) return; + switch (modelType){ + case 'vnfs' : { + return new VNFModel(rawModel); + } + case 'vfModules' : { + return new VfModule(rawModel); + } + case 'networks' : { + return new NetworkModel(rawModel); + } + case 'vnfGroups' : { + return new VnfGroupModel(rawModel); + } + } + } + + getDynamicInputs(serviceId : string, modelName : string, storeKey : string, type : string) : FormControlModel[]{ + let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[serviceId][type][modelName].inputs); + return this._basicControlGenerator.getDynamicInputsByType(dynamic, serviceId, storeKey, type ); + } +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/generic-popup.interface.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/generic-popup.interface.ts new file mode 100644 index 000000000..7324c64a7 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/generic-popup.interface.ts @@ -0,0 +1,25 @@ +/*********************************************************** + onSubmit : action when set button is clicked + onCancel : action when cancel/X button is clicked + getModelInformation : should generate the model information + getGenericFormPopupDetails : returns list of controls + getInstance : returns exists instance (if exist) + getTitle : returns generic popup title + getSubLeftTitle : returns generic popup left sub title + getSubRightTitle : returns generic popup right sub title + ***********************************************************/ + +import {FormGroup} from "@angular/forms"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {FormPopupDetails} from "../../../models/formControlModels/formPopupDetails.model"; + +export interface GenericPopupInterface { + onSubmit(that, form: FormGroup, ...args) : void; + onCancel(that, form) : void; + getModelInformation(serviceId : string, modelName : string) : void; + getGenericFormPopupDetails(serviceId : string, modelName : string , storeKey : string, node : ITreeNode, uuidData : Object, isUpdateMode : boolean) : FormPopupDetails; + getInstance(serviceId : string, modelName : string , storeKey : string) : any; + getTitle(isUpdateMode : boolean) : string; + getSubLeftTitle() : string; + getSubRightTitle() : string; +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.spec.ts new file mode 100644 index 000000000..30164b8b6 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.spec.ts @@ -0,0 +1,2395 @@ +import {NetworkPopupService} from "./network.popup.service"; +import {LogService} from "../../../../utils/log/log.service"; +import {SdcUiServices} from "onap-ui-angular"; +import {ReflectiveInjector} from "@angular/core"; +import {NgRedux} from "@angular-redux/store"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {HttpClient} from "@angular/common/http"; +import {NetworkControlGenerator} from "../../../genericForm/formControlsServices/networkGenerator/network.control.generator"; +import {GenericFormService} from "../../../genericForm/generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import {IframeService} from "../../../../utils/iframe.service"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; +import {getTestBed, TestBed} from "@angular/core/testing"; + +class MockAppStore<T> {} + +class MockModalService<T> {} + +class MockReduxStore<T> { + getState() { + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "FLAG_ADVANCED_PORTS_FILTER": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_REGION_ID_FROM_REMOTE": true, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "netowrk_role": "role 1, role 2, role 3", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "service": { + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "action-data", + "version": "1.0", + "toscaModelURL": null, + "category": "", + "serviceType": "", + "serviceRole": "", + "description": "", + "serviceEcompNaming": "false", + "instantiationType": "A-La-Carte", + "inputs": { + "2017488_adiodvpe0_ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + } + } + }, + "vnfs": { + "2017-388_ADIOD-vPE 1": { + "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413", + "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "1.0", + "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 1", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-388_ADIOD-vPE 0": { + "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "4.0", + "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 0", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-488_ADIOD-vPE 0": { + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-488_ADIOD-vPE", + "version": "5.0", + "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "max_instances": "3", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": {}, + "properties": { + "network_role" : "network role 1, network role 2", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": {}, + "fabricConfigurations": {}, + "serviceProxies": {}, + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"}, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"}, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [{}], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "networks": {}, + "instanceParams": [{}], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": {"d6557200-ecf2-4641-8094-5393ae3aae60": 1}, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "networks": { + "ExtVL 0": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "sf3zth68xjf", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0:0001": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "2mdxioxca9h", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0_1": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0_1", + "trackById": "z7vd1gmpbs", + "instanceName": "ExtVL", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "zzz1", + "instanceParams": [{ + "vnf_config_template_version": "17.2", + "bandwidth_units": "Gbps", + "bandwidth": "10", + "AIC_CLLI": "ATLMY8GA", + "ASN": "AV_vPE", + "vnf_instance_name": "yoav" + }], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + } + }, + "vnfs": { + "2017-488_ADIOD-vPE 0": { + "rollbackOnFailure": "true", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": { + "instanceName": "yoav", + "volumeGroupName": "123", + "modelInfo": { + "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5", + "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "modelVersion": "6", + "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5" + }, + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "isMissingData": false, + "instanceParams": [{ + "adiodvpe0_bandwidth": "10", + "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6", + "2017488_adiodvpe0_vnf_config_template_version": "17.2", + "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA", + "adiodvpe0_bandwidth_units": "Gbps" + }] + } + } + }, + "isMissingData": false, + "originalName": "2017-488_ADIOD-vPE 0", + "vnfStoreKey": "2017-488_ADIOD-vPE 0", + "trackById": "o65b26t2thj", + "instanceName": "2017488_ADIODvPE", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054", + "platformName": "platform", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "modelName": "2017-488_ADIOD-vPE", + "modelVersion": "5.0", + "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + }, + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + } + }, + "instanceParams": [{"2017488_adiodvpe0_ASN": "AV_vPE"}], + "validationCounter": 0, + "existingNames": {"123": "", "instancename": "", "yoav": "", "extvl": ""}, + "existingVNFCounterMap": {"69e09f68-8b63-4cc9-b9ff-860960b5db09": 1}, + "existingNetworksCounterMap": {"ddc3f20c-08b5-40fd-af72-c6d14636b986": 3}, + "instanceName": "InstanceName", + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "JANET25", + "tenantId": "092eb9e8e4b7412e8787dd091bc58e86", + "aicZoneId": "JAG1", + "projectName": null, + "rollbackOnFailure": "true", + "aicZoneName": "YUDFJULP-JAG1", + "owningEntityName": "WayneHolland", + "testApi": "GR_API", + "tenantName": "USP-SIP-IC-24335-T-01", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450", + "modelName": "action-data", + "modelVersion": "1.0", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450" + }, + "isALaCarte": false, + "name": "action-data", + "version": "1.0", + "description": "", + "category": "", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [{ + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, {"id": "hvf6", "name": "hvf6", "isPermitted": true}], + "lcpRegionsTenantsMap": { + "JANET25": [{ + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + }], + "hvf6": [{ + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, {"id": "cbb99fe4ada84631b7baf046b6fd2044", "name": "DN5242-Nov16-T3", "isPermitted": true}] + } + }, + "productFamilies": [{ + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, {"id": "vTerrance", "name": "vTerrance", "isPermitted": true}, { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, {"id": "db171b8f-115c-4992-a2e3-ee04cae357e0", "name": "LINDSEY", "isPermitted": true}, { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, {"id": "vRosemarie", "name": "HNGATEWAY", "isPermitted": true}, { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, {"id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", "name": "VROUTER", "isPermitted": true}, { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, {"id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", "name": "Transport", "isPermitted": true}, { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, {"id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", "name": "Josefina", "isPermitted": true}, { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, {"id": "12a96a9d-4b4c-4349-a950-fe1159602621", "name": "DARREN MCGEE", "isPermitted": true}], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [{ + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, {"id": "1", "name": "TYLER SILVIA", "isPermitted": true}, { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, {"id": "3", "name": "vJamie", "isPermitted": false}, { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, {"id": "5", "name": "Kennedy", "isPermitted": false}, { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, {"id": "7", "name": "vVM", "isPermitted": false}, { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, {"id": "9", "name": "vMME", "isPermitted": false}, { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, {"id": "11", "name": "vSCP", "isPermitted": false}, { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, {"id": "13", "name": "vMMSC", "isPermitted": false}, { + "id": "14", + "name": "SSD", + "isPermitted": false + }, {"id": "15", "name": "vMOG", "isPermitted": false}, { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, {"id": "17", "name": "JOHANNA_SANTOS", "isPermitted": false}, { + "id": "18", + "name": "vCarroll", + "isPermitted": false + }] + }, + "aicZones": [{"id": "NFT1", "name": "NFTJSSSS-NFT1"}, {"id": "JAG1", "name": "YUDFJULP-JAG1"}, { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, {"id": "BAN1", "name": "VSDKYUTP-BAN1"}, {"id": "DKJ1", "name": "DKJSJDKA-DKJ1"}, { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, {"id": "UIO1", "name": "uioclli1-UIO1"}, {"id": "RAJ1", "name": "YGBIJNLQ-RAJ1"}, { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, {"id": "SDE1", "name": "ZXCVBNMA-SDE1"}, {"id": "VEN2", "name": "FGHJUHIL-VEN2"}, { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, {"id": "JAD1", "name": "JADECLLI-JAD1"}, {"id": "ZXL1", "name": "LWLWCANN-ZXL1"}, { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, {"id": "SDF1", "name": "sdfclli1-SDF1"}, {"id": "RAD1", "name": "RADICAL1-RAD1"}, { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, {"id": "REL1", "name": "INGERFGT-REL1"}, {"id": "JNL1", "name": "CJALSDAC-JNL1"}, { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, {"id": "CHI1", "name": "CHILLIWE-CHI1"}, {"id": "UUU4", "name": "UUUAAAUU-UUU4"}, { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, {"id": "KJN1", "name": "CKALDKSA-KJN1"}, {"id": "SAM1", "name": "SNDGCA64-SAN1"}, { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, {"id": "HJH1", "name": "AOEEQQQD-HJH1"}, {"id": "HGD1", "name": "SDFQWHGD-HGD1"}, { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, {"id": "ATL43", "name": "AICLOCID-ATL43"}, {"id": "ATL54", "name": "AICFTAAI-ATL54"}, { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, {"id": "VEL1", "name": "BNMLKUIK-VEL1"}, {"id": "ICC1", "name": "SANJITAT-ICC1"}, { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, {"id": "DEF2", "name": "WSBHGTYL-DEF2"}, {"id": "MAD11", "name": "SDFQWGKL-MAD11"}, { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, {"id": "GAR1", "name": "NGFVSJKO-GAR1"}, {"id": "SAN22", "name": "GNVLSCTL-SAN22"}, { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, {"id": "JCS1", "name": "JCSJSCJS-JCS1"}, {"id": "DHA12", "name": "WSXEDECF-DHA12"}, { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, {"id": "NCA1", "name": "NCANCANN-NCA1"}, {"id": "IOP1", "name": "iopclli1-IOP1"}, { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, {"id": "KAP1", "name": "HIOUYTRQ-KAP1"}, {"id": "ZEN1", "name": "ZENCLLI1-ZEN1"}, { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, {"id": "CQK1", "name": "CQKSCAKK-CQK1"}, {"id": "SAI1", "name": "UBEKQLPD-SAI1"}, { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, {"id": "IBB1", "name": "PLMKOIJU-IBB1"}, {"id": "TIR2", "name": "PLKINHYI-TIR2"}, { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, {"id": "SLF78", "name": "SDCTLFN1-SLF78"}, {"id": "SEE78", "name": "SDCTEEE4-SEE78"}, { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, {"id": "SAA78", "name": "SDCTAAA1-SAA78"}, {"id": "LUC1", "name": "ATLDFGYC-LUC1"}, { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, {"id": "TOR1", "name": "TOROONXN-TOR1"}, {"id": "QWE1", "name": "QWECLLI1-QWE1"}, { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, {"id": "CAL33", "name": "CALIFORN-CAL33"}, {"id": "SHH78", "name": "SDIT1HHH-SHH78"}, { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, {"id": "CLG1", "name": "CLGRABAD-CLG1"}, {"id": "BNA1", "name": "BNARAGBK-BNA1"}, { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, {"id": "APP1", "name": "WBHGTYUI-APP1"}, {"id": "RJN1", "name": "RJNRBZAW-RJN1"}, { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, {"id": "mac10", "name": "PKGTESTF-mac10"}, {"id": "SXB78", "name": "SDCTGXB1-SXB78"}, { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, {"id": "SYD1", "name": "SYDNAUBV-SYD1"}, {"id": "TOK1", "name": "TOKYJPFA-TOK1"}, { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, {"id": "DCC1b", "name": "POIUYTGH-DCC1b"}, {"id": "SKK78", "name": "SDCTKKK1-SKK78"}, { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, {"id": "SJJ78", "name": "SDCTJJJ1-SJJ78"}, {"id": "SBX78", "name": "SDCTBXG1-SBX78"}, { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, {"id": "IAA1", "name": "QAZXSWED-IAA1"}, {"id": "POI1", "name": "PLMNJKIU-POI1"}, { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, {"id": "PBL1", "name": "PBLAPBAI-PBL1"}, {"id": "LAG45", "name": "LARGIZON-LAG1a"}, { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, {"id": "HST70", "name": "HSTNTX70-HST70"}, {"id": "DCC1a", "name": "POIUYTGH-DCC1a"}, { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, {"id": "LON1", "name": "LONEENCO-LON1"}, {"id": "SJU78", "name": "SDIT1JUB-SJU78"}, { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, {"id": "SSW56", "name": "ss8126GT-SSW56"}, {"id": "SBB78", "name": "SDIT1BBB-SBB78"}, { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, {"id": "GNV1", "name": "GNVLSCTL-GNV1"}, {"id": "WAS1", "name": "WASHDCSW-WAS1"}, { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, {"id": "STT1", "name": "STTLWA02-STT1"}, {"id": "STG1", "name": "STTGGE62-STG1"}, { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, {"id": "SBU78", "name": "SDIT1BUB-SBU78"}, {"id": "ATL2", "name": "ATLNGANW-ATL2"}, { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, {"id": "SNG1", "name": "SNGPSIAU-SNG1"}, {"id": "NYC1", "name": "NYCMNY54-NYC1"}, { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, {"id": "AMD15", "name": "AMDFAA01-AMD15"}, {"id": "SNA1", "name": "SNANTXCA-SNA1"}, { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, {"id": "TLP1", "name": "TLPNXM18-TLP1"}, {"id": "SDD81", "name": "SAIT1DD6-SDD81"}, { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, {"id": "DCC2", "name": "POIUYTGH-DCC2"}, {"id": "OKC1", "name": "OKCBOK55-OKC1"}, { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, {"id": "TES36", "name": "ABCEETES-TES36"}, {"id": "COM1", "name": "PLMKOPIU-COM1"}, { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, {"id": "SDG78", "name": "SDIT1BDG-SDG78"}, {"id": "mac20", "name": "PKGTESTF-mac20"}, { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, {"id": "HST25", "name": "HSTNTX01-HST25"}, {"id": "AMD18", "name": "AUDIMA01-AMD18"}, { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, {"id": "SSA56", "name": "SSIT2AA7-SSA56"}, {"id": "SDD82", "name": "SAIT1DD9-SDD82"}, { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, {"id": "SUL2", "name": "WERTYUJK-SUL2"}, {"id": "PUR1", "name": "purelyde-PUR1"}, { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, {"id": "SITE", "name": "LONEENCO-SITE"}, {"id": "ATL1", "name": "ATLNGAMA-ATL1"}, { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, {"id": "TAT34", "name": "TESAAISB-TAT34"}, {"id": "XCP12", "name": "CHKGH123-XCP12"}, { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, {"id": "HPO1", "name": "ATLNGAUP-HPO1"}, {"id": "KJF12", "name": "KJFDH123-KJF12"}, { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, {"id": "SAA12", "name": "SAIT9AF8-SAA12"}, {"id": "SAA14", "name": "SAIT1AA9-SAA14"}, { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, {"id": "CWY1", "name": "CWYMOWBS-CWY1"}, {"id": "ATL76", "name": "TELEPAAI-ATL76"}, { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, {"id": "ATL53", "name": "AAIATLTE-ATL53"}, {"id": "SAA11", "name": "SAIT9AA2-SAA11"}, { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, {"id": "AUG1", "name": "ASDFGHJK-AUG1"}, {"id": "POI22", "name": "POIUY123-POI22"}, { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, {"id": "BHY17", "name": "BHYTFRF3-BHY17"}, {"id": "LIS1", "name": "HOSTPROF-LIS1"}, { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, {"id": "ATL99", "name": "TEESTAAI-ATL43"}, {"id": "ATL64", "name": "FORLOAAJ-ATL64"}, { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, {"id": "RAD10", "name": "INDIPUNE-RAD10"}, {"id": "RTW5", "name": "BHYTFRY4-RTW5"}, { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, {"id": "ATL98", "name": "TEESTAAI-ATL43"}, {"id": "WAN1", "name": "LEIWANGW-WAN1"}, { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, {"id": "RTD2", "name": "BHYTFRk4-RTD2"}, {"id": "NIR1", "name": "ORFLMANA-NIR1"}, { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, {"id": "NUM1", "name": "QWERTYUI-NUM1"}, {"id": "MTN32", "name": "MDTWNJ21-MTN32"}, { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, {"id": "ATL56", "name": "ATLSANAC-ATL56"}, {"id": "AMS1", "name": "AMSTNLBW-AMS1"}, { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, {"id": "JAN1", "name": "ORFLMATT-JAN1"}, {"id": "ABC14", "name": "TESAAISA-ABC14"}, { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, {"id": "MIC54", "name": "MICHIGAN-MIC54"}, {"id": "ABC11", "name": "ATLSANAI-ABC11"}, { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, {"id": "ATL63", "name": "ATLSANEW-ATL63"}, {"id": "ABC12", "name": "ATLSECIA-ABC12"}, { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, {"id": "ABC15", "name": "AAITESAN-ABC15"}, {"id": "AVT1", "name": "AVTRFLHD-AVT1"}, { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + }], + "categoryParameters": { + "owningEntityList": [{ + "id": "aaa1", + "name": "aaa1" + }, {"id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "name": "WayneHolland"}, { + "id": "Melissa", + "name": "Melissa" + }], + "projectList": [{"id": "WATKINS", "name": "WATKINS"}, {"id": "x1", "name": "x1"}, {"id": "yyy1", "name": "yyy1"}], + "lineOfBusinessList": [{"id": "ONAP", "name": "ONAP"}, {"id": "zzz1", "name": "zzz1"}], + "platformList": [{"id": "platform", "name": "platform"}, {"id": "xxx1", "name": "xxx1"}] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [{ + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, {"id": "DHV1707-TestSubscriber-1", "name": "LLOYD BRIDGES", "isPermitted": false}, { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, {"id": "31739f3e-526b-11e6-beb8-9e71128cae77", "name": "CRAIG/ROBERTS", "isPermitted": false}] + } + }; + } +} + +class MockFeatureFlagsService {} + +describe('Network popup service', () => { + let injector; + let service: NetworkPopupService; + let genericFormService: GenericFormService + let defaultDataGeneratorService: DefaultDataGeneratorService; + let fb: FormBuilder; + let iframeService: IframeService; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + providers : [ + NetworkPopupService, + BasicControlGenerator, + NetworkControlGenerator, + DefaultDataGeneratorService, + GenericFormService, + FormBuilder, + IframeService, + AaiService, + LogService, + BasicPopupService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockReduxStore}, + {provide: HttpClient, useClass: MockAppStore}, + {provide: SdcUiServices.ModalService, useClass: MockModalService} + ] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(NetworkPopupService); + genericFormService = injector.get(GenericFormService); + defaultDataGeneratorService = injector.get(DefaultDataGeneratorService); + fb = injector.get(FormBuilder); + iframeService = injector.get(IframeService); + + })().then(done).catch(done.fail)); + + test('getTitle should return the correct title for edit and create mode', () => { + expect(service.getTitle(true)).toBe('Edit Network'); + expect(service.getTitle(false)).toBe('Set new Network'); + }); + + test('getSubLeftTitle should return network model name', () => { + service.uuidData = { + 'networkId': 'Model name' + }; + expect(service.getSubLeftTitle()).toBe('Model name'); + }); + + test('getSubRightTitle should return popup type', () => { + expect(service.getSubRightTitle()).toBe('Network Instance Details'); + }); + + test('getModelInformation should update modelInformations', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const networkModel: string = 'ExtVL 0'; + + service.getModelInformation(serviceId, networkModel); + expect(service.modelInformations.length).toEqual(13); + expect(service.modelInformations[0].label).toEqual("Subscriber Name"); + expect(service.modelInformations[0].values).toEqual(['SILVIA ROBBINS']); + + expect(service.modelInformations[1].label).toEqual("Service Name"); + expect(service.modelInformations[1].values).toEqual(['action-data']); + + expect(service.modelInformations[2].label).toEqual("Service Instance Name"); + expect(service.modelInformations[2].values).toEqual(['InstanceName']); + + expect(service.modelInformations[3].label).toEqual("Model Name"); + expect(service.modelInformations[3].values).toEqual(['ExtVL']); + + expect(service.modelInformations[4].label).toEqual("Model version"); + expect(service.modelInformations[4].values).toEqual(['37.0']); + + expect(service.modelInformations[5].label).toEqual("Description"); + expect(service.modelInformations[5].values).toEqual(['ECOMP generic virtual link (network) base type for all other service-level and global networks']); + + expect(service.modelInformations[6].label).toEqual("Category"); + expect(service.modelInformations[6].values).toEqual([undefined]); + + expect(service.modelInformations[7].label).toEqual("Sub Category"); + expect(service.modelInformations[7].values).toEqual([undefined]); + + expect(service.modelInformations[8].label).toEqual("UUID"); + expect(service.modelInformations[8].values).toEqual(['ddc3f20c-08b5-40fd-af72-c6d14636b986']); + + expect(service.modelInformations[9].label).toEqual("Invariant UUID"); + expect(service.modelInformations[9].values).toEqual(['379f816b-a7aa-422f-be30-17114ff50b7c']); + + expect(service.modelInformations[10].label).toEqual("Service type"); + expect(service.modelInformations[10].values).toEqual(['']); + + expect(service.modelInformations[11].label).toEqual("Service role"); + expect(service.modelInformations[11].values).toEqual(['']); + + expect(service.modelInformations[12].label).toEqual('Network roles'); + expect(service.modelInformations[12].values).toEqual( ['network role 1', ' network role 2']); + }); + + + test('onCancel should trigger closeDialogEvent and iframe', () => { + let that = <any>{ + parentElementClassName: 'content', + _iframeService: iframeService + }; + jest.spyOn(iframeService, 'removeClassCloseModal'); + jest.spyOn(service.closeDialogEvent, 'next'); + + service.onCancel(that, fb.group({})); + + expect(that._iframeService.removeClassCloseModal).toHaveBeenCalledWith(that.parentElementClassName) + expect(service.closeDialogEvent.next).toHaveBeenCalledWith(that); + }); + + test('onSubmit should trigger onCancel', () => { + let that = <any>{ + parentElementClassName: 'content', + _iframeService: iframeService, + storeNetwork: () => { + }, + serviceModel: { + uuid: 'someUUID' + } + }; + let form = fb.group({}); + jest.spyOn(service, 'onCancel'); + jest.spyOn(that, 'storeNetwork'); + jest.spyOn(window.parent, 'postMessage'); + + service.onSubmit(that, form); + + expect(service.onCancel).toHaveBeenCalledWith(that, form); + expect(that.storeNetwork).toHaveBeenCalledWith(that, form.value); + expect(window.parent.postMessage).toHaveBeenCalledWith({ + eventId: 'submitIframe', + data: { + serviceModelId: 'someUUID' + } + }, "*"); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.ts new file mode 100644 index 000000000..7f32360f5 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.ts @@ -0,0 +1,150 @@ +import {Injectable} from "@angular/core"; +import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {NetworkInstance} from "../../../../models/networkInstance"; +import {AppState} from "../../../../store/reducers"; +import {NgRedux} from "@angular-redux/store"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {NetworkControlGenerator} from "../../../genericForm/formControlsServices/networkGenerator/network.control.generator"; +import {ModelInformationItem} from "../../../model-information/model-information.component"; +import {Constants} from "../../../../utils/constants"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {ServiceModel} from "../../../../models/serviceModel"; +import {FormGroup} from "@angular/forms"; +import {ModelInfo} from "../../../../models/modelInfo"; +import {IframeService} from "../../../../utils/iframe.service"; +import {GenericPopupInterface} from "../generic-popup.interface"; +import {Subject} from "rxjs/Subject"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import * as _ from 'lodash'; +import {BasicPopupService} from "../basic.popup.service"; +import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions"; +import {createNetworkInstance, updateNetworkInstance} from "../../../../storeUtil/utils/network/network.actions"; + +@Injectable() +export class NetworkPopupService implements GenericPopupInterface { + dynamicInputs: any; + instance: any; + model: any; + serviceModel: ServiceModel; + modelInformations: ModelInformationItem[] = []; + uuidData: Object; + closeDialogEvent: Subject<any> = new Subject<any>(); + isUpdateMode: boolean; + + + constructor(private _basicControlGenerator: BasicControlGenerator, + private _networkControlGenerator: NetworkControlGenerator, + private _iframeService: IframeService, + private _defaultDataGeneratorService: DefaultDataGeneratorService, + private _aaiService: AaiService, + private _basicPopupService : BasicPopupService, + private _store: NgRedux<AppState>) { + } + + getInstance(serviceId: string, networkName: string, networkStoreKey: string): any { + if (_.isNil(networkStoreKey)) { + return new NetworkInstance(); + } + return this._store.getState().service.serviceInstance[serviceId].networks[networkStoreKey]; + } + + getGenericFormPopupDetails(serviceId: string, networkName: string, networkStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails { + this.uuidData = uuidData; + this.instance = this.getInstance(serviceId, networkName, networkStoreKey); + + + this.getModelInformation(serviceId, networkName); + + return new FormPopupDetails(this, + PopupType.NETWORK_MACRO, + uuidData, + this.getTitle(isUpdateMode), + this.getSubLeftTitle(), + this.getSubRightTitle(), + this.getControls(serviceId, networkName, networkStoreKey, isUpdateMode), + this._basicPopupService.getDynamicInputs(serviceId,networkName, networkStoreKey, 'networks'), + this.modelInformations, + (that, form: FormGroup) => {that.onSubmit(that, form);}, + (that: any, form: FormGroup) => {that.onCancel(that, form); } + ); + } + + getModelInformation(serviceId: string, networkName: string) { + this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => { + this.serviceModel = new ServiceModel(result); + this.model = this._basicPopupService.getModelFromResponse(result, 'networks', networkName); + + const serviceInstance = this._store.getState().service.serviceInstance[serviceId]; + this.modelInformations = [ + new ModelInformationItem("Subscriber Name", "subscriberName", [this._basicPopupService.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true), + new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true), + new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false), + new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true), + new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true), + new ModelInformationItem("Description", "description", [this.model.description]), + new ModelInformationItem("Category", "category", [this.model.category]), + new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]), + new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true), + new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true), + new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]), + new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]), + new ModelInformationItem("Network roles", "network-role", this.model.roles, "", false) + ]; + }); + } + + getControls(serviceId: string, networkName: string, networkStoreKey: string, isUpdateMode: boolean) { + if (this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') { + return this._networkControlGenerator.getMacroFormControls(serviceId, networkStoreKey, networkName, isUpdateMode); + } else { + return this._networkControlGenerator.getAlaCarteFormControls(serviceId, networkStoreKey, networkName, isUpdateMode); + } + } + + + onSubmit(that, form: FormGroup) { + form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']]; + that.storeNetwork(that, form.value); + window.parent.postMessage({ + eventId: 'submitIframe', + data: { + serviceModelId: that.serviceModel.uuid + } + }, "*"); + this.onCancel(that, form); + } + + + onCancel(that, form) { + form.reset(); + that._iframeService.removeClassCloseModal('content'); + this.closeDialogEvent.next(that); + } + + storeNetwork = (that, formValues: any): void => { + formValues.modelInfo = new ModelInfo(that.model); + formValues.uuid = formValues.modelInfo.uuid; + formValues.isMissingData = false; + + if (!that.uuidData.networkStoreKey) { + this._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelUniqueId , that.uuidData.serviceId, 1, <any>{data: {type: 'Network'}})); + this._store.dispatch(createNetworkInstance(formValues, that.uuidData.networkId, that.uuidData.serviceId, that.uuidData.networkId)); + } else { + this._store.dispatch(updateNetworkInstance(formValues, that.uuidData.networkId, that.uuidData.serviceId, that.uuidData.networkStoreKey)); + } + }; + + + getTitle(isUpdateMode : boolean) : string { + return isUpdateMode ? 'Edit Network' : 'Set new Network'; + } + + getSubLeftTitle(): string { + return this.uuidData['networkId']; + } + + getSubRightTitle(): string { + return "Network Instance Details"; + } +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.spec.ts new file mode 100644 index 000000000..64f47a3fc --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.spec.ts @@ -0,0 +1,2439 @@ +import {LogService} from "../../../../utils/log/log.service"; +import {ReflectiveInjector} from "@angular/core"; +import {NgRedux} from "@angular-redux/store"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {HttpClient} from "@angular/common/http"; +import {GenericFormService} from "../../../genericForm/generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import {IframeService} from "../../../../utils/iframe.service"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {ServicePopupService} from "./service.popup.service"; +import {ServiceControlGenerator} from "../../../genericForm/formControlsServices/service.control.generator"; +import {FormControlModel} from "../../../../models/formControlModels/formControl.model"; +import {SdcUiServices} from "onap-ui-angular"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; +import {getTestBed, TestBed} from "@angular/core/testing"; + +class MockModalService<T> {} + +class MockAppStore<T> {} + +class MockReduxStore<T> { + getState() { + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "FLAG_ADVANCED_PORTS_FILTER": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_REGION_ID_FROM_REMOTE": true, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": { + "2017488_adiodvpe0_ASN_1": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "2017488_adiodvpe0_ASN_2": { + "type": "number", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": 2 + }, + "2017488_adiodvpe0_ASN_3": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": false, + "default": "AV_vPE" + }, + "2017488_adiodvpe0_ASN_4": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE_123" + } + } + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "netowrk_role": "role 1, role 2, role 3", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "service": { + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "action-data", + "version": "1.0", + "toscaModelURL": null, + "category": "some category", + "serviceType": "some service type", + "serviceRole": "some service role", + "description": "some description", + "serviceEcompNaming": "false", + "instantiationType": "A-La-Carte", + "inputs": { + "2017488_adiodvpe0_ASN_1": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "2017488_adiodvpe0_ASN_2": { + "type": "number", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": 2 + }, + "2017488_adiodvpe0_ASN_3": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": false, + "default": "AV_vPE" + }, + "2017488_adiodvpe0_ASN_4": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE_123" + } + } + }, + "vnfs": { + "2017-388_ADIOD-vPE 1": { + "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413", + "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "1.0", + "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 1", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-388_ADIOD-vPE 0": { + "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "4.0", + "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 0", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-488_ADIOD-vPE 0": { + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-488_ADIOD-vPE", + "version": "5.0", + "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "max_instances": "3", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": {}, + "properties": { + "network_role" : "network role 1, network role 2", + "min_instances": 1, + "max_instances": 10, + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": {}, + "fabricConfigurations": {}, + "serviceProxies": {}, + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"}, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"}, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [{}], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "networks": {}, + "instanceParams": [{}], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": {"d6557200-ecf2-4641-8094-5393ae3aae60": 1}, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "networks": { + "ExtVL 0": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "sf3zth68xjf", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0:0001": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "2mdxioxca9h", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0_1": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0_1", + "trackById": "z7vd1gmpbs", + "instanceName": "ExtVL", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "zzz1", + "instanceParams": [{ + "vnf_config_template_version": "17.2", + "bandwidth_units": "Gbps", + "bandwidth": "10", + "AIC_CLLI": "ATLMY8GA", + "ASN": "AV_vPE", + "vnf_instance_name": "yoav" + }], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + } + }, + "vnfs": { + "2017-488_ADIOD-vPE 0": { + "rollbackOnFailure": "true", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": { + "instanceName": "yoav", + "volumeGroupName": "123", + "modelInfo": { + "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5", + "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "modelVersion": "6", + "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5" + }, + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "isMissingData": false, + "instanceParams": [{ + "adiodvpe0_bandwidth": "10", + "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6", + "2017488_adiodvpe0_vnf_config_template_version": "17.2", + "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA", + "adiodvpe0_bandwidth_units": "Gbps" + }] + } + } + }, + "isMissingData": false, + "originalName": "2017-488_ADIOD-vPE 0", + "vnfStoreKey": "2017-488_ADIOD-vPE 0", + "trackById": "o65b26t2thj", + "instanceName": "2017488_ADIODvPE", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054", + "platformName": "platform", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "modelName": "2017-488_ADIOD-vPE", + "modelVersion": "5.0", + "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + }, + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + } + }, + "instanceParams": [{"2017488_adiodvpe0_ASN": "AV_vPE"}], + "validationCounter": 0, + "existingNames": {"123": "", "instancename": "", "yoav": "", "extvl": ""}, + "existingVNFCounterMap": {"69e09f68-8b63-4cc9-b9ff-860960b5db09": 1}, + "existingNetworksCounterMap": {"ddc3f20c-08b5-40fd-af72-c6d14636b986": 3}, + "instanceName": "InstanceName", + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "JANET25", + "tenantId": "092eb9e8e4b7412e8787dd091bc58e86", + "aicZoneId": "JAG1", + "projectName": null, + "rollbackOnFailure": "true", + "aicZoneName": "YUDFJULP-JAG1", + "owningEntityName": "WayneHolland", + "testApi": "GR_API", + "tenantName": "USP-SIP-IC-24335-T-01", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450", + "modelName": "action-data", + "modelVersion": "1.0", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450" + }, + "isALaCarte": false, + "name": "action-data", + "version": "1.0", + "description": "", + "category": "", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [{ + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, {"id": "hvf6", "name": "hvf6", "isPermitted": true}], + "lcpRegionsTenantsMap": { + "JANET25": [{ + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + }], + "hvf6": [{ + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, {"id": "cbb99fe4ada84631b7baf046b6fd2044", "name": "DN5242-Nov16-T3", "isPermitted": true}] + } + }, + "productFamilies": [{ + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, {"id": "vTerrance", "name": "vTerrance", "isPermitted": true}, { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, {"id": "db171b8f-115c-4992-a2e3-ee04cae357e0", "name": "LINDSEY", "isPermitted": true}, { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, {"id": "vRosemarie", "name": "HNGATEWAY", "isPermitted": true}, { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, {"id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", "name": "VROUTER", "isPermitted": true}, { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, {"id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", "name": "Transport", "isPermitted": true}, { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, {"id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", "name": "Josefina", "isPermitted": true}, { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, {"id": "12a96a9d-4b4c-4349-a950-fe1159602621", "name": "DARREN MCGEE", "isPermitted": true}], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [{ + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, {"id": "1", "name": "TYLER SILVIA", "isPermitted": true}, { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, {"id": "3", "name": "vJamie", "isPermitted": false}, { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, {"id": "5", "name": "Kennedy", "isPermitted": false}, { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, {"id": "7", "name": "vVM", "isPermitted": false}, { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, {"id": "9", "name": "vMME", "isPermitted": false}, { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, {"id": "11", "name": "vSCP", "isPermitted": false}, { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, {"id": "13", "name": "vMMSC", "isPermitted": false}, { + "id": "14", + "name": "SSD", + "isPermitted": false + }, {"id": "15", "name": "vMOG", "isPermitted": false}, { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, {"id": "17", "name": "JOHANNA_SANTOS", "isPermitted": false}, { + "id": "18", + "name": "vCarroll", + "isPermitted": false + }] + }, + "aicZones": [{"id": "NFT1", "name": "NFTJSSSS-NFT1"}, {"id": "JAG1", "name": "YUDFJULP-JAG1"}, { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, {"id": "BAN1", "name": "VSDKYUTP-BAN1"}, {"id": "DKJ1", "name": "DKJSJDKA-DKJ1"}, { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, {"id": "UIO1", "name": "uioclli1-UIO1"}, {"id": "RAJ1", "name": "YGBIJNLQ-RAJ1"}, { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, {"id": "SDE1", "name": "ZXCVBNMA-SDE1"}, {"id": "VEN2", "name": "FGHJUHIL-VEN2"}, { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, {"id": "JAD1", "name": "JADECLLI-JAD1"}, {"id": "ZXL1", "name": "LWLWCANN-ZXL1"}, { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, {"id": "SDF1", "name": "sdfclli1-SDF1"}, {"id": "RAD1", "name": "RADICAL1-RAD1"}, { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, {"id": "REL1", "name": "INGERFGT-REL1"}, {"id": "JNL1", "name": "CJALSDAC-JNL1"}, { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, {"id": "CHI1", "name": "CHILLIWE-CHI1"}, {"id": "UUU4", "name": "UUUAAAUU-UUU4"}, { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, {"id": "KJN1", "name": "CKALDKSA-KJN1"}, {"id": "SAM1", "name": "SNDGCA64-SAN1"}, { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, {"id": "HJH1", "name": "AOEEQQQD-HJH1"}, {"id": "HGD1", "name": "SDFQWHGD-HGD1"}, { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, {"id": "ATL43", "name": "AICLOCID-ATL43"}, {"id": "ATL54", "name": "AICFTAAI-ATL54"}, { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, {"id": "VEL1", "name": "BNMLKUIK-VEL1"}, {"id": "ICC1", "name": "SANJITAT-ICC1"}, { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, {"id": "DEF2", "name": "WSBHGTYL-DEF2"}, {"id": "MAD11", "name": "SDFQWGKL-MAD11"}, { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, {"id": "GAR1", "name": "NGFVSJKO-GAR1"}, {"id": "SAN22", "name": "GNVLSCTL-SAN22"}, { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, {"id": "JCS1", "name": "JCSJSCJS-JCS1"}, {"id": "DHA12", "name": "WSXEDECF-DHA12"}, { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, {"id": "NCA1", "name": "NCANCANN-NCA1"}, {"id": "IOP1", "name": "iopclli1-IOP1"}, { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, {"id": "KAP1", "name": "HIOUYTRQ-KAP1"}, {"id": "ZEN1", "name": "ZENCLLI1-ZEN1"}, { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, {"id": "CQK1", "name": "CQKSCAKK-CQK1"}, {"id": "SAI1", "name": "UBEKQLPD-SAI1"}, { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, {"id": "IBB1", "name": "PLMKOIJU-IBB1"}, {"id": "TIR2", "name": "PLKINHYI-TIR2"}, { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, {"id": "SLF78", "name": "SDCTLFN1-SLF78"}, {"id": "SEE78", "name": "SDCTEEE4-SEE78"}, { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, {"id": "SAA78", "name": "SDCTAAA1-SAA78"}, {"id": "LUC1", "name": "ATLDFGYC-LUC1"}, { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, {"id": "TOR1", "name": "TOROONXN-TOR1"}, {"id": "QWE1", "name": "QWECLLI1-QWE1"}, { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, {"id": "CAL33", "name": "CALIFORN-CAL33"}, {"id": "SHH78", "name": "SDIT1HHH-SHH78"}, { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, {"id": "CLG1", "name": "CLGRABAD-CLG1"}, {"id": "BNA1", "name": "BNARAGBK-BNA1"}, { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, {"id": "APP1", "name": "WBHGTYUI-APP1"}, {"id": "RJN1", "name": "RJNRBZAW-RJN1"}, { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, {"id": "mac10", "name": "PKGTESTF-mac10"}, {"id": "SXB78", "name": "SDCTGXB1-SXB78"}, { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, {"id": "SYD1", "name": "SYDNAUBV-SYD1"}, {"id": "TOK1", "name": "TOKYJPFA-TOK1"}, { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, {"id": "DCC1b", "name": "POIUYTGH-DCC1b"}, {"id": "SKK78", "name": "SDCTKKK1-SKK78"}, { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, {"id": "SJJ78", "name": "SDCTJJJ1-SJJ78"}, {"id": "SBX78", "name": "SDCTBXG1-SBX78"}, { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, {"id": "IAA1", "name": "QAZXSWED-IAA1"}, {"id": "POI1", "name": "PLMNJKIU-POI1"}, { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, {"id": "PBL1", "name": "PBLAPBAI-PBL1"}, {"id": "LAG45", "name": "LARGIZON-LAG1a"}, { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, {"id": "HST70", "name": "HSTNTX70-HST70"}, {"id": "DCC1a", "name": "POIUYTGH-DCC1a"}, { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, {"id": "LON1", "name": "LONEENCO-LON1"}, {"id": "SJU78", "name": "SDIT1JUB-SJU78"}, { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, {"id": "SSW56", "name": "ss8126GT-SSW56"}, {"id": "SBB78", "name": "SDIT1BBB-SBB78"}, { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, {"id": "GNV1", "name": "GNVLSCTL-GNV1"}, {"id": "WAS1", "name": "WASHDCSW-WAS1"}, { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, {"id": "STT1", "name": "STTLWA02-STT1"}, {"id": "STG1", "name": "STTGGE62-STG1"}, { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, {"id": "SBU78", "name": "SDIT1BUB-SBU78"}, {"id": "ATL2", "name": "ATLNGANW-ATL2"}, { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, {"id": "SNG1", "name": "SNGPSIAU-SNG1"}, {"id": "NYC1", "name": "NYCMNY54-NYC1"}, { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, {"id": "AMD15", "name": "AMDFAA01-AMD15"}, {"id": "SNA1", "name": "SNANTXCA-SNA1"}, { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, {"id": "TLP1", "name": "TLPNXM18-TLP1"}, {"id": "SDD81", "name": "SAIT1DD6-SDD81"}, { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, {"id": "DCC2", "name": "POIUYTGH-DCC2"}, {"id": "OKC1", "name": "OKCBOK55-OKC1"}, { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, {"id": "TES36", "name": "ABCEETES-TES36"}, {"id": "COM1", "name": "PLMKOPIU-COM1"}, { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, {"id": "SDG78", "name": "SDIT1BDG-SDG78"}, {"id": "mac20", "name": "PKGTESTF-mac20"}, { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, {"id": "HST25", "name": "HSTNTX01-HST25"}, {"id": "AMD18", "name": "AUDIMA01-AMD18"}, { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, {"id": "SSA56", "name": "SSIT2AA7-SSA56"}, {"id": "SDD82", "name": "SAIT1DD9-SDD82"}, { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, {"id": "SUL2", "name": "WERTYUJK-SUL2"}, {"id": "PUR1", "name": "purelyde-PUR1"}, { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, {"id": "SITE", "name": "LONEENCO-SITE"}, {"id": "ATL1", "name": "ATLNGAMA-ATL1"}, { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, {"id": "TAT34", "name": "TESAAISB-TAT34"}, {"id": "XCP12", "name": "CHKGH123-XCP12"}, { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, {"id": "HPO1", "name": "ATLNGAUP-HPO1"}, {"id": "KJF12", "name": "KJFDH123-KJF12"}, { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, {"id": "SAA12", "name": "SAIT9AF8-SAA12"}, {"id": "SAA14", "name": "SAIT1AA9-SAA14"}, { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, {"id": "CWY1", "name": "CWYMOWBS-CWY1"}, {"id": "ATL76", "name": "TELEPAAI-ATL76"}, { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, {"id": "ATL53", "name": "AAIATLTE-ATL53"}, {"id": "SAA11", "name": "SAIT9AA2-SAA11"}, { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, {"id": "AUG1", "name": "ASDFGHJK-AUG1"}, {"id": "POI22", "name": "POIUY123-POI22"}, { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, {"id": "BHY17", "name": "BHYTFRF3-BHY17"}, {"id": "LIS1", "name": "HOSTPROF-LIS1"}, { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, {"id": "ATL99", "name": "TEESTAAI-ATL43"}, {"id": "ATL64", "name": "FORLOAAJ-ATL64"}, { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, {"id": "RAD10", "name": "INDIPUNE-RAD10"}, {"id": "RTW5", "name": "BHYTFRY4-RTW5"}, { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, {"id": "ATL98", "name": "TEESTAAI-ATL43"}, {"id": "WAN1", "name": "LEIWANGW-WAN1"}, { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, {"id": "RTD2", "name": "BHYTFRk4-RTD2"}, {"id": "NIR1", "name": "ORFLMANA-NIR1"}, { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, {"id": "NUM1", "name": "QWERTYUI-NUM1"}, {"id": "MTN32", "name": "MDTWNJ21-MTN32"}, { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, {"id": "ATL56", "name": "ATLSANAC-ATL56"}, {"id": "AMS1", "name": "AMSTNLBW-AMS1"}, { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, {"id": "JAN1", "name": "ORFLMATT-JAN1"}, {"id": "ABC14", "name": "TESAAISA-ABC14"}, { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, {"id": "MIC54", "name": "MICHIGAN-MIC54"}, {"id": "ABC11", "name": "ATLSANAI-ABC11"}, { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, {"id": "ATL63", "name": "ATLSANEW-ATL63"}, {"id": "ABC12", "name": "ATLSECIA-ABC12"}, { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, {"id": "ABC15", "name": "AAITESAN-ABC15"}, {"id": "AVT1", "name": "AVTRFLHD-AVT1"}, { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + }], + "categoryParameters": { + "owningEntityList": [{ + "id": "aaa1", + "name": "aaa1" + }, {"id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "name": "WayneHolland"}, { + "id": "Melissa", + "name": "Melissa" + }], + "projectList": [{"id": "WATKINS", "name": "WATKINS"}, {"id": "x1", "name": "x1"}, {"id": "yyy1", "name": "yyy1"}], + "lineOfBusinessList": [{"id": "ONAP", "name": "ONAP"}, {"id": "zzz1", "name": "zzz1"}], + "platformList": [{"id": "platform", "name": "platform"}, {"id": "xxx1", "name": "xxx1"}] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [{ + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, {"id": "DHV1707-TestSubscriber-1", "name": "LLOYD BRIDGES", "isPermitted": false}, { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, {"id": "31739f3e-526b-11e6-beb8-9e71128cae77", "name": "CRAIG/ROBERTS", "isPermitted": false}] + } + }; + } +} + +class MockFeatureFlagsService {} + +describe('Service popup service', () => { + let injector; + let service: ServicePopupService; + let genericFormService: GenericFormService; + let defaultDataGeneratorService: DefaultDataGeneratorService; + let fb: FormBuilder; + let iframeService: IframeService; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + providers : [ + ServicePopupService, + BasicControlGenerator, + ServiceControlGenerator, + DefaultDataGeneratorService, + GenericFormService, + FormBuilder, + IframeService, + AaiService, + LogService, + BasicPopupService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockReduxStore}, + {provide: HttpClient, useClass: MockAppStore}, + {provide: SdcUiServices.ModalService, useClass: MockModalService} + ] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(ServicePopupService); + genericFormService = injector.get(GenericFormService); + defaultDataGeneratorService = injector.get(DefaultDataGeneratorService); + fb = injector.get(FormBuilder); + iframeService = injector.get(IframeService); + + })().then(done).catch(done.fail)); + + test('getTitle should return the correct title for edit and create mode', () => { + expect(service.getTitle(true)).toBe('Edit service instance'); + expect(service.getTitle(false)).toBe('Set a new service instance'); + }); + + test('getSubLeftTitle should return service model name', () => { + service.uuidData = { + serviceId : '6b528779-44a3-4472-bdff-9cd15ec93450' + }; + expect(service.getSubLeftTitle()).toBe('action-data'); + }); + + test('getSubRightTitle should return popup type', () => { + expect(service.getSubRightTitle()).toBe('Service Instance Details'); + }); + + test('getModelInformation should update modelInformations', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + + service.getModelInformation(serviceId); + expect(service.modelInformations.length).toEqual(7); + + expect(service.modelInformations[0].label).toEqual("Model version"); + expect(service.modelInformations[0].values).toEqual(['1.0']); + + expect(service.modelInformations[1].label).toEqual("Description"); + expect(service.modelInformations[1].values).toEqual(['some description']); + + expect(service.modelInformations[2].label).toEqual("Category"); + expect(service.modelInformations[2].values).toEqual(['some category']); + + expect(service.modelInformations[3].label).toEqual("UUID"); + expect(service.modelInformations[3].values).toEqual(['6b528779-44a3-4472-bdff-9cd15ec93450']); + + expect(service.modelInformations[4].label).toEqual("Invariant UUID"); + expect(service.modelInformations[4].values).toEqual(['e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0']); + + expect(service.modelInformations[5].label).toEqual("Service type"); + expect(service.modelInformations[5].values).toEqual(['some service type']); + + expect(service.modelInformations[6].label).toEqual("Service role"); + expect(service.modelInformations[6].values).toEqual(['some service role']); + }); + + + test('onCancel should trigger closeDialogEvent and iframe', () => { + let that = <any>{ + parentElementClassName: 'content', + _iframeService: iframeService, + resetPopupData : () =>{ + + } + }; + jest.spyOn(iframeService, 'removeClassCloseModal'); + jest.spyOn(service.closeDialogEvent, 'next'); + service.onCancel(that, fb.group({})); + + expect(that._iframeService.removeClassCloseModal).toHaveBeenCalledWith(that.parentElementClassName) + expect(service.closeDialogEvent.next).toHaveBeenCalledWith(that); + }); + + + test('getDynamicInputs should return list of controls' ,() => { + const result: FormControlModel[] = service.getDynamicInputs('6b528779-44a3-4472-bdff-9cd15ec93450'); + console.log(result); + expect(result.length).toEqual(4); + expect(result[0].controlName).toEqual('2017488_adiodvpe0_ASN_1'); + expect(result[1].controlName).toEqual('2017488_adiodvpe0_ASN_2'); + expect(result[2].controlName).toEqual('2017488_adiodvpe0_ASN_3'); + expect(result[3].controlName).toEqual('2017488_adiodvpe0_ASN_4'); + + expect(result[0].dataTestId).toEqual('2017488_adiodvpe0_ASN_1'); + expect(result[1].dataTestId).toEqual('2017488_adiodvpe0_ASN_2'); + expect(result[2].dataTestId).toEqual('2017488_adiodvpe0_ASN_3'); + expect(result[3].dataTestId).toEqual('2017488_adiodvpe0_ASN_4'); + + expect(result[0].validations.length).toEqual(1); + expect(result[1].validations.length).toEqual(1); + expect(result[2].validations.length).toEqual(0); + expect(result[3].validations.length).toEqual(1); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.ts new file mode 100644 index 000000000..dc83083cb --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.ts @@ -0,0 +1,184 @@ +import {Injectable} from "@angular/core"; +import {GenericPopupInterface} from "../generic-popup.interface"; +import {ServiceModel} from "../../../../models/serviceModel"; +import {ModelInformationItem} from "../../../model-information/model-information.component"; +import {Subject} from "rxjs"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {IframeService} from "../../../../utils/iframe.service"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../../store/reducers"; +import {ServiceControlGenerator} from "../../../genericForm/formControlsServices/service.control.generator"; +import {FormGroup} from "@angular/forms"; +import {Constants} from "../../../../utils/constants"; +import {ServiceInstance} from "../../../../models/serviceInstance"; +import {ModelInfo} from "../../../../models/modelInfo"; +import {FormControlModel} from "../../../../models/formControlModels/formControl.model"; +import { + ServiceActions, + createServiceInstance, + updateServiceInstance +} from "../../../../storeUtil/utils/service/service.actions"; +import {ServiceInstanceActions} from "../../../../models/serviceInstanceActions"; +import * as _ from 'lodash'; +@Injectable() +export class ServicePopupService implements GenericPopupInterface { + dynamicInputs: any; + instance: any; + model: any; + serviceModel: ServiceModel; + modelInformations: ModelInformationItem[] = []; + uuidData: Object; + closeDialogEvent: Subject<any> = new Subject<any>(); + isUpdateMode: boolean; + + + + constructor(private _basicControlGenerator: BasicControlGenerator, + private _serviceControlGenerator: ServiceControlGenerator, + private _iframeService: IframeService, + private _defaultDataGeneratorService: DefaultDataGeneratorService, + private _aaiService: AaiService, + private _basicPopupService : BasicPopupService, + private _store: NgRedux<AppState>) { + + } + + getGenericFormPopupDetails(serviceId: string, modelName: string, storeKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails { + this.uuidData = uuidData; + this.instance = this.getInstance(serviceId); + this.getModelInformation(serviceId); + return new FormPopupDetails(this, + PopupType.SERVICE, + uuidData, + this.getTitle(isUpdateMode), + this.getSubLeftTitle(), + this.getSubRightTitle(), + this.getControls(serviceId), + this.getDynamicInputs(serviceId), + this.modelInformations, + (that, form: FormGroup) => {that.onSubmit(that, form);}, + (that: any, form: FormGroup) => {that.onCancel(that, form); } + ); + } + + getDynamicInputs(serviceId) : FormControlModel[]{ + let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[serviceId].service.inputs); + return this._basicControlGenerator.getServiceDynamicInputs(dynamic, serviceId); + } + + + getControls(serviceId: string) { + if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') { + return this._serviceControlGenerator.getMacroFormControls(serviceId, this.dynamicInputs); + }else { + return this._serviceControlGenerator.getAlaCartControls(serviceId, this.dynamicInputs); + } + } + + getInstance(serviceId): ServiceInstance { + let result: ServiceInstance = null; + if(!_.isNil(this._store.getState().service.serviceInstance[serviceId])){ + result = this._store.getState().service.serviceInstance[serviceId]; + } + return result; + } + + getModelInformation(serviceId: string): void { + this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => { + this.serviceModel = new ServiceModel(result); + + this.model = this._store.getState().service.serviceHierarchy[serviceId]; + this.modelInformations = [ + new ModelInformationItem("Model version", "modelVersion", [this.serviceModel.version], "", true), + new ModelInformationItem("Description", "description", [this.serviceModel.description]), + new ModelInformationItem("Category", "category", [this.serviceModel.category]), + new ModelInformationItem("UUID", "uuid", [this.serviceModel.uuid], Constants.ServicePopup.TOOLTIP_UUID, true), + new ModelInformationItem("Invariant UUID", "invariantUuid", [this.serviceModel.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true), + new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]), + new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]) + ]; + }); + } + + getSubLeftTitle(): string { + return this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].service.name; + } + + getSubRightTitle(): string { + return "Service Instance Details"; + } + + getTitle(isUpdateMode: boolean): string { + return isUpdateMode ? "Edit service instance" : "Set a new service instance"; + } + + onCancel(that, form): void { + form.reset(); + that._iframeService.removeClassCloseModal('content'); + this.closeDialogEvent.next(that); + } + + onSubmit(that, form: FormGroup, ...args): void { + form = that.updateExtraValues(that, form); + that.storeServiceInstance(form.value, args[0], [], new ModelInfo(that.serviceModel), that.serviceModel); + window.parent.postMessage( { + eventId: 'submitIframe', + data: { + serviceModelId: that.serviceModel.uuid + } + }, "*"); + this.onCancel(that, form); + } + + updateExtraValues = (that, form) : any => { + const service = that._store.getState().service; + form.value['bulkSize'] = that.uuidData['bulkSize']; + form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']]; + form.value['aicZoneName'] = !_.isNil(form.value['aicZoneId']) ?this.getNameFromListById(service.aicZones, form.value['aicZoneId']) : null; + form.value['owningEntityName'] = !_.isNil(form.value['owningEntityId']) ?this.getNameFromListById(service.categoryParameters.owningEntityList, form.value['owningEntityId']) : null; + form.value['testApi'] = sessionStorage.getItem("msoRequestParametersTestApiValue"); + form.value['tenantName'] = this.getNameFromListById(service.lcpRegionsAndTenants.lcpRegionsTenantsMap[form.value['lcpCloudRegionId']], form.value['tenantId']); + return form; + }; + + getNameFromListById(list, id) { + if(list && id) { + return list.find(item => item.id === id).name; + } + return null; + } + + storeServiceInstance = (formValues:any, servicesQty:number, dynamicInputs:any, serviceModel:ModelInfo, serviceDetails: any ) => { + formValues.bulkSize = this.uuidData['bulkSize']; + formValues.modelInfo = serviceModel; + let instantiationType = this._store.getState().service.serviceHierarchy[serviceModel.modelVersionId].service.instantiationType; + this.setIsALaCarte(formValues, instantiationType); + this.setTestApi(formValues); + Object.assign(formValues, serviceDetails); + let isCreateMode: boolean = this._store.getState().service.serviceInstance[serviceModel.modelVersionId] == null; + if(isCreateMode){ + this._store.dispatch(createServiceInstance(formValues, serviceModel.modelVersionId)); + }else { + this._store.dispatch(updateServiceInstance(formValues, serviceModel.modelVersionId)); + } + + if (this._store.getState().global.flags['FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD'] && isCreateMode) { + this._defaultDataGeneratorService.updateReduxOnFirstSet(serviceModel.modelVersionId, formValues); + } + }; + + setIsALaCarte = (formValues: any, instantiationType) => { + formValues.isALaCarte = instantiationType === 'A-La-Carte'; + }; + + setTestApi = (formValues: any) =>{ + if (this._store.getState().global.flags['FLAG_ADD_MSO_TESTAPI_FIELD'] && formValues.isAlaCarte) { + formValues.testApi = sessionStorage.getItem("msoRequestParametersTestApiValue"); + } + }; +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.spec.ts new file mode 100644 index 000000000..3794707ab --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.spec.ts @@ -0,0 +1,2407 @@ +import {LogService} from "../../../../utils/log/log.service"; +import {NgRedux} from "@angular-redux/store"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {HttpClient} from "@angular/common/http"; +import {GenericFormService} from "../../../genericForm/generic-form.service"; +import {FormBuilder} from "@angular/forms"; +import {IframeService} from "../../../../utils/iframe.service"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {VfModulePopuopService} from "./vfModule.popuop.service"; +import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator"; +import {SdcUiServices} from "onap-ui-angular"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; +import {getTestBed, TestBed} from "@angular/core/testing"; + +class MockModalService<T> {} + +class MockAppStore<T> {} + +class MockReduxStore<T> { + getState() { + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "FLAG_ADVANCED_PORTS_FILTER": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_REGION_ID_FROM_REMOTE": true, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "netowrk_role": "role 1, role 2, role 3", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "service": { + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "action-data", + "version": "1.0", + "toscaModelURL": null, + "category": "", + "serviceType": "", + "serviceRole": "", + "description": "", + "serviceEcompNaming": "false", + "instantiationType": "A-La-Carte", + "inputs": { + "2017488_adiodvpe0_ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + } + } + }, + "vnfs": { + "2017-388_ADIOD-vPE 1": { + "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413", + "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "1.0", + "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 1", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-388_ADIOD-vPE 0": { + "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "4.0", + "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 0", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-488_ADIOD-vPE 0": { + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-488_ADIOD-vPE", + "version": "5.0", + "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"}, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"}, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "max_instances": "3", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": {}, + "properties": { + "network_role" : "network role 1, network role 2", + "min_instances": 1, + "max_instances": 10, + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": {}, + "fabricConfigurations": {}, + "serviceProxies": {}, + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"}, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"}, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [{}], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "networks": {}, + "instanceParams": [{}], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": {"d6557200-ecf2-4641-8094-5393ae3aae60": 1}, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "networks": { + "ExtVL 0": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "sf3zth68xjf", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0:0001": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "2mdxioxca9h", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0_1": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0_1", + "trackById": "z7vd1gmpbs", + "instanceName": "ExtVL", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "zzz1", + "instanceParams": [{ + "vnf_config_template_version": "17.2", + "bandwidth_units": "Gbps", + "bandwidth": "10", + "AIC_CLLI": "ATLMY8GA", + "ASN": "AV_vPE", + "vnf_instance_name": "yoav" + }], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + } + }, + "vnfs": { + "2017-488_ADIOD-vPE 0": { + "rollbackOnFailure": "true", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": { + "instanceName": "yoav", + "volumeGroupName": "123", + "modelInfo": { + "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5", + "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "modelVersion": "6", + "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5" + }, + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "isMissingData": false, + "instanceParams": [{ + "adiodvpe0_bandwidth": "10", + "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6", + "2017488_adiodvpe0_vnf_config_template_version": "17.2", + "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA", + "adiodvpe0_bandwidth_units": "Gbps" + }] + } + } + }, + "isMissingData": false, + "originalName": "2017-488_ADIOD-vPE 0", + "vnfStoreKey": "2017-488_ADIOD-vPE 0", + "trackById": "o65b26t2thj", + "instanceName": "2017488_ADIODvPE", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054", + "platformName": "platform", + "lineOfBusiness": "ONAP", + "instanceParams": [{}], + "modelInfo": { + "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "modelName": "2017-488_ADIOD-vPE", + "modelVersion": "5.0", + "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + }, + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + } + }, + "instanceParams": [{"2017488_adiodvpe0_ASN": "AV_vPE"}], + "validationCounter": 0, + "existingNames": {"123": "", "instancename": "", "yoav": "", "extvl": ""}, + "existingVNFCounterMap": {"69e09f68-8b63-4cc9-b9ff-860960b5db09": 1}, + "existingNetworksCounterMap": {"ddc3f20c-08b5-40fd-af72-c6d14636b986": 3}, + "instanceName": "InstanceName", + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "JANET25", + "tenantId": "092eb9e8e4b7412e8787dd091bc58e86", + "aicZoneId": "JAG1", + "projectName": null, + "rollbackOnFailure": "true", + "aicZoneName": "YUDFJULP-JAG1", + "owningEntityName": "WayneHolland", + "testApi": "GR_API", + "tenantName": "USP-SIP-IC-24335-T-01", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450", + "modelName": "action-data", + "modelVersion": "1.0", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450" + }, + "isALaCarte": false, + "name": "action-data", + "version": "1.0", + "description": "", + "category": "", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [{ + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, {"id": "hvf6", "name": "hvf6", "isPermitted": true}], + "lcpRegionsTenantsMap": { + "JANET25": [{ + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + }], + "hvf6": [{ + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, {"id": "cbb99fe4ada84631b7baf046b6fd2044", "name": "DN5242-Nov16-T3", "isPermitted": true}] + } + }, + "productFamilies": [{ + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, {"id": "vTerrance", "name": "vTerrance", "isPermitted": true}, { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, {"id": "db171b8f-115c-4992-a2e3-ee04cae357e0", "name": "LINDSEY", "isPermitted": true}, { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, {"id": "vRosemarie", "name": "HNGATEWAY", "isPermitted": true}, { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, {"id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", "name": "VROUTER", "isPermitted": true}, { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, {"id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", "name": "Transport", "isPermitted": true}, { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, {"id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", "name": "Josefina", "isPermitted": true}, { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, {"id": "12a96a9d-4b4c-4349-a950-fe1159602621", "name": "DARREN MCGEE", "isPermitted": true}], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [{ + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, {"id": "1", "name": "TYLER SILVIA", "isPermitted": true}, { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, {"id": "3", "name": "vJamie", "isPermitted": false}, { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, {"id": "5", "name": "Kennedy", "isPermitted": false}, { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, {"id": "7", "name": "vVM", "isPermitted": false}, { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, {"id": "9", "name": "vMME", "isPermitted": false}, { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, {"id": "11", "name": "vSCP", "isPermitted": false}, { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, {"id": "13", "name": "vMMSC", "isPermitted": false}, { + "id": "14", + "name": "SSD", + "isPermitted": false + }, {"id": "15", "name": "vMOG", "isPermitted": false}, { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, {"id": "17", "name": "JOHANNA_SANTOS", "isPermitted": false}, { + "id": "18", + "name": "vCarroll", + "isPermitted": false + }] + }, + "aicZones": [{"id": "NFT1", "name": "NFTJSSSS-NFT1"}, {"id": "JAG1", "name": "YUDFJULP-JAG1"}, { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, {"id": "BAN1", "name": "VSDKYUTP-BAN1"}, {"id": "DKJ1", "name": "DKJSJDKA-DKJ1"}, { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, {"id": "UIO1", "name": "uioclli1-UIO1"}, {"id": "RAJ1", "name": "YGBIJNLQ-RAJ1"}, { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, {"id": "SDE1", "name": "ZXCVBNMA-SDE1"}, {"id": "VEN2", "name": "FGHJUHIL-VEN2"}, { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, {"id": "JAD1", "name": "JADECLLI-JAD1"}, {"id": "ZXL1", "name": "LWLWCANN-ZXL1"}, { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, {"id": "SDF1", "name": "sdfclli1-SDF1"}, {"id": "RAD1", "name": "RADICAL1-RAD1"}, { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, {"id": "REL1", "name": "INGERFGT-REL1"}, {"id": "JNL1", "name": "CJALSDAC-JNL1"}, { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, {"id": "CHI1", "name": "CHILLIWE-CHI1"}, {"id": "UUU4", "name": "UUUAAAUU-UUU4"}, { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, {"id": "KJN1", "name": "CKALDKSA-KJN1"}, {"id": "SAM1", "name": "SNDGCA64-SAN1"}, { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, {"id": "HJH1", "name": "AOEEQQQD-HJH1"}, {"id": "HGD1", "name": "SDFQWHGD-HGD1"}, { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, {"id": "ATL43", "name": "AICLOCID-ATL43"}, {"id": "ATL54", "name": "AICFTAAI-ATL54"}, { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, {"id": "VEL1", "name": "BNMLKUIK-VEL1"}, {"id": "ICC1", "name": "SANJITAT-ICC1"}, { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, {"id": "DEF2", "name": "WSBHGTYL-DEF2"}, {"id": "MAD11", "name": "SDFQWGKL-MAD11"}, { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, {"id": "GAR1", "name": "NGFVSJKO-GAR1"}, {"id": "SAN22", "name": "GNVLSCTL-SAN22"}, { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, {"id": "JCS1", "name": "JCSJSCJS-JCS1"}, {"id": "DHA12", "name": "WSXEDECF-DHA12"}, { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, {"id": "NCA1", "name": "NCANCANN-NCA1"}, {"id": "IOP1", "name": "iopclli1-IOP1"}, { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, {"id": "KAP1", "name": "HIOUYTRQ-KAP1"}, {"id": "ZEN1", "name": "ZENCLLI1-ZEN1"}, { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, {"id": "CQK1", "name": "CQKSCAKK-CQK1"}, {"id": "SAI1", "name": "UBEKQLPD-SAI1"}, { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, {"id": "IBB1", "name": "PLMKOIJU-IBB1"}, {"id": "TIR2", "name": "PLKINHYI-TIR2"}, { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, {"id": "SLF78", "name": "SDCTLFN1-SLF78"}, {"id": "SEE78", "name": "SDCTEEE4-SEE78"}, { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, {"id": "SAA78", "name": "SDCTAAA1-SAA78"}, {"id": "LUC1", "name": "ATLDFGYC-LUC1"}, { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, {"id": "TOR1", "name": "TOROONXN-TOR1"}, {"id": "QWE1", "name": "QWECLLI1-QWE1"}, { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, {"id": "CAL33", "name": "CALIFORN-CAL33"}, {"id": "SHH78", "name": "SDIT1HHH-SHH78"}, { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, {"id": "CLG1", "name": "CLGRABAD-CLG1"}, {"id": "BNA1", "name": "BNARAGBK-BNA1"}, { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, {"id": "APP1", "name": "WBHGTYUI-APP1"}, {"id": "RJN1", "name": "RJNRBZAW-RJN1"}, { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, {"id": "mac10", "name": "PKGTESTF-mac10"}, {"id": "SXB78", "name": "SDCTGXB1-SXB78"}, { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, {"id": "SYD1", "name": "SYDNAUBV-SYD1"}, {"id": "TOK1", "name": "TOKYJPFA-TOK1"}, { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, {"id": "DCC1b", "name": "POIUYTGH-DCC1b"}, {"id": "SKK78", "name": "SDCTKKK1-SKK78"}, { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, {"id": "SJJ78", "name": "SDCTJJJ1-SJJ78"}, {"id": "SBX78", "name": "SDCTBXG1-SBX78"}, { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, {"id": "IAA1", "name": "QAZXSWED-IAA1"}, {"id": "POI1", "name": "PLMNJKIU-POI1"}, { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, {"id": "PBL1", "name": "PBLAPBAI-PBL1"}, {"id": "LAG45", "name": "LARGIZON-LAG1a"}, { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, {"id": "HST70", "name": "HSTNTX70-HST70"}, {"id": "DCC1a", "name": "POIUYTGH-DCC1a"}, { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, {"id": "LON1", "name": "LONEENCO-LON1"}, {"id": "SJU78", "name": "SDIT1JUB-SJU78"}, { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, {"id": "SSW56", "name": "ss8126GT-SSW56"}, {"id": "SBB78", "name": "SDIT1BBB-SBB78"}, { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, {"id": "GNV1", "name": "GNVLSCTL-GNV1"}, {"id": "WAS1", "name": "WASHDCSW-WAS1"}, { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, {"id": "STT1", "name": "STTLWA02-STT1"}, {"id": "STG1", "name": "STTGGE62-STG1"}, { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, {"id": "SBU78", "name": "SDIT1BUB-SBU78"}, {"id": "ATL2", "name": "ATLNGANW-ATL2"}, { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, {"id": "SNG1", "name": "SNGPSIAU-SNG1"}, {"id": "NYC1", "name": "NYCMNY54-NYC1"}, { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, {"id": "AMD15", "name": "AMDFAA01-AMD15"}, {"id": "SNA1", "name": "SNANTXCA-SNA1"}, { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, {"id": "TLP1", "name": "TLPNXM18-TLP1"}, {"id": "SDD81", "name": "SAIT1DD6-SDD81"}, { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, {"id": "DCC2", "name": "POIUYTGH-DCC2"}, {"id": "OKC1", "name": "OKCBOK55-OKC1"}, { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, {"id": "TES36", "name": "ABCEETES-TES36"}, {"id": "COM1", "name": "PLMKOPIU-COM1"}, { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, {"id": "SDG78", "name": "SDIT1BDG-SDG78"}, {"id": "mac20", "name": "PKGTESTF-mac20"}, { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, {"id": "HST25", "name": "HSTNTX01-HST25"}, {"id": "AMD18", "name": "AUDIMA01-AMD18"}, { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, {"id": "SSA56", "name": "SSIT2AA7-SSA56"}, {"id": "SDD82", "name": "SAIT1DD9-SDD82"}, { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, {"id": "SUL2", "name": "WERTYUJK-SUL2"}, {"id": "PUR1", "name": "purelyde-PUR1"}, { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, {"id": "SITE", "name": "LONEENCO-SITE"}, {"id": "ATL1", "name": "ATLNGAMA-ATL1"}, { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, {"id": "TAT34", "name": "TESAAISB-TAT34"}, {"id": "XCP12", "name": "CHKGH123-XCP12"}, { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, {"id": "HPO1", "name": "ATLNGAUP-HPO1"}, {"id": "KJF12", "name": "KJFDH123-KJF12"}, { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, {"id": "SAA12", "name": "SAIT9AF8-SAA12"}, {"id": "SAA14", "name": "SAIT1AA9-SAA14"}, { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, {"id": "CWY1", "name": "CWYMOWBS-CWY1"}, {"id": "ATL76", "name": "TELEPAAI-ATL76"}, { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, {"id": "ATL53", "name": "AAIATLTE-ATL53"}, {"id": "SAA11", "name": "SAIT9AA2-SAA11"}, { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, {"id": "AUG1", "name": "ASDFGHJK-AUG1"}, {"id": "POI22", "name": "POIUY123-POI22"}, { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, {"id": "BHY17", "name": "BHYTFRF3-BHY17"}, {"id": "LIS1", "name": "HOSTPROF-LIS1"}, { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, {"id": "ATL99", "name": "TEESTAAI-ATL43"}, {"id": "ATL64", "name": "FORLOAAJ-ATL64"}, { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, {"id": "RAD10", "name": "INDIPUNE-RAD10"}, {"id": "RTW5", "name": "BHYTFRY4-RTW5"}, { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, {"id": "ATL98", "name": "TEESTAAI-ATL43"}, {"id": "WAN1", "name": "LEIWANGW-WAN1"}, { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, {"id": "RTD2", "name": "BHYTFRk4-RTD2"}, {"id": "NIR1", "name": "ORFLMANA-NIR1"}, { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, {"id": "NUM1", "name": "QWERTYUI-NUM1"}, {"id": "MTN32", "name": "MDTWNJ21-MTN32"}, { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, {"id": "ATL56", "name": "ATLSANAC-ATL56"}, {"id": "AMS1", "name": "AMSTNLBW-AMS1"}, { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, {"id": "JAN1", "name": "ORFLMATT-JAN1"}, {"id": "ABC14", "name": "TESAAISA-ABC14"}, { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, {"id": "MIC54", "name": "MICHIGAN-MIC54"}, {"id": "ABC11", "name": "ATLSANAI-ABC11"}, { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, {"id": "ATL63", "name": "ATLSANEW-ATL63"}, {"id": "ABC12", "name": "ATLSECIA-ABC12"}, { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, {"id": "ABC15", "name": "AAITESAN-ABC15"}, {"id": "AVT1", "name": "AVTRFLHD-AVT1"}, { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + }], + "categoryParameters": { + "owningEntityList": [{ + "id": "aaa1", + "name": "aaa1" + }, {"id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "name": "WayneHolland"}, { + "id": "Melissa", + "name": "Melissa" + }], + "projectList": [{"id": "WATKINS", "name": "WATKINS"}, {"id": "x1", "name": "x1"}, {"id": "yyy1", "name": "yyy1"}], + "lineOfBusinessList": [{"id": "ONAP", "name": "ONAP"}, {"id": "zzz1", "name": "zzz1"}], + "platformList": [{"id": "platform", "name": "platform"}, {"id": "xxx1", "name": "xxx1"}] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [{ + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, {"id": "DHV1707-TestSubscriber-1", "name": "LLOYD BRIDGES", "isPermitted": false}, { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, {"id": "31739f3e-526b-11e6-beb8-9e71128cae77", "name": "CRAIG/ROBERTS", "isPermitted": false}] + } + }; + } +} + +class MockFeatureFlagsService {} + +describe('VFModule popup service', () => { + let injector; + let service: VfModulePopuopService; + let genericFormService: GenericFormService + let defaultDataGeneratorService: DefaultDataGeneratorService; + let fb: FormBuilder; + let iframeService: IframeService; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + providers : [ + VfModulePopuopService, + BasicControlGenerator, + VfModuleControlGenerator, + DefaultDataGeneratorService, + GenericFormService, + FormBuilder, + IframeService, + AaiService, + LogService, + BasicPopupService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + {provide: NgRedux, useClass: MockReduxStore}, + {provide: HttpClient, useClass: MockAppStore}, + {provide: SdcUiServices.ModalService, useClass: MockModalService} + ] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(VfModulePopuopService); + genericFormService = injector.get(GenericFormService); + defaultDataGeneratorService = injector.get(DefaultDataGeneratorService); + fb = injector.get(FormBuilder); + iframeService = injector.get(IframeService); + + })().then(done).catch(done.fail)); + + test('getTitle should return the correct title for edit and create mode', () => { + expect(service.getTitle(true)).toBe('Edit Module (Heat stack)'); + expect(service.getTitle(false)).toBe('Set new Module (Heat stack)'); + }); + + test('getInstance should return new VfModuleInstance', () => { + const serviceId : string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const vnfStoreKey = null; + const vfModuleStoreKey = "VF_vMee 0"; + let VfModuleInstance ; + VfModuleInstance = service.getInstance(serviceId, vnfStoreKey, vfModuleStoreKey); + expect (VfModuleInstance).toBeDefined(); + }); + + test('getSubLeftTitle should return network model name', () => { + service.model = { + 'name' : 'Model name' + }; + expect(service.getSubLeftTitle()).toBe('Model name'); + }); + + test('getSubRightTitle should return popup type', () => { + expect(service.getSubRightTitle()).toBe('Module (Heat stack) Instance Details'); + }); + + test('getModelInformation should update modelInformations', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const vfModuleModelName: string = '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1'; + + service.getModelInformation(serviceId, vfModuleModelName); + expect(service.modelInformations.length).toEqual(15); + expect(service.modelInformations[0].label).toEqual("Subscriber Name"); + expect(service.modelInformations[0].values).toEqual(['SILVIA ROBBINS']); + + expect(service.modelInformations[1].label).toEqual("Service Name"); + expect(service.modelInformations[1].values).toEqual(['action-data']); + + expect(service.modelInformations[2].label).toEqual("Service Instance Name"); + expect(service.modelInformations[2].values).toEqual(['InstanceName']); + + expect(service.modelInformations[3].label).toEqual("Model Name"); + expect(service.modelInformations[3].values).toEqual(['2017488AdiodVpe..ADIOD_vRE_BV..module-1']); + + expect(service.modelInformations[4].label).toEqual("Model version"); + expect(service.modelInformations[4].values).toEqual(['6']); + + expect(service.modelInformations[5].label).toEqual("Description"); + expect(service.modelInformations[5].values).toEqual([null]); + + expect(service.modelInformations[6].label).toEqual("Category"); + expect(service.modelInformations[6].values).toEqual([undefined]); + + expect(service.modelInformations[7].label).toEqual("Sub Category"); + expect(service.modelInformations[7].values).toEqual([undefined]); + + expect(service.modelInformations[8].label).toEqual("UUID"); + expect(service.modelInformations[8].values).toEqual(['25284168-24bb-4698-8cb4-3f509146eca5']); + + expect(service.modelInformations[9].label).toEqual("Invariant UUID"); + expect(service.modelInformations[9].values).toEqual(['7253ff5c-97f0-4b8b-937c-77aeb4d79aa1']); + + expect(service.modelInformations[10].label).toEqual("Service type"); + expect(service.modelInformations[10].values).toEqual(['']); + + expect(service.modelInformations[11].label).toEqual("Service role"); + expect(service.modelInformations[11].values).toEqual(['']); + + expect(service.modelInformations[12].label).toEqual("Minimum to instantiate"); + expect(service.modelInformations[12].values).toEqual(['0']); + + expect(service.modelInformations[13].label).toEqual("Maximum to instantiate"); + expect(service.modelInformations[13].values).toEqual(['1']); + }); + + + test('onCancel should trigger closeDialogEvent and iframe', () => { + let that = <any>{ + parentElementClassName: 'content', + _iframeService: iframeService + }; + jest.spyOn(iframeService, 'removeClassCloseModal'); + jest.spyOn(service.closeDialogEvent, 'next'); + + service.onCancel(that, fb.group({})); + + expect(that._iframeService.removeClassCloseModal).toHaveBeenCalledWith(that.parentElementClassName) + expect(service.closeDialogEvent.next).toHaveBeenCalledWith(that); + }); + + test('onSubmit should trigger onCancel', () => { + let that = <any>{ + parentElementClassName: 'content', + _iframeService: iframeService, + storeVFModule: () => { + }, + serviceModel: { + uuid: 'someUUID' + } + }; + let form = fb.group({}); + jest.spyOn(service, 'onCancel'); + jest.spyOn(that, 'storeVFModule'); + jest.spyOn(window.parent, 'postMessage'); + + service.onSubmit(that, form); + + expect(service.onCancel).toHaveBeenCalledWith(that, form); + expect(that.storeVFModule).toHaveBeenCalledWith(that, form.value); + expect(window.parent.postMessage).toHaveBeenCalledWith({ + eventId: 'submitIframe', + data: { + serviceModelId: 'someUUID' + } + }, "*"); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.ts new file mode 100644 index 000000000..7563f1d2a --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.ts @@ -0,0 +1,184 @@ +import {Injectable} from "@angular/core"; +import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {AppState} from "../../../../store/reducers"; +import {NgRedux} from "@angular-redux/store"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {ModelInformationItem} from "../../../model-information/model-information.component"; +import {Constants} from "../../../../utils/constants"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {ServiceModel} from "../../../../models/serviceModel"; +import {FormGroup} from "@angular/forms"; +import {ModelInfo} from "../../../../models/modelInfo"; +import {IframeService} from "../../../../utils/iframe.service"; +import {GenericPopupInterface} from "../generic-popup.interface"; +import {Subject} from "rxjs/Subject"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {VfModuleInstance} from "../../../../models/vfModuleInstance"; +import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator"; +import {FormControlModel} from "../../../../models/formControlModels/formControl.model"; +import * as _ from 'lodash'; +import {createVFModuleInstance, updateVFModuleInstance} from "../../../../storeUtil/utils/vfModule/vfModule.actions"; + +@Injectable() +export class VfModulePopuopService implements GenericPopupInterface { + dynamicInputs: any; + instance: any; + model: any; + serviceModel: ServiceModel; + modelInformations: ModelInformationItem[] = []; + uuidData: Object; + closeDialogEvent: Subject<any> = new Subject<any>(); + isUpdateMode: boolean; + + + constructor(private _basicControlGenerator: BasicControlGenerator, + private _vfModuleControlGenerator: VfModuleControlGenerator, + private _iframeService: IframeService, + private _defaultDataGeneratorService: DefaultDataGeneratorService, + private _aaiService: AaiService, + private _basicPopupService : BasicPopupService, + private _store: NgRedux<AppState>) { + + } + + getInstance(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string): any { + if (_.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) { + return new VfModuleInstance(); + } + const vfModules = this._store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules; + return vfModules[this.uuidData['modelName']][vfModuleStoreKey]; + } + + getDynamicInputs(UUIDData : Object) : FormControlModel[]{ + let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[UUIDData['serviceId']].vfModules[UUIDData['modelName']].inputs); + return this.getVFModuleDynamicInputs(dynamic, UUIDData); + } + + getVFModuleDynamicInputs(dynamicInputs : any, UUIDData : Object) : FormControlModel[] { + let result : FormControlModel[] = []; + if(dynamicInputs) { + let vfModuleInstance = null; + if (_.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs, UUIDData['vnfStoreKey']) && + _.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules, UUIDData['modelName'])) { + vfModuleInstance = Object.assign({},this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules[UUIDData['modelName']][UUIDData['vfModuleStoreKey']]); + } + result = this._basicControlGenerator.getDynamicInputs(dynamicInputs, vfModuleInstance); + } + return result; + } + + + getGenericFormPopupDetails(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails { + + this.uuidData = uuidData; + this.instance = this.getInstance(serviceId, vnfStoreKey, vfModuleStoreKey); + this.getModelInformation(serviceId, uuidData['modelName']); + + return new FormPopupDetails(this, + PopupType.VFMODULE, + uuidData, + this.getTitle(isUpdateMode), + this.getSubLeftTitle(), + this.getSubRightTitle(), + this.getControls(serviceId, vnfStoreKey, vfModuleStoreKey, isUpdateMode), + this.getDynamicInputs(uuidData), + this.modelInformations, + (that, form: FormGroup) => {that.onSubmit(that, form);}, + (that: any, form: FormGroup) => {that.onCancel(that, form); } + ); + } + + getModelInformation(serviceId: string, modelName: string) { + this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => { + this.serviceModel = new ServiceModel(result); + + this.model = this._basicPopupService.getModelFromResponse(result, 'vfModules', modelName); + const serviceInstance = this._store.getState().service.serviceInstance[serviceId]; + this.modelInformations = [ + new ModelInformationItem("Subscriber Name", "subscriberName", [this._basicPopupService.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true), + new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true), + new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false), + new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true), + new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true), + new ModelInformationItem("Description", "description", [this.model.description]), + new ModelInformationItem("Category", "category", [this.model.category]), + new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]), + new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true), + new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true), + new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]), + new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]), + new ModelInformationItem("Minimum to instantiate", "min", this.model.min == undefined ? ['0'] : [this.model.min.toString()], "", true), + new ModelInformationItem("Maximum to instantiate", "max", this.model.max == undefined ? ['1'] : [this.model.max.toString()], "", true), + new ModelInformationItem("Recommended to instantiate", "initial", [this.model.initial]) + ]; + }); + } + + getControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, isUpdateMode: boolean) { + if (this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') { + return this._vfModuleControlGenerator.getMacroFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, this.uuidData, isUpdateMode); + } else { + return this._vfModuleControlGenerator.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, this.uuidData, isUpdateMode); + } + } + + + onSubmit(that, form: FormGroup) { + form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']]; + if (!_.isNil(form.controls['supplementaryFile_hidden_content']) && form.controls['supplementaryFile_hidden_content'].value) { + form.value['supplementaryFileContent'] = JSON.parse(form.controls['supplementaryFile_hidden_content'].value); + if (!_.isNil(form.controls['supplementaryFile_hidden'].value)) { + form.value['supplementaryFileName'] = form.controls['supplementaryFile_hidden'].value.name; + } + else { + form.value['supplementaryFileName'] = that.instance.supplementaryFileName; + } + } + else { + delete form.value['supplementaryFileContent']; + delete form.value['supplementaryFileName']; + } + that.storeVFModule(that, form.value); + window.parent.postMessage({ + eventId: 'submitIframe', + data: { + serviceModelId: that.serviceModel.uuid + } + }, "*"); + this.onCancel(that, form); + } + + + onCancel(that, form) { + form.reset(); + that._iframeService.removeClassCloseModal('content'); + this.closeDialogEvent.next(that); + } + + storeVFModule = (that, formValues: any): void => { + formValues.modelInfo = new ModelInfo(that.model); + formValues.uuid = formValues.modelInfo.uuid; + formValues.isMissingData = false; + const vnf = that._store.getState().service.serviceInstance[that.uuidData.serviceId].vnfs[that.uuidData.vnfStoreKey]; + + if (!that.uuidData.vFModuleStoreKey) { + this._store.dispatch(createVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, 0, that.uuidData.vnfStoreKey)); + } else { + this._store.dispatch(updateVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vFModuleStoreKey, that.uuidData.vnfStoreKey)); + } + }; + + getTitle(isUpdateMode : boolean) : string { + return isUpdateMode ? 'Edit Module (Heat stack)' : 'Set new Module (Heat stack)'; + } + + getSubLeftTitle(): string { + return this.model.name; + } + + getSubRightTitle(): string { + return "Module (Heat stack) Instance Details"; + } +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.spec.ts new file mode 100644 index 000000000..c77c092f6 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.spec.ts @@ -0,0 +1,3242 @@ +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {NgRedux} from "@angular-redux/store"; +import {ReflectiveInjector} from "@angular/core"; +import {IframeService} from "../../../../utils/iframe.service"; +import {VfModulePopuopService} from "../vfModule/vfModule.popuop.service"; +import {FormBuilder} from "@angular/forms"; +import {GenericFormService} from "../../../genericForm/generic-form.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {LogService} from "../../../../utils/log/log.service"; +import {HttpClient} from "@angular/common/http"; +import {VnfPopupService} from "./vnf.popup.service"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {VnfControlGenerator} from "../../../genericForm/formControlsServices/vnfGenerator/vnf.control.generator"; +import {UUIDData} from "../../generic-form-popup.component"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; +import {getTestBed, TestBed} from "@angular/core/testing"; + +class MockAppStore<T> {} + +class MockReduxStore<T> { + getState() { + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "FLAG_ADVANCED_PORTS_FILTER": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_REGION_ID_FROM_REMOTE": true, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfGroups" : {}, + "vnfs": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VF", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "netowrk_role": "role 1, role 2, role 3", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "service": { + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "action-data", + "version": "1.0", + "toscaModelURL": null, + "category": "", + "serviceType": "", + "serviceRole": "", + "description": "", + "serviceEcompNaming": "false", + "instantiationType": "A-La-Carte", + "inputs": { + "2017488_adiodvpe0_ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + } + } + }, + "vnfs": { + "2017-388_ADIOD-vPE 1": { + "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413", + "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "1.0", + "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": { + "displayName": "bandwidth", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth" + }, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": { + "displayName": "ASN", + "command": "get_input", + "inputName": "2017488_adiodvpe0_ASN" + }, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "max_instances": 5, + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 1", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-388_ADIOD-vPE 0": { + "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "4.0", + "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": { + "displayName": "bandwidth", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth" + }, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": { + "displayName": "ASN", + "command": "get_input", + "inputName": "2017488_adiodvpe0_ASN" + }, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-388_ADIOD-vPE 0", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-488_ADIOD-vPE 0": { + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-488_ADIOD-vPE", + "version": "5.0", + "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": { + "displayName": "bandwidth", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth" + }, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": { + "displayName": "ASN", + "command": "get_input", + "inputName": "2017488_adiodvpe0_ASN" + }, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "max_instances": "3", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VF", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "vnfGroups": {}, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": {}, + "properties": { + "network_role": "network role 1, network role 2", + "min_instances": 1, + "max_instances": 10, + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": {}, + "fabricConfigurations": {}, + "serviceProxies": {}, + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "vnfs": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [ + {} + ], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VF", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "vnfGroups": {}, + "networks": {}, + "instanceParams": [ + {} + ], + "validationCounter": 1, + "existingNames": {}, + "existingVnfGroupCounterMap": {}, + "existingVNFCounterMap": { + "d6557200-ecf2-4641-8094-5393ae3aae60": 1 + }, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "networks": { + "ExtVL 0": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "sf3zth68xjf", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0:0001": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "2mdxioxca9h", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0_1": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0_1", + "trackById": "z7vd1gmpbs", + "instanceName": "ExtVL", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "zzz1", + "instanceParams": [ + { + "vnf_config_template_version": "17.2", + "bandwidth_units": "Gbps", + "bandwidth": "10", + "AIC_CLLI": "ATLMY8GA", + "ASN": "AV_vPE", + "vnf_instance_name": "yoav" + } + ], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + } + }, + "vnfs": { + "2017-488_ADIOD-vPE 0": { + "rollbackOnFailure": "true", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": { + "instanceName": "yoav", + "volumeGroupName": "123", + "modelInfo": { + "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5", + "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "modelVersion": "6", + "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5" + }, + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "isMissingData": false, + "instanceParams": [ + { + "adiodvpe0_bandwidth": "10", + "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6", + "2017488_adiodvpe0_vnf_config_template_version": "17.2", + "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA", + "adiodvpe0_bandwidth_units": "Gbps" + } + ] + } + } + }, + "isMissingData": false, + "originalName": "2017-488_ADIOD-vPE 0", + "vnfStoreKey": "2017-488_ADIOD-vPE 0", + "trackById": "o65b26t2thj", + "instanceName": "2017488_ADIODvPE", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054", + "platformName": "platform", + "lineOfBusiness": "ONAP", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "modelName": "2017-488_ADIOD-vPE", + "modelVersion": "5.0", + "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + }, + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + } + }, + "instanceParams": [ + { + "2017488_adiodvpe0_ASN": "AV_vPE" + } + ], + "validationCounter": 0, + "existingNames": { + "123": "", + "instancename": "", + "yoav": "", + "extvl": "" + }, + "existingVNFCounterMap": { + "69e09f68-8b63-4cc9-b9ff-860960b5db09": 1 + }, + "existingNetworksCounterMap": { + "ddc3f20c-08b5-40fd-af72-c6d14636b986": 3 + }, + "instanceName": "InstanceName", + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "JANET25", + "tenantId": "092eb9e8e4b7412e8787dd091bc58e86", + "aicZoneId": "JAG1", + "projectName": null, + "rollbackOnFailure": "true", + "aicZoneName": "YUDFJULP-JAG1", + "owningEntityName": "WayneHolland", + "testApi": "GR_API", + "tenantName": "USP-SIP-IC-24335-T-01", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450", + "modelName": "action-data", + "modelVersion": "1.0", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450" + }, + "isALaCarte": false, + "name": "action-data", + "version": "1.0", + "description": "", + "category": "", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [ + { + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, + { + "id": "hvf6", + "name": "hvf6", + "isPermitted": true + } + ], + "lcpRegionsTenantsMap": { + "JANET25": [ + { + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + } + ], + "hvf6": [ + { + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, + { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, + { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, + { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, + { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, + { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, + { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, + { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, + { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, + { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, + { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, + { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, + { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, + { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, + { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, + { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, + { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, + { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, + { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, + { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, + { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, + { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, + { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, + { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, + { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, + { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, + { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, + { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, + { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, + { + "id": "cbb99fe4ada84631b7baf046b6fd2044", + "name": "DN5242-Nov16-T3", + "isPermitted": true + } + ] + } + }, + "productFamilies": [ + { + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, + { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, + { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, + { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, + { + "id": "vTerrance", + "name": "vTerrance", + "isPermitted": true + }, + { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, + { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, + { + "id": "db171b8f-115c-4992-a2e3-ee04cae357e0", + "name": "LINDSEY", + "isPermitted": true + }, + { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, + { + "id": "vRosemarie", + "name": "HNGATEWAY", + "isPermitted": true + }, + { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", + "name": "VROUTER", + "isPermitted": true + }, + { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, + { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, + { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, + { + "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", + "name": "Transport", + "isPermitted": true + }, + { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, + { + "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", + "name": "Josefina", + "isPermitted": true + }, + { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, + { + "id": "12a96a9d-4b4c-4349-a950-fe1159602621", + "name": "DARREN MCGEE", + "isPermitted": true + } + ], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [ + { + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, + { + "id": "1", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "3", + "name": "vJamie", + "isPermitted": false + }, + { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, + { + "id": "5", + "name": "Kennedy", + "isPermitted": false + }, + { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, + { + "id": "7", + "name": "vVM", + "isPermitted": false + }, + { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, + { + "id": "9", + "name": "vMME", + "isPermitted": false + }, + { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, + { + "id": "11", + "name": "vSCP", + "isPermitted": false + }, + { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, + { + "id": "13", + "name": "vMMSC", + "isPermitted": false + }, + { + "id": "14", + "name": "SSD", + "isPermitted": false + }, + { + "id": "15", + "name": "vMOG", + "isPermitted": false + }, + { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, + { + "id": "17", + "name": "JOHANNA_SANTOS", + "isPermitted": false + }, + { + "id": "18", + "name": "vCarroll", + "isPermitted": false + } + ] + }, + "aicZones": [ + { + "id": "NFT1", + "name": "NFTJSSSS-NFT1" + }, + { + "id": "JAG1", + "name": "YUDFJULP-JAG1" + }, + { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, + { + "id": "BAN1", + "name": "VSDKYUTP-BAN1" + }, + { + "id": "DKJ1", + "name": "DKJSJDKA-DKJ1" + }, + { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, + { + "id": "UIO1", + "name": "uioclli1-UIO1" + }, + { + "id": "RAJ1", + "name": "YGBIJNLQ-RAJ1" + }, + { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, + { + "id": "SDE1", + "name": "ZXCVBNMA-SDE1" + }, + { + "id": "VEN2", + "name": "FGHJUHIL-VEN2" + }, + { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, + { + "id": "JAD1", + "name": "JADECLLI-JAD1" + }, + { + "id": "ZXL1", + "name": "LWLWCANN-ZXL1" + }, + { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, + { + "id": "SDF1", + "name": "sdfclli1-SDF1" + }, + { + "id": "RAD1", + "name": "RADICAL1-RAD1" + }, + { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, + { + "id": "REL1", + "name": "INGERFGT-REL1" + }, + { + "id": "JNL1", + "name": "CJALSDAC-JNL1" + }, + { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, + { + "id": "CHI1", + "name": "CHILLIWE-CHI1" + }, + { + "id": "UUU4", + "name": "UUUAAAUU-UUU4" + }, + { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, + { + "id": "KJN1", + "name": "CKALDKSA-KJN1" + }, + { + "id": "SAM1", + "name": "SNDGCA64-SAN1" + }, + { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, + { + "id": "HJH1", + "name": "AOEEQQQD-HJH1" + }, + { + "id": "HGD1", + "name": "SDFQWHGD-HGD1" + }, + { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, + { + "id": "ATL43", + "name": "AICLOCID-ATL43" + }, + { + "id": "ATL54", + "name": "AICFTAAI-ATL54" + }, + { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, + { + "id": "VEL1", + "name": "BNMLKUIK-VEL1" + }, + { + "id": "ICC1", + "name": "SANJITAT-ICC1" + }, + { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, + { + "id": "DEF2", + "name": "WSBHGTYL-DEF2" + }, + { + "id": "MAD11", + "name": "SDFQWGKL-MAD11" + }, + { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, + { + "id": "GAR1", + "name": "NGFVSJKO-GAR1" + }, + { + "id": "SAN22", + "name": "GNVLSCTL-SAN22" + }, + { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, + { + "id": "JCS1", + "name": "JCSJSCJS-JCS1" + }, + { + "id": "DHA12", + "name": "WSXEDECF-DHA12" + }, + { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, + { + "id": "NCA1", + "name": "NCANCANN-NCA1" + }, + { + "id": "IOP1", + "name": "iopclli1-IOP1" + }, + { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, + { + "id": "KAP1", + "name": "HIOUYTRQ-KAP1" + }, + { + "id": "ZEN1", + "name": "ZENCLLI1-ZEN1" + }, + { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, + { + "id": "CQK1", + "name": "CQKSCAKK-CQK1" + }, + { + "id": "SAI1", + "name": "UBEKQLPD-SAI1" + }, + { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, + { + "id": "IBB1", + "name": "PLMKOIJU-IBB1" + }, + { + "id": "TIR2", + "name": "PLKINHYI-TIR2" + }, + { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, + { + "id": "SLF78", + "name": "SDCTLFN1-SLF78" + }, + { + "id": "SEE78", + "name": "SDCTEEE4-SEE78" + }, + { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, + { + "id": "SAA78", + "name": "SDCTAAA1-SAA78" + }, + { + "id": "LUC1", + "name": "ATLDFGYC-LUC1" + }, + { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, + { + "id": "TOR1", + "name": "TOROONXN-TOR1" + }, + { + "id": "QWE1", + "name": "QWECLLI1-QWE1" + }, + { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, + { + "id": "CAL33", + "name": "CALIFORN-CAL33" + }, + { + "id": "SHH78", + "name": "SDIT1HHH-SHH78" + }, + { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, + { + "id": "CLG1", + "name": "CLGRABAD-CLG1" + }, + { + "id": "BNA1", + "name": "BNARAGBK-BNA1" + }, + { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, + { + "id": "APP1", + "name": "WBHGTYUI-APP1" + }, + { + "id": "RJN1", + "name": "RJNRBZAW-RJN1" + }, + { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, + { + "id": "mac10", + "name": "PKGTESTF-mac10" + }, + { + "id": "SXB78", + "name": "SDCTGXB1-SXB78" + }, + { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, + { + "id": "SYD1", + "name": "SYDNAUBV-SYD1" + }, + { + "id": "TOK1", + "name": "TOKYJPFA-TOK1" + }, + { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, + { + "id": "DCC1b", + "name": "POIUYTGH-DCC1b" + }, + { + "id": "SKK78", + "name": "SDCTKKK1-SKK78" + }, + { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, + { + "id": "SJJ78", + "name": "SDCTJJJ1-SJJ78" + }, + { + "id": "SBX78", + "name": "SDCTBXG1-SBX78" + }, + { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, + { + "id": "IAA1", + "name": "QAZXSWED-IAA1" + }, + { + "id": "POI1", + "name": "PLMNJKIU-POI1" + }, + { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, + { + "id": "PBL1", + "name": "PBLAPBAI-PBL1" + }, + { + "id": "LAG45", + "name": "LARGIZON-LAG1a" + }, + { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, + { + "id": "HST70", + "name": "HSTNTX70-HST70" + }, + { + "id": "DCC1a", + "name": "POIUYTGH-DCC1a" + }, + { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, + { + "id": "LON1", + "name": "LONEENCO-LON1" + }, + { + "id": "SJU78", + "name": "SDIT1JUB-SJU78" + }, + { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, + { + "id": "SSW56", + "name": "ss8126GT-SSW56" + }, + { + "id": "SBB78", + "name": "SDIT1BBB-SBB78" + }, + { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, + { + "id": "GNV1", + "name": "GNVLSCTL-GNV1" + }, + { + "id": "WAS1", + "name": "WASHDCSW-WAS1" + }, + { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, + { + "id": "STT1", + "name": "STTLWA02-STT1" + }, + { + "id": "STG1", + "name": "STTGGE62-STG1" + }, + { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, + { + "id": "SBU78", + "name": "SDIT1BUB-SBU78" + }, + { + "id": "ATL2", + "name": "ATLNGANW-ATL2" + }, + { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, + { + "id": "SNG1", + "name": "SNGPSIAU-SNG1" + }, + { + "id": "NYC1", + "name": "NYCMNY54-NYC1" + }, + { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, + { + "id": "AMD15", + "name": "AMDFAA01-AMD15" + }, + { + "id": "SNA1", + "name": "SNANTXCA-SNA1" + }, + { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, + { + "id": "TLP1", + "name": "TLPNXM18-TLP1" + }, + { + "id": "SDD81", + "name": "SAIT1DD6-SDD81" + }, + { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, + { + "id": "DCC2", + "name": "POIUYTGH-DCC2" + }, + { + "id": "OKC1", + "name": "OKCBOK55-OKC1" + }, + { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, + { + "id": "TES36", + "name": "ABCEETES-TES36" + }, + { + "id": "COM1", + "name": "PLMKOPIU-COM1" + }, + { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, + { + "id": "SDG78", + "name": "SDIT1BDG-SDG78" + }, + { + "id": "mac20", + "name": "PKGTESTF-mac20" + }, + { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, + { + "id": "HST25", + "name": "HSTNTX01-HST25" + }, + { + "id": "AMD18", + "name": "AUDIMA01-AMD18" + }, + { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, + { + "id": "SSA56", + "name": "SSIT2AA7-SSA56" + }, + { + "id": "SDD82", + "name": "SAIT1DD9-SDD82" + }, + { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, + { + "id": "SUL2", + "name": "WERTYUJK-SUL2" + }, + { + "id": "PUR1", + "name": "purelyde-PUR1" + }, + { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, + { + "id": "SITE", + "name": "LONEENCO-SITE" + }, + { + "id": "ATL1", + "name": "ATLNGAMA-ATL1" + }, + { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, + { + "id": "TAT34", + "name": "TESAAISB-TAT34" + }, + { + "id": "XCP12", + "name": "CHKGH123-XCP12" + }, + { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, + { + "id": "HPO1", + "name": "ATLNGAUP-HPO1" + }, + { + "id": "KJF12", + "name": "KJFDH123-KJF12" + }, + { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, + { + "id": "SAA12", + "name": "SAIT9AF8-SAA12" + }, + { + "id": "SAA14", + "name": "SAIT1AA9-SAA14" + }, + { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, + { + "id": "CWY1", + "name": "CWYMOWBS-CWY1" + }, + { + "id": "ATL76", + "name": "TELEPAAI-ATL76" + }, + { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, + { + "id": "ATL53", + "name": "AAIATLTE-ATL53" + }, + { + "id": "SAA11", + "name": "SAIT9AA2-SAA11" + }, + { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, + { + "id": "AUG1", + "name": "ASDFGHJK-AUG1" + }, + { + "id": "POI22", + "name": "POIUY123-POI22" + }, + { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, + { + "id": "BHY17", + "name": "BHYTFRF3-BHY17" + }, + { + "id": "LIS1", + "name": "HOSTPROF-LIS1" + }, + { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, + { + "id": "ATL99", + "name": "TEESTAAI-ATL43" + }, + { + "id": "ATL64", + "name": "FORLOAAJ-ATL64" + }, + { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, + { + "id": "RAD10", + "name": "INDIPUNE-RAD10" + }, + { + "id": "RTW5", + "name": "BHYTFRY4-RTW5" + }, + { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, + { + "id": "ATL98", + "name": "TEESTAAI-ATL43" + }, + { + "id": "WAN1", + "name": "LEIWANGW-WAN1" + }, + { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, + { + "id": "RTD2", + "name": "BHYTFRk4-RTD2" + }, + { + "id": "NIR1", + "name": "ORFLMANA-NIR1" + }, + { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, + { + "id": "NUM1", + "name": "QWERTYUI-NUM1" + }, + { + "id": "MTN32", + "name": "MDTWNJ21-MTN32" + }, + { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, + { + "id": "ATL56", + "name": "ATLSANAC-ATL56" + }, + { + "id": "AMS1", + "name": "AMSTNLBW-AMS1" + }, + { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, + { + "id": "JAN1", + "name": "ORFLMATT-JAN1" + }, + { + "id": "ABC14", + "name": "TESAAISA-ABC14" + }, + { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, + { + "id": "MIC54", + "name": "MICHIGAN-MIC54" + }, + { + "id": "ABC11", + "name": "ATLSANAI-ABC11" + }, + { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, + { + "id": "ATL63", + "name": "ATLSANEW-ATL63" + }, + { + "id": "ABC12", + "name": "ATLSECIA-ABC12" + }, + { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, + { + "id": "ABC15", + "name": "AAITESAN-ABC15" + }, + { + "id": "AVT1", + "name": "AVTRFLHD-AVT1" + }, + { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + } + ], + "categoryParameters": { + "owningEntityList": [ + { + "id": "aaa1", + "name": "aaa1" + }, + { + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, + { + "id": "Melissa", + "name": "Melissa" + } + ], + "projectList": [ + { + "id": "WATKINS", + "name": "WATKINS" + }, + { + "id": "x1", + "name": "x1" + }, + { + "id": "yyy1", + "name": "yyy1" + } + ], + "lineOfBusinessList": [ + { + "id": "ONAP", + "name": "ONAP" + }, + { + "id": "zzz1", + "name": "zzz1" + } + ], + "platformList": [ + { + "id": "platform", + "name": "platform" + }, + { + "id": "xxx1", + "name": "xxx1" + } + ] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } + }; + } +} + +class MockFeatureFlagsService {} + +describe('vnf new popup service', () => { + let injector; + let service: VnfPopupService; + let genericFormService: GenericFormService + let defaultDataGeneratorService: DefaultDataGeneratorService; + let fb: FormBuilder; + let iframeService: IframeService; + + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + providers : [ + VnfPopupService, + DefaultDataGeneratorService, + GenericFormService, + FormBuilder, + IframeService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + AaiService, + LogService, + BasicPopupService, + VfModulePopuopService, + BasicControlGenerator, + VnfControlGenerator, + {provide: NgRedux, useClass: MockReduxStore}, + {provide: HttpClient, useClass: MockAppStore}, + ] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(VnfPopupService); + genericFormService = injector.get(GenericFormService); + defaultDataGeneratorService = injector.get(DefaultDataGeneratorService); + fb = injector.get(FormBuilder); + iframeService = injector.get(IframeService); + + })().then(done).catch(done.fail)); + + test('getTitle vnf should return the correct title for edit and create mode', () => { + expect(service.getTitle(false)).toBe('Set a new VNF'); + expect(service.getTitle(true)).toBe('Edit VNF instance'); + }); + + test('getSubRightTitle vnf should return popup type', () => { + expect(service.getSubRightTitle()).toBe('VNF Instance Details'); + }); + + test('getModelInformation vnf should update modelInformations', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const vnfModelName: string = '2017-388_ADIOD-vPE 1'; + service.getModelInformation(serviceId, vnfModelName); + expect(service.modelInformations.length).toEqual(14); + expect(service.modelInformations[0].label).toEqual("Subscriber Name"); + expect(service.modelInformations[0].values).toEqual(['SILVIA ROBBINS']); + + expect(service.modelInformations[1].label).toEqual("Service Name"); + expect(service.modelInformations[1].values).toEqual(['action-data']); + + expect(service.modelInformations[2].label).toEqual("Service Instance Name"); + expect(service.modelInformations[2].values).toEqual(['InstanceName']); + + expect(service.modelInformations[3].label).toEqual("Model Name"); + expect(service.modelInformations[3].values).toEqual(['2017-388_ADIOD-vPE']); + + expect(service.modelInformations[4].label).toEqual("Model version"); + expect(service.modelInformations[4].values).toEqual(['1.0']); + + expect(service.modelInformations[5].label).toEqual("Description"); + expect(service.modelInformations[5].values).toEqual(['Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM']); + + expect(service.modelInformations[6].label).toEqual("Category"); + expect(service.modelInformations[6].values).toEqual([undefined]); + + expect(service.modelInformations[7].label).toEqual("Sub Category"); + expect(service.modelInformations[7].values).toEqual([undefined]); + + expect(service.modelInformations[8].label).toEqual("UUID"); + expect(service.modelInformations[8].values).toEqual(['0903e1c0-8e03-4936-b5c2-260653b96413']); + + expect(service.modelInformations[9].label).toEqual("Invariant UUID"); + expect(service.modelInformations[9].values).toEqual(['00beb8f9-6d39-452f-816d-c709b9cbb87d']); + + expect(service.modelInformations[10].label).toEqual("Service type"); + expect(service.modelInformations[10].values).toEqual(['']); + + expect(service.modelInformations[11].label).toEqual("Service role"); + expect(service.modelInformations[11].values).toEqual(['']); + + expect(service.modelInformations[12].label).toEqual("Minimum to instantiate"); + expect(service.modelInformations[12].values).toEqual(['0']); + + expect(service.modelInformations[13].label).toEqual("Maximum to instantiate"); + expect(service.modelInformations[13].values).toEqual(['5']); + }); + + test('getSubLeftTitle new vnf popup should return service model name', () => { + service.uuidData = { + serviceId: '6e59c5de-f052-46fa-aa7e-2fca9d674c44', + modelName: 'VF_vMee 0' + }; + expect(service.getSubLeftTitle()).toBe('VNF MODEL: VF_vMee'); + }); + + test('getInstance with empty storekey should be created', () => { + const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44'; + const vnfModelName: string = '2017-388_ADIOD-vPE 1'; + const newInstance = service.getInstance(serviceId, vnfModelName, null); + expect(newInstance).toBeDefined(); + }); + + test('getInstance with not empty storekey should return vnfStoreKey', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const vnfModelName: string = '2017-388_ADIOD-vPE 1'; + const vnfStoreKey: string = '2017-488_ADIOD-vPE 0'; + const newInstance = service.getInstance(serviceId, vnfModelName, vnfStoreKey); + expect(newInstance.vnfStoreKey).toEqual('2017-488_ADIOD-vPE 0'); + }); + + test('getGenericFormPopupDetails returns the FormPopupDetails object', () => { + const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44'; + const vnfModelName: string = 'VF_vMee 0'; + const vnfStoreKey: string = 'VF_vMee 0'; + let uuidData: UUIDData = <any>{ + serviceId: "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + modelName: "VF_vMee 0", + vnfStoreKey: "VF_vMee 0" + }; + const formPopupDetailsObject = service.getGenericFormPopupDetails(serviceId, vnfModelName, vnfStoreKey, null, uuidData, true); + expect(formPopupDetailsObject).toBeDefined(); + } + ); +}); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.ts new file mode 100644 index 000000000..8969e3c15 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.ts @@ -0,0 +1,158 @@ +import {Injectable} from '@angular/core'; +import {GenericPopupInterface} from "../generic-popup.interface"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model"; +import {FormGroup} from "@angular/forms"; +import {ModelInformationItem} from "../../../model-information/model-information.component"; +import {ServiceModel} from "../../../../models/serviceModel"; +import {Subject} from "rxjs/Subject"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {VnfControlGenerator} from "../../../genericForm/formControlsServices/vnfGenerator/vnf.control.generator"; +import {IframeService} from "../../../../utils/iframe.service"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../../store/reducers"; +import {Subscriber} from "../../../../models/subscriber"; +import {Constants} from "../../../../utils/constants"; +import {VnfInstance} from "../../../../models/vnfInstance"; +import {ModelInfo} from "../../../../models/modelInfo"; +import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions"; +import {createVNFInstance, updateVNFInstance} from "../../../../storeUtil/utils/vnf/vnf.actions"; +import * as _ from 'lodash'; + +@Injectable() +export class VnfPopupService implements GenericPopupInterface{ + dynamicInputs: any; + instance: any; + model:any; + serviceModel:ServiceModel; + modelInformations: ModelInformationItem[] = []; + uuidData: Object; + closeDialogEvent: Subject<any> = new Subject<any>(); + isUpdateMode: boolean; + + constructor( + private _basicControlGenerator: BasicControlGenerator, + private _vnfControlGenerator: VnfControlGenerator, + private _iframeService: IframeService, + private _defaultDataGeneratorService: DefaultDataGeneratorService, + private _aaiService: AaiService, + private _basicPopupService: BasicPopupService, + private _store: NgRedux<AppState>) { + } + + getGenericFormPopupDetails(serviceId: string, modelName: string, vnfStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails { + this.uuidData = uuidData; + this.isUpdateMode = isUpdateMode; + this.instance = this.getInstance(serviceId, modelName, vnfStoreKey); + this.getModelInformation(serviceId, modelName); + + return new FormPopupDetails(this, + PopupType.VNF_MACRO, + uuidData, + this.getTitle(isUpdateMode), + this.getSubLeftTitle(), + this.getSubRightTitle(), + this.getControls(serviceId, modelName, vnfStoreKey), + this._basicPopupService.getDynamicInputs(serviceId, modelName, vnfStoreKey, 'vnfs'), + this.modelInformations, + (that, form: FormGroup) => {that.onSubmit(that, form);}, + (that: any, form: FormGroup) => {that.onCancel(that, form); } + ) + } + + getControls(serviceId: string, modelName: string, vnfStoreKey: string){ + if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') { + return this._vnfControlGenerator.getMacroFormControls(serviceId, vnfStoreKey, modelName); + } else { + return this._vnfControlGenerator.getAlaCarteFormControls(serviceId, vnfStoreKey, modelName); + } + } + + getInstance(serviceId: string, modelName: string, vnfStoreKey: string): any { + if(_.isNil(vnfStoreKey)){ + return new VnfInstance(); + } + return this._store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey]; + } + + getModelInformation(serviceId: string, modelName: string): void { + this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => { + this.serviceModel = new ServiceModel(result); + this.model = this._basicPopupService.getModelFromResponse(result, 'vnfs', modelName); + const serviceInstance = this._store.getState().service.serviceInstance[serviceId]; + this.modelInformations = [ + new ModelInformationItem("Subscriber Name", "subscriberName", [this.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId, this._store)], "", true), + new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true), + new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false), + new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true), + new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true), + new ModelInformationItem("Description", "description", [this.model.description]), + new ModelInformationItem("Category", "category", [this.model.category]), + new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]), + new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true), + new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true), + new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]), + new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]), + new ModelInformationItem("Minimum to instantiate", "vnf-min", [!_.isNil(this.model.min) ? this.model.min.toString() : '0'], "", false), + new ModelInformationItem("Maximum to instantiate", "vnf-max", [!_.isNil(this.model.max) ? this.model.max.toString() : '1'], "", false) + ]; + }) + } + + getSubLeftTitle(): string { + return "VNF MODEL: " + this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].vnfs[this.uuidData['modelName']].name; + } + + getSubRightTitle(): string { + return "VNF Instance Details"; + } + + storeVNF = (that, formValues: any): void => { + formValues.modelInfo = new ModelInfo(that.model); + formValues.uuid = formValues.modelInfo.uuid; + formValues.isMissingData = false; + if(!that.isUpdateMode){ + that._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelUniqueId, that.uuidData.serviceId, 1 , <any> {data: {type: 'VF'}})); + this._store.dispatch(createVNFInstance(formValues, that.uuidData['modelName'], that.uuidData['serviceId'], that.uuidData['modelName'])); + }else { + that._store.dispatch(updateVNFInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vnfStoreKey)) + } + }; + + getTitle(isUpdateMode: boolean): string { + return isUpdateMode ? "Edit VNF instance": "Set a new VNF" ; + } + + onCancel(that, form): void { + form.reset(); + that._iframeService.removeClassCloseModal('content'); + this.closeDialogEvent.next(that); + } + + onSubmit(that, form: FormGroup, ...args): void { + form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']]; + that.storeVNF(that, form.value); + window.parent.postMessage( { + eventId: 'submitIframe', + data: { + serviceModelId: that.uuidData.serviceId + } + }, "*"); + that.onCancel(that, form); + } + + extractSubscriberNameBySubscriberId(subscriberId: string, store: NgRedux<AppState>) { + let result: string = null; + let filteredArray: any = _.filter(store.getState().service.subscribers, function (o: Subscriber) { + return o.id === subscriberId + }); + if (filteredArray.length > 0) { + result = filteredArray[0].name; + } + return result; + } + +} diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.spec.ts new file mode 100644 index 000000000..6027f4346 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.spec.ts @@ -0,0 +1,3239 @@ +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {NgRedux} from "@angular-redux/store"; +import {ReflectiveInjector} from "@angular/core"; +import {IframeService} from "../../../../utils/iframe.service"; +import {VfModulePopuopService} from "../vfModule/vfModule.popuop.service"; +import {FormBuilder} from "@angular/forms"; +import {GenericFormService} from "../../../genericForm/generic-form.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {LogService} from "../../../../utils/log/log.service"; +import {HttpClient} from "@angular/common/http"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {UUIDData} from "../../generic-form-popup.component"; +import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service"; +import {VnfGroupPopupService} from "./vnfGroup.popup.service"; +import {VnfGroupControlGenerator} from "../../../genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator"; +import {getTestBed, TestBed} from "@angular/core/testing"; + +class MockAppStore<T> {} + +class MockReduxStore<T> { + getState() { + return { + "global": { + "name": null, + "flags": { + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_UNASSIGN_SERVICE": true, + "FLAG_SHOW_VERIFY_SERVICE": false, + "FLAG_COLLECTION_RESOURCE_SUPPORT": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_SERVICE_MODEL_CACHE": true, + "FLAG_ADVANCED_PORTS_FILTER": true, + "CREATE_INSTANCE_TEST": false, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false, + "FLAG_REGION_ID_FROM_REMOTE": true, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_ADD_MSO_TESTAPI_FIELD": true + }, + "type": "[FLAGS] Update" + }, + "service": { + "serviceHierarchy": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "service": { + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "ComplexService", + "version": "1.0", + "toscaModelURL": null, + "category": "Emanuel", + "serviceType": "", + "serviceRole": "", + "description": "ComplexService", + "serviceEcompNaming": "false", + "instantiationType": "Macro", + "inputs": {} + }, + "vnfGroups": { + "VF_vMee 0": { + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e", + "description": "VSP_vMee", + "name": "VF_vMee", + "version": "2.0", + "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9", + "inputs": {}, + "commands": {}, + "properties": { + "max_instances": 10, + "min_instances": 1, + "gpb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_start_port": "0", + "sctp-a-ipv6-egress_rule_application": "any", + "Internal2_allow_transit": "true", + "sctp-b-IPv6_ethertype": "IPv6", + "sctp-a-egress_rule_application": "any", + "sctp-b-ingress_action": "pass", + "sctp-b-ingress_rule_protocol": "icmp", + "ncb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-ingress-src_start_port": "0.0", + "ncb1_Internal2_mac": "00:11:22:EF:AC:DF", + "fsb_volume_size_0": "320.0", + "sctp-b-egress_src_addresses": "local", + "sctp-a-ipv6-ingress_ethertype": "IPv4", + "sctp-a-ipv6-ingress-dst_start_port": "0", + "sctp-b-ipv6-ingress_rule_application": "any", + "domain_name": "default-domain", + "sctp-a-ingress_rule_protocol": "icmp", + "sctp-b-egress-src_start_port": "0.0", + "sctp-a-egress_src_addresses": "local", + "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group", + "sctp-a-egress-src_start_port": "0.0", + "sctp-a-ingress_ethertype": "IPv4", + "sctp-b-ipv6-ingress-dst_end_port": "65535", + "sctp-b-dst_subnet_prefix_v6": "::", + "nf_naming": "{ecomp_generated_naming=true}", + "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-b-egress-dst_start_port": "0.0", + "ncb_flavor_name": "nv.c20r64d1", + "gpb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix_len": "0.0", + "Internal2_net_cidr": "10.0.0.10", + "sctp-a-ingress-dst_start_port": "0.0", + "sctp-a-egress-dst_start_port": "0.0", + "fsb1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-egress_ethertype": "IPv4", + "vlc_st_service_mode": "in-network-nat", + "sctp-a-ipv6-egress_ethertype": "IPv4", + "sctp-a-egress-src_end_port": "65535.0", + "sctp-b-ipv6-egress_rule_application": "any", + "sctp-b-egress_action": "pass", + "sctp-a-ingress-src_subnet_prefix_len": "0.0", + "sctp-b-ipv6-ingress-src_end_port": "65535.0", + "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group", + "fsb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-a-ipv6-ingress-src_start_port": "0.0", + "sctp-b-ipv6-egress_ethertype": "IPv4", + "Internal1_net_cidr": "10.0.0.10", + "sctp-a-egress_dst_subnet_prefix": "0.0.0.0", + "fsb_flavor_name": "nv.c20r64d1", + "sctp_rule_protocol": "132", + "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_rule_application": "any", + "ecomp_generated_naming": "false", + "sctp-a-IPv6_ethertype": "IPv6", + "vlc2_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_virtualization_type": "virtual-machine", + "sctp-b-ingress-dst_start_port": "0.0", + "sctp-b-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-ingress-src_end_port": "65535.0", + "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-b-ingress_rule_application": "any", + "int2_sec_group_name": "int2-sec-group", + "vlc_flavor_name": "nd.c16r64d1", + "sctp-b-ipv6-egress_src_addresses": "local", + "vlc_st_interface_type_int1": "other1", + "sctp-b-egress-src_end_port": "65535.0", + "sctp-a-ipv6-egress-dst_start_port": "0", + "vlc_st_interface_type_int2": "other2", + "sctp-a-ipv6-egress_rule_protocol": "any", + "Internal2_shared": "false", + "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0", + "Internal2_rpf": "disable", + "vlc1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ipv6-egress_src_end_port": "65535", + "sctp-a-ipv6-egress_src_addresses": "local", + "sctp-a-ingress-dst_end_port": "65535.0", + "sctp-a-ipv6-egress_src_end_port": "65535", + "Internal1_forwarding_mode": "l2", + "Internal2_dhcp": "false", + "sctp-a-dst_subnet_prefix_v6": "::", + "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2", + "vlc_st_interface_type_gtp": "other0", + "ncb1_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-src_subnet_prefix_v6": "::", + "sctp-a-egress_dst_subnet_prefix_len": "0.0", + "int1_sec_group_name": "int1-sec-group", + "Internal1_dhcp": "false", + "sctp-a-ipv6-egress_dst_end_port": "65535", + "Internal2_forwarding_mode": "l2", + "fsb2_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-b-egress_dst_subnet_prefix": "0.0.0.0", + "Internal1_net_cidr_len": "17", + "gpb2_Internal1_mac": "00:11:22:EF:AC:DF", + "sctp-b-ingress-src_subnet_prefix_len": "0.0", + "sctp-a-ingress_dst_addresses": "local", + "sctp-a-egress_action": "pass", + "fsb_volume_type_0": "SF-Default-SSD", + "ncb2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_sctp_a": "left", + "vlc_st_interface_type_sctp_b": "right", + "sctp-a-src_subnet_prefix_v6": "::", + "vlc_st_version": "2", + "sctp-b-egress_ethertype": "IPv4", + "sctp-a-ingress_rule_application": "any", + "gpb1_Internal2_mac": "00:11:22:EF:AC:DF", + "instance_ip_family_v6": "v6", + "sctp-a-ipv6-egress_src_start_port": "0", + "sctp-b-ingress-src_start_port": "0.0", + "sctp-b-ingress_dst_addresses": "local", + "fsb1_Internal1_mac": "00:11:22:EF:AC:DF", + "vlc_st_interface_type_oam": "management", + "multi_stage_design": "true", + "oam_sec_group_name": "oam-sec-group", + "Internal2_net_gateway": "10.0.0.10", + "sctp-a-ipv6-ingress-dst_end_port": "65535", + "sctp-b-ipv6-egress-dst_start_port": "0", + "Internal1_net_gateway": "10.0.0.10", + "sctp-b-ipv6-egress_rule_protocol": "any", + "gtp_sec_group_name": "gtp-sec-group", + "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0", + "sctp-a-ipv6-ingress_dst_addresses": "local", + "sctp-a-egress_rule_protocol": "icmp", + "sctp-b-ipv6-egress_action": "pass", + "sctp-a-ipv6-egress_action": "pass", + "Internal1_shared": "false", + "sctp-b-ipv6-ingress_rule_protocol": "any", + "Internal2_net_cidr_len": "17", + "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group", + "sctp-a-ingress-src_end_port": "65535.0", + "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0", + "sctp-a-egress-dst_end_port": "65535.0", + "sctp-a-ingress_action": "pass", + "sctp-b-egress_rule_protocol": "icmp", + "sctp-b-ipv6-ingress_action": "pass", + "vlc_st_service_type": "firewall", + "sctp-b-ipv6-egress_dst_end_port": "65535", + "sctp-b-ipv6-ingress-dst_start_port": "0", + "vlc2_Internal2_mac": "00:11:22:EF:AC:DF", + "vlc_st_availability_zone": "true", + "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2", + "sctp-b-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0", + "Internal1_allow_transit": "true", + "gpb_flavor_name": "nv.c20r64d1", + "availability_zone_max_count": "1", + "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2", + "sctp-b-ipv6-ingress_dst_addresses": "local", + "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0", + "sctp-b-ipv6-ingress_ethertype": "IPv4", + "vlc1_Internal2_mac": "00:11:22:EF:AC:DF", + "sctp-a-ingress-src_subnet_prefix": "0.0.0.0", + "sctp-a-ipv6-ingress_action": "pass", + "Internal1_rpf": "disable", + "sctp-b-ingress_ethertype": "IPv4", + "sctp-b-egress_rule_application": "any", + "sctp-b-ingress-src_end_port": "65535.0", + "sctp-a-ipv6-ingress_rule_protocol": "any", + "sctp-a-ingress-src_start_port": "0.0", + "sctp-b-egress-dst_end_port": "65535.0" + }, + "type": "VnfGroup", + "modelCustomizationName": "VF_vMee 0", + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": {}, + "commands": {}, + "properties": { + "netowrk_role": "role 1, role 2, role 3", + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": { + "Port Mirroring Configuration By Policy 0": { + "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50", + "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7", + "description": "A port mirroring configuration by policy object", + "name": "Port Mirroring Configuration By Policy", + "version": "27.0", + "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2", + "inputs": {}, + "commands": {}, + "properties": {}, + "type": "Configuration", + "modelCustomizationName": "Port Mirroring Configuration By Policy 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + }, + "serviceProxies": {}, + "vfModules": { + "vf_vmee0..VfVmee..vmme_vlc..module-1": { + "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830", + "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b", + "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091", + "description": null, + "name": "VfVmee..vmme_vlc..module-1", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_vlc..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_vlc" + }, + "inputs": {}, + "volumeGroupAllowed": true + }, + "vf_vmee0..VfVmee..vmme_gpb..module-2": { + "uuid": "41708296-e443-4c71-953f-d9a010f059e1", + "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9", + "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c", + "description": null, + "name": "VfVmee..vmme_gpb..module-2", + "version": "2", + "modelCustomizationName": "VfVmee..vmme_gpb..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "vmme_gpb" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "description": null, + "name": "VfVmee..base_vmme..module-0", + "version": "2", + "modelCustomizationName": "VfVmee..base_vmme..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "base_vmme" + }, + "inputs": {} + } + }, + "pnfs": {} + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "service": { + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "name": "action-data", + "version": "1.0", + "toscaModelURL": null, + "category": "", + "serviceType": "", + "serviceRole": "", + "description": "", + "serviceEcompNaming": "false", + "instantiationType": "A-La-Carte", + "inputs": { + "2017488_adiodvpe0_ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + } + } + }, + "vnfGroups": { + "2017-388_ADIOD-vPE 1": { + "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413", + "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "1.0", + "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": { + "displayName": "bandwidth", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth" + }, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": { + "displayName": "ASN", + "command": "get_input", + "inputName": "2017488_adiodvpe0_ASN" + }, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "max_instances": 5, + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VnfGroup", + "modelCustomizationName": "2017-388_ADIOD-vPE 1", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-388_ADIOD-vPE 0": { + "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-388_ADIOD-vPE", + "version": "4.0", + "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": { + "displayName": "bandwidth", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth" + }, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": { + "displayName": "ASN", + "command": "get_input", + "inputName": "2017488_adiodvpe0_ASN" + }, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VnfGroup", + "modelCustomizationName": "2017-388_ADIOD-vPE 0", + "vfModules": {}, + "volumeGroups": {}, + "vfcInstanceGroups": {} + }, + "2017-488_ADIOD-vPE 0": { + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM", + "name": "2017-488_ADIOD-vPE", + "version": "5.0", + "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": { + "vnf_config_template_version": { + "displayName": "vnf_config_template_version", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_config_template_version" + }, + "bandwidth_units": { + "displayName": "bandwidth_units", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth_units" + }, + "bandwidth": { + "displayName": "bandwidth", + "command": "get_input", + "inputName": "adiodvpe0_bandwidth" + }, + "AIC_CLLI": { + "displayName": "AIC_CLLI", + "command": "get_input", + "inputName": "2017488_adiodvpe0_AIC_CLLI" + }, + "ASN": { + "displayName": "ASN", + "command": "get_input", + "inputName": "2017488_adiodvpe0_ASN" + }, + "vnf_instance_name": { + "displayName": "vnf_instance_name", + "command": "get_input", + "inputName": "2017488_adiodvpe0_vnf_instance_name" + } + }, + "properties": { + "vmxvre_retype": "RE-VMX", + "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version", + "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d", + "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9", + "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF", + "int_ctl_net_name": "VMX-INTXI", + "vmx_int_ctl_prefix": "10.0.0.10", + "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5", + "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279", + "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a", + "nf_type": "vPE", + "vmxvpfe_int_ctl_ip_1": "10.0.0.10", + "is_AVPN_service": "false", + "vmx_RSG_name": "vREXI-affinity", + "vmx_int_ctl_forwarding": "l2", + "vmxvre_oam_ip_0": "10.0.0.10", + "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_sriov41_0_port_vlanstrip": "false", + "vmxvpfe_sriov42_0_port_vlanfilter": "4001", + "vmxvpfe_sriov44_0_port_unknownunicastallow": "true", + "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2", + "vmxvre_instance": "0", + "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvre_flavor_name": "ns.c1r16d32.v5", + "vmxvpfe_volume_size_0": "40.0", + "vmxvpfe_sriov43_0_port_vlanfilter": "4001", + "nf_naming": "{ecomp_generated_naming=false}", + "nf_naming_code": "Navneet", + "vmxvre_name_0": "vREXI", + "vmxvpfe_sriov42_0_port_vlanstrip": "false", + "vmxvpfe_volume_name_0": "vPFEXI_FBVolume", + "max_instances": "3", + "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141", + "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2", + "vmxvpfe_sriov43_0_port_unknownunicastallow": "true", + "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true", + "vmxvre_console": "vidconsole", + "vmxvpfe_sriov44_0_port_vlanfilter": "4001", + "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF", + "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3", + "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true", + "min_instances": "1", + "vmxvpfe_sriov44_0_port_vlanstrip": "false", + "vf_module_id": "123", + "nf_function": "JAI", + "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true", + "vmxvre_int_ctl_ip_0": "10.0.0.10", + "ecomp_generated_naming": "false", + "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI", + "vnf_name": "mtnj309me6vre", + "vmxvpfe_sriov41_0_port_unknownunicastallow": "true", + "vmxvre_volume_type_1": "HITACHI", + "vmxvpfe_sriov44_0_port_broadcastallow": "true", + "vmxvre_volume_type_0": "HITACHI", + "vmxvpfe_volume_type_0": "HITACHI", + "vmxvpfe_sriov43_0_port_broadcastallow": "true", + "bandwidth_units": "get_input:adiodvpe0_bandwidth_units", + "vnf_id": "123", + "vmxvre_oam_prefix": "24", + "availability_zone_0": "mtpocfo-kvm-az01", + "ASN": "get_input:2017488_adiodvpe0_ASN", + "vmxvre_chassis_i2cid": "161", + "vmxvpfe_name_0": "vPFEXI", + "bandwidth": "get_input:adiodvpe0_bandwidth", + "availability_zone_max_count": "1", + "vmxvre_volume_size_0": "45.0", + "vmxvre_volume_size_1": "50.0", + "vmxvpfe_sriov42_0_port_broadcastallow": "true", + "vmxvre_oam_gateway": "10.0.0.10", + "vmxvre_volume_name_1": "vREXI_FAVolume", + "vmxvre_ore_present": "0", + "vmxvre_volume_name_0": "vREXI_FBVolume", + "vmxvre_type": "0", + "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name", + "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true", + "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429", + "vmx_int_ctl_len": "24", + "vmxvpfe_sriov43_0_port_vlanstrip": "false", + "vmxvpfe_sriov41_0_port_broadcastallow": "true", + "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d", + "vmxvpfe_sriov41_0_port_vlanfilter": "4001", + "nf_role": "Testing", + "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a", + "vmxvpfe_sriov42_0_port_unknownunicastallow": "true", + "vmxvpfe_flavor_name": "ns.c20r16d25.v5" + }, + "type": "VnfGroup", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "vfcInstanceGroups": {} + } + }, + "networks": { + "ExtVL 0": { + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c", + "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks", + "name": "ExtVL", + "version": "37.0", + "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "inputs": { + "vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "17.2" + }, + "bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "Gbps" + }, + "bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "10" + }, + "AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "ATLMY8GA" + }, + "ASN": { + "type": "string", + "description": "AV/PE", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "AV_vPE" + }, + "vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": null, + "constraints": [], + "required": true, + "default": "mtnj309me6" + } + }, + "commands": {}, + "properties": { + "network_role": "network role 1, network role 2", + "min_instances": 1, + "max_instances": 10, + "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}", + "exVL_naming": "{ecomp_generated_naming=true}", + "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}", + "network_homing": "{ecomp_selected_instance_node_target=false}" + }, + "type": "VL", + "modelCustomizationName": "ExtVL 0" + } + }, + "collectionResource": {}, + "configurations": {}, + "fabricConfigurations": {}, + "serviceProxies": {}, + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + }, + "volumeGroupAllowed": true + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": { + "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db", + "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091", + "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3", + "description": null, + "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "version": "5", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", + "properties": { + "minCountInstances": 1, + "maxCountInstances": 1, + "initialCount": 1, + "vfModuleLabel": "ADIOD_base_vPE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": false + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {}, + "volumeGroupAllowed": true + } + }, + "volumeGroups": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vRE_BV" + }, + "inputs": { + "adiodvpe0_bandwidth": { + "type": "string", + "description": "Requested VPE bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth" + }, + "constraints": null, + "required": true, + "default": "10" + }, + "2017488_adiodvpe0_vnf_instance_name": { + "type": "string", + "description": "The hostname assigned to the vpe.", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_instance_name" + }, + "constraints": null, + "required": true, + "default": "mtnj309me6" + }, + "2017488_adiodvpe0_vnf_config_template_version": { + "type": "string", + "description": "VPE Software Version", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "vnf_config_template_version" + }, + "constraints": null, + "required": true, + "default": "17.2" + }, + "2017488_adiodvpe0_AIC_CLLI": { + "type": "string", + "description": "AIC Site CLLI", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "AIC_CLLI" + }, + "constraints": null, + "required": true, + "default": "ATLMY8GA" + }, + "adiodvpe0_bandwidth_units": { + "type": "string", + "description": "Units of bandwidth", + "entry_schema": null, + "inputProperties": { + "sourceType": "HEAT", + "vfModuleLabel": "ADIOD_vRE_BV", + "paramName": "bandwidth_units" + }, + "constraints": null, + "required": true, + "default": "Gbps" + } + } + }, + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": { + "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a", + "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339", + "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557", + "description": null, + "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "version": "6", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2", + "properties": { + "minCountInstances": 0, + "maxCountInstances": null, + "initialCount": 0, + "vfModuleLabel": "ADIOD_vPFE_BV" + }, + "inputs": {} + } + }, + "pnfs": {} + } + }, + "serviceInstance": { + "6e59c5de-f052-46fa-aa7e-2fca9d674c44": { + "vnfGroups": { + "VF_vMee 0": { + "rollbackOnFailure": "true", + "vfModules": { + "vf_vmee0..VfVmee..base_vmme..module-0": { + "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": { + "isMissingData": false, + "sdncPreReload": null, + "modelInfo": { + "modelType": "VFmodule", + "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d", + "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87", + "modelName": "VfVmee..base_vmme..module-0", + "modelVersion": "2", + "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861", + "modelCustomizationName": "VfVmee..base_vmme..module-0" + }, + "instanceParams": [ + {} + ], + "trackById": "wmtm6sy2uj" + } + } + }, + "isMissingData": true, + "originalName": "VF_vMee 0", + "vnfGroupStoreKey": "VF_vMee 0", + "trackById": "p3wk448m5do", + "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": null, + "tenantId": null, + "lineOfBusiness": null, + "platformName": null, + "modelInfo": { + "modelType": "VnfGroup", + "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "VF_vMee", + "modelVersion": "2.0", + "modelCustomizationName": "VF_vMee 0" + } + } + }, + "networks": {}, + "instanceParams": [ + {} + ], + "validationCounter": 1, + "existingNames": {}, + "existingVNFCounterMap": { + "d6557200-ecf2-4641-8094-5393ae3aae60": 1 + }, + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "aicZoneId": "JAG1", + "projectName": "x1", + "rollbackOnFailure": "true", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "modelName": "ComplexService", + "modelVersion": "1.0", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44" + }, + "isALaCarte": false, + "name": "ComplexService", + "version": "1.0", + "description": "ComplexService", + "category": "Emanuel", + "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isEcompGeneratedNaming": false, + "isMultiStepDesign": false + }, + "6b528779-44a3-4472-bdff-9cd15ec93450": { + "networks": { + "ExtVL 0": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "sf3zth68xjf", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0:0001": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0", + "trackById": "2mdxioxca9h", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "ONAP", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "ExtVL 0_1": { + "rollbackOnFailure": "true", + "isMissingData": false, + "originalName": "ExtVL 0", + "networkStoreKey": "ExtVL 0_1", + "trackById": "z7vd1gmpbs", + "instanceName": "ExtVL", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "hvf6", + "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e", + "platformName": "xxx1", + "lineOfBusiness": "zzz1", + "instanceParams": [ + { + "vnf_config_template_version": "17.2", + "bandwidth_units": "Gbps", + "bandwidth": "10", + "AIC_CLLI": "ATLMY8GA", + "ASN": "AV_vPE", + "vnf_instance_name": "yoav" + } + ], + "modelInfo": { + "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c", + "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986", + "modelName": "ExtVL", + "modelVersion": "37.0", + "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f", + "modelCustomizationName": "ExtVL 0", + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + }, + "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986" + } + }, + "vnfGroups": { + "2017-488_ADIOD-vPE 0": { + "rollbackOnFailure": "true", + "vfModules": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": { + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": { + "instanceName": "yoav", + "volumeGroupName": "123", + "modelInfo": { + "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1", + "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5", + "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "modelVersion": "6", + "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", + "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1", + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5" + }, + "uuid": "25284168-24bb-4698-8cb4-3f509146eca5", + "isMissingData": false, + "instanceParams": [ + { + "adiodvpe0_bandwidth": "10", + "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6", + "2017488_adiodvpe0_vnf_config_template_version": "17.2", + "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA", + "adiodvpe0_bandwidth_units": "Gbps" + } + ] + } + } + }, + "isMissingData": false, + "originalName": "2017-488_ADIOD-vPE 0", + "vnfGroupStoreKey": "2017-488_ADIOD-vPE 0", + "trackById": "o65b26t2thj", + "instanceName": "2017488_ADIODvPE", + "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "lcpCloudRegionId": "hvf6", + "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054", + "platformName": "platform", + "lineOfBusiness": "ONAP", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8", + "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09", + "modelName": "2017-488_ADIOD-vPE", + "modelVersion": "5.0", + "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45", + "modelCustomizationName": "2017-488_ADIOD-vPE 0", + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + }, + "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09" + } + }, + "instanceParams": [ + { + "2017488_adiodvpe0_ASN": "AV_vPE" + } + ], + "validationCounter": 0, + "existingNames": { + "123": "", + "instancename": "", + "yoav": "", + "extvl": "" + }, + "existingVnfGroupCounterMap": { + "69e09f68-8b63-4cc9-b9ff-860960b5db09": 1 + }, + "existingNetworksCounterMap": { + "ddc3f20c-08b5-40fd-af72-c6d14636b986": 3 + }, + "instanceName": "InstanceName", + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77", + "lcpCloudRegionId": "JANET25", + "tenantId": "092eb9e8e4b7412e8787dd091bc58e86", + "aicZoneId": "JAG1", + "projectName": null, + "rollbackOnFailure": "true", + "aicZoneName": "YUDFJULP-JAG1", + "owningEntityName": "WayneHolland", + "testApi": "GR_API", + "isEcompGeneratedNaming": true, + "tenantName": "USP-SIP-IC-24335-T-01", + "bulkSize": 1, + "modelInfo": { + "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450", + "modelName": "action-data", + "modelVersion": "1.0", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450" + }, + "isALaCarte": false, + "name": "action-data", + "version": "1.0", + "description": "", + "category": "", + "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450", + "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + "serviceType": "", + "serviceRole": "", + "isMultiStepDesign": false + } + }, + "lcpRegionsAndTenants": { + "lcpRegionList": [ + { + "id": "JANET25", + "name": "JANET25", + "isPermitted": true + }, + { + "id": "hvf6", + "name": "hvf6", + "isPermitted": true + } + ], + "lcpRegionsTenantsMap": { + "JANET25": [ + { + "id": "092eb9e8e4b7412e8787dd091bc58e86", + "name": "USP-SIP-IC-24335-T-01", + "isPermitted": true + } + ], + "hvf6": [ + { + "id": "bae71557c5bb4d5aac6743a4e5f1d054", + "name": "AIN Web Tool-15-D-testalexandria", + "isPermitted": true + }, + { + "id": "229bcdc6eaeb4ca59d55221141d01f8e", + "name": "AIN Web Tool-15-D-STTest2", + "isPermitted": true + }, + { + "id": "1178612d2b394be4834ad77f567c0af2", + "name": "AIN Web Tool-15-D-SSPtestcustome", + "isPermitted": true + }, + { + "id": "19c5ade915eb461e8af52fb2fd8cd1f2", + "name": "AIN Web Tool-15-D-UncheckedEcopm", + "isPermitted": true + }, + { + "id": "de007636e25249238447264a988a927b", + "name": "AIN Web Tool-15-D-dfsdf", + "isPermitted": true + }, + { + "id": "62f29b3613634ca6a3065cbe0e020c44", + "name": "AIN/SMS-16-D-Multiservices1", + "isPermitted": true + }, + { + "id": "649289e30d3244e0b48098114d63c2aa", + "name": "AIN Web Tool-15-D-SSPST66", + "isPermitted": true + }, + { + "id": "3f21eeea6c2c486bba31dab816c05a32", + "name": "AIN Web Tool-15-D-ASSPST47", + "isPermitted": true + }, + { + "id": "f60ce21d3ee6427586cff0d22b03b773", + "name": "CESAR-100-D-sspjg67246", + "isPermitted": true + }, + { + "id": "8774659e425f479895ae091bb5d46560", + "name": "CESAR-100-D-sspjg68359", + "isPermitted": true + }, + { + "id": "624eb554b0d147c19ff8885341760481", + "name": "AINWebTool-15-D-iftach", + "isPermitted": true + }, + { + "id": "214f55f5fc414c678059c383b03e4962", + "name": "CESAR-100-D-sspjg612401", + "isPermitted": true + }, + { + "id": "c90666c291664841bb98e4d981ff1db5", + "name": "CESAR-100-D-sspjg621340", + "isPermitted": true + }, + { + "id": "ce5b6bc5c7b348e1bf4b91ac9a174278", + "name": "sspjg621351cloned", + "isPermitted": true + }, + { + "id": "b386b768a3f24c8e953abbe0b3488c02", + "name": "AINWebTool-15-D-eteancomp", + "isPermitted": true + }, + { + "id": "dc6c4dbfd225474e9deaadd34968646c", + "name": "AINWebTool-15-T-SPFET", + "isPermitted": true + }, + { + "id": "02cb5030e9914aa4be120bd9ed1e19eb", + "name": "AINWebTool-15-X-eeweww", + "isPermitted": true + }, + { + "id": "f2f3830e4c984d45bcd00e1a04158a79", + "name": "CESAR-100-D-spjg61909", + "isPermitted": true + }, + { + "id": "05b91bd5137f4929878edd965755c06d", + "name": "CESAR-100-D-sspjg621512cloned", + "isPermitted": true + }, + { + "id": "7002fbe8482d4a989ddf445b1ce336e0", + "name": "AINWebTool-15-X-vdr", + "isPermitted": true + }, + { + "id": "4008522be43741dcb1f5422022a2aa0b", + "name": "AINWebTool-15-D-ssasa", + "isPermitted": true + }, + { + "id": "f44e2e96a1b6476abfda2fa407b00169", + "name": "AINWebTool-15-D-PFNPT", + "isPermitted": true + }, + { + "id": "b69a52bec8a84669a37a1e8b72708be7", + "name": "AINWebTool-15-X-vdre", + "isPermitted": true + }, + { + "id": "fac7d9fd56154caeb9332202dcf2969f", + "name": "AINWebTool-15-X-NONPODECOMP", + "isPermitted": true + }, + { + "id": "2d34d8396e194eb49969fd61ffbff961", + "name": "DN5242-Nov16-T5", + "isPermitted": true + }, + { + "id": "cb42a77ff45b48a8b8deb83bb64acc74", + "name": "ro-T11", + "isPermitted": true + }, + { + "id": "fa45ca53c80b492fa8be5477cd84fc2b", + "name": "ro-T112", + "isPermitted": true + }, + { + "id": "4914ab0ab3a743e58f0eefdacc1dde77", + "name": "DN5242-Nov21-T1", + "isPermitted": true + }, + { + "id": "d0a3e3f2964542259d155a81c41aadc3", + "name": "test-hvf6-09", + "isPermitted": true + }, + { + "id": "cbb99fe4ada84631b7baf046b6fd2044", + "name": "DN5242-Nov16-T3", + "isPermitted": true + } + ] + } + }, + "productFamilies": [ + { + "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", + "name": "SCOTTIE", + "isPermitted": true + }, + { + "id": "17cc1042-527b-11e6-beb8-9e71128cae77", + "name": "IGNACIO", + "isPermitted": true + }, + { + "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e", + "name": "Christie", + "isPermitted": true + }, + { + "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7", + "name": "Enhanced Services", + "isPermitted": true + }, + { + "id": "vTerrance", + "name": "vTerrance", + "isPermitted": true + }, + { + "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f", + "name": "vSCP", + "isPermitted": true + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": true + }, + { + "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c", + "name": "BVOIP", + "isPermitted": true + }, + { + "id": "db171b8f-115c-4992-a2e3-ee04cae357e0", + "name": "LINDSEY", + "isPermitted": true + }, + { + "id": "LRSI-OSPF", + "name": "LRSI-OSPF", + "isPermitted": true + }, + { + "id": "vRosemarie", + "name": "HNGATEWAY", + "isPermitted": true + }, + { + "id": "vHNPaas", + "name": "WILKINS", + "isPermitted": true + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", + "name": "VROUTER", + "isPermitted": true + }, + { + "id": "Cisneros", + "name": "vMuriel", + "isPermitted": true + }, + { + "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1", + "name": "CARA Griffin", + "isPermitted": true + }, + { + "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d", + "name": "DARREN MCGEE", + "isPermitted": true + }, + { + "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", + "name": "Transport", + "isPermitted": true + }, + { + "id": "vSalvatore", + "name": "vSalvatore", + "isPermitted": true + }, + { + "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", + "name": "Josefina", + "isPermitted": true + }, + { + "id": "vHubbard", + "name": "vHubbard", + "isPermitted": true + }, + { + "id": "12a96a9d-4b4c-4349-a950-fe1159602621", + "name": "DARREN MCGEE", + "isPermitted": true + } + ], + "serviceTypes": { + "e433710f-9217-458d-a79d-1c7aff376d89": [ + { + "id": "0", + "name": "vRichardson", + "isPermitted": false + }, + { + "id": "1", + "name": "TYLER SILVIA", + "isPermitted": true + }, + { + "id": "2", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "3", + "name": "vJamie", + "isPermitted": false + }, + { + "id": "4", + "name": "vVoiceMail", + "isPermitted": false + }, + { + "id": "5", + "name": "Kennedy", + "isPermitted": false + }, + { + "id": "6", + "name": "vSEGW", + "isPermitted": false + }, + { + "id": "7", + "name": "vVM", + "isPermitted": false + }, + { + "id": "8", + "name": "vOTA", + "isPermitted": false + }, + { + "id": "9", + "name": "vMME", + "isPermitted": false + }, + { + "id": "10", + "name": "vMNS", + "isPermitted": false + }, + { + "id": "11", + "name": "vSCP", + "isPermitted": false + }, + { + "id": "12", + "name": "VPMS", + "isPermitted": false + }, + { + "id": "13", + "name": "vMMSC", + "isPermitted": false + }, + { + "id": "14", + "name": "SSD", + "isPermitted": false + }, + { + "id": "15", + "name": "vMOG", + "isPermitted": false + }, + { + "id": "16", + "name": "LINDSEY", + "isPermitted": false + }, + { + "id": "17", + "name": "JOHANNA_SANTOS", + "isPermitted": false + }, + { + "id": "18", + "name": "vCarroll", + "isPermitted": false + } + ] + }, + "aicZones": [ + { + "id": "NFT1", + "name": "NFTJSSSS-NFT1" + }, + { + "id": "JAG1", + "name": "YUDFJULP-JAG1" + }, + { + "id": "YYY1", + "name": "UUUAIAAI-YYY1" + }, + { + "id": "BAN1", + "name": "VSDKYUTP-BAN1" + }, + { + "id": "DKJ1", + "name": "DKJSJDKA-DKJ1" + }, + { + "id": "MCS1", + "name": "ASACMAMS-MCS1" + }, + { + "id": "UIO1", + "name": "uioclli1-UIO1" + }, + { + "id": "RAJ1", + "name": "YGBIJNLQ-RAJ1" + }, + { + "id": "OPA1", + "name": "opaclli1-OPA1" + }, + { + "id": "SDE1", + "name": "ZXCVBNMA-SDE1" + }, + { + "id": "VEN2", + "name": "FGHJUHIL-VEN2" + }, + { + "id": "ORL1", + "name": "ORLDFLMA-ORL1" + }, + { + "id": "JAD1", + "name": "JADECLLI-JAD1" + }, + { + "id": "ZXL1", + "name": "LWLWCANN-ZXL1" + }, + { + "id": "CKL1", + "name": "CLKSKCKK-CKL1" + }, + { + "id": "SDF1", + "name": "sdfclli1-SDF1" + }, + { + "id": "RAD1", + "name": "RADICAL1-RAD1" + }, + { + "id": "KIT1", + "name": "BHYJFGLN-KIT1" + }, + { + "id": "REL1", + "name": "INGERFGT-REL1" + }, + { + "id": "JNL1", + "name": "CJALSDAC-JNL1" + }, + { + "id": "OLK1", + "name": "OLKOLKLS-OLK1" + }, + { + "id": "CHI1", + "name": "CHILLIWE-CHI1" + }, + { + "id": "UUU4", + "name": "UUUAAAUU-UUU4" + }, + { + "id": "TUF1", + "name": "TUFCLLI1-TUF1" + }, + { + "id": "KJN1", + "name": "CKALDKSA-KJN1" + }, + { + "id": "SAM1", + "name": "SNDGCA64-SAN1" + }, + { + "id": "SCK1", + "name": "SCKSCKSK-SCK1" + }, + { + "id": "HJH1", + "name": "AOEEQQQD-HJH1" + }, + { + "id": "HGD1", + "name": "SDFQWHGD-HGD1" + }, + { + "id": "KOR1", + "name": "HYFLNBVT-KOR1" + }, + { + "id": "ATL43", + "name": "AICLOCID-ATL43" + }, + { + "id": "ATL54", + "name": "AICFTAAI-ATL54" + }, + { + "id": "ATL66", + "name": "CLLIAAII-ATL66" + }, + { + "id": "VEL1", + "name": "BNMLKUIK-VEL1" + }, + { + "id": "ICC1", + "name": "SANJITAT-ICC1" + }, + { + "id": "MNT11", + "name": "WSXEFBTH-MNT11" + }, + { + "id": "DEF2", + "name": "WSBHGTYL-DEF2" + }, + { + "id": "MAD11", + "name": "SDFQWGKL-MAD11" + }, + { + "id": "OLG1", + "name": "OLHOLHOL-OLG1" + }, + { + "id": "GAR1", + "name": "NGFVSJKO-GAR1" + }, + { + "id": "SAN22", + "name": "GNVLSCTL-SAN22" + }, + { + "id": "HRG1", + "name": "HRGHRGGS-HRG1" + }, + { + "id": "JCS1", + "name": "JCSJSCJS-JCS1" + }, + { + "id": "DHA12", + "name": "WSXEDECF-DHA12" + }, + { + "id": "HJE1", + "name": "AOEEWWWD-HJE1" + }, + { + "id": "NCA1", + "name": "NCANCANN-NCA1" + }, + { + "id": "IOP1", + "name": "iopclli1-IOP1" + }, + { + "id": "RTY1", + "name": "rtyclli1-RTY1" + }, + { + "id": "KAP1", + "name": "HIOUYTRQ-KAP1" + }, + { + "id": "ZEN1", + "name": "ZENCLLI1-ZEN1" + }, + { + "id": "HKA1", + "name": "JAKHLASS-HKA1" + }, + { + "id": "CQK1", + "name": "CQKSCAKK-CQK1" + }, + { + "id": "SAI1", + "name": "UBEKQLPD-SAI1" + }, + { + "id": "ERT1", + "name": "ertclli1-ERT1" + }, + { + "id": "IBB1", + "name": "PLMKOIJU-IBB1" + }, + { + "id": "TIR2", + "name": "PLKINHYI-TIR2" + }, + { + "id": "HSD1", + "name": "CHASKCDS-HSD1" + }, + { + "id": "SLF78", + "name": "SDCTLFN1-SLF78" + }, + { + "id": "SEE78", + "name": "SDCTEEE4-SEE78" + }, + { + "id": "SAN13", + "name": "TOKYJPFA-SAN13" + }, + { + "id": "SAA78", + "name": "SDCTAAA1-SAA78" + }, + { + "id": "LUC1", + "name": "ATLDFGYC-LUC1" + }, + { + "id": "AMD13", + "name": "MEMATLAN-AMD13" + }, + { + "id": "TOR1", + "name": "TOROONXN-TOR1" + }, + { + "id": "QWE1", + "name": "QWECLLI1-QWE1" + }, + { + "id": "ZOG1", + "name": "ZOGASTRO-ZOG1" + }, + { + "id": "CAL33", + "name": "CALIFORN-CAL33" + }, + { + "id": "SHH78", + "name": "SDIT1HHH-SHH78" + }, + { + "id": "DSA1", + "name": "LKJHGFDS-DSA1" + }, + { + "id": "CLG1", + "name": "CLGRABAD-CLG1" + }, + { + "id": "BNA1", + "name": "BNARAGBK-BNA1" + }, + { + "id": "ATL84", + "name": "CANTTCOC-ATL84" + }, + { + "id": "APP1", + "name": "WBHGTYUI-APP1" + }, + { + "id": "RJN1", + "name": "RJNRBZAW-RJN1" + }, + { + "id": "EHH78", + "name": "SDCSHHH5-EHH78" + }, + { + "id": "mac10", + "name": "PKGTESTF-mac10" + }, + { + "id": "SXB78", + "name": "SDCTGXB1-SXB78" + }, + { + "id": "SAX78", + "name": "SDCTAXG1-SAX78" + }, + { + "id": "SYD1", + "name": "SYDNAUBV-SYD1" + }, + { + "id": "TOK1", + "name": "TOKYJPFA-TOK1" + }, + { + "id": "KGM2", + "name": "KGMTNC20-KGM2" + }, + { + "id": "DCC1b", + "name": "POIUYTGH-DCC1b" + }, + { + "id": "SKK78", + "name": "SDCTKKK1-SKK78" + }, + { + "id": "SGG78", + "name": "SDCTGGG1-SGG78" + }, + { + "id": "SJJ78", + "name": "SDCTJJJ1-SJJ78" + }, + { + "id": "SBX78", + "name": "SDCTBXG1-SBX78" + }, + { + "id": "LAG1", + "name": "LARGIZON-LAG1" + }, + { + "id": "IAA1", + "name": "QAZXSWED-IAA1" + }, + { + "id": "POI1", + "name": "PLMNJKIU-POI1" + }, + { + "id": "LAG1a", + "name": "LARGIZON-LAG1a" + }, + { + "id": "PBL1", + "name": "PBLAPBAI-PBL1" + }, + { + "id": "LAG45", + "name": "LARGIZON-LAG1a" + }, + { + "id": "MAR1", + "name": "MNBVCXZM-MAR1" + }, + { + "id": "HST70", + "name": "HSTNTX70-HST70" + }, + { + "id": "DCC1a", + "name": "POIUYTGH-DCC1a" + }, + { + "id": "TOL1", + "name": "TOLDOH21-TOL1" + }, + { + "id": "LON1", + "name": "LONEENCO-LON1" + }, + { + "id": "SJU78", + "name": "SDIT1JUB-SJU78" + }, + { + "id": "STN27", + "name": "HSTNTX01-STN27" + }, + { + "id": "SSW56", + "name": "ss8126GT-SSW56" + }, + { + "id": "SBB78", + "name": "SDIT1BBB-SBB78" + }, + { + "id": "DCC3", + "name": "POIUYTGH-DCC3" + }, + { + "id": "GNV1", + "name": "GNVLSCTL-GNV1" + }, + { + "id": "WAS1", + "name": "WASHDCSW-WAS1" + }, + { + "id": "TOY1", + "name": "TORYONNZ-TOY1" + }, + { + "id": "STT1", + "name": "STTLWA02-STT1" + }, + { + "id": "STG1", + "name": "STTGGE62-STG1" + }, + { + "id": "SLL78", + "name": "SDCTLLL1-SLL78" + }, + { + "id": "SBU78", + "name": "SDIT1BUB-SBU78" + }, + { + "id": "ATL2", + "name": "ATLNGANW-ATL2" + }, + { + "id": "BOT1", + "name": "BOTHWAKY-BOT1" + }, + { + "id": "SNG1", + "name": "SNGPSIAU-SNG1" + }, + { + "id": "NYC1", + "name": "NYCMNY54-NYC1" + }, + { + "id": "LAG1b", + "name": "LARGIZON-LAG1b" + }, + { + "id": "AMD15", + "name": "AMDFAA01-AMD15" + }, + { + "id": "SNA1", + "name": "SNANTXCA-SNA1" + }, + { + "id": "PLT1", + "name": "PLTNCA60-PLT1" + }, + { + "id": "TLP1", + "name": "TLPNXM18-TLP1" + }, + { + "id": "SDD81", + "name": "SAIT1DD6-SDD81" + }, + { + "id": "DCC1", + "name": "POIUYTGH-DCC1" + }, + { + "id": "DCC2", + "name": "POIUYTGH-DCC2" + }, + { + "id": "OKC1", + "name": "OKCBOK55-OKC1" + }, + { + "id": "PAR1", + "name": "PARSFRCG-PAR1" + }, + { + "id": "TES36", + "name": "ABCEETES-TES36" + }, + { + "id": "COM1", + "name": "PLMKOPIU-COM1" + }, + { + "id": "ANI1", + "name": "ATLNGTRE-ANI1" + }, + { + "id": "SDG78", + "name": "SDIT1BDG-SDG78" + }, + { + "id": "mac20", + "name": "PKGTESTF-mac20" + }, + { + "id": "DSF45", + "name": "DSFBG123-DSF45" + }, + { + "id": "HST25", + "name": "HSTNTX01-HST25" + }, + { + "id": "AMD18", + "name": "AUDIMA01-AMD18" + }, + { + "id": "SAA80", + "name": "SAIT9AA3-SAA80" + }, + { + "id": "SSA56", + "name": "SSIT2AA7-SSA56" + }, + { + "id": "SDD82", + "name": "SAIT1DD9-SDD82" + }, + { + "id": "JCV1", + "name": "JCVLFLBW-JCV1" + }, + { + "id": "SUL2", + "name": "WERTYUJK-SUL2" + }, + { + "id": "PUR1", + "name": "purelyde-PUR1" + }, + { + "id": "FDE55", + "name": "FDERT555-FDE55" + }, + { + "id": "SITE", + "name": "LONEENCO-SITE" + }, + { + "id": "ATL1", + "name": "ATLNGAMA-ATL1" + }, + { + "id": "JUL1", + "name": "ZXCVBNMM-JUL1" + }, + { + "id": "TAT34", + "name": "TESAAISB-TAT34" + }, + { + "id": "XCP12", + "name": "CHKGH123-XCP12" + }, + { + "id": "RAI1", + "name": "poiuytre-RAI1" + }, + { + "id": "HPO1", + "name": "ATLNGAUP-HPO1" + }, + { + "id": "KJF12", + "name": "KJFDH123-KJF12" + }, + { + "id": "SCC80", + "name": "SAIT9CC3-SCC80" + }, + { + "id": "SAA12", + "name": "SAIT9AF8-SAA12" + }, + { + "id": "SAA14", + "name": "SAIT1AA9-SAA14" + }, + { + "id": "ATL35", + "name": "TTESSAAI-ATL35" + }, + { + "id": "CWY1", + "name": "CWYMOWBS-CWY1" + }, + { + "id": "ATL76", + "name": "TELEPAAI-ATL76" + }, + { + "id": "DSL12", + "name": "DSLFK242-DSL12" + }, + { + "id": "ATL53", + "name": "AAIATLTE-ATL53" + }, + { + "id": "SAA11", + "name": "SAIT9AA2-SAA11" + }, + { + "id": "ATL62", + "name": "TESSASCH-ATL62" + }, + { + "id": "AUG1", + "name": "ASDFGHJK-AUG1" + }, + { + "id": "POI22", + "name": "POIUY123-POI22" + }, + { + "id": "SAA13", + "name": "SAIT1AA9-SAA13" + }, + { + "id": "BHY17", + "name": "BHYTFRF3-BHY17" + }, + { + "id": "LIS1", + "name": "HOSTPROF-LIS1" + }, + { + "id": "SIP1", + "name": "ZXCVBNMK-SIP1" + }, + { + "id": "ATL99", + "name": "TEESTAAI-ATL43" + }, + { + "id": "ATL64", + "name": "FORLOAAJ-ATL64" + }, + { + "id": "TAT33", + "name": "TESAAISA-TAT33" + }, + { + "id": "RAD10", + "name": "INDIPUNE-RAD10" + }, + { + "id": "RTW5", + "name": "BHYTFRY4-RTW5" + }, + { + "id": "JGS1", + "name": "KSJKKKKK-JGS1" + }, + { + "id": "ATL98", + "name": "TEESTAAI-ATL43" + }, + { + "id": "WAN1", + "name": "LEIWANGW-WAN1" + }, + { + "id": "ATL44", + "name": "ATLSANAB-ATL44" + }, + { + "id": "RTD2", + "name": "BHYTFRk4-RTD2" + }, + { + "id": "NIR1", + "name": "ORFLMANA-NIR1" + }, + { + "id": "ATL75", + "name": "SANAAIRE-ATL75" + }, + { + "id": "NUM1", + "name": "QWERTYUI-NUM1" + }, + { + "id": "MTN32", + "name": "MDTWNJ21-MTN32" + }, + { + "id": "RTZ4", + "name": "BHYTFRZ6-RTZ4" + }, + { + "id": "ATL56", + "name": "ATLSANAC-ATL56" + }, + { + "id": "AMS1", + "name": "AMSTNLBW-AMS1" + }, + { + "id": "RCT1", + "name": "AMSTERNL-RCT1" + }, + { + "id": "JAN1", + "name": "ORFLMATT-JAN1" + }, + { + "id": "ABC14", + "name": "TESAAISA-ABC14" + }, + { + "id": "TAT37", + "name": "TESAAISD-TAT37" + }, + { + "id": "MIC54", + "name": "MICHIGAN-MIC54" + }, + { + "id": "ABC11", + "name": "ATLSANAI-ABC11" + }, + { + "id": "AMF11", + "name": "AMDOCS01-AMF11" + }, + { + "id": "ATL63", + "name": "ATLSANEW-ATL63" + }, + { + "id": "ABC12", + "name": "ATLSECIA-ABC12" + }, + { + "id": "MTN20", + "name": "MDTWNJ21-MTN20" + }, + { + "id": "ABC15", + "name": "AAITESAN-ABC15" + }, + { + "id": "AVT1", + "name": "AVTRFLHD-AVT1" + }, + { + "id": "ATL34", + "name": "ATLSANAI-ATL34" + } + ], + "categoryParameters": { + "owningEntityList": [ + { + "id": "aaa1", + "name": "aaa1" + }, + { + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, + { + "id": "Melissa", + "name": "Melissa" + } + ], + "projectList": [ + { + "id": "WATKINS", + "name": "WATKINS" + }, + { + "id": "x1", + "name": "x1" + }, + { + "id": "yyy1", + "name": "yyy1" + } + ], + "lineOfBusinessList": [ + { + "id": "ONAP", + "name": "ONAP" + }, + { + "id": "zzz1", + "name": "zzz1" + } + ], + "platformList": [ + { + "id": "platform", + "name": "platform" + }, + { + "id": "xxx1", + "name": "xxx1" + } + ] + }, + "type": "[LCP_REGIONS_AND_TENANTS] Update", + "subscribers": [ + { + "id": "CAR_2020_ER", + "name": "CAR_2020_ER", + "isPermitted": true + }, + { + "id": "21014aa2-526b-11e6-beb8-9e71128cae77", + "name": "JULIO ERICKSON", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-2", + "name": "DALE BRIDGES", + "isPermitted": false + }, + { + "id": "DHV1707-TestSubscriber-1", + "name": "LLOYD BRIDGES", + "isPermitted": false + }, + { + "id": "jimmy-example", + "name": "JimmyExampleCust-20161102", + "isPermitted": false + }, + { + "id": "jimmy-example2", + "name": "JimmyExampleCust-20161103", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-102", + "name": "ERICA5779-TestSub-PWT-102", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-101", + "name": "ERICA5779-TestSub-PWT-101", + "isPermitted": false + }, + { + "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "name": "Emanuel", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-4", + "name": "ERICA5779-Subscriber-5", + "isPermitted": false + }, + { + "id": "ERICA5779-TestSub-PWT-103", + "name": "ERICA5779-TestSub-PWT-103", + "isPermitted": false + }, + { + "id": "ERICA5779-Subscriber-2", + "name": "ERICA5779-Subscriber-2", + "isPermitted": false + }, + { + "id": "e433710f-9217-458d-a79d-1c7aff376d89", + "name": "SILVIA ROBBINS", + "isPermitted": true + }, + { + "id": "ERICA5779-Subscriber-3", + "name": "ERICA5779-Subscriber-3", + "isPermitted": false + }, + { + "id": "31739f3e-526b-11e6-beb8-9e71128cae77", + "name": "CRAIG/ROBERTS", + "isPermitted": false + } + ] + } + }; + } +} + +class MockFeatureFlagsService {} + +describe('vnf group new popup service', () => { + let injector; + let service: VnfGroupPopupService; + let genericFormService: GenericFormService + let defaultDataGeneratorService: DefaultDataGeneratorService; + let fb: FormBuilder; + let iframeService: IframeService; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + providers : [ + VnfGroupPopupService, + DefaultDataGeneratorService, + GenericFormService, + FormBuilder, + IframeService, + {provide:FeatureFlagsService, useClass: MockFeatureFlagsService}, + AaiService, + LogService, + BasicPopupService, + VfModulePopuopService, + BasicControlGenerator, + VnfGroupControlGenerator, + {provide: NgRedux, useClass: MockReduxStore}, + {provide: HttpClient, useClass: MockAppStore}] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(VnfGroupPopupService); + genericFormService = injector.get(GenericFormService); + defaultDataGeneratorService = injector.get(DefaultDataGeneratorService); + fb = injector.get(FormBuilder); + iframeService = injector.get(IframeService); + + })().then(done).catch(done.fail)); + + test('getTitle vnf group should return the correct title for edit and create mode', () => { + expect(service.getTitle(false)).toBe('Set a new VNF Group'); + expect(service.getTitle(true)).toBe('Edit VNF Group instance'); + }); + + test('getSubRightTitle vnf should return popup type', () => { + expect(service.getSubRightTitle()).toBe('VNF Group Instance Details'); + }); + + test('getModelInformation vnfGroup should update modelInformations', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const vnfGroupModelName: string = '2017-388_ADIOD-vPE 1'; + service.getModelInformation(serviceId, vnfGroupModelName); + expect(service.modelInformations.length).toEqual(14); + + expect(service.modelInformations[0].label).toEqual("Model version"); + expect(service.modelInformations[0].values).toEqual(['1.0']); + + expect(service.modelInformations[1].label).toEqual("Description"); + expect(service.modelInformations[1].values).toEqual(['Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM']); + + expect(service.modelInformations[2].label).toEqual("Category"); + expect(service.modelInformations[2].values).toEqual([undefined]); + + expect(service.modelInformations[3].label).toEqual("Sub Category"); + expect(service.modelInformations[3].values).toEqual([undefined]); + + expect(service.modelInformations[4].label).toEqual("UUID"); + expect(service.modelInformations[4].values).toEqual(['0903e1c0-8e03-4936-b5c2-260653b96413']); + + expect(service.modelInformations[5].label).toEqual("Invariant UUID"); + expect(service.modelInformations[5].values).toEqual(['00beb8f9-6d39-452f-816d-c709b9cbb87d']); + + expect(service.modelInformations[6].label).toEqual("Type"); + expect(service.modelInformations[6].values).toEqual([undefined]); + + expect(service.modelInformations[7].label).toEqual("Role"); + expect(service.modelInformations[7].values).toEqual([undefined]); + + expect(service.modelInformations[8].label).toEqual("Function"); + expect(service.modelInformations[8].values).toEqual([undefined]); + + expect(service.modelInformations[9].label).toEqual("Member resource type"); + expect(service.modelInformations[9].values).toEqual(['VNF']); + + expect(service.modelInformations[10].label).toEqual("Members service Invariant UUID"); + expect(service.modelInformations[10].values).toEqual([]); + + expect(service.modelInformations[11].label).toEqual("Members service model name"); + expect(service.modelInformations[11].values).toEqual([]); + + expect(service.modelInformations[12].label).toEqual("Minimum to instantiate"); + expect(service.modelInformations[12].values).toEqual(['0']); + + expect(service.modelInformations[13].label).toEqual("Maximum to instantiate"); + expect(service.modelInformations[13].values).toEqual(['Unlimited']); + }); + + test('getSubLeftTitle new vnf group popup should return service model name', () => { + service.uuidData = { + serviceId: '6e59c5de-f052-46fa-aa7e-2fca9d674c44', + modelName: 'VF_vMee 0' + }; + expect(service.getSubLeftTitle()).toBe('VNF Group : VF_vMee'); + }); + + test('getInstance with empty storekey should be created', () => { + const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44'; + const vnfGroupModelName: string = '2017-388_ADIOD-vPE 1'; + const newInstance = service.getInstance(serviceId, vnfGroupModelName, null); + expect(newInstance).toBeDefined(); + }); + + test('getInstance with not empty storekey should return vnfGroupStoreKey', () => { + const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450'; + const vnfGroupModelName: string = '2017-388_ADIOD-vPE 1'; + const vnfGroupStoreKey: string = '2017-488_ADIOD-vPE 0'; + const newInstance = service.getInstance(serviceId, vnfGroupModelName, vnfGroupStoreKey); + expect(newInstance.vnfGroupStoreKey).toEqual('2017-488_ADIOD-vPE 0'); + }); + + test('getGenericFormPopupDetails returns the FormPopupDetails object', () => { + const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44'; + const vnfGroupModelName: string = 'VF_vMee 0'; + const vnfGroupStoreKey: string = 'VF_vMee 0'; + let uuidData: UUIDData = <any>{ + serviceId: "6e59c5de-f052-46fa-aa7e-2fca9d674c44", + modelName: "VF_vMee 0", + vnfGroupStoreKey: "VF_vMee 0" + }; + const formPopupDetailsObject = service.getGenericFormPopupDetails(serviceId, vnfGroupModelName, vnfGroupStoreKey, null, uuidData, true); + expect(formPopupDetailsObject).toBeDefined(); + } + ); +}); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.ts new file mode 100644 index 000000000..748edd2cb --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.ts @@ -0,0 +1,158 @@ +import {Injectable} from '@angular/core'; +import {GenericPopupInterface} from "../generic-popup.interface"; +import {ITreeNode} from "angular-tree-component/dist/defs/api"; +import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model"; +import {FormGroup} from "@angular/forms"; +import {ModelInformationItem} from "../../../model-information/model-information.component"; +import {ServiceModel} from "../../../../models/serviceModel"; +import {Subject} from "rxjs/Subject"; +import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator"; +import {IframeService} from "../../../../utils/iframe.service"; +import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {BasicPopupService} from "../basic.popup.service"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../../store/reducers"; +import {Subscriber} from "../../../../models/subscriber"; +import {Constants} from "../../../../utils/constants"; +import {ModelInfo} from "../../../../models/modelInfo"; +import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions"; +import * as _ from 'lodash'; +import {VnfGroupControlGenerator} from "../../../genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator"; +import {VnfGroupInstance} from "../../../../models/vnfGroupInstance"; +import {createVnfGroupInstance, updateVnfGroupInstance} from "../../../../storeUtil/utils/vnfGroup/vnfGroup.actions"; + +@Injectable() +export class VnfGroupPopupService implements GenericPopupInterface{ + dynamicInputs: any; + instance: any; + model:any; + serviceModel:ServiceModel; + modelInformations: ModelInformationItem[] = []; + uuidData: Object; + closeDialogEvent: Subject<any> = new Subject<any>(); + isUpdateMode: boolean; + + constructor( + private _basicControlGenerator: BasicControlGenerator, + private _vnfGroupControlGenerator: VnfGroupControlGenerator, + private _iframeService: IframeService, + private _defaultDataGeneratorService: DefaultDataGeneratorService, + private _aaiService: AaiService, + private _basicPopupService: BasicPopupService, + private _store: NgRedux<AppState>) { + } + + getGenericFormPopupDetails(serviceId: string, modelName: string, vnfGroupStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails { + this.uuidData = uuidData; + this.isUpdateMode = isUpdateMode; + this.instance = this.getInstance(serviceId, modelName, vnfGroupStoreKey); + this.getModelInformation(serviceId, modelName); + + return new FormPopupDetails(this, + PopupType.VNF_GROUP, + uuidData, + this.getTitle(isUpdateMode), + this.getSubLeftTitle(), + this.getSubRightTitle(), + this.getControls(serviceId, modelName, vnfGroupStoreKey), + this._basicPopupService.getDynamicInputs(serviceId, modelName, vnfGroupStoreKey, 'vnfGroups'), + this.modelInformations, + (that, form: FormGroup) => {that.onSubmit(that, form);}, + (that: any, form: FormGroup) => {that.onCancel(that, form); } + ) + } + + getControls(serviceId: string, modelName: string, vnfGroupStoreKey: string){ + if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') { + return this._vnfGroupControlGenerator.getMacroFormControls(serviceId, vnfGroupStoreKey, modelName); + } else { + return this._vnfGroupControlGenerator.getAlaCarteFormControls(serviceId, vnfGroupStoreKey, modelName); + } + } + + getInstance(serviceId: string, modelName: string, vnfGroupStoreKey: string): any { + if(_.isNil(vnfGroupStoreKey)){ + return new VnfGroupInstance(); + } + return this._store.getState().service.serviceInstance[serviceId].vnfGroups[vnfGroupStoreKey]; + } + + getModelInformation(serviceId: string, modelName: string): void { + this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => { + this.serviceModel = new ServiceModel(result); + this.model = this._basicPopupService.getModelFromResponse(result, 'vnfGroups', modelName); + const serviceInstance = this._store.getState().service.serviceInstance[serviceId]; + this.modelInformations = [ + new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true), + new ModelInformationItem("Description", "description", [this.model.description]), + new ModelInformationItem("Category", "category", [this.model.category]), + new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]), + new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true), + new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true), + new ModelInformationItem("Type", "type", [this.model.properties.type], "", true), + new ModelInformationItem("Role", "role", [this.model.properties.role]), + new ModelInformationItem("Function", "function", [this.model.properties.function]), + new ModelInformationItem("Member resource type", "contained_resource_type", ["VNF"], "", true), + new ModelInformationItem("Members service Invariant UUID", "Members service Invariant UUID", _.toArray(_.mapValues(this.model.members, 'sourceModelInvariant'))), + new ModelInformationItem("Members service model name", "sourceModelName", _.toArray(_.mapValues(this.model.members, 'sourceModelName'))), + new ModelInformationItem("Minimum to instantiate", "vnfGroup-min", ['0'], "", false), + new ModelInformationItem("Maximum to instantiate", "vnfGroup-max", ['Unlimited'], "", false) + ]; + }) + } + + getSubLeftTitle(): string { + return "VNF Group : " + this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].vnfGroups[this.uuidData['modelName']].name; + } + + getSubRightTitle(): string { + return "VNF Group Instance Details"; + } + + storeVnfGroup = (that, formValues: any): void => { + formValues.modelInfo = new ModelInfo(that.model); + formValues.uuid = formValues.modelInfo.uuid; + formValues.isMissingData = false; + if(!that.isUpdateMode){ + that._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelCustomizationId || formValues.uuid, that.uuidData.serviceId, 1 , <any> {data: {type: 'VnfGroup'}})); + this._store.dispatch(createVnfGroupInstance(formValues, that.uuidData['modelName'], that.uuidData['serviceId'], that.uuidData['modelName'])); + }else { + that._store.dispatch(updateVnfGroupInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vnfGroupStoreKey)) + } + }; + + getTitle(isUpdateMode: boolean): string { + return isUpdateMode ? "Edit VNF Group instance": "Set a new VNF Group" ; + } + + onCancel(that, form): void { + form.reset(); + that._iframeService.removeClassCloseModal('content'); + this.closeDialogEvent.next(that); + } + + onSubmit(that, form: FormGroup, ...args): void { + form.value['instanceParams'] = [{}]; + that.storeVnfGroup(that, form.value); + window.parent.postMessage( { + eventId: 'submitIframe', + data: { + serviceModelId: that.uuidData.serviceId + } + }, "*"); + that.onCancel(that, form); + } + + extractSubscriberNameBySubscriberId(subscriberId: string, store: NgRedux<AppState>) { + let result: string = null; + let filteredArray: any = _.filter(store.getState().service.subscribers, function (o: Subscriber) { + return o.id === subscriberId + }); + if (filteredArray.length > 0) { + result = filteredArray[0].name; + } + return result; + } + +} diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts index 08e199cf5..c610110fd 100644 --- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts +++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts @@ -30,7 +30,7 @@ import { Component } from '@angular/core'; import { MessageBoxData} from './messageBox.data'; import { MessageBoxService } from './messageBox.service'; -import { SdcUiComponents } from 'sdc-ui/lib/angular'; +import { SdcUiServices} from "onap-ui-angular"; @Component({ selector: 'message-box', @@ -38,12 +38,17 @@ import { SdcUiComponents } from 'sdc-ui/lib/angular'; }) export class MessageBoxComponent { - modalService: SdcUiComponents.ModalService; - - constructor(modalService: SdcUiComponents.ModalService, private _messageBoxService : MessageBoxService) { + modalService: SdcUiServices.ModalService; + isOpened : boolean = false; + constructor(modalService: SdcUiServices.ModalService, private _messageBoxService : MessageBoxService) { this.modalService = modalService; + MessageBoxService.openModal.subscribe((messageBoxData: MessageBoxData) => { - modalService.openModal(this._messageBoxService.setConfig(messageBoxData)) + if(this.isOpened) return; + this.isOpened = true; + modalService.openModal(this._messageBoxService.setConfig(messageBoxData)).onDestroy(()=>{ + this.isOpened = false; + }) }); } } diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts index 165140ba7..e67b1f76f 100644 --- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts +++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts @@ -1,13 +1,14 @@ -import { Subject } from 'rxjs/Subject'; +import { SdcUiCommon} from "onap-ui-angular"; +import {IModalButtonComponent} from "onap-ui-angular/dist/modals/models/modal-config"; export class MessageBoxData { title?: string; message?: string; - size : ModalSize; - type: ModalType; - buttons: Array<IModalButtonComponent>; + size : SdcUiCommon.ModalSize; + type: SdcUiCommon.ModalType; + buttons: IModalButtonComponent[]; - constructor(title: string, message: string, type: ModalType, size : ModalSize, buttons: Array<IModalButtonComponent>) { + constructor(title: string, message: string, type: SdcUiCommon.ModalType, size : SdcUiCommon.ModalSize, buttons: IModalButtonComponent[]) { this.title = title; this.message = message; this.size = size; @@ -15,37 +16,3 @@ export class MessageBoxData { this.buttons = buttons; } } - -export interface IModalConfig { - size?: string; - title?: string; - message?: string; - buttons?: Array<IModalButtonComponent>; - type?: string; -} -export interface IButtonComponent { - text: string; - disabled?: boolean; - type?: string; - size?: string; -} -export interface IModalButtonComponent extends IButtonComponent { - callback?: Function; - closeModal?: boolean; -} -export enum ModalType { - alert = "alert", - error = "error", - standard = "info", - custom = "custom", -} -export enum ModalSize { - xlarge = "xl", - large = "l", - medium = "md", - small = "sm", - xsmall = "xsm", -} - - - diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts index 89562ac54..1d0e18ffb 100644 --- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts +++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts @@ -3,35 +3,37 @@ import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - import { MessageBoxService } from './messageBox.service'; -import {MessageBoxData, ModalSize, ModalType } from './messageBox.data'; +import {MessageBoxData} from './messageBox.data'; +import { SdcUiCommon} from "onap-ui-angular"; describe('MessageBoxService', () => { let injector; let service: MessageBoxService; let httpMock: HttpTestingController; - beforeEach(() => { + beforeAll(done => (async () => { TestBed.configureTestingModule({ imports: [HttpClientTestingModule], providers: [MessageBoxService] }); + await TestBed.compileComponents(); injector = getTestBed(); service = injector.get(MessageBoxService); httpMock = injector.get(HttpTestingController); - }); + + })().then(done).catch(done.fail)); describe('#setConfig', () => { - it('should return <IModalConfig>', (done: DoneFn) => { + test('should return <IModalConfig>', () => { let title = "Delete Instantiation"; let message = "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?"; let messageBoxData : MessageBoxData = new MessageBoxData( title, message, - ModalType.alert, - ModalSize.medium, + SdcUiCommon.ModalType.warning, + SdcUiCommon.ModalSize.medium, [ {text:"Stop Instantiation", size:"large", closeModal:true}, {text:"Cancel", size:"medium", closeModal:true} @@ -41,9 +43,8 @@ describe('MessageBoxService', () => { expect(result.title).toEqual(title); expect(result.message).toEqual(message); expect(result.buttons.length).toEqual(2); - expect(result.type).toEqual(ModalType.alert); - expect(result.size).toEqual(ModalSize.medium); - done(); + expect(result.type).toEqual(SdcUiCommon.ModalType.warning); + expect(result.size).toEqual(SdcUiCommon.ModalSize.medium); }); }); }); diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts index eaa012d3b..d73631a43 100644 --- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts +++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts @@ -1,18 +1,18 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; -import { IModalConfig, MessageBoxData, ModalSize, ModalType } from './messageBox.data'; +import {MessageBoxData} from "./messageBox.data"; +import { SdcUiCommon} from "onap-ui-angular"; @Injectable() export class MessageBoxService { static openModal: Subject<MessageBoxData> = new Subject<MessageBoxData>(); - setConfig(messageBoxData: MessageBoxData) : IModalConfig{ + setConfig(messageBoxData: MessageBoxData) : SdcUiCommon.IModalConfig{ return { - size : ModalSize.medium, + size : SdcUiCommon.ModalSize.medium, title : messageBoxData.title, type : messageBoxData.type, message : messageBoxData.message, buttons: messageBoxData.buttons }; } - } diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts index fea4c44c7..9401aca05 100644 --- a/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts @@ -1,5 +1,6 @@ import {Component, Input} from '@angular/core'; -import * as _ from 'lodash'; +import {ModelInformationService} from "./model-information.service"; + @Component({ selector: 'model-information', @@ -8,17 +9,21 @@ import * as _ from 'lodash'; }) export class ModelInformationComponent { - private _modelInformationItems: Array<ModelInformationItem>; + constructor(private _modelInformationService : ModelInformationService){} + + private _modelInformationItems: ModelInformationItem[]; + + @Input() itemClass: string = 'item'; //default class for item is "item" - get modelInformationItems(): Array<ModelInformationItem> { + get modelInformationItems(): ModelInformationItem[] { return this._modelInformationItems; } @Input() - set modelInformationItems(_modelInformationItems: Array<ModelInformationItem>) { + set modelInformationItems(_modelInformationItems: ModelInformationItem[]) { if (_modelInformationItems) { - this._modelInformationItems = _modelInformationItems.filter(x => x.mandatory || (!_.isEmpty(x.values) && !_.isEmpty(x.values[0]))); + this._modelInformationItems = this._modelInformationService.filterModelItems(_modelInformationItems); } } } @@ -27,11 +32,11 @@ export class ModelInformationComponent { export class ModelInformationItem { label: string; testsId: string; - values: Array<string>; + values: string[]; toolTipText: string; mandatory: boolean; - constructor(label: string, testsId: string, values: Array<any>, toolTipText: string = "", mandatory: boolean = false,nested:boolean=false) { + constructor(label: string, testsId: string, values: any[], toolTipText: string = "", mandatory: boolean = false) { this.label = label; this.testsId = testsId; this.values = values; @@ -39,4 +44,8 @@ export class ModelInformationItem { this.mandatory = mandatory; } + static createInstance(label: string, value: any):ModelInformationItem { + return new ModelInformationItem(label, label, [value]); + } + } diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.html b/vid-webpack-master/src/app/shared/components/model-information/model-information.html index 456dfdee4..78548b035 100644 --- a/vid-webpack-master/src/app/shared/components/model-information/model-information.html +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.html @@ -1,12 +1,12 @@ <div id="model-information"> - <div *ngFor="let item of modelInformationItems" class="item" attr.data-tests-id="model-item-{{item.label}}"> + <div *ngFor="let item of modelInformationItems" ngClass={{itemClass}} attr.data-tests-id="model-item-{{item.label}}"> <tooltip-content #a> <span> {{item.toolTipText}}</span> </tooltip-content> <div class="wrapper" [tooltip]="a" [tooltipDisabled]="!item.toolTipText" tooltipPlacement="top" [tooltipAnimation]="false"> <label attr.data-tests-id="model-item-label-{{item.testsId}}">{{item.label}}</label> - <div *ngFor="let value of item.values" attr.data-tests-id="model-item-value-{{item.testsId}}">{{value}}</div> + <div *ngFor="let value of item.values" class="model-item-value" attr.data-tests-id="model-item-value-{{item.testsId}}">{{value}}</div> </div> </div> </div> diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts new file mode 100644 index 000000000..418493f2b --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts @@ -0,0 +1,32 @@ +import {ModelInformationService} from "./model-information.service"; +import {ModelInformationItem} from "./model-information.component"; + +describe('ModelInformationService', () => { + let underTest:ModelInformationService; + + beforeEach(() => { + underTest = new ModelInformationService(); + }); + + test('when call to filterModelItems then items with empty values are filtered', () =>{ + expect(underTest.filterModelItems([ + ModelInformationItem.createInstance("emptyValue", ""), + ModelInformationItem.createInstance("nullValue", null), + ModelInformationItem.createInstance("undefinedValue", undefined), + ModelInformationItem.createInstance("spacesValue", " "), + new ModelInformationItem("emptyArray", "id", [], "c", false) + ])).toHaveLength(0); + }); + + test('when call to filterModelItems then mandatory items with empty values are not filtered', () =>{ + const mandatoryItem:ModelInformationItem = new ModelInformationItem("a", "b", [""], "c", true); + expect(underTest.filterModelItems([mandatoryItem])).toEqual([mandatoryItem]); + }); + + test('when call to filterModelItems then items with values are not filtered', () =>{ + expect(underTest.filterModelItems([ + ModelInformationItem.createInstance("withString", "a"), + ModelInformationItem.createInstance("withNumber", 1), + ])).toHaveLength(2); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts new file mode 100644 index 000000000..7c0a96b01 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts @@ -0,0 +1,16 @@ +import {Injectable} from "@angular/core"; +import * as _ from 'lodash'; +import {ModelInformationItem} from "./model-information.component"; + +@Injectable() +export class ModelInformationService { + + filterModelItems(_modelInformationItems: ModelInformationItem[]) { + return _modelInformationItems.filter(x => x.mandatory || ( + !_.isEmpty(x.values) + && !_.isNil(x.values[0]) + && x.values[0].toString().trim()!="" + )); + } +} + diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts new file mode 100644 index 000000000..cdba11f59 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts @@ -0,0 +1,12 @@ +import {ModelInformationItem} from "./model-information.component"; + +describe('ModelInformationItem', () => { + test('when use createInstance, values initialized as expected', () =>{ + const modelInformationItem:ModelInformationItem = ModelInformationItem.createInstance("aStr", 4); + expect(modelInformationItem.label).toEqual("aStr"); + expect(modelInformationItem.testsId).toEqual("aStr"); + expect(modelInformationItem.values).toEqual([4]); + expect(modelInformationItem.mandatory).toBeFalsy(); + expect(modelInformationItem.toolTipText).toEqual(""); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html index bbe7bc78c..18200283b 100644 --- a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html +++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html @@ -1,5 +1,6 @@ <div class="width-100"> - <div class="text-title" [ngClass]="titleClass">{{title}}</div> - <div class="text-subtitle" [ngClass]="subtitleClass">{{subtitle}}</div> + <div class="text-title" [ngClass]="titleClass" [attr.data-tests-id]="'text-title'">{{title}}</div> + <div class="text-title" [ngClass]="titleClass" [attr.data-tests-id]="'text-title2'">{{title2}}</div> + <div class="text-subtitle" [ngClass]="subtitleClass" [attr.data-tests-id]="'text-subtitle'">{{subtitle}}</div> <img id="not-node-img-id" src="{{iconPath}}" alt="" class="no-content-icon" [ngClass]="iconClass" data-tests-id="no-content-icon"> </div> diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss index 1320ef731..3829f06aa 100644 --- a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss +++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss @@ -9,6 +9,7 @@ font-size: 16px; color: #4A4A4A; text-align: center; + padding-bottom: 7px; } .text-subtitle { @@ -16,7 +17,7 @@ font-size: 16px; color: #959595; text-align: center; - margin-top: 7px; + margin-top: 2px; } .no-content-icon { diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts index 7f4e98294..da66f3f17 100644 --- a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts +++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts @@ -11,6 +11,7 @@ export class NoContentMessageAndIconComponent { constructor() {} @Input() title: string; + @Input() title2?: string; @Input() subtitle: string; @Input() iconPath: string; diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.html b/vid-webpack-master/src/app/shared/components/popover/popover.component.html index c5515596c..4dc8096dc 100644 --- a/vid-webpack-master/src/app/shared/components/popover/popover.component.html +++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.html @@ -2,7 +2,10 @@ triggers="mouseenter:mouseleave" popover="{{value}}" [hidden]="value == null" - container="body"> + container="body" + containerClass="{{popoverType}}" + placement="{{placement}}" + [attr.data-tests-id]="'popover-test-id'"> <ng-content ></ng-content> </div> diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.scss b/vid-webpack-master/src/app/shared/components/popover/popover.component.scss index ca2800a27..946b62d30 100644 --- a/vid-webpack-master/src/app/shared/components/popover/popover.component.scss +++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.scss @@ -1,4 +1,5 @@ .popover.popover-top.top { color : green !important; font-size: 10px; + word-wrap: break-word; } diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.ts b/vid-webpack-master/src/app/shared/components/popover/popover.component.ts index d6a4c3ae1..9dbbe63a5 100644 --- a/vid-webpack-master/src/app/shared/components/popover/popover.component.ts +++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.ts @@ -1,17 +1,29 @@ import {Component, Input} from "@angular/core"; - @Component({ selector: 'custom-popover', - templateUrl: 'popover.component.html', - styles: [` - :host >>> .popover { - font-size: 13px; - text-align: left; - z-index: 10000; - } - `] + templateUrl: 'popover.component.html' }) -export class PopoverComponent { - @Input() value: String; +export class PopoverComponent{ + @Input() value: string; + @Input() extraStyle : string; + @Input() placement : string = PopoverPlacement.LEFT; + @Input() popoverType : string = PopoverType.CUSTOM; + +} + +export enum PopoverPlacement{ + TOP = 'top', + BOTTOM = 'bottom', + LEFT = 'left', + RIGHT = 'right', + AUTO ='auto', } + +export enum PopoverType { + ERROR = 'error', + WARNING = 'warning', + SUCCESS = 'success', + CUSTOM = 'custom' +} + diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/member-table-row.model.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/member-table-row.model.ts new file mode 100644 index 000000000..c5f1a7a07 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/member-table-row.model.ts @@ -0,0 +1,6 @@ +import {VnfMember} from "../../../models/VnfMember"; + +export class MemberTableRowModel extends VnfMember{ + isSelected : boolean = false; +} + diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.html b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.html new file mode 100644 index 000000000..3a29ed824 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.html @@ -0,0 +1,75 @@ +<div class="table-header"> + <div class="left-header"> + <span class="title-header">{{description}}</span> + <div class="sub-title-header"> + <span class="vnf-match-your-criteria" class="total" [attr.data-tests-id]="'total-amount'" style="margin-right: 5px;"><span + [attr.data-tests-id]="'numberOfNotHideVnfMembers'">{{membersTableService.numberOfNotHideVnfMembers}}</span> VNFs match your criteria</span> + <span class="vnf-selected" class="total" [attr.data-tests-id]="'total-selected'"><span + [attr.data-tests-id]="'numberOfSelectedVnfMembers'">{{membersTableService.numberOfSelectedVnfMembers}}</span> VNF{{membersTableService.numberOfSelectedVnfMembers>1?'s':'' }} selected</span> + </div> + </div> + + <div class="search-container"> + <sdc-filter-bar + [placeHolder]="'Search...'" + [debounceTime]="250" + [testId]="'vnf-members-search'" + (valueChange)="search($event)"> + </sdc-filter-bar> + </div> +</div> +<table id="member-table" class="table table-bordered" *ngIf="data?.length > 0"> + <thead class="thead-dark"> + <tr> + <th class="allCheckboxAreSelected" style="position: relative;"> + <sdc-checkbox + [(checked)]="membersTableService.allCheckboxAreSelected" + [testId]="'all-checkbox-selected'" + (checkedChange)="changeAllCheckboxStatus($event)" + ></sdc-checkbox> + </th> + <th class="header-title" *ngFor="let header of headers">{{header.displayName}}</th> + </tr> + </thead> + <tbody> + <tr class="member-table-row" *ngFor="let vnf of membersTableService.filteredMembers"> + <td class="sdcCheckboxMember" style="position: relative;" [attr.data-tests-id]="vnf?.instanceId"> + <sdc-checkbox + [checked]="membersTableService.allMemberStatusMap[vnf.instanceId]?.isSelected" + [testId]="vnf?.instanceId" + (checkedChange)="changeCheckboxStatus(vnf.instanceId)" + ></sdc-checkbox></td> + <td id="vnfName"> + <custom-ellipsis [id]="vnf?.instanceName" [value]="vnf?.instanceName" + [hightlight]="filterValue"></custom-ellipsis> + <custom-ellipsis class="second-line" [id]="vnf?.instanceId" [value]="'UUID: '+ vnf?.instanceId" + [hightlight]="filterValue"></custom-ellipsis> + </td> + <td id="version"> + <custom-ellipsis [id]="vnf?.modelInfo?.modelVersion" [value]="vnf?.modelInfo?.modelVersion" [hightlight]="filterValue"></custom-ellipsis> + </td> + <td id="modelName"> + <custom-ellipsis [id]="vnf?.modelInfo?.modelName" [value]="vnf?.modelInfo?.modelName" [hightlight]="filterValue"></custom-ellipsis> + </td> + <td id="provStatus"> + <custom-ellipsis [id]="vnf?.provStatus" [value]="vnf?.provStatus" [hightlight]="filterValue"></custom-ellipsis> + </td> + <td id="serviceInstance"> + <custom-ellipsis [id]="vnf?.serviceInstanceName" [value]="vnf?.serviceInstanceName" + [hightlight]="filterValue"></custom-ellipsis> + <custom-ellipsis class="second-line" [id]="vnf?.serviceInstanceId" [value]="'UUID: '+ vnf?.serviceInstanceId" + [hightlight]="filterValue"></custom-ellipsis> + </td> + <td id="cloudRegion"> + <custom-ellipsis [id]="vnf?.lcpCloudRegionId" [value]="vnf?.lcpCloudRegionId" [hightlight]="filterValue"></custom-ellipsis> + </td> + <td id="tenantName"> + <custom-ellipsis [id]="vnf?.tenantName" [value]="vnf?.tenantName" [hightlight]="filterValue"></custom-ellipsis> + </td> + </tr> + + </tbody> +</table> +<div class="no-result" *ngIf="data?.length == 0">No VNFs were found that can belong to this group.</div> + + diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.scss b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.scss new file mode 100644 index 000000000..3be975222 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.scss @@ -0,0 +1,91 @@ +.table-header { + display: flex; + margin-bottom: 5px; + .left-header{ + .title-header{ + font-family: OpenSans-SemiBold; + color: #191919; + font-size: 15px; + margin-bottom: 5px; + display: block; + } + + .sub-title-header{ + + .vnf-selected{ + margin-left: 25px; + } + + .vnf-match-your-criteria{ + } + } + .total{ + font-family: OpenSans-Regular; + color: #191919; + font-size: 15px; + margin-right: 10px; + } + + } + + .search-container{ + flex-basis: 300px; + margin-left: auto; + } +} + +#member-table>tbody+tbody { + border-top: 1px solid #ddd; +} + + + +#member-table { + border: 1px solid #D2D2D2; + thead { + background: #F8F8F8; + th.allCheckboxAreSelected { + vertical-align: middle !important; + width: 48px; + max-width: 48px; + min-width: 48px; + height: 48px; + } + th.header-title { + font-family: OpenSans-SemiBold; + vertical-align: middle !important; + height: 48px; + font-size: 12px; + } + } + tbody { + td{ + text-align: center; + height: 60px; + padding-top: 0; + padding-bottom: 0; + max-height: 60px; + vertical-align: middle; + .second-line { + font-size: 12px; + } + } + } + + + //font-size: 12px; + + th.allCheckboxAreSelected { + text-align: center; + } +} + +.no-result { + font-family: OpenSans-Regular; + width: 100%; + height: 100%; + border: 1px solid #d2d2d2; + display: flex; + align-items: center; + justify-content: center; +} diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.ts new file mode 100644 index 000000000..9736563af --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.ts @@ -0,0 +1,57 @@ +import {Component, Input, OnChanges, Output, SimpleChanges, EventEmitter} from '@angular/core'; +import {VnfMember} from "../../../models/VnfMember"; +import {MembersTableService} from "./members-table.service"; +import * as _ from 'lodash'; + +export class CustomTableColumnDefinition { + public displayName = ''; + public key : any = ''; + public type? = 'text'; + public filter? = ''; +} + +@Component({ + selector: 'app-members-table', + templateUrl: './members-table.component.html', + styleUrls: ['./members-table.component.scss'] +}) + +export class MembersTableComponent implements OnChanges{ + filterValue: string = null; + allMemberStatusMap = null; + membersTableService : MembersTableService; + headers: CustomTableColumnDefinition[] = MembersTableService.getHeaders(); + @Input() data: VnfMember[]; + @Input() description: string; + @Output() selectedMembersAmountChange : EventEmitter<number> = new EventEmitter(); + constructor(private _membersTableService : MembersTableService){ + this.membersTableService = this._membersTableService; + } + + ngOnChanges(changes: SimpleChanges): void { + if(_.isNil(this.data)){ + this._membersTableService.resetAll(); + }else { + this._membersTableService.allMemberStatusMap = MembersTableService.generateAllMembersStatus(this.data); + this._membersTableService.filteredMembers = MembersTableService.sortVnfMembersByName(this.data, "instanceName"); + this._membersTableService.updateAmountsAndCheckAll(); + } + } + + search(searchStr: string): void { + this.filterValue = searchStr; + this._membersTableService.filterMembers(this.filterValue); + } + + changeAllCheckboxStatus(status: boolean) : void { + this._membersTableService.changeAllCheckboxStatus(status); + this.selectedMembersAmountChange.emit(this._membersTableService.numberOfSelectedVnfMembers); + } + + + changeCheckboxStatus(vnfInstanceId: string) : void { + this._membersTableService.changeCheckboxStatus(vnfInstanceId); + this.selectedMembersAmountChange.emit(this._membersTableService.numberOfSelectedVnfMembers); + } + +} diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.spec.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.spec.ts new file mode 100644 index 000000000..e53c63be1 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.spec.ts @@ -0,0 +1,270 @@ +import {MembersTableService} from "./members-table.service"; +import {TestBed, getTestBed} from "@angular/core/testing"; +import {NgRedux} from "@angular-redux/store"; +import {CustomTableColumnDefinition} from "./members-table.component"; +import {AppState} from "../../../store/reducers"; +import {createRelatedVnfMemberInstance} from "../../../storeUtil/utils/relatedVnfMember/relatedVnfMember.actions"; +import {DataFilterPipe} from "../../../pipes/dataFilter/data-filter.pipe"; +import {VnfMember} from "../../../models/VnfMember"; + + + +class MockAppStore<T> { + dispatch() { + } + getState() { + return { + service : { + serviceHierarchy: { + }, + serviceInstance : { + "serviceModelId" : { + vnfGroups:{ + "aa1":{ + vnfs:{ + "VNF1_INSTANCE_ID":{ + "action": "None", + "instanceName": "VNF1_INSTANCE_NAME", + "instanceId": "VNF1_INSTANCE_ID", + "orchStatus": null, + "lcpCloudRegionId": "mtn23b", + "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a", + "tenantName": "APPC-24595-T-IST-02C", + "modelInfo": { + "modelInvariantId": "vnf-instance-model-invariant-id", + "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "modelVersion": "2.0", + "modelName": "vf_vEPDG", + "modelType": "vnf" + }, + "instanceType": "VNF1_INSTANCE_TYPE", + "provStatus": null, + "inMaint": false, + "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "trackById": "7a6ee536-f052-46fa-aa7e-2fca9d674c44:002", + "serviceInstanceId": "service-instance-id1", + "serviceInstanceName": "service-instance-name" + + }, + "aa1-vnf1":{ + vnfName: "", + instanceId:"", + serviceInstanceId:"" + } + } + } + } + } + + } + } + } + } +} + +describe('MembersTableService view member count', () => { + let injector; + let service: MembersTableService; + let store: NgRedux<AppState>; + let data = loadMockMembers(); + + beforeAll(done => (async () => { + + TestBed.configureTestingModule( + { + providers: [ + MembersTableService, + {provide: NgRedux, useClass: MockAppStore}, + DataFilterPipe + + ], + declarations: [DataFilterPipe] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(MembersTableService); + store = injector.get(NgRedux) + + })().then(done).catch(done.fail)); + + + test('should return number of displayed members', () => { + service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data); + service.filteredMembers = <any>data; + expect(service.calculateNotHideVnfMembers()).toEqual(2); + }); + + test('should return number of selected members', () => { + service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data); + service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true; + service.allMemberStatusMap['VNF2_INSTANCE_ID'].isSelected = true; + expect(service.calculateSelectedVnfMembers()).toEqual(2); + }); + + test('should return number of selected members', () => { + service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data); + service.filteredMembers = <any>data; + service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true; + service.filterMembers('VNF2'); + service.allMemberStatusMap['VNF2_INSTANCE_ID'].isSelected = true; + expect(service.calculateNotHideVnfMembers()).toEqual(1); + }); + + test('getHeader should return labels with array of keys', () => { + const headers: CustomTableColumnDefinition[] = MembersTableService.getHeaders(); + expect(headers).toEqual([ + {displayName: 'VNF instance name', key: ['instanceName']}, + {displayName: 'VNF version', key: ['modelInfo', 'modelVersion']}, + {displayName: 'VNF model name', key: ['modelInfo', 'modelName']}, + {displayName: 'Prov Status', key: ['provStatus']}, + {displayName: 'Service instance name', key: ['serviceInstanceName']}, + {displayName: 'Cloud Region', key: ['lcpCloudRegionId']}, + {displayName: 'Tenant Name', key: ['tenantName']} + ]); + }); + + + test('setMembers should dispatch action only on selected members', () => { + const vnfGroupStoreKey: string = 'vnfGroupStoreKey'; + const serviceId: string = 'serviceId'; + + jest.spyOn(store, 'dispatch'); + service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data); + service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true; + service.setMembers({serviceId: serviceId, vnfGroupStoreKey: vnfGroupStoreKey}); + expect(store.dispatch).toHaveBeenCalledTimes(1); + expect(store.dispatch).toHaveBeenCalledWith(createRelatedVnfMemberInstance(vnfGroupStoreKey, serviceId, service.allMemberStatusMap['VNF1_INSTANCE_ID'])); + }); + + test('generateAllMembersStatus should add to each instance isHide and isSelected and convert to map', () => { + + let allMemberStatusMapMock = MembersTableService.generateAllMembersStatus(<any>data); + for (const key in allMemberStatusMapMock) { + expect(allMemberStatusMapMock[key].isSelected).toBeFalsy(); + } + }); + + test('changeAllCheckboxStatus', () => { + let data = loadMockMembers(); + service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data); + service.filteredMembers = <any>data; + service.changeAllCheckboxStatus(true); + for (let key in service.allMemberStatusMap) { + expect(service.allMemberStatusMap[key].isSelected).toEqual(true); + } + }); + + test('should reset all numbers and lists', () => { + let data = loadMockMembers(); + service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data); + service.filteredMembers = <any>data; + service.changeAllCheckboxStatus(true); + service.resetAll(); + expect(service.numberOfNotHideVnfMembers).toEqual(0); + expect(service.numberOfSelectedAndNotHideVnfMembers).toEqual(0); + expect(service.numberOfSelectedVnfMembers).toEqual(0); + expect(service.allMemberStatusMap).toEqual({}); + expect(service.filteredMembers.length).toEqual(0); + }); + + test('checkAllCheckboxStatus should be false if not all are selected', () => { + service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>loadMockMembers()); + service.updateAmountsAndCheckAll(); + + expect(service.allCheckboxAreSelected).toEqual(false); + }); + + + test('sortVnfMembersByName should sort list by vnf name', () => { + let data = <any>loadMockMembers(); + let sortedList = MembersTableService.sortVnfMembersByName(data, "instanceName"); + + expect(sortedList[0].instanceName).toEqual("VNF1_INSTANCE_NAME"); + expect(sortedList[1].instanceName).toEqual("VNF2_INSTANCE_NAME"); + + let tmp = data[0]; + data[0] = data[1]; + data[1] = tmp; + + sortedList = MembersTableService.sortVnfMembersByName(data, "instanceName"); + + expect(sortedList[1].instanceName).toEqual("VNF1_INSTANCE_NAME"); + expect(sortedList[0].instanceName).toEqual("VNF2_INSTANCE_NAME"); + sortedList = MembersTableService.sortVnfMembersByName(null, "instanceName"); + expect(sortedList).toEqual([]); + sortedList = MembersTableService.sortVnfMembersByName(data, undefined); + expect(sortedList).toEqual([]); + }); + + test('should return only vnf members not associated to any vnf group', ()=>{ + const result: VnfMember[] = service.filterUsedVnfMembers("serviceModelId",loadMockMembers()); + expect(result.length).toEqual(1); + expect(result[0].instanceId).toEqual("VNF2_INSTANCE_ID"); + }); + +}); + + +function loadMockMembers(): any[] { + return [ + { + "action": "None", + "instanceName": "VNF1_INSTANCE_NAME", + "instanceId": "VNF1_INSTANCE_ID", + "orchStatus": null, + "productFamilyId": null, + "lcpCloudRegionId": "mtn23b", + "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a", + "tenantName": "APPC-24595-T-IST-02C", + "modelInfo": { + "modelInvariantId": "vnf-instance-model-invariant-id", + "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "modelVersion": "2.0", + "modelName": "vf_vEPDG", + "modelType": "vnf" + }, + "instanceType": "VNF1_INSTANCE_TYPE", + "provStatus": null, + "inMaint": false, + "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "originalName": null, + "legacyRegion": null, + "lineOfBusiness": null, + "platformName": null, + "trackById": "7a6ee536-f052-46fa-aa7e-2fca9d674c44:002", + "serviceInstanceId": "service-instance-id1", + "serviceInstanceName": "service-instance-name" + }, + { + "action": "None", + "instanceName": "VNF2_INSTANCE_NAME", + "instanceId": "VNF2_INSTANCE_ID", + "orchStatus": null, + "productFamilyId": null, + "lcpCloudRegionId": "mtn23b", + "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a", + "tenantName": "APPC-24595-T-IST-02C", + "modelInfo": { + "modelInvariantId": "vnf-instance-model-invariant-id", + "modelVersionId": "eb5f56bf-5855-4e61-bd00-3e19a953bf02", + "modelVersion": "1.0", + "modelName": "vf_vEPDG", + "modelType": "vnf" + }, + "instanceType": "VNF2_INSTANCE_TYPE", + "provStatus": null, + "inMaint": true, + "uuid": "eb5f56bf-5855-4e61-bd00-3e19a953bf02", + "originalName": null, + "legacyRegion": null, + "lineOfBusiness": null, + "platformName": null, + "trackById": "eb5f56bf-5855-4e61-bd00-3e19a953bf02:003", + "serviceInstanceId": "service-instance-id2", + "serviceInstanceName": "service-instance-name" + } + ]; +} + + diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts new file mode 100644 index 000000000..5b9cd39a2 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts @@ -0,0 +1,153 @@ +import {Injectable} from "@angular/core"; +import {VnfMember} from "../../../models/VnfMember"; +import {CustomTableColumnDefinition} from "./members-table.component"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../store/reducers"; +import {createRelatedVnfMemberInstance} from "../../../storeUtil/utils/relatedVnfMember/relatedVnfMember.actions"; +import * as _ from 'lodash'; +import {DataFilterPipe} from "../../../pipes/dataFilter/data-filter.pipe"; +import {MemberTableRowModel} from "./member-table-row.model"; + +@Injectable() +export class MembersTableService { + allMemberStatusMap : { [key:string]: MemberTableRowModel; }; + filteredMembers : VnfMember[]; + allCheckboxAreSelected : boolean; + numberOfNotHideVnfMembers : number; + numberOfSelectedVnfMembers : number; + numberOfSelectedAndNotHideVnfMembers : number; + + constructor(private _store: NgRedux<AppState>, private dataFilter: DataFilterPipe){ + this.resetAll(); + } + + filterUsedVnfMembers = (serviceModelId: string, result: VnfMember[]): VnfMember[] => { + const allMembersMap = _.keyBy(result as VnfMember[], 'instanceId'); + const vnfGroupsData = this._store.getState().service.serviceInstance[serviceModelId].vnfGroups; + const vnfMembersArr = _.flatMap(vnfGroupsData).map((vnfGroup) =>vnfGroup.vnfs ); + for( let vnf of vnfMembersArr ){ + for(let member in vnf){ + delete allMembersMap[member]; + } + } + return _.flatMap(allMembersMap); + }; + + updateAmountsAndCheckAll = () : void => { + this.numberOfSelectedVnfMembers = this.calculateSelectedVnfMembers(); + this.numberOfNotHideVnfMembers = this.calculateNotHideVnfMembers(); + this.numberOfSelectedAndNotHideVnfMembers = this.calculateSelectedAndNotHide(); + this.allCheckboxAreSelected = this.numberOfNotHideVnfMembers > 0 && this.numberOfNotHideVnfMembers === this.numberOfSelectedAndNotHideVnfMembers; + }; + + resetAll = () : void => { + this.allMemberStatusMap = {}; + this.filteredMembers = []; + this.numberOfSelectedVnfMembers = 0; + this.numberOfNotHideVnfMembers = 0; + this.numberOfSelectedAndNotHideVnfMembers = 0; + this.allCheckboxAreSelected = false; + }; + + changeAllCheckboxStatus = (status : boolean) : void =>{ + for(const member of this.filteredMembers){ + this.allMemberStatusMap[member.instanceId].isSelected = status; + } + this.updateAmountsAndCheckAll(); + }; + + changeCheckboxStatus = (vnfInstanceId : string ) : void =>{ + this.allMemberStatusMap[vnfInstanceId].isSelected = !this.allMemberStatusMap[vnfInstanceId].isSelected; + this.updateAmountsAndCheckAll(); + }; + + /************************************************ + iterate over all current vnf members: + 1) if vnf member is selected then update REDUX store + 2) if vnf member is not selected then delete member + @allMemberStatusMap: current vnf member status + @vnfGroupStoreKey: vnf group store key + @serviceId: service model id + ************************************************/ + setMembers = (data : {serviceId : string, vnfGroupStoreKey : string}) : void =>{ + let tmpMembers = this.allMemberStatusMap; + for(let key in tmpMembers){ + if(tmpMembers[key].isSelected){ + this._store.dispatch(createRelatedVnfMemberInstance( data.vnfGroupStoreKey, data.serviceId, tmpMembers[key])); + } + } + }; + + filterMembers(searchStr: string): void { + const keys: string[][] = MembersTableService.getDataKeys(); + this.filteredMembers = this.dataFilter.transform(_.values(this.allMemberStatusMap), searchStr || '', keys); + this.updateAmountsAndCheckAll(); + } + + /************************************ + generate vnf member data for select/ unselect rows + ************************************/ + static generateAllMembersStatus(tableData : VnfMember[]) : { [key:string]: MemberTableRowModel; }{ + + tableData.map((vnf) => { + vnf['isSelected'] = false + }); + return _.keyBy(tableData as MemberTableRowModel[], 'instanceId'); + } + + + static sortVnfMembersByName(list : VnfMember[], keyName : string) :VnfMember[]{ + if(!_.isNil(list) && !_.isNil(keyName)) { + return list.sort(function(itemA, itemB) { return itemA[keyName]- itemB[keyName];}) + } + return []; + + } + + /******************************** + table columns headers and key's + ********************************/ + static getHeaders() : CustomTableColumnDefinition[] { + return [ + {displayName: 'VNF instance name', key: ['instanceName']}, + {displayName: 'VNF version', key: ['modelInfo', 'modelVersion']}, + {displayName: 'VNF model name', key: ['modelInfo', 'modelName']}, + {displayName: 'Prov Status', key: ['provStatus']}, + {displayName: 'Service instance name', key: ['serviceInstanceName']}, + {displayName: 'Cloud Region', key: ['lcpCloudRegionId']}, + {displayName: 'Tenant Name', key: ['tenantName']} + ]; + } + + static getDataKeys(): string[][]{ + const headers = MembersTableService.getHeaders(); + return headers.map((header)=> header.key).concat([['instanceId']],[['serviceInstanceId']]); + } + + /************************************************************************************* + calculate the number of selected vnf members - include not visible and visible rows + @allMemberStatusMap: current vnf member status + *************************************************************************************/ + calculateSelectedVnfMembers() : number { + const flatObject = _.values(this.allMemberStatusMap); + return _.filter(flatObject, (item) => { if (item.isSelected) return item }).length; + } + + /************************************************ + calculate the number of display vnf members + @allMemberStatusMap: current vnf member status + ************************************************/ + calculateNotHideVnfMembers() : number { + return this.filteredMembers.length; + } + + /************************************************ + calculate the number of display vnf members + @allMemberStatusMap: current vnf member status + ************************************************/ + calculateSelectedAndNotHide() : number { + return _.filter(this.filteredMembers, (item) => { if ( this.allMemberStatusMap[item.instanceId].isSelected) return item }).length; + } + + +} diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.html b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.html new file mode 100644 index 000000000..899bc9889 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.html @@ -0,0 +1,35 @@ +<div class="modal-search-member-content"> + <div class="header"> + <vid-svg-icon + [attr.data-tests-id]="'cancelBtn'" + (click)="closeDialog()" + class="navigation-arrow-back" + [mode]="'primary'" + [size]="'large'" + [name]="'navigation-arrow-back'" + [clickable]="true" + [fill]="'#FFFFFF'" + [widthViewBox]="'24'" + [heightViewBox]="'24'"> + </vid-svg-icon> + + <span class="title"> + {{title}} + </span> + <button type="submit" data-tests-id="setMembersBtn" [disabled]="disableSetMembers" (click)="setMembers()" class="sdc-button sdc-button__primary">SET MEMBERS</button> + </div> + <div class="content-wrapper"> + <div class="sidebar-left"> + <div class="search-criteria-wrapper"> + <div class="search-criteria-title">SEARCH CRITERIA</div> + <div class="search-item" *ngFor="let searchFieldItem of searchFields"> + <span class="label-item">{{searchFieldItem.title}}</span> + <span attr.data-tests-id="{{searchFieldItem.dataTestId}}" class="text-item">{{searchFieldItem.value}}</span> + </div> + </div> + </div> + <div class="sidebar-right"> + <app-members-table [data]="membersData" [description]="description" (selectedMembersAmountChange)="selectedMembersAmountChange($event)"></app-members-table> + </div> + </div> +</div> diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.scss b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.scss new file mode 100644 index 000000000..d49653934 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.scss @@ -0,0 +1,89 @@ +.modal-search-member-content { + height: 100vh; + width: 100vw; + position: relative; + background: white; + .header { + height: 60px; + font-family: OpenSans-Regular; + display: -webkit-box; + display: flex; + font-size: 14px; + box-shadow: 2px 2px 6px #D2D2D2; + color: white; + background: #009fdb; + z-index: 1; + position: relative; + .navigation-arrow-back { + border-right: 1px solid #1eb9f3; + width: 60px; + height: 60px; + cursor: pointer; + display: flex; + justify-content: center; + align-items: center; + } + .title { + font-size: 18px; + line-height: 60px; + margin-left: 20px; + } + button { + width: 125px; + font-family: OpenSans-Regular; + font-size: 14px; + margin-left: auto; + margin-right: 20px; + margin-top: 12px; + border: 1px solid white; + &:disabled { + opacity: 0.5; + background: none; + } + } + } + + .content-wrapper { + display: flex; + + .sidebar-left { + flex-basis: 285px; + border-right: 1px solid #D2D2D2; + height: calc(100vh - 60px); + + .search-criteria-wrapper{ + + .search-criteria-title{ + font-family: OpenSans-SemiBold; + font-size: 14px; + color: #191919; + border-bottom: 1px solid #D2D2D2; + line-height: 50px; + padding-left: 30px; + } + .search-item{ + color: #191919; + display: flex; + flex-direction: column; + margin: 25px 30px; + .label-item { + font-family: OpenSans-SemiBold; + font-size: 12px; + } + .text-item{ + font-family: OpenSans-Regular; + font-size: 14px; + color: #5a5a5a; + word-break: break-all; + } + + } + } + } + + .sidebar-right { + flex: 1; + margin: 80px 50px; + } + } +} diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.ts new file mode 100644 index 000000000..9c65d222d --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.ts @@ -0,0 +1,82 @@ +import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; +import {DialogComponent, DialogService} from "ng2-bootstrap-modal"; +import {IframeService} from "../../utils/iframe.service"; +import {AaiService} from "../../services/aaiService/aai.service"; +import {VnfMember} from "../../models/VnfMember"; +import {VnfGroupModel} from "../../models/vnfGroupModel"; +import {MembersTableService} from "./members-table/members-table.service"; +import {VnfGroupInstance} from "../../models/vnfGroupInstance"; + + +export interface PopupModel { + title: string; + serviceModelId : string; + searchFields: ISearchField[]; + description : string; + subscriberId: string, + serviceType: string, + node: VnfGroupInstance, + vnfGroupModel: VnfGroupModel; + +} + +export interface ISearchField { + title: string; + value: any; + dataTestId: string; +} + +@Component({ + selector : 'search-members-modal', + templateUrl : 'search-members-modal.component.html', + styleUrls : ['search-members-modal.component.scss'] +}) + +export class SearchMembersModalComponent extends DialogComponent<PopupModel, boolean> implements OnInit, OnDestroy { + title: string; + serviceModelId : string; + parentElementClassName = 'content'; + membersData: VnfMember[]; + description : string; + searchFields: ISearchField[]; + vnfGroupModel: VnfGroupModel; + subscriberId: string; + serviceType: string; + node: VnfGroupInstance; + disableSetMembers: boolean = true; + constructor(dialogService: DialogService , + private _iframeService : IframeService, + private _aaiService : AaiService, + private _membersTableService: MembersTableService){ + super(dialogService); + + } + @ViewChild('MembersTableComponent') membersTable; + + ngOnInit() : void{ + this._aaiService.getOptionalGroupMembers(this.serviceModelId, this.subscriberId, this.serviceType, (Object.values(this.vnfGroupModel.members))[0].sourceModelInvariant, this.vnfGroupModel.properties.type, this.vnfGroupModel.properties.role) + .subscribe((result: VnfMember[])=>{ + this.membersData = this._membersTableService.filterUsedVnfMembers(this.serviceModelId, result); + }); + }; + + + closeDialog() : void{ + this._iframeService.removeClassCloseModal(this.parentElementClassName); + this.dialogService.removeDialog(this); + setTimeout(() => { + window.parent.postMessage("closeIframe", "*"); + }, 15); + } + selectedMembersAmountChange(selectedMembersAmount: number) : void { + this.disableSetMembers = selectedMembersAmount==0; + } + + + setMembers() : void { + this._membersTableService.setMembers({serviceId : this.serviceModelId, vnfGroupStoreKey : this.node.vnfGroupStoreKey}); + this.closeDialog(); + } +} + + diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html index cb11feea8..238f7693d 100644 --- a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html +++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html @@ -1,2 +1,6 @@ -<div *ngIf="show" - class="spinner"></div> +<sdc-loader name= "global" + #globalLoader + [global] = "global" + [size]="size" + [(active)] = "show"></sdc-loader> + diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts index 531ee8c62..57f7b009c 100644 --- a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts +++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts @@ -1,42 +1,50 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; import {HttpClientTestingModule} from '@angular/common/http/testing'; -import { SpinnerComponent } from './spinner.component'; +import {SpinnerComponent, SpinnerInfo} from './spinner.component'; +import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core"; describe('Spinner component', () => { let component: SpinnerComponent; let fixture: ComponentFixture<SpinnerComponent>; - beforeEach(async(() => { + beforeAll(done => (async () => { TestBed.configureTestingModule({ imports: [HttpClientTestingModule], providers: [], - declarations: [SpinnerComponent ] - }) - .compileComponents(); - })); + declarations: [SpinnerComponent], + schemas: [ CUSTOM_ELEMENTS_SCHEMA ] + }); + await TestBed.compileComponents(); - beforeEach(() => { fixture = TestBed.createComponent(SpinnerComponent); component = fixture.componentInstance; fixture.detectChanges(); - }); - it('component should be defined', () => { + })().then(done).catch(done.fail)); + + + + test('component should be defined', () => { expect(component).toBeDefined(); }); - - it('component constructor should subscribe of showSpinner event with true', ()=> { - SpinnerComponent.showSpinner.next(true); + test('component constructor should subscribe of showSpinner event with true', ()=> { + let spinnerInfo : SpinnerInfo = new SpinnerInfo(true, 'someUrl', 'json'); + SpinnerComponent.showSpinner.next(spinnerInfo); expect(component.show).toBeTruthy(); }); - it('component constructor should subscribe of showSpinner event with false', ()=> { - SpinnerComponent.showSpinner.next(false); + test('component constructor should subscribe of showSpinner event with true and then to be false', ()=> { + let spinnerInfo : SpinnerInfo = new SpinnerInfo(true, 'someUrl', 'json'); + SpinnerComponent.showSpinner.next(spinnerInfo); + spinnerInfo = new SpinnerInfo(false, 'someUrl', 'json'); + SpinnerComponent.showSpinner.next(spinnerInfo); expect(component.show).toBeFalsy(); }); - - - + test('component constructor should subscribe of showSpinner event with false', ()=> { + let spinnerInfo : SpinnerInfo = new SpinnerInfo(false, 'someUrl', 'json'); + SpinnerComponent.showSpinner.next(spinnerInfo); + expect(component.show).toBeFalsy(); + }); }); diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts index 0ce5d2074..94a0e1c52 100644 --- a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts +++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts @@ -1,18 +1,50 @@ -import { Component, Input } from '@angular/core'; -import { Subject } from 'rxjs/Subject'; +import {Component} from '@angular/core'; +import {Subject} from 'rxjs/Subject'; +import * as _ from 'lodash'; @Component({ selector : 'spinner-component', - templateUrl : './spinner.component.html', - styleUrls : ['./spinner.component.scss'] + templateUrl: './spinner.component.html', + styleUrls : ['./spinner.component.scss'], + providers : [] + }) -export class SpinnerComponent { - show : boolean = false; - static showSpinner: Subject<boolean> = new Subject<boolean>(); +export class SpinnerComponent{ + show : boolean; + size = "large"; + global = true; + + requestMap = {}; + + static showSpinner: Subject<SpinnerInfo> = new Subject<SpinnerInfo>(); constructor(){ - SpinnerComponent.showSpinner.subscribe((status) => { - this.show = status; + SpinnerComponent.showSpinner.subscribe((spinnerInfo) => { + let status = spinnerInfo['status']; + let requestType = spinnerInfo['requestType']; + let requestUrl = spinnerInfo['requestUrl']; + + if(status && requestType === 'json'){ + this.requestMap[requestUrl] = true; + }else { + delete this.requestMap[requestUrl] + } + console.log(this.requestMap); + this.show = !_.isEmpty(this.requestMap) && this.requestMap !== undefined; + }) } } + + +export class SpinnerInfo { + status : boolean; + requestUrl : string; + requestType : string; + + constructor(status : boolean, requestUrl : string, requestType : string){ + this.status = status; + this.requestUrl = requestUrl; + this.requestType = requestType; + } +} diff --git a/vid-webpack-master/src/app/shared/components/svg/svg-component.ts b/vid-webpack-master/src/app/shared/components/svg/svg-component.ts new file mode 100644 index 000000000..2e4642432 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/svg/svg-component.ts @@ -0,0 +1,47 @@ +import { + AfterViewChecked, + Component, + ElementRef, + EventEmitter, + Input, + Output +} from "@angular/core"; +import * as _ from 'lodash'; + +@Component({ + selector : 'vid-svg-icon', + template: ` + <svg-icon + [mode]="mode" + [size]="size" + [name]="name" + [testId]="testId" + [clickable]="clickable"> + </svg-icon> + `, + + +}) +export class SvgComponent implements AfterViewChecked{ + @Input() mode : string = 'primary'; + @Input() size : string = 'large'; + @Input() testId : string = null; + @Input() name : string = null; + @Input() clickable : boolean = false; + @Input() fill : string ; + @Input() widthViewBox: string = null; + @Input() heightViewBox: string = null; + + constructor(private elRef: ElementRef) {} + + ngAfterViewChecked(): void { + if(!_.isNil(this.fill)){ + this.elRef.nativeElement.children[0].children[0].children[0].style.fill = this.fill; + } + + if(this.widthViewBox && this.heightViewBox){ + this.elRef.nativeElement.children[0].children[0].children[0].setAttribute('viewBox', "1 1 " + this.widthViewBox + " " + this.heightViewBox) + } + + } +} diff --git a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts deleted file mode 100644 index ec9f3f73e..000000000 --- a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ReflectiveInjector } from '@angular/core'; -import { NumbersLettersUnderscoreValidator } from './numbersLettersUnderscore.validator'; - -describe('Numbers letters underscore validator', () => { - let injector; - let service: NumbersLettersUnderscoreValidator; - - beforeEach(() => { - - let injector = ReflectiveInjector.resolveAndCreate([ - NumbersLettersUnderscoreValidator - ]); - - service = injector.get(NumbersLettersUnderscoreValidator); - }); - - - describe('#valid', () => { - it("'legal' should return null", ()=> { - let legalVal: string = "legal"; - let result = NumbersLettersUnderscoreValidator.valid(legalVal); - expect(result).toBeNull(); - }); - - it("'illegal' should return object with invalidNumberLettersUnderscore true", ()=> { - let illegalVal: string = "illegal-Val"; - let result = NumbersLettersUnderscoreValidator.valid(illegalVal); - expect(result.invalidNumberLettersUnderscore).toBeTruthy(); - }); - - it("'null' should return null", ()=> { - let nullVal: string = null - let result = NumbersLettersUnderscoreValidator.valid(nullVal); - expect(result).toBeNull(); - }); - - - }); -}); diff --git a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts deleted file mode 100644 index 418bdfc4d..000000000 --- a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Injectable } from '@angular/core'; -import { isNullOrUndefined, isString } from 'util'; - -@Injectable() -export class NumbersLettersUnderscoreValidator { - static valid(control: any) { - let reg = /^[a-zA-Z0-9_]*$/; - - if(isNullOrUndefined(control)) return null; - let val = isString(control) ? control : control.value; - if (val === null) { - return {'invalidNumberLettersUnderscore': true}; - } - if (reg.test(val)) { - return null; - } else { - return {'invalidNumberLettersUnderscore': true}; - } - } -} |