summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master
diff options
context:
space:
mode:
Diffstat (limited to 'vid-webpack-master')
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts55
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts45
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts4
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts154
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts6
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/retry.e2e.ts6
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/sdncPreload.e2e.ts92
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts9
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/viewEditUpgradeVfModule.e2e.ts9
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/viewOnlyDrawingBoard.e2e.ts8
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/vnfGroups.e2e.ts40
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/vrf.e2e.ts2
-rw-r--r--vid-webpack-master/cypress/integration/shared/spinner.e2e.ts2
-rw-r--r--vid-webpack-master/cypress/pipeline/group1.txt11
-rw-r--r--vid-webpack-master/cypress/pipeline/run_group2.sh17
-rw-r--r--vid-webpack-master/cypress/pipeline/run_groupRemain.sh17
-rw-r--r--vid-webpack-master/cypress/support/application/application.session.actions.ts35
-rw-r--r--vid-webpack-master/cypress/support/index.js5
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts15
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiGetModelsByServiceType.json58
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/defect710619/expectedResumeWithVGResults.json2
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json5
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/vnfGroupBasicServiceInstance.json2
-rw-r--r--vid-webpack-master/cypress/support/steps/drawingBoard/drawingBoardRecreate.steps.ts52
-rw-r--r--vid-webpack-master/cypress/support/steps/drawingBoard/general.steps.ts37
-rw-r--r--vid-webpack-master/cypress/support/steps/fill.vfModule.step.ts12
-rw-r--r--vid-webpack-master/cypress/support/uploadFiles/sdncPreLoadFileExample.json3
-rw-r--r--vid-webpack-master/package.cypress.json3
-rwxr-xr-x[-rw-r--r--]vid-webpack-master/package.json44
-rw-r--r--vid-webpack-master/pom.xml6
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts9
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.html4
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts10
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.spec.ts352
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.ts8
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.html8
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.ts2
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.service.spec.ts1
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/dragAndDrop/dragAndDrop.service.ts2
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.component.ts16
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.html12
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.spec.ts6
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.ts7
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/basic.model.info.ts14
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.spec.ts1118
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.ts10
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.spec.ts1453
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.ts14
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.spec.ts2
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.ts6
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.spec.ts1259
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.ts37
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.spec.ts71
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.ts14
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.spec.ts1074
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.ts24
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.spec.ts958
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts29
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.spec.ts1073
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.ts34
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.spec.ts157
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.ts13
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vpn/vpn.model.info.ts6
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.spec.ts92
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.ts22
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.spec.ts20
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.ts28
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.spec.ts10
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.ts6
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToTree.service.ts10
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.spec.ts322
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.ts123
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts4
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html4
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts2
-rw-r--r--vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html9
-rw-r--r--vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts14
-rw-r--r--vid-webpack-master/src/app/shared/components/customButton/custom-button.component.html16
-rw-r--r--vid-webpack-master/src/app/shared/components/customButton/custom-button.component.scss273
-rw-r--r--vid-webpack-master/src/app/shared/components/customButton/custom-button.component.ts65
-rw-r--r--vid-webpack-master/src/app/shared/components/customButton/models/mode.model.ts10
-rw-r--r--vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.html2
-rw-r--r--vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.scss297
-rw-r--r--vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.ts85
-rw-r--r--vid-webpack-master/src/app/shared/components/customIcon/models/background-color.model.ts15
-rw-r--r--vid-webpack-master/src/app/shared/components/customIcon/models/background-shape.model.ts4
-rw-r--r--vid-webpack-master/src/app/shared/components/customIcon/models/icon-size.model.ts7
-rw-r--r--vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.html15
-rw-r--r--vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.scss222
-rw-r--r--vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.ts76
-rw-r--r--vid-webpack-master/src/app/shared/components/customLoader/custom-loader.service.ts34
-rw-r--r--vid-webpack-master/src/app/shared/components/customLoader/models/loader-size.model.ts5
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.html16
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.scss273
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.ts28
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/components/modalCloseButton/modal-close-button.component.ts36
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/directives/ripple-click.animation.directive.ts47
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/modal.component.html46
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/modal.component.ts166
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/models/button.type.ts8
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/models/modal-button.model.ts15
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/models/modal.model.ts26
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/models/modal.placement.ts6
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/models/modal.size.ts7
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/models/modal.type.ts10
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/services/create-dynamic-component.service.ts107
-rw-r--r--vid-webpack-master/src/app/shared/components/customModal/services/modal.service.ts64
-rw-r--r--vid-webpack-master/src/app/shared/components/customTooltip/custom-tooltip.component.ts20
-rw-r--r--vid-webpack-master/src/app/shared/components/customTooltip/tooltip.directive.ts461
-rw-r--r--vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts2
-rw-r--r--vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.html5
-rw-r--r--vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.scss1
-rw-r--r--vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.ts2
-rw-r--r--vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.ts2
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts7
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.spec.ts112
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts116
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts3
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts4
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.html2
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.html15
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.scss23
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.ts41
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.model.ts30
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html6
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts8
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.spec.ts14
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.ts4
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.spec.ts4
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.spec.ts3
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.spec.ts31
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.ts9
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popup.service.spec.ts6
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popup.service.spec.ts13
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html11
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts14
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.ts2
-rw-r--r--vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts5
-rw-r--r--vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts6
-rw-r--r--vid-webpack-master/src/app/shared/components/messageModal/message-modal.model.ts15
-rw-r--r--vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.spec.ts56
-rw-r--r--vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.ts39
-rw-r--r--vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts2
-rw-r--r--vid-webpack-master/src/app/shared/components/spinner/spinner.component.html4
-rw-r--r--vid-webpack-master/src/app/shared/components/svg/svg-component.ts6
-rw-r--r--vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts4
-rw-r--r--vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts1
-rw-r--r--vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts6
-rw-r--r--vid-webpack-master/src/app/shared/models/treeNodeModel.ts3
-rwxr-xr-x[-rw-r--r--]vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts12
-rw-r--r--vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts5
-rw-r--r--vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts7
-rw-r--r--vid-webpack-master/src/app/shared/shared.module.ts61
-rwxr-xr-x[-rw-r--r--]vid-webpack-master/src/app/shared/store/module.ts0
-rw-r--r--vid-webpack-master/src/app/shared/utils/constants.ts1
-rw-r--r--vid-webpack-master/src/app/vlanTagging/form-async/form-async.component.ts2
-rw-r--r--vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts2
-rw-r--r--vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts11
-rw-r--r--vid-webpack-master/src/styles.scss4
159 files changed, 4052 insertions, 8377 deletions
diff --git a/vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts
index fa628d4b5..3b42a1ca1 100644
--- a/vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts
@@ -215,15 +215,20 @@ describe('A la carte', function () {
});
});
- it(`VFModule a-la-carte`, () => {
- var timeBomb = new Date('12/09/2018');
- if (new Date() < timeBomb) {
- return;
- }
+ it(`Add ALaCarte VfModule Without LcpRegion Tenant Id And Legacy`, () => {
+ addAlacarteVfmoduleByFlag(true, 'redux-a-la-carte-no-lcp-tenant.json');
+ });
+
+ it(`Add ALaCarte VfModule With LcpRegion Tenant Id And Legacy`, () => {
+ addAlacarteVfmoduleByFlag(false, 'redux-a-la-carte.json');
+ });
+
+ function addAlacarteVfmoduleByFlag (flag: boolean, expectedJsonFile: string) {
cy.readFile('cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
cy.setTestApiParamToGR();
res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.vidNotions.instantiationType = 'ALaCarte';
res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].service.inputs = null;
+ res.global['flags'] = { 'FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF' : flag };
cy.setReduxState(<any>res);
cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
@@ -241,31 +246,30 @@ describe('A la carte', function () {
'2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2',
];
- cy.addALaCarteVfModule(vnfName, vfModulesNames[0], 'mimazepubi', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, false)
+ cy.addALaCarteVfModule(vnfName, vfModulesNames[0], 'mimazepubi', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, false, flag)
+ .then(() => {
+ cy.addALaCarteVfModule(vnfName, vfModulesNames[1], 'puwesovabe', 'AAIAIC25', 'my region', 'USP-SIP-IC-24335-T-01', true, true, false, flag)
.then(() => {
- cy.addALaCarteVfModule(vnfName, vfModulesNames[1], 'puwesovabe', 'AAIAIC25', 'my region', 'USP-SIP-IC-24335-T-01', true, true, false)
- .then(() => {
- cy.addALaCarteVfModule(vnfName, vfModulesNames[2], 'bnmgtrx', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, true)
- .then(() => {
- cy.getReduxState().then((state) => {
- const vfModules = state.service.serviceInstance['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].vnfs[vnfName].vfModules;
- cy.readFile('../vid-automation/src/test/resources/a-la-carte/redux-a-la-carte.json').then((file) => {
- for (let vfModulesName of vfModulesNames) {
- const vfModule = vfModules[vfModulesName];
- let vfModuleObject = vfModule[Object.keys(vfModule)[0]];
- file.vnfs[vnfName].vfModules[vfModulesName][vfModulesName].action = "Create";
- cy.deepCompare(vfModuleObject, file.vnfs[vnfName].vfModules[vfModulesName][vfModulesName]);
- }
- });
- });
- });
+ cy.addALaCarteVfModule(vnfName, vfModulesNames[2], 'bnmgtrx', 'hvf6', '', 'AINWebTool-15-D-iftach', false, false, true, flag)
+ .then(() => {
+ cy.getReduxState().then((state) => {
+ const vfModules = state.service.serviceInstance['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].vnfs[vnfName].vfModules;
+ cy.readFile('../vid-automation/src/test/resources/a-la-carte/' + expectedJsonFile).then((file) => {
+ for (let vfModulesName of vfModulesNames) {
+ const vfModule = vfModules[vfModulesName];
+ let vfModuleObject = vfModule[Object.keys(vfModule)[0]];
+ file.vnfs[vnfName].vfModules[vfModulesName][vfModulesName].action = "Create";
+ cy.deepCompare(vfModuleObject, file.vnfs[vnfName].vfModules[vfModulesName][vfModulesName]);
+ }
+ });
});
+ });
});
+ });
});
});
});
- });
-
+ };
function changeServiceEcompNamingToTrue(obj: ServiceModel) {
obj.service.serviceEcompNaming = "true";
@@ -283,8 +287,5 @@ describe('A la carte', function () {
.get('.error').contains(INSTANCE_NAME_NOT_MANDATORY_MESSAGE);
}
-
-
-
});
});
diff --git a/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts
index 427696561..b1671a4e5 100644
--- a/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts
@@ -63,13 +63,13 @@ describe('Browse SDC', function () {
});
- it(`browse sdc should open instantiation template modal if service hasTemplate is true`, function () {
+ it(`browse sdc should open instantiation template modal if service isInstantiationTemplateExists is true`, function () {
const SERVICE_MODEL_ID: string = '74fa72dd-012b-49c3-800d-06b12bcaf1a0';
cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/list-services.json').then((res) => {
- res.services = res.services.map((service: { uuid: string, hasTemplate: boolean }) => {
+ res.services = res.services.map((service: { uuid: string, isInstantiationTemplateExists: boolean }) => {
if (service.uuid === SERVICE_MODEL_ID) {
- service.hasTemplate = true;
+ service.isInstantiationTemplateExists = true;
}
return service;
});
@@ -98,6 +98,45 @@ describe('Browse SDC', function () {
});
});
+ it(`browse sdc open create new service instance flow`, function () {
+ const MACRO_FOR_NEW_FLOW_ID: string = '745d1bf1-9ed1-413f-8111-f1e984ad63fb';
+
+ cy.initGetAAISubDetails();
+
+ cy.readFile('cypress/support/jsonBuilders/mocks/jsons/aaiGetModelsByServiceType.json').then((res) => {
+ jsonBuilderAndMock.basicJson(res,
+ Cypress.config('baseUrl') + '/aai_get_models_by_service_type/**',
+ 200,
+ 0,
+ 'aaiGetModelByServiceType');
+ });
+
+ cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/Dror_service1806_Macro1.json').then((res) => {
+ jsonBuilderAndMock.basicJson(res,
+ Cypress.config('baseUrl') + '/rest/models/services/' + MACRO_FOR_NEW_FLOW_ID,
+ 200,
+ 0,
+ 'MACRO_FOR_NEW_FLOW');
+ });
+
+ cy.get('span').contains('Create New Service Instance').click({force: true})
+ .selectDropdownOptionByText('subscriberName', 'SILVIA ROBBINS');
+ cy.get('button').contains('Submit').click({force: true});
+ cy.selectDropdownOptionByText('serviceType', 'TYLER SILVIA');
+ cy.get('button').contains('Submit').click({force: true});
+ cy.wait("@aaiGetModelByServiceType").then(() => {
+ cy.getElementByDataTestsId('deploy-' + MACRO_FOR_NEW_FLOW_ID).click({force: true});
+ cy.get('button').contains('Deploy').eq(0).click({force: true});
+ cy.get('iframe').then(function ($iframe) {
+ expect($iframe.attr('src')).to.contain(`app/ui/#/servicePopup?serviceModelId=74fa72dd-012b-49c3-800d-06b12bcaf1a0`);
+ });
+ });
+
+ cy.visit("welcome.htm"); //relaod page to not break the following tests
+
+ });
+
+
it(`browse sdc of service without instantiationType open aLaCarte popup`, function () {
const VERY_OLD_SERVICE_UUID: string = "09c476c7-91ae-44b8-a731-04d8d8fa3695";
const TEST_MOCKS_PATH = "cypress/support/jsonBuilders/mocks/jsons/bug_aLaCarteServiceWrongPopup/";
diff --git a/vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts
index cf870b7b9..4a8b89a2c 100644
--- a/vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts
@@ -350,7 +350,7 @@ describe('Drawing board', function () {
cy.drawingBoardTreeClickOnContextMenuOptionByName('Remove');
cy.get('.title').contains('Remove VNF');
- cy.get('.sdc-button').contains('Remove VNF').click();
+ cy.get('.custom-button').contains('Remove VNF').click();
// assert vfModules are disabled after remove parent vnf
cy.get('.tree-node-disabled div[data-tests-id="node-2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1"]')
.should('be.visible');
@@ -6762,7 +6762,7 @@ describe('Drawing board', function () {
"supplementaryFile_hidden_content": "{\r\n \"name\": \"a\",\r\n \"value\": \"32\"\r\n}",
"supplementaryFileContent": {
"name": "a",
- "value": "32"
+ "value": "32"
},
"supplementaryFileName": "sample.json",
"instanceParams": [
diff --git a/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts
index 5afcc9748..bb2c01abd 100644
--- a/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts
@@ -25,7 +25,7 @@ describe('Drawing Board: Instantiation Templates', function () {
it(`Given a stored template - when click "deploy" - then a coherent request should be sent upon deploy`, () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
// Then...
cy.getElementByDataTestsId("node-vProbe_NC_VNF 0").should('be.visible');
@@ -34,9 +34,10 @@ describe('Drawing Board: Instantiation Templates', function () {
it('Given a template - User can remove existing VNF', () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
removeVNFWithVFModules('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0');
+ removeVNFWithVFModules('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0');
cy.getDrawingBoardDeployBtn().click();
cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
@@ -46,43 +47,52 @@ describe('Drawing Board: Instantiation Templates', function () {
});
it('Given a template - User can add new VNF', () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
// add new node
addNewNode('node-vProbe_NC_VNF 0-add-btn')
.fillVnfPopup()
.getDrawingBoardDeployBtn().click()
.wait('@expectedPostAsyncInstantiation').then(xhr => {
- const vnfRequest = bodyOf(xhr).vnfs['vProbe_NC_VNF 0_1'];
-
- expect(vnfRequest.action).equals("Create");
- expect(vnfRequest.rollbackOnFailure).equals("true");
- expect(vnfRequest.originalName).equals("vProbe_NC_VNF 0");
- expect(vnfRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
- expect(vnfRequest.lcpCloudRegionId).equals("hvf6");
- expect(vnfRequest.lineOfBusiness).equals("zzz1");
- expect(vnfRequest.platformName).equals("xxx1");
- expect(vnfRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e");
+ const vnfRequest = bodyOf(xhr).vnfs['vProbe_NC_VNF 0_2'];
+
+ expect(vnfRequest.action).equals("Create");
+ expect(vnfRequest.rollbackOnFailure).equals("true");
+ expect(vnfRequest.originalName).equals("vProbe_NC_VNF 0");
+ expect(vnfRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+ expect(vnfRequest.lcpCloudRegionId).equals("hvf6");
+ expect(vnfRequest.lineOfBusiness).equals("zzz1");
+ expect(vnfRequest.platformName).equals("xxx1");
+ expect(vnfRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e");
+
+
+ // check instance name not change if empty
+ cy.editNode('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 0)
+ .clearInput('instanceName');
+ cy.getElementByDataTestsId('form-set').click({force: true}).then((done) => {
+ cy.editNode('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 0)
+ .getElementByDataTestsId('instanceName').should('be.empty')
+ });
});
});
it('Given a template - User can Duplicate VNF', () => {
const numberOfDuplicate: number = 4;
- loadDrawingBoardWithRecreateMode();
- nodeAction('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 'Duplicate')
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
+ cy.nodeAction('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0', 'Duplicate')
.getElementByDataTestsId('duplicate-amount-vfmodules').select(numberOfDuplicate.toString())
.getTagElementContainsText('button', 'Duplicate').click()
.getDrawingBoardDeployBtn().click()
.wait('@expectedPostAsyncInstantiation').then(xhr => {
- expect(Object.keys(bodyOf(xhr).vnfs).length).equals(numberOfDuplicate + 1);
+ expect(Object.keys(bodyOf(xhr).vnfs).length).equals(numberOfDuplicate + 2);
});
});
it('Given a stored template - when "edit" vnf and vfmodules are opened - then template’s details are visible as expected and deploy without changes', () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
// Then...
- editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0")
+ cy.editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0")
.getElementByDataTestsId("instanceName").should('have.value', 'hvf6arlba007')
.getElementByDataTestsId("productFamily").should('contain', 'Emanuel')
.getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1')
@@ -92,30 +102,27 @@ describe('Drawing Board: Instantiation Templates', function () {
.checkPlatformValue('xxx1')
.getElementByDataTestsId("cancelButton").click();
- editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0")
+ cy.editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0")
.getElementByDataTestsId("instanceName").should('have.value', 'hvf6arlba007_lba_Base_01')
- .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6')
- .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1')
.getElementByDataTestsId("rollback").should('contain', 'Rollback')
.getElementByDataTestsId("cancelButton").click();
- editNode("node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1")
+ cy.editNode("node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1")
.getElementByDataTestsId("instanceName").should('have.value', 'my_hvf6arlba007_lba_dj_01')
.getElementByDataTestsId("volumeGroupName").should('have.value', 'my_special_hvf6arlba007_lba_dj_01_vol')
- .getElementByDataTestsId("lcpRegion").should('contain', 'hvf6')
- .getElementByDataTestsId("tenant").should('contain', 'DN5242-Nov21-T1')
.getElementByDataTestsId("rollback").should('contain', 'Rollback')
.getElementByDataTestsId("sdncPreLoad").should('have.value', 'on')
.getElementByDataTestsId("cancelButton").click();
assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
{path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
+ {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
]);
});
it(`Given a stored template - when "edit" service is opened - then template’s details are visible as expected`, function () {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
cy.openServiceContextMenu()
.getElementByDataTestsId("context-menu-header-edit-item").click()
@@ -129,25 +136,23 @@ describe('Drawing Board: Instantiation Templates', function () {
});
it(`Given a stored template - add one VfModule, edit its details, and deploy - deploy is added with the vfModule details`, () => {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
let newVfModuleName = "new.vfmodule.name";
let module1ModelId = "VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1";
let module1CustomizationId = `vprobe_nc_vnf0..${module1ModelId}`;
// Click target VNF on right tree
- cy.getElementByDataTestsId('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0').click();
+ cy.getElementByDataTestsId('node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0').first().click();
// Click [+] vfModule on left tree
cy.drawingBoardPressAddButtonByElementName(`node-${module1CustomizationId}`)
.click({force: true});
- editNode(`node-c09e4530-8fd8-418f-9483-2f57ce927b05-${module1CustomizationId}`, 1);
- cy.clearInput("instanceName");
- cy.typeToInput("instanceName", newVfModuleName);
- cy.selectDropdownOptionByText('lcpRegion', 'hvf6');
- cy.selectDropdownOptionByText('tenant', 'DN5242-Nov21-T1');
- cy.getElementByDataTestsId('form-set').click();
+ cy.editNode(`node-c09e4530-8fd8-418f-9483-2f57ce927b05-${module1CustomizationId}`, 1);
+ cy.clearInput("instanceName");
+ cy.typeToInput("instanceName", newVfModuleName);
+ cy.getElementByDataTestsId('form-set').click();
// Then...
cy.getReduxState().then((state) => {
@@ -166,13 +171,12 @@ describe('Drawing Board: Instantiation Templates', function () {
{
instanceName: newVfModuleName,
volumeGroupName: `${newVfModuleName}_vol`,
- lcpCloudRegionId: "hvf6",
- tenantId: "4914ab0ab3a743e58f0eefdacc1dde77",
}
);
assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
{path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
+ {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
{path: ["existingNames", newVfModuleName], value: ""},
{path: ["existingNames", `${newVfModuleName}_vol`], value: ""},
{path: latestVfModule_1Path, value: latestVfModule_1ExpectedValue},
@@ -184,8 +188,8 @@ describe('Drawing Board: Instantiation Templates', function () {
it('Given a template - User can remove existing vfmodule', function () {
- loadDrawingBoardWithRecreateMode();
- nodeAction('node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1', 'Remove');
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
+ cy.nodeAction('node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1', 'Remove');
let removed_vfModule_Path = [
...vnfPath, "vfModules",
"vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1",
@@ -193,6 +197,7 @@ describe('Drawing Board: Instantiation Templates', function () {
assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([
{path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect
+ {path: [...vnfPath2, "vnfStoreKey"], value: "vProbe_NC_VNF 0_1"},
{path: [...removed_vfModule_Path], value: undefined},
]);
});
@@ -204,7 +209,7 @@ describe('Drawing Board: Instantiation Templates', function () {
it(`Given a stored template - edit service vnf and vfmodule ${testCase.desc} - deploy request should be ${testCase.desc}`, function () {
- loadDrawingBoardWithRecreateMode();
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
//edit service
cy.openServiceContextMenu();
@@ -216,7 +221,7 @@ describe('Drawing Board: Instantiation Templates', function () {
cy.getElementByDataTestsId('form-set').click();
// edit vnf
- editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0");
+ cy.editNode("node-21ae311e-432f-4c54-b855-446d0b8ded72-vProbe_NC_VNF 0");
if (testCase.modifySomeValues) {
cy.selectPlatformValue('platform');
cy.selectDropdownOptionByText("tenant", "CESAR-100-D-spjg61909");
@@ -224,7 +229,7 @@ describe('Drawing Board: Instantiation Templates', function () {
cy.getElementByDataTestsId('form-set').click();
//edit vf module
- editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0");
+ cy.editNode("node-c5b26cc1-a66f-4b69-aa23-6abc7c647c88-vprobe_nc_vnf0..VprobeNcVnf..FE_base_module..module-0");
if (testCase.modifySomeValues) {
cy.getElementByDataTestsId('sdncPreLoad').click();
}
@@ -251,9 +256,9 @@ describe('Drawing Board: Instantiation Templates', function () {
});
- it(`Given a stored template of Network - - it is loaded`, () => {
+ it(`Given a stored template of Network - - it is loaded`, () => {
- loadDrawingBoardWithRecreateModeNetwork();
+ cy.loadDrawingBoardWithRecreateModeNetwork(templateWithNetworkSetup);
// Then...
cy.getElementByDataTestsId("node-SR-IOV Provider 2-1").should('be.visible');
@@ -261,11 +266,11 @@ describe('Drawing Board: Instantiation Templates', function () {
assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network();
});
- it(`Given a stored template of Network - User can remove existing network`, () => {
+ it(`Given a stored template of Network - User can remove existing network`, () => {
- loadDrawingBoardWithRecreateModeNetwork();
+ cy.loadDrawingBoardWithRecreateModeNetwork(templateWithNetworkSetup);
- nodeAction('node-01f4c475-3f89-4f00-a2f4-39a873dba0ae-SR-IOV Provider 2-1', 'Remove');
+ cy.nodeAction('node-01f4c475-3f89-4f00-a2f4-39a873dba0ae-SR-IOV Provider 2-1', 'Remove');
let removed_network_Path = [
"networks", "SR-IOV Provider 2-1",
];
@@ -282,13 +287,13 @@ describe('Drawing Board: Instantiation Templates', function () {
it('Given a template - User can add a new network', () => {
- loadDrawingBoardWithRecreateModeNetwork();
+ cy.loadDrawingBoardWithRecreateModeNetwork(templateWithNetworkSetup);
// add new node
addNewNode('node-SR-IOV Provider 2-1-add-btn')
- .fillNetworkPopup()
- .getDrawingBoardDeployBtn().click()
- .wait('@expectedPostAsyncInstantiation').then(xhr => {
+ .fillNetworkPopup()
+ .getDrawingBoardDeployBtn().click()
+ .wait('@expectedPostAsyncInstantiation').then(xhr => {
const networkRequest = bodyOf(xhr).networks['SR-IOV Provider 2-1_1'];
expect(networkRequest.action).equals("Create");
@@ -324,58 +329,18 @@ const vnfPath = [
"vnfs", "vProbe_NC_VNF 0"
];
-function loadDrawingBoardWithRecreateMode() {
- loadDrawingBoardWithRecreateModeInternal(
- '../../' + templateWithVnfSetup.instanceTemplateFile,
- templateWithVnfSetup.serviceModelId,
- templateWithVnfSetup.serviceModelFile);
-}
-
-function loadDrawingBoardWithRecreateModeNetwork() {
- loadDrawingBoardWithRecreateModeInternal(
- '../../' + templateWithNetworkSetup.instanceTemplateFile,
- templateWithNetworkSetup.serviceModelId,
- templateWithNetworkSetup.serviceModelFile);
-}
-
-function loadDrawingBoardWithRecreateModeInternal(instanceTemplate: string, serviceModelIdToLoad: any, serviceModel: string) {
- const templateUuid = "46390edd-7100-46b2-9f18-419bd24fb60b";
-
- const drawingBoardAction = `RECREATE`;
- const templateTopologyEndpoint = "templateTopology";
- cy.route(`**/rest/models/services/${serviceModelIdToLoad}`,
- 'fixture:' + serviceModel)
- .as('serviceModel');
-
- cy.route(`**/instantiationTemplates/${templateTopologyEndpoint}/${templateUuid}`,
- 'fixture:' + instanceTemplate)
- .as('templateTopology');
-
- // When...
-
- cy.openIframe(`app/ui/#/servicePlanning/${drawingBoardAction}` +
- `?jobId=${templateUuid}` +
- `&serviceModelId=${serviceModelIdToLoad}`);
-
- cy.wait('@serviceModel');
- cy.wait('@templateTopology');
-}
+const vnfPath2 = [
+ "vnfs", "vProbe_NC_VNF 0_1"
+];
-function nodeAction(dataTestId: string, action: string, index ?: number) {
- return cy.drawingBoardTreeOpenContextMenuByElementDataTestId(dataTestId, index)
- .drawingBoardTreeClickOnContextMenuOptionByName(action)
-}
-function editNode(dataTestId: string, index ?: number) {
- return nodeAction(dataTestId, 'Edit', index);
-}
function addNewNode(dataTestId: string) {
return cy.getElementByDataTestsId(dataTestId).click({force: true})
}
function removeVNFWithVFModules(dataTestId: string) {
- return nodeAction(dataTestId, 'Remove')
+ return cy.nodeAction(dataTestId, 'Remove')
.getTagElementContainsText('button', 'Remove VNF').click()
}
@@ -448,6 +413,7 @@ function mockAsyncBulkResponse() {
url: Cypress.config('baseUrl') + '/asyncInstantiation/bulk',
method: 'POST',
status: 200,
- response: "[]",
+ response: true,
}).as("expectedPostAsyncInstantiation");
}
+
diff --git a/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts
index 0db1b099a..f76babe76 100644
--- a/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts
@@ -71,7 +71,7 @@ describe('Template', () => {
cy.route(Cypress.config('baseUrl') + "/getuserID", 'us16807000');
- cy.openPopupIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true&hasTemplate=true');
+ cy.openPopupIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true&isInstantiationTemplateExists=true');
});
@@ -94,17 +94,15 @@ describe('Template', () => {
cy.get(`#header-instantiationStatus`).contains('Instantiation Status');
cy.get(`#header-region`).contains('Region');
cy.get(`#header-tenant`).contains('Tenant');
- cy.get(`#header-aicZone`).contains('AIC Zone');
// check table body row
cy.getElementByDataTestsId(`userId-${templateJobIdFromE2EFile}`).contains('16807000');
- cy.getElementByDataTestsId(`createDate-${templateJobIdFromE2EFile}`).contains('2019-12-26 11:57:05');
+ cy.getElementByDataTestsId(`createDate-${templateJobIdFromE2EFile}`).contains(/2019-12-26 [0-9]{1,2}:57:05/); //timezone insensitive
cy.getElementByDataTestsId(`instanceName-${templateJobIdFromE2EFile}`).contains('SERVICE_NAME');
cy.getElementByDataTestsId(`instantiationStatus-${templateJobIdFromE2EFile}`).contains('IN_PROGRESS');
cy.getElementByDataTestsId(`summary-${templateJobIdFromE2EFile}`).contains('vnf: 1, vfModule: 2, volumeGroup: 1');
cy.getElementByDataTestsId(`region-${templateJobIdFromE2EFile}`).contains('hvf3 (SOMENAME)');
cy.getElementByDataTestsId(`tenant-${templateJobIdFromE2EFile}`).contains('greatTenant');
- cy.getElementByDataTestsId(`aicZone-${templateJobIdFromE2EFile}`).contains('NFTJSSSS-NFT1');
//check load button is disabled
diff --git a/vid-webpack-master/cypress/integration/iFrames/retry.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/retry.e2e.ts
index e544720a7..693e5f51a 100644
--- a/vid-webpack-master/cypress/integration/iFrames/retry.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/retry.e2e.ts
@@ -39,6 +39,7 @@ describe('Retry Page', function () {
res.vnfs["2017-388_PASQUALE-vPE 0"].action = 'Create';
res.vnfs["2017-488_PASQUALE-vPE 0"].action = 'Create';
res.networks["ExtVL 0"].action = 'Create';
+ res.networks["ExtVL 0"].isFailed = true;
res.networks["ExtVL 0"].statusMessage = 'Network instantiation failed message';
// Adding VFModule with isFailed.
@@ -56,7 +57,7 @@ describe('Retry Page', function () {
cy.openIframe(`app/ui/#/servicePlanning/RETRY_EDIT?serviceModelId=${SERVICE_MODEL_ID}&subscriberId=${SUBSCRIBER_ID}&serviceType=${SERVICE_TYPE}&serviceInstanceId=${SERVICE_INSTANCE_ID}&jobId=${JOB_ID}`);
- cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').click();
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').eq(0).click();
cy.get('.failed-msg').should('have.length', 5);
cy.get('.newIcon').should('have.length', 4);
@@ -112,6 +113,7 @@ describe('Retry Page', function () {
// Adding VFModule with isFailed.
res.vnfs["2017-488_PASQUALE-vPE 0"].vfModules["2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0"]["2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0uvfot"].isFailed = true;
res.vnfs["2017-488_PASQUALE-vPE 0"].vfModules["2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0"]["2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0uvfot"].action = 'Create';
+ res.networks["ExtVL 0"].isFailed = true;
cy.readFile('cypress/support/jsonBuilders/mocks/jsons/responceForFailedInstance.json').then((res) => {
jsonBuilderAndMock.basicJson(
@@ -133,7 +135,7 @@ describe('Retry Page', function () {
cy.openIframe(`app/ui/#/servicePlanning/RETRY?serviceModelId=${SERVICE_MODEL_ID}&subscriberId=${SUBSCRIBER_ID}&serviceType=${SERVICE_TYPE}&serviceInstanceId=${SERVICE_INSTANCE_ID}&jobId=${JOB_ID}`);
- cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').click();
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').eq(0).click();
cy.get('.failed-msg').should('have.length', 4);
cy.get('.newIcon').should('have.length', 4);
diff --git a/vid-webpack-master/cypress/integration/iFrames/sdncPreload.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/sdncPreload.e2e.ts
new file mode 100644
index 000000000..877506cad
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/sdncPreload.e2e.ts
@@ -0,0 +1,92 @@
+describe('SDNC preload ', () => {
+
+ beforeEach(() => {
+ cy.clearSessionStorage();
+ cy.setTestApiParamToGR();
+ cy.initAAIMock();
+ cy.initGetAAISubDetails();
+ cy.initVidMock();
+ cy.initDrawingBoardUserPermission();
+ cy.login();
+ });
+
+ afterEach(() => {
+ cy.screenshot();
+ });
+
+ it('feature toggle is on and SDNC is checked then SDNC preload file is enable : upload success' , () => {
+ mockPreloadResult(true, 200);
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
+ cy.editNode("node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1");
+ checkUploadLinkLogic();
+
+ uploadFile().then(() => {
+ cy.get('.sdc-modal__content').should('contain', 'The pre-load file(s) have been uploaded successfully.');
+ cy.getElementByDataTestsId('button-ok').click()
+ .getElementByDataTestsId('sdnc_pereload_upload_link').should('contain', 'Upload another')
+ });
+ });
+
+ it('feature toggle is on and SDNC is checked then SDNC preload file is enable : upload fail', () => {
+ mockPreloadResult(false, 200);
+ cy.loadDrawingBoardWithRecreateMode(templateWithVnfSetup);
+
+ cy.editNode("node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1");
+ checkUploadLinkLogic();
+
+ uploadFile().then(() => {
+ cy.get('.sdc-modal__content').should('contain', 'Failed to upload one or more of the files, please retry.');
+ cy.getElementByDataTestsId('button-ok').click()
+ .getElementByDataTestsId('sdnc_pereload_upload_link').should('contain', 'Upload')
+ });
+ });
+});
+
+
+let apiTestResources = '../vid-automation/src/test/resources/asyncInstantiation/';
+
+const templateWithVnfSetup = {
+ serviceModelId: '6cfeeb18-c2b0-49df-987a-da47493c8e38',
+ instanceTemplateFile: apiTestResources + 'templates__instance_template.json',
+ instanceTemplateSetWithoutModifyFile: apiTestResources + 'templates__instance_from_template__set_without_modify1.json',
+ serviceModelFile: '../support/jsonBuilders/mocks/jsons/instantiationTemplates/templates__service_model.json',
+};
+
+function mockAsyncBulkResponse() {
+ cy.server().route({
+ url: Cypress.config('baseUrl') + '/asyncInstantiation/bulk',
+ method: 'POST',
+ status: 200,
+ response: true,
+ }).as("expectedPostAsyncInstantiation");
+}
+
+function mockPreloadResult(response: boolean, status?: number) {
+ cy.server().route({
+ url: Cypress.config('baseUrl') + '/preload',
+ method: 'POST',
+ status: status ? status : 200,
+ response: response,
+ }).as("preload");
+}
+
+
+function uploadFile() {
+ // @ts-ignore
+ return new Promise((resolve) => {
+ const fileName = '../support/uploadFiles/sdncPreLoadFileExample.json';
+ cy.fixture(fileName).then(fileContent => {
+ // @ts-ignore
+ cy.get('input[type=file]').eq(0).upload({fileContent, fileName, mimeType: 'application/json'}).then(() => {
+ resolve();
+ });
+ })
+ });
+}
+
+function checkUploadLinkLogic() {
+ cy.getElementByDataTestsId('sdnc_pereload_upload_link').should('contain', 'Upload').should('not.have.class', 'disabled')
+ .getElementByDataTestsId('sdncPreLoad').click()
+ .getElementByDataTestsId('sdnc_pereload_upload_link').should('contain', 'Upload').should('have.class', 'disabled')
+ .getElementByDataTestsId('sdncPreLoad').click()
+}
diff --git a/vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts
index 4b27ad008..06f5a23b5 100644
--- a/vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts
@@ -36,7 +36,7 @@ describe('Service popup', function () {
res1.global.flags = {};
res1.global.flags["FLAG_2004_INSTANTIATION_TEMPLATES_POPUP"] = true;
cy.setReduxState(<any>res1);
- cy.openPopupIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true&hasTemplate=true');
+ cy.openPopupIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true&isInstantiationTemplateExists=true');
cy.getElementByDataTestsId('templateButton').should('be.visible')
});
});
@@ -95,13 +95,6 @@ describe('Service popup', function () {
});
});
- it('when open service popup should show showPrevious button', () => {
- cy.openPopupIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true');
- cy.getElementByDataTestsId('ShowPreviousInstancesButton').contains('Previous Instantiation').click();
-
- })
-
-
});
});
diff --git a/vid-webpack-master/cypress/integration/iFrames/viewEditUpgradeVfModule.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/viewEditUpgradeVfModule.e2e.ts
index 09734472c..ad15ce383 100644
--- a/vid-webpack-master/cypress/integration/iFrames/viewEditUpgradeVfModule.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/viewEditUpgradeVfModule.e2e.ts
@@ -16,6 +16,8 @@ export const initServicePlanning = function (viewOrEdit: string, customModelFile
}
cy.readFile('../vid-automation/src/test/resources/aaiGetInstanceTopology/ServiceTreeWithMultipleChildren_serviceModel.json').then((res) => {
+ res.service.instantiationType = "A-La-Carte";
+ res.service.vidNotions.instantiationType = "ALaCarte";
jsonBuilderAndMock.basicJson(
res,
Cypress.config('baseUrl') + "/rest/models/services/6e59c5de-f052-46fa-aa7e-2fca9d674c44",
@@ -133,7 +135,7 @@ describe('View Edit Page: Upgrade VFModule', function () {
beforeEach(() => {
cy.clearSessionStorage();
- cy.setTestApiParamToVNF();
+ cy.setTestApiParamToGR();
cy.initVidMock();
cy.login();
});
@@ -200,8 +202,9 @@ describe('View Edit Page: Upgrade VFModule', function () {
}
function verifyMenuActionUpgradeDoesNotExist() {
- cy.getElementByDataTestsId('node-undefined-dc229cd8-c132-4455-8517-5c1787c18b14-menu-btn').click()
- .getElementByDataTestsId('context-menu-upgrade').should('not.exist');
+ cy.getElementByDataTestsId('node-522159d5-d6e0-4c2a-aa44-5a542a12a830-vf_vgeraldine0..VfVgeraldine..vflorence_vlc..module-1-menu-btn').click().then(() => {
+ cy.getElementByDataTestsId('context-menu-upgrade').should('not.exist');
+ });
}
function setLatestVersionMockToEmptyResponse(serviceUuid: string) {
diff --git a/vid-webpack-master/cypress/integration/iFrames/viewOnlyDrawingBoard.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/viewOnlyDrawingBoard.e2e.ts
index 60b2e123d..de5facf89 100644
--- a/vid-webpack-master/cypress/integration/iFrames/viewOnlyDrawingBoard.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/viewOnlyDrawingBoard.e2e.ts
@@ -113,13 +113,13 @@ describe('View only drawing board', function () {
cy.getElementByDataTestsId('node-2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1').find(`[data-tests-id='node-type-indicator']`).should('have.text', 'M');
//testing right side
- cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').find(`[data-tests-id='node-type-indicator']`).should('have.text', 'VNF');
- cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').click({force: true});
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').find(`[data-tests-id='node-type-indicator']`).should('have.length', 3).and('have.text', 'VNFVNFVNF');
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').eq(0).click({force: true});
cy.getElementByDataTestsId('node-f8360508-3f17-4414-a2ed-6bc71161e8db-2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0').eq(0).find(`[data-tests-id='node-type-indicator']`).should('have.text', 'M');
//check vnf node tree sub header
- cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').find("[data-tests-id='status-property-orchStatus']").should('have.text', 'Created');
- cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').find("[data-tests-id='status-property-provStatus']").should('have.text', '');
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').find("[data-tests-id='status-property-orchStatus']").eq(0).should('have.text', 'Created');
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').find("[data-tests-id='status-property-provStatus']").eq(0).should('have.text', '');
cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0').find("[data-tests-id='status-property-inMaint']").should('not.exist');
//check vf Module node tree sub header
diff --git a/vid-webpack-master/cypress/integration/iFrames/vnfGroups.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/vnfGroups.e2e.ts
index dc1b4bbf2..a0882f5bf 100644
--- a/vid-webpack-master/cypress/integration/iFrames/vnfGroups.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/vnfGroups.e2e.ts
@@ -12,7 +12,7 @@ describe('Vnf Groups', function () {
cy.initAAIMock();
cy.initVidMock();
cy.permissionVidMock();
- cy.setTestApiParamToVNF();
+ cy.setTestApiParamToGR();
cy.login();
});
@@ -20,6 +20,42 @@ describe('Vnf Groups', function () {
cy.screenshot();
});
+ function updateObject(obj: any, key: string, val: any, value:any) {
+ return JSON.parse(JSON.stringify(obj)
+ .replace(new RegExp(`"${key}":"${val}"`), `"${key}":"${value}"`))
+ }
+
+ function buildReduxStateWithServiceRespone(res: any, serviceId:string, isEcompGeneratedNaming:boolean) :void {
+ res = updateObject(res, "ecomp_generated_naming", !isEcompGeneratedNaming, isEcompGeneratedNaming);
+ cy.window().then((win) => {
+ win.sessionStorage.setItem('reduxState', JSON.stringify({
+ "global": {
+ "name": null
+ },
+ "service": {
+ "serviceHierarchy": {
+ [serviceId] : res
+ },
+ "serviceInstance": {
+ [serviceId]: {
+ "modelInfo" : {
+ "modelVersionId" : serviceId
+ },
+ "existingVNFCounterMap": {},
+ "existingVnfGroupCounterMap": {},
+ "existingNetworksCounterMap": {},
+ "vnfs": {},
+ "vnfGroups": {},
+ "isEcompGeneratedNaming": isEcompGeneratedNaming,
+ "existingNames": {},
+ "vidNotions": res.service.vidNotions
+ }
+ }
+ }
+ }));
+ });
+ }
+
describe('Vnf Group model basic view', function () {
it('Vnf group open new view edit', function () {
@@ -36,7 +72,7 @@ describe('Vnf Groups', function () {
"ServiceWithVnfGroup",
);
- cy.buildReduxStateWithServiceRespone(res, serviceId, false);
+ buildReduxStateWithServiceRespone(res, serviceId, false);
cy.openIframe('app/ui/#/servicePlanning?serviceModelId=' + serviceId);
cy.getElementByDataTestsId('node-' + groupName).find(`[data-tests-id='node-type-indicator']`).contains('G');
cy.getElementByDataTestsId('node-' + groupName).contains('' + groupName);
diff --git a/vid-webpack-master/cypress/integration/iFrames/vrf.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/vrf.e2e.ts
index 6700ff425..529d96a3b 100644
--- a/vid-webpack-master/cypress/integration/iFrames/vrf.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/vrf.e2e.ts
@@ -480,7 +480,7 @@ describe('Drawing board : VRF', function () {
"rollbackOnFailure": "true",
"aicZoneName": null,
"owningEntityName": "WayneHolland",
- "testApi": "VNF_API",
+ "testApi": "GR_API",
"modelInfo": {
"modelInvariantId": "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb",
"modelVersionId": "f028b2e2-7080-4b13-91b2-94944d4c42d8",
diff --git a/vid-webpack-master/cypress/integration/shared/spinner.e2e.ts b/vid-webpack-master/cypress/integration/shared/spinner.e2e.ts
index 51e084b32..a64644087 100644
--- a/vid-webpack-master/cypress/integration/shared/spinner.e2e.ts
+++ b/vid-webpack-master/cypress/integration/shared/spinner.e2e.ts
@@ -32,7 +32,7 @@ describe('Spinner', function () {
"error 500 asyncInstantiation");
cy.openIframe('app/ui/#/instantiationStatus');
- cy.get('.sdc-loader')
+ cy.get('.custom-loader')
.and('be.visible');
});
diff --git a/vid-webpack-master/cypress/pipeline/group1.txt b/vid-webpack-master/cypress/pipeline/group1.txt
index 217efa122..a9b5aef46 100644
--- a/vid-webpack-master/cypress/pipeline/group1.txt
+++ b/vid-webpack-master/cypress/pipeline/group1.txt
@@ -1,11 +1,10 @@
+cypress/integration/iFrames/ala-carte.e2e.ts
cypress/integration/iFrames/auditInfo.modal.e2e.ts
cypress/integration/iFrames/browse-sdc.e2e.ts
+cypress/integration/iFrames/changeManagement.e2e.ts
cypress/integration/iFrames/collectionResource.e2e.ts
+cypress/integration/iFrames/commitDialog.e2e.ts
cypress/integration/iFrames/drawingBoard.e2e.ts
+cypress/integration/iFrames/instantiation-templates.e2e.ts
+cypress/integration/iFrames/instantiation.templates.modal.e2e.ts
cypress/integration/iFrames/instantiationStatus.e2e.ts
-cypress/integration/iFrames/network.popup.e2e.ts
-cypress/integration/iFrames/permission.e2e.ts
-cypress/integration/iFrames/pnf.e2e.ts
-cypress/integration/iFrames/resume.e2e.ts
-cypress/integration/iFrames/retry.e2e.ts
-cypress/integration/iFrames/viewEdit.e2e.ts
diff --git a/vid-webpack-master/cypress/pipeline/run_group2.sh b/vid-webpack-master/cypress/pipeline/run_group2.sh
deleted file mode 100644
index 43cfbc63f..000000000
--- a/vid-webpack-master/cypress/pipeline/run_group2.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env bash
-
-. $HOME/.nvm/nvm.sh
-
-set -x
-
-CYPRESS_HOME_DIR=$1
-TESTS_GROUP_FILE_1=cypress/pipeline/group1.txt
-TESTS_GROUP_FILE=cypress/pipeline/group2.generated.txt
-
-cd ${CYPRESS_HOME_DIR}
-
-# make group2 by "negating" group1.txt
-ls -1 cypress/integration/*/*.e2e.ts | comm -3 - ${TESTS_GROUP_FILE_1} > ${TESTS_GROUP_FILE}
-
-cat ${TESTS_GROUP_FILE}
-npm run cypress:headless --max-old-space-size=4096 -- --spec=$(cat ${TESTS_GROUP_FILE} | tr '\n' ',')
diff --git a/vid-webpack-master/cypress/pipeline/run_groupRemain.sh b/vid-webpack-master/cypress/pipeline/run_groupRemain.sh
new file mode 100644
index 000000000..51c30411d
--- /dev/null
+++ b/vid-webpack-master/cypress/pipeline/run_groupRemain.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+. $HOME/.nvm/nvm.sh
+
+set -x
+
+CYPRESS_HOME_DIR=$1
+REMAIN_TESTS_FILE=cypress/pipeline/remain.generated.txt
+ALL_TESTS_IN_GROUPS_FILE=cypress/pipeline/all_tests.txt
+
+cd ${CYPRESS_HOME_DIR}
+cat cypress/pipeline/group?.txt | sort > ${ALL_TESTS_IN_GROUPS_FILE}
+# make group2 by "negating" group1.txt
+ls -1 cypress/integration/*/*.e2e.ts | comm -3 - ${ALL_TESTS_IN_GROUPS_FILE} > ${REMAIN_TESTS_FILE}
+
+cat ${REMAIN_TESTS_FILE}
+npm run cypress:headless --max-old-space-size=4096 -- --spec=$(cat ${REMAIN_TESTS_FILE} | tr '\n' ',')
diff --git a/vid-webpack-master/cypress/support/application/application.session.actions.ts b/vid-webpack-master/cypress/support/application/application.session.actions.ts
index c054b2640..9126ae1a4 100644
--- a/vid-webpack-master/cypress/support/application/application.session.actions.ts
+++ b/vid-webpack-master/cypress/support/application/application.session.actions.ts
@@ -5,7 +5,6 @@ declare namespace Cypress {
clearSessionStorage: typeof clearSessionStorage;
setTestApiParamToGR: typeof setTestApiParamToGR;
setTestApiParamToVNF: typeof setTestApiParamToVNF;
- buildReduxStateWithServiceRespone: typeof buildReduxStateWithServiceRespone;
}
}
@@ -44,42 +43,8 @@ function setTestApiParamToVNF() : void {
});
}
-function updateObject(obj: any, key: string, val: any, value:any) {
- return JSON.parse(JSON.stringify(obj)
- .replace(new RegExp(`"${key}":"${val}"`), `"${key}":"${value}"`))
-}
-
-function buildReduxStateWithServiceRespone(res: any, serviceId:string, isEcompGeneratedNaming:boolean) :void {
- res = updateObject(res, "ecomp_generated_naming", !isEcompGeneratedNaming, isEcompGeneratedNaming);
- cy.window().then((win) => {
- win.sessionStorage.setItem('reduxState', JSON.stringify({
- "global": {
- "name": null
- },
- "service": {
- "serviceHierarchy": {
- [serviceId] : res
- },
- "serviceInstance": {
- [serviceId]: {
- "existingVNFCounterMap": {},
- "existingVnfGroupCounterMap": {},
- "existingNetworksCounterMap": {},
- "vnfs": {},
- "vnfGroups": {},
- "isEcompGeneratedNaming": isEcompGeneratedNaming,
- "existingNames": {},
- "vidNotions": res.service.vidNotions
- }
- }
- }
- }));
- });
-}
-
Cypress.Commands.add('setReduxState', setReduxState);
Cypress.Commands.add('getReduxState', getReduxState);
Cypress.Commands.add('clearSessionStorage', clearSessionStorage);
Cypress.Commands.add('setTestApiParamToGR', setTestApiParamToGR);
Cypress.Commands.add('setTestApiParamToVNF',setTestApiParamToVNF);
-Cypress.Commands.add('buildReduxStateWithServiceRespone', buildReduxStateWithServiceRespone);
diff --git a/vid-webpack-master/cypress/support/index.js b/vid-webpack-master/cypress/support/index.js
index 5062f5100..d9e64c0f5 100644
--- a/vid-webpack-master/cypress/support/index.js
+++ b/vid-webpack-master/cypress/support/index.js
@@ -15,6 +15,7 @@
// Import commands.js using ES2015 syntax:
import './commands';
+import 'cypress-file-upload';
import './steps/login.step';
import './steps/fill.service.popup.step';
import './steps/fill.vnf.popup.step';
@@ -36,12 +37,14 @@ import './steps/drawingBoard/drawingBoardModel.steps';
import './steps/drawingBoard/drawingBoardTree.steps';
import './steps/genericForm/genericFormAction.steps';
import './steps/genericForm/popupViewport.step';
-import './steps/drawingBoard/drawingBoardHeader.steps';
import './steps/drawingBoard/general.steps';
+import './steps/drawingBoard/drawingBoardRecreate.steps';
+import './steps/drawingBoard/drawingBoardHeader.steps';
import './steps/general/clickOutside.step';
import './steps/drawingBoard/drawingBoardComponentInfo.steps';
import './steps/genericForm/checkPopover.step';
+
// Alternatively you can use CommonJS syntax:
// require('./commands')
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts b/vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts
index ae60361c2..807a3bcda 100644
--- a/vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts
@@ -9,6 +9,7 @@ declare namespace Cypress {
initActiveVPNs : typeof initActiveVPNs;
initGetAAISubDetails : typeof initGetAAISubDetails;
initAAIServices: typeof initAAIServices;
+ initGetModelByServiceType: typeof initGetModelByServiceType;
}
}
@@ -48,6 +49,19 @@ function initGetAAISubDetails(response? : JSON) : void {
});
}
+function initGetModelByServiceType(response? : JSON) : void {
+ cy.readFile('cypress/support/jsonBuilders/mocks/jsons/aaiSubDetails.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status: 200,
+ url: Cypress.config('baseUrl') + "/aai_get_models_by_service_type/**",
+ response: response ? response : res
+ }).as('aai-sub-details')
+ });
+}
+
+
function initAlaCarteService(response? : JSON) : void {
cy.readFile('cypress/support/jsonBuilders/mocks/jsons/a-la-carteService.json').then((res) => {
cy.server()
@@ -156,6 +170,7 @@ Cypress.Commands.add('initSearchVNFMemebers', initSearchVNFMemebers);
Cypress.Commands.add('initActiveNetworks', initActiveNetworks);
Cypress.Commands.add('initActiveVPNs', initActiveVPNs);
Cypress.Commands.add('initAAIServices', initAAIServices);
+Cypress.Commands.add('initGetModelByServiceType', initGetModelByServiceType);
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiGetModelsByServiceType.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiGetModelsByServiceType.json
new file mode 100644
index 000000000..2540650ce
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiGetModelsByServiceType.json
@@ -0,0 +1,58 @@
+{
+ "inventory-response-item": [
+ {
+ "service-subscription": {
+ "service-type": "TYLER SILVIA",
+ "resource-version": "1494001841964"
+ },
+ "extra-properties": {},
+ "inventory-response-items": {
+ "inventory-response-item":[
+ {
+ "model-name": "RG_11-18_vccf_srvc",
+ "service-instance": {
+ "service-instance-id": "b9769e8f-70aa-4b05-8988-64044aa63498",
+ "service-instance-name": "TestCharlie",
+ "model-invariant-id": "4af418a9-c2f5-4fae-a577-b69d6341eee8",
+ "model-version-id": "745d1bf1-9ed1-413f-8111-f1e984ad63fb",
+ "resource-version": "1494002070115"
+ },
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model-ver.model-description",
+ "property-value": "Service for vccf"
+ },
+ {
+ "property-name": "model-ver.model-version-id",
+ "property-value": "745d1bf1-9ed1-413f-8111-f1e984ad63fb"
+ },
+ {
+ "property-name": "model-ver.model-name",
+ "property-value": "RG_11-18_vccf_srvc"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "service"
+ },
+ {
+ "property-name": "model.model-invariant-id",
+ "property-value": "4af418a9-c2f5-4fae-a577-b69d6341eee8"
+ },
+ {
+ "property-name": "model.model-description"
+ },
+ {
+ "property-name": "model-ver.model-version",
+ "property-value": "1.0"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+
+
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/defect710619/expectedResumeWithVGResults.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/defect710619/expectedResumeWithVGResults.json
index d10c2bd32..d0c734bc2 100644
--- a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/defect710619/expectedResumeWithVGResults.json
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/defect710619/expectedResumeWithVGResults.json
@@ -17,7 +17,7 @@
},
"requestParameters": {
"userParams": [],
- "testApi": "VNF_API",
+ "testApi": "GR_API",
"usePreload": false
},
"cloudConfiguration": {
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json
index 531bad3b4..d9602d139 100644
--- a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json
@@ -19,9 +19,10 @@
"FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE": false,
"FLAG_2002_VNF_PLATFORM_MULTI_SELECT" : true,
"FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS": true,
- "FLAG_2004_TEMP_BUTTON_TO_INSTANTIATION_STATUS_FILTER": true,
"FLAG_2004_INSTANTIATION_STATUS_FILTER": true,
"FLAG_2004_INSTANTIATION_TEMPLATES_POPUP" : false,
"FLAG_2002_UNLIMITED_MAX" : true,
- "FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE": true
+ "FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE": true,
+ "FLAG_2006_VFM_SDNC_PRELOAD_FILES" : true,
+ "FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF": true
}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/vnfGroupBasicServiceInstance.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/vnfGroupBasicServiceInstance.json
index bc37b6bed..847ebf0d5 100644
--- a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/vnfGroupBasicServiceInstance.json
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/vnfGroupBasicServiceInstance.json
@@ -32,7 +32,7 @@
"subscriberName":"SILVIA ROBBINS",
"owningEntityName":"WayneHolland",
"rollbackOnFailure":"true",
- "testApi": "VNF_API",
+ "testApi": "GR_API",
"isALaCarte":true,
"action": "Create"
}
diff --git a/vid-webpack-master/cypress/support/steps/drawingBoard/drawingBoardRecreate.steps.ts b/vid-webpack-master/cypress/support/steps/drawingBoard/drawingBoardRecreate.steps.ts
new file mode 100644
index 000000000..16f418bc9
--- /dev/null
+++ b/vid-webpack-master/cypress/support/steps/drawingBoard/drawingBoardRecreate.steps.ts
@@ -0,0 +1,52 @@
+declare namespace Cypress {
+ interface Chainable {
+ loadDrawingBoardWithRecreateMode: typeof loadDrawingBoardWithRecreateMode ,
+ loadDrawingBoardWithRecreateModeNetwork: typeof loadDrawingBoardWithRecreateModeNetwork,
+ loadDrawingBoardWithRecreateModeInternal: typeof loadDrawingBoardWithRecreateModeInternal
+ }
+}
+
+function loadDrawingBoardWithRecreateMode(templateWithVnfSetup : any) {
+ cy.loadDrawingBoardWithRecreateModeInternal(
+ '../../' + templateWithVnfSetup.instanceTemplateFile,
+ templateWithVnfSetup.serviceModelId,
+ templateWithVnfSetup.serviceModelFile);
+}
+
+function loadDrawingBoardWithRecreateModeNetwork(templateWithNetworkSetup : any) {
+ cy.loadDrawingBoardWithRecreateModeInternal(
+ '../../' + templateWithNetworkSetup.instanceTemplateFile,
+ templateWithNetworkSetup.serviceModelId,
+ templateWithNetworkSetup.serviceModelFile);
+}
+
+function loadDrawingBoardWithRecreateModeInternal(instanceTemplate: string, serviceModelIdToLoad: any, serviceModel: string) {
+ const templateUuid = "46390edd-7100-46b2-9f18-419bd24fb60b";
+
+ const drawingBoardAction = `RECREATE`;
+ const templateTopologyEndpoint = "templateTopology";
+ cy.route(`**/rest/models/services/${serviceModelIdToLoad}`,
+ 'fixture:' + serviceModel)
+ .as('serviceModel');
+
+ cy.route(`**/instantiationTemplates/${templateTopologyEndpoint}/${templateUuid}`,
+ 'fixture:' + instanceTemplate)
+ .as('templateTopology');
+
+ // When...
+
+ cy.openIframe(`app/ui/#/servicePlanning/${drawingBoardAction}` +
+ `?jobId=${templateUuid}` +
+ `&serviceModelId=${serviceModelIdToLoad}`);
+
+ cy.wait('@serviceModel');
+ cy.wait('@templateTopology');
+}
+
+
+
+
+
+Cypress.Commands.add('loadDrawingBoardWithRecreateMode', loadDrawingBoardWithRecreateMode);
+Cypress.Commands.add('loadDrawingBoardWithRecreateModeNetwork', loadDrawingBoardWithRecreateModeNetwork);
+Cypress.Commands.add('loadDrawingBoardWithRecreateModeInternal', loadDrawingBoardWithRecreateModeInternal);
diff --git a/vid-webpack-master/cypress/support/steps/drawingBoard/general.steps.ts b/vid-webpack-master/cypress/support/steps/drawingBoard/general.steps.ts
index 8d2bb8a24..797fff095 100644
--- a/vid-webpack-master/cypress/support/steps/drawingBoard/general.steps.ts
+++ b/vid-webpack-master/cypress/support/steps/drawingBoard/general.steps.ts
@@ -1,7 +1,10 @@
declare namespace Cypress {
interface Chainable {
updateServiceShouldNotOverrideChild: typeof updateServiceShouldNotOverrideChild
- openServiceContextMenu: typeof openServiceContextMenu
+ openServiceContextMenu: typeof openServiceContextMenu,
+ drawingBoardTreeClickOnContextMenuOptionByName : typeof drawingBoardTreeClickOnContextMenuOptionByName,
+ nodeAction: typeof nodeAction,
+ editNode : typeof editNode
}
}
@@ -18,7 +21,6 @@ function updateServiceShouldNotOverrideChild() : void {
});
});
});
-
}
@@ -26,5 +28,36 @@ function openServiceContextMenu() : Chainable<any> {
return cy.getElementByDataTestsId('openMenuBtn').click({force: true});
}
+function nodeAction(dataTestId: string, action: string, index ?: number) {
+ return cy.drawingBoardTreeOpenContextMenuByElementDataTestId(dataTestId, index)
+ .drawingBoardTreeClickOnContextMenuOptionByName(action)
+}
+
+function drawingBoardTreeClickOnContextMenuOptionByName(optionName : string) : Chainable<any> {
+ switch (optionName) {
+ case 'Duplicate':
+ return cy.getElementByDataTestsId('context-menu-duplicate').click({force : true});
+ case 'Remove':
+ return cy.getElementByDataTestsId('context-menu-remove').click({force : true});
+ case 'Edit':
+ return cy.getElementByDataTestsId('context-menu-edit').click({force : true});
+ case 'Delete':
+ return cy.getElementByDataTestsId('context-menu-delete').trigger('mouseover').click();
+ case 'Upgrade':
+ return cy.getElementByDataTestsId('context-menu-upgrade').trigger('mouseover').click();
+ case 'Undo Upgrade':
+ return cy.getElementByDataTestsId('context-menu-undoUpgrade').trigger('mouseover').click();
+ default:
+ return cy.getElementByDataTestsId('context-menu-duplicate').click({force : true});
+ }
+}
+
+function editNode(dataTestId: string, index ?: number) {
+ return cy.nodeAction(dataTestId, 'Edit', index);
+}
+
Cypress.Commands.add('updateServiceShouldNotOverrideChild', updateServiceShouldNotOverrideChild);
Cypress.Commands.add('openServiceContextMenu', openServiceContextMenu);
+Cypress.Commands.add('drawingBoardTreeClickOnContextMenuOptionByName', drawingBoardTreeClickOnContextMenuOptionByName);
+Cypress.Commands.add('nodeAction', nodeAction);
+Cypress.Commands.add('editNode', editNode);
diff --git a/vid-webpack-master/cypress/support/steps/fill.vfModule.step.ts b/vid-webpack-master/cypress/support/steps/fill.vfModule.step.ts
index b87e773f9..cfb8a050a 100644
--- a/vid-webpack-master/cypress/support/steps/fill.vfModule.step.ts
+++ b/vid-webpack-master/cypress/support/steps/fill.vfModule.step.ts
@@ -34,7 +34,7 @@ function addMacroVfModule(vnfName: string, vfModuleName: string, instanceName: s
}
function addALaCarteVfModule(vnfName: string, vfModuleName: string, instanceName: string, lcpRegion: string, legacyRegion: string,
- tenant: string, rollback: boolean, sdncPreLoad: boolean, deleteVgName: boolean): Chainable<any> {
+ tenant: string, rollback: boolean, sdncPreLoad: boolean, deleteVgName: boolean, flag: boolean): Chainable<any> {
return cy.getElementByDataTestsId('node-' + vnfName).click({force: true}).then(() => {
cy.getElementByDataTestsId('node-' + vfModuleName + '-add-btn').click({force: true}).then(() => {
cy.getElementByDataTestsId('instanceName').clear().type(instanceName, {force: true}).then(() => {
@@ -42,11 +42,13 @@ function addALaCarteVfModule(vnfName: string, vfModuleName: string, instanceName
cy.getElementByDataTestsId('volumeGroupName').clear();
}
}).then(() => {
- cy.selectDropdownOptionByText('lcpRegion', lcpRegion);
- if (legacyRegion) {
- cy.typeToInput("lcpRegionText", legacyRegion);
+ if(!flag) {
+ cy.selectDropdownOptionByText('lcpRegion', lcpRegion);
+ if (legacyRegion) {
+ cy.typeToInput("lcpRegionText", legacyRegion);
+ }
+ cy.selectDropdownOptionByText('tenant', tenant);
}
- cy.selectDropdownOptionByText('tenant', tenant);
cy.selectDropdownOptionByText('rollback', String(rollback));
if (sdncPreLoad) {
cy.getElementByDataTestsId('sdncPreLoad').check();
diff --git a/vid-webpack-master/cypress/support/uploadFiles/sdncPreLoadFileExample.json b/vid-webpack-master/cypress/support/uploadFiles/sdncPreLoadFileExample.json
new file mode 100644
index 000000000..c317c4183
--- /dev/null
+++ b/vid-webpack-master/cypress/support/uploadFiles/sdncPreLoadFileExample.json
@@ -0,0 +1,3 @@
+{
+ "comment" : "invalid file, just for upload mock file"
+}
diff --git a/vid-webpack-master/package.cypress.json b/vid-webpack-master/package.cypress.json
index da6aa602f..8ce197f32 100644
--- a/vid-webpack-master/package.cypress.json
+++ b/vid-webpack-master/package.cypress.json
@@ -16,6 +16,7 @@
"cypress": "3.6.1",
"typescript": "3.1.6",
"rxjs": "^6.3.3",
- "rxjs-compat": "^6.3.3"
+ "rxjs-compat": "^6.3.3",
+ "cypress-file-upload": "^3.5.3"
}
}
diff --git a/vid-webpack-master/package.json b/vid-webpack-master/package.json
index ee04de10d..fdaf3e3d5 100644..100755
--- a/vid-webpack-master/package.json
+++ b/vid-webpack-master/package.json
@@ -30,24 +30,23 @@
"private": true,
"dependencies": {
"@angular-redux/store": "9.0.0",
- "@angular/animations": "7.1.4",
+ "@angular/animations": "8.2.14",
"@angular/cdk": "7.2.2",
- "@angular/common": "7.1.4",
- "@angular/compiler": "7.1.4",
- "@angular/core": "7.1.4",
- "@angular/forms": "7.1.4",
- "@angular/http": "7.1.4",
+ "@angular/common": "8.2.14",
+ "@angular/compiler": "8.2.14",
+ "@angular/core": "8.2.14",
+ "@angular/forms": "8.2.14",
"@angular/material": "7.2.2",
- "@angular/platform-browser": "7.1.4",
- "@angular/platform-browser-dynamic": "7.1.4",
- "@angular/platform-server": "7.1.4",
- "@angular/router": "7.1.4",
+ "@angular/platform-browser": "8.2.14",
+ "@angular/platform-browser-dynamic": "8.2.14",
+ "@angular/platform-server": "8.2.14",
+ "@angular/router": "8.2.14",
"@harmowatch/ngx-redux-core": "0.2.2",
- "@nicky-lenaers/ngx-scroll-to": "^0.6.1",
+ "@nicky-lenaers/ngx-scroll-to": "3.0.1",
"@turf/turf": "5.1.6",
"@types/lodash": "4.14.121",
"angular-svg-icon": "5.0.0",
- "angular-tree-component": "8.4.0",
+ "angular-tree-component": "8.5.2",
"angular2-datatable": "0.6.0",
"angular2-multiselect-dropdown": "2.5.0",
"angular5-csv": "^0.2.10",
@@ -60,11 +59,13 @@
"moment": "^2.24.0",
"ng-multiselect-dropdown": "0.1.3",
"ng2-bootstrap-modal": "1.0.1",
+ "ng2-file-upload": "^1.4.0",
"ngx-bootstrap": "^2.0.2",
"ngx-contextmenu": "^5.1.1",
"ngx-datatable": "1.0.3",
"ngx-moment": "^2.0.0-rc.0",
"ngx-tooltip": "0.0.9",
+ "node-sass": "^4.13.0",
"npm": "^6.4.1",
"redux": "4.0.1",
"redux-observable": "^1.0.0",
@@ -72,14 +73,14 @@
"rxjs-compat": "^6.3.3",
"slnodejs": "^2.1.124",
"tslib": "1.9.x",
- "zone.js": "^0.8.26"
+ "zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-builders/jest": "7.3.1",
- "@angular-devkit/build-angular": "0.13.1",
- "@angular/cli": "7.3.1",
- "@angular/compiler-cli": "7.2.5",
- "@angular/language-service": "7.2.5",
+ "@angular-devkit/build-angular": "~0.803.21",
+ "@angular/cli": "8.3.21",
+ "@angular/compiler-cli": "8.2.14",
+ "@angular/language-service": "8.2.14",
"@babel/preset-env": "7.3.1",
"@bahmutov/add-typescript-to-cypress": "2.0.0",
"@types/chai": "4.1.7",
@@ -88,8 +89,10 @@
"@types/node": "^10.12.18",
"angular2-template-loader": "0.6.2",
"babel-jest": "24.1.0",
- "codelyzer": "4.5.0",
+ "blueimp-file-upload": "^10.7.0",
+ "codelyzer": "^5.0.1",
"cypress": "3.6.1",
+ "cypress-file-upload": "^3.5.3",
"hammerjs": "2.0.8",
"husky": "^1.3.1",
"istanbul-reports": "2.1.1",
@@ -99,14 +102,15 @@
"jest-sonar-reporter": "2.0.0",
"ngx-wallaby-jest": "0.0.1",
"npm-run-all": "^4.1.5",
- "onap-ui-angular": "5.2.4",
+ "onap-ui-angular": "5.2.7",
"onap-ui-common": "1.0.105",
"prettier": "1.16.4",
"pretty-quick": "^1.10.0",
+ "redux-observable-es6-compat": "^1.2.1",
"ts-mockito": "2.3.1",
"ts-node": "~5.0.1",
"tslint": "^5.12.0",
- "typescript": "3.1.6",
+ "typescript": "3.5.3",
"wallaby-webpack": "^3.9.11",
"webpack": "^4.28.2"
},
diff --git a/vid-webpack-master/pom.xml b/vid-webpack-master/pom.xml
index f84a485eb..bfca33ed7 100644
--- a/vid-webpack-master/pom.xml
+++ b/vid-webpack-master/pom.xml
@@ -9,7 +9,7 @@
inherit from a parent maven module. -->
<groupId>org.onap.vid</groupId>
<artifactId>vid-webpack-master</artifactId>
- <version>6.0.0-SNAPSHOT</version>
+ <version>6.0.3-SNAPSHOT</version>
<packaging>war</packaging>
<name>VID UI</name>
<description>VID UI</description>
@@ -135,8 +135,8 @@
</goals>
<configuration>
<!-- See https://nodejs.org/en/download/ for latest node and npm (lts) versions -->
- <nodeVersion>v8.9.4</nodeVersion>
- <npmVersion>5.6.0</npmVersion>
+ <nodeVersion>v10.15.3</nodeVersion>
+ <npmVersion>6.9.0</npmVersion>
</configuration>
</execution>
diff --git a/vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts b/vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts
index 25d170320..7e59f1741 100644
--- a/vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts
+++ b/vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts
@@ -36,6 +36,8 @@ import {ComponentInfoComponent} from './service-planning/component-info/componen
import {ComponentInfoService} from "./service-planning/component-info/component-info.service";
import {NetworkStepService} from "./service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service";
import {VpnStepService} from "./service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service";
+import {ModalModule} from "onap-ui-angular/dist/modals/modal.module";
+import {ModalService} from "../shared/components/customModal/services/modal.service";
@NgModule({
@@ -48,7 +50,8 @@ import {VpnStepService} from "./service-planning/objectsToTree/models/vrf/vrfMod
CommonModule,
SdcUiComponentsModule,
SharedModule.forRoot(),
- FeatureFlagModule.forRoot()],
+ FeatureFlagModule.forRoot(),
+ ModalModule],
providers: [
AaiService,
ObjectToTreeService,
@@ -64,7 +67,7 @@ import {VpnStepService} from "./service-planning/objectsToTree/models/vrf/vrfMod
DynamicInputsService,
InstanceTreeGenerator,
SharedTreeService,
- SdcUiServices.ModalService,
+ ModalService,
SdcUiServices.LoaderService,
CreateDynamicComponentService,
ComponentInfoService,
@@ -83,7 +86,7 @@ import {VpnStepService} from "./service-planning/objectsToTree/models/vrf/vrfMod
SearchComponent,
ComponentInfoComponent],
entryComponents: [DuplicateVnfComponent],
- exports: [AvailableModelsTreeComponent, DrawingBoardTreeComponent, DrawingBoardHeader, TreeNodeHeaderPropertiesComponent, SearchComponent]
+ exports: [AvailableModelsTreeComponent, DrawingBoardTreeComponent, DrawingBoardHeader, TreeNodeHeaderPropertiesComponent, SearchComponent, DuplicateVnfComponent]
})
export class DrawingBoardModule {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.html b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.html
index 7864808fc..d309f2107 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.html
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.html
@@ -29,10 +29,10 @@
<span [attr.data-tests-id]="'numberButton'">{{node.data.getNodeCount(node, this.serviceModelId)}}</span>
</span>
<span class="icon-v" *ngIf="node?.data?.showNodeIcons(node, serviceModelId)?.vIcon">
- <svg-icon
+ <custom-icon
[mode]="'secondary'"
[name]="'maximum'">
- </svg-icon>
+ </custom-icon>
</span>
<span class="icon-plus" *ngIf="_store.getState().service.serviceInstance[serviceModelId].action !== 'Delete' && node?.data?.showNodeIcons(node, serviceModelId)?.addIcon">
<span tooltip="Add" [attr.data-tests-id]="'node-'+node.data.name+'-add-btn'" (click)="onClickAdd(node, serviceModelId)">
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts
index 13147b7e5..2e04f53bb 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts
@@ -88,7 +88,7 @@ export class AvailableModelsTreeComponent {
@Output()
highlightInstances: EventEmitter<number> = new EventEmitter<number>();
- @ViewChild('tree') tree: TreeComponent;
+ @ViewChild('tree', {static: false}) tree: TreeComponent;
nodes = [];
service = {name: ''};
@@ -134,7 +134,13 @@ export class AvailableModelsTreeComponent {
this.highlightInstances.emit(node.data.modelUniqueId);
if (FeatureFlagsService.getFlagState(Features.FLAG_1906_COMPONENT_INFO, this.store)) {
const serviceHierarchy = this._store.getState().service.serviceHierarchy[this.serviceModelId];
- const model = node.data.getModel(node.data.name, node.data, serviceHierarchy);
+
+ const instanceModel = this._sharedTreeService.modelByIdentifiers(
+ serviceHierarchy, node.data.modelTypeName,
+ this._sharedTreeService.modelUniqueNameOrId(node.data), node.data.name
+ );
+
+ const model = node.data.getModel(instanceModel);
const modelInfoItems = node.data.getInfo(model, null);
const componentInfoModel :ComponentInfoModel = this._sharedTreeService.addGeneralInfoItems(modelInfoItems, node.data.componentInfoType, model, null);
ComponentInfoService.triggerComponentInfoChange.next(componentInfoModel);
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.spec.ts
index 4abc20324..6a101d3d2 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.spec.ts
@@ -14,6 +14,7 @@ describe('Available Models Tree Service', () => {
let injector;
let service: AvailableModelsTreeService;
let httpMock: HttpTestingController;
+ let sharedTreeService: SharedTreeService;
beforeAll(done => (async () => {
TestBed.configureTestingModule({
@@ -27,6 +28,7 @@ describe('Available Models Tree Service', () => {
injector = getTestBed();
service = injector.get(AvailableModelsTreeService);
httpMock = injector.get(HttpTestingController);
+ sharedTreeService = injector.get(SharedTreeService);
})().then(done).catch(done.fail));
@@ -47,7 +49,6 @@ describe('Available Models Tree Service', () => {
describe('#shouldOpenModalDialogOnAddInstance', () => {
- let serviceHierarchy = getServiceServiceHierarchy();
test('should open popup on add instance', () => {
// add vnf should return true
@@ -99,6 +100,8 @@ describe('Available Models Tree Service', () => {
"isEcompGeneratedNaming": false,
"typeName": "VRF",
"componentInfoType": "VRF",
+ "data": {
+ },
"getModel" : ()=>{
return {
min : 1
@@ -108,6 +111,9 @@ describe('Available Models Tree Service', () => {
const serviceStore = {
+ "serviceHierarchy": {
+ "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": {}
+ },
"serviceInstance": {
"4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": {
"action": "Create",
@@ -158,7 +164,7 @@ describe('Available Models Tree Service', () => {
"physicalName": "sriovnet0",
"instanceId": "46fcb25a-e7ba-4d96-99ba-3bb6eae6aba7",
"serviceName": "LPPVPN",
- "serv§iceUUID": "VPN1271",
+ "serviceUUID": "VPN1271",
"tenantName": "ecomp_ispt",
"lcpCloudRegionId": "USA,EMEA",
"modelInfo": {
@@ -221,6 +227,8 @@ describe('Available Models Tree Service', () => {
}
};
+ spyOn(sharedTreeService, 'modelByIdentifiers').and.returnValue({});
+
const serviceModelId :string = '4117a0b6-e234-467d-b5b9-fe2f68c8b0fc';
let result: boolean = service.shouldOpenVRFModal(nodes, serviceModelId, serviceStore);
@@ -235,344 +243,4 @@ describe('Available Models Tree Service', () => {
});
- function getServiceServiceHierarchy() {
- return JSON.parse(JSON.stringify(
- {
- '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': 'true',
- 'instantiationType': 'Macro',
- 'inputs': {}
- },
- 'vnfs': {
- 'VF_vGeraldine 0': {
- 'uuid': 'd6557200-ecf2-4641-8094-5393ae3aae60',
- 'invariantUuid': '4160458e-f648-4b30-a176-43881ffffe9e',
- 'description': 'VSP_vGeraldine',
- 'name': 'VF_vGeraldine',
- 'version': '2.0',
- 'customizationUuid': '91415b44-753d-494c-926a-456a9172bbb9',
- 'inputs': {},
- 'commands': {},
- 'properties': {
- 'max_instances': '3',
- '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': 'false',
- '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_vGeraldine 0',
- 'vfModules': {
- 'vf_vgeraldine0..VfVgeraldine..vflorence_vlc..module-1': {
- 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
- 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
- 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
- 'description': null,
- 'name': 'VfVgeraldine..vflorence_vlc..module-1',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..vflorence_vlc..module-1',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vgeraldine0..VfVgeraldine..vflorence_gpb..module-2': {
- 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
- 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
- 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
- 'description': null,
- 'name': 'VfVgeraldine..vflorence_gpb..module-2',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..vflorence_gpb..module-2',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVgeraldine..base_vflorence..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
- 'commands': {},
- 'volumeGroupAllowed': true
- }
- },
- 'volumeGroups': {
- 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVgeraldine..base_vflorence..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}
- }
- }
- }
- },
- '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'
- }
- },
- '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_vgeraldine0..VfVgeraldine..vflorence_vlc..module-1': {
- 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
- 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
- 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
- 'description': null,
- 'name': 'VfVgeraldine..vflorence_vlc..module-1',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..vflorence_vlc..module-1',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vgeraldine0..VfVgeraldine..vflorence_gpb..module-2': {
- 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
- 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
- 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
- 'description': null,
- 'name': 'VfVgeraldine..vflorence_gpb..module-2',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..vflorence_gpb..module-2',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVgeraldine..base_vflorence..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
- 'commands': {},
- 'volumeGroupAllowed': true
- }
- },
- 'volumeGroups': {
- 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVgeraldine..base_vflorence..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}
- }
- },
- 'pnfs': {}
- }
- }
- ));
- }
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.ts
index c9a89cf6f..56d708bb9 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.service.ts
@@ -77,7 +77,13 @@ export class AvailableModelsTreeService {
shouldOpenVRFModal(nodes, serviceModelId: string , service) {
for(const node of nodes){
if(node.type === 'VRF' && service.serviceInstance[serviceModelId].existingVRFCounterMap && !service.serviceInstance[serviceModelId].existingVRFCounterMap[node.modelUniqueId]){
- const vrfModel : VrfModel = node.getModel(node.name, node, service.serviceInstance[serviceModelId]);
+ const serviceHierarchy = service.serviceHierarchy[serviceModelId];
+
+ const instanceModel = this._sharedTreeService.modelByIdentifiers(
+ serviceHierarchy, node.modelTypeName, node.modelCustomizationId, node.name
+ );
+
+ const vrfModel : VrfModel = node.getModel(instanceModel);
const vrfCounter : number = service.serviceInstance[serviceModelId].existingVRFCounterMap[node.modelUniqueId];
console.log('vrfCounter', vrfCounter);
if(vrfModel.min > 0 && (_.isNil(vrfCounter) || vrfCounter === 0)){
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.html b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.html
index 7a18bce89..2c046785d 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.html
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.html
@@ -2,12 +2,12 @@
<div class="left-header">
<span class="vid-logo-small"></span>
<span class="icon-back">
- <svg-icon
+ <custom-icon
(click)="closePage()"
[testId]="'backBtn'"
[size]="'large'"
[name]="'navigation-arrow-back'">
- </svg-icon>
+ </custom-icon>
</span>
<div class="header-col middleDetails" style="padding-top: 7px;padding-left: 13px;line-height: 100%;" *ngIf="isServiceFailed">
@@ -59,12 +59,12 @@
<ng-template *ngIf="mode !== 'CREATE'" contextMenuItem
(execute)="drawingBoardHeaderService.showAuditInfo(serviceModelId)">
<div [attr.data-tests-id]="'context-menu-header-audit-item'" style="float: left;margin-top: 8px;">
- <svg-icon
+ <custom-icon
[ngClass]="'eye-o'"
class="eye-o"
[size]="'small'"
[name]="'eye-o'">
- </svg-icon></div>
+ </custom-icon></div>
<div style="padding-left: 12px;">Show Audit Info</div>
</ng-template>
<ng-template *ngIf="drawingBoardHeaderService?.showResumeService(serviceModelId)" contextMenuItem
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.ts
index 8228f9531..395b5f3bf 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.component.ts
@@ -80,7 +80,7 @@ export class DrawingBoardHeader {
}
- @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
+ @ViewChild(ContextMenuComponent, {static: false}) public contextMenu: ContextMenuComponent;
editViewEdit(): void {
window.parent.location.assign(this._drawingBoardHeaderService.generateOldViewEditPath());
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.service.spec.ts
index 7e28b2a65..8ecb3963a 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.service.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-header/drawing-board-header.service.spec.ts
@@ -26,6 +26,7 @@ class MockAppStore<T>{
}
}
+class MockDragAndDropService<T> {}
describe('Generate path to old View/Edit ', () => {
let injector;
let service: DrawingBoardHeaderService;
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/dragAndDrop/dragAndDrop.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/dragAndDrop/dragAndDrop.service.ts
index 96e50178b..2daaaaf71 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/dragAndDrop/dragAndDrop.service.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/dragAndDrop/dragAndDrop.service.ts
@@ -1,9 +1,7 @@
import {Injectable} from "@angular/core";
import {NgRedux} from "@angular-redux/store";
import {AppState} from "../../../../shared/store/reducers";
-import {DragAndDropModel} from "./dragAndDrop.model";
import {FeatureFlagsService, Features} from "../../../../shared/services/featureFlag/feature-flags.service";
-import * as _ from 'lodash';
@Injectable()
export class DragAndDropService {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.component.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.component.ts
index 4ad1b06cf..1a42db403 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.component.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.component.ts
@@ -13,7 +13,6 @@ import {DrawingBoardTreeService, TreeNodeContextMenuModel} from "./drawing-board
import {NetworkPopupService} from "../../../shared/components/genericFormPopup/genericFormServices/network/network.popup.service";
import {VfModulePopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popup.service";
import {VnfPopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service";
-import {SdcUiServices} from "onap-ui-angular";
import {HighlightPipe} from "../../../shared/pipes/highlight/highlight-filter.pipe";
import {VnfGroupPopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service";
import {ObjectToInstanceTreeService} from "../objectsToTree/objectToInstanceTree/objectToInstanceTree.service";
@@ -29,6 +28,7 @@ import {ComponentInfoModel} from "../component-info/component-info-model";
import {ObjectToModelTreeService} from "../objectsToTree/objectToModelTree/objectToModelTree.service";
import {DrawingBoardModes} from "../drawing-board.modes";
import {ServiceInstanceActions} from "../../../shared/models/serviceInstanceActions";
+import {ModalService} from "../../../shared/components/customModal/services/modal.service";
@Component({
selector: 'drawing-board-tree',
@@ -52,7 +52,7 @@ export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
static triggerDeleteActionService: Subject<string> = new Subject<string>();
static triggerUndoDeleteActionService: Subject<string> = new Subject<string>();
static triggerreCalculateIsDirty: Subject<string> = new Subject<string>();
- @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
+ @ViewChild(ContextMenuComponent, {static: false}) public contextMenu: ContextMenuComponent;
constructor(private _contextMenuService: ContextMenuService,
private _iframeService: IframeService,
@@ -60,7 +60,7 @@ export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
private store: NgRedux<AppState>,
private route: ActivatedRoute,
private _duplicateService: DuplicateService,
- private modalService: SdcUiServices.ModalService,
+ private modalService: ModalService,
private _drawingBoardTreeService: DrawingBoardTreeService,
private _networkPopupService: NetworkPopupService,
private _vfModulePopuopService: VfModulePopupService,
@@ -120,7 +120,7 @@ export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
@Output()
highlightNode: EventEmitter<number> = new EventEmitter<number>();
- @ViewChild('tree') tree: TreeComponent;
+ @ViewChild('tree', {static: false}) tree: TreeComponent;
missingDataTooltip: string = Constants.Error.MISSING_VNF_DETAILS;
currentNode: ITreeNode = null;
flags: any;
@@ -228,7 +228,13 @@ export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
this.highlightNode.emit(node.data.modelUniqueId);
if (FeatureFlagsService.getFlagState(Features.FLAG_1906_COMPONENT_INFO, this.store)) {
const serviceHierarchy = this._store.getState().service.serviceHierarchy[this.serviceModelId];
- const model = node.data.getModel(node.data.modelName, node.data, serviceHierarchy);
+
+ const instanceModel = this._sharedTreeService.modelByIdentifiers(
+ serviceHierarchy, node.data.modelTypeName,
+ this._sharedTreeService.modelUniqueNameOrId(node.data), node.data.modelName
+ );
+
+ const model = node.data.getModel(instanceModel);
const modelInfoItems = node.data.getInfo(model, node.data);
const componentInfoModel: ComponentInfoModel = this._sharedTreeService.addGeneralInfoItems(modelInfoItems, node.data.componentInfoType, model, node.data);
ComponentInfoService.triggerComponentInfoChange.next(componentInfoModel);
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.html b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.html
index ea2362949..610986279 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.html
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.html
@@ -41,12 +41,12 @@
<div><span title="{{node.data.type}}"
[attr.data-tests-id]="'node-type-indicator'">{{node?.data?.typeName}}</span></div>
<div *ngIf="isLinkedInstance(node?.data)">
- <svg-icon
+ <custom-icon
[ngClass]="'link'"
class="icon-link"
[size]="'small'"
[name]="'link'">
- </svg-icon>
+ </custom-icon>
</div>
</div>
<div class="model-info" [ngClass]="{'rightBorder' : pageMode === 'VIEW'}">
@@ -78,12 +78,12 @@
[enabled]="isEnabled(currentNode, serviceModelId, contextMenuOption.methodName)">
<div [attr.data-tests-id]="contextMenuOption.dataTestId">
<div style="float: left;margin-top: 3px;">
- <svg-icon
+ <custom-icon
class="icon-edit"
[ngClass]="contextMenuOption.iconClass"
[size]="'small'"
[name]="contextMenuOption.iconClass">
- </svg-icon></div>
+ </custom-icon></div>
<div style="padding-left: 25px;">{{getcontextMenuOptionLabel(contextMenuOption)}}</div>
</div>
</ng-template>
@@ -95,12 +95,12 @@
tooltipPlacement="left"
[attr.data-tests-id]="'node-'+ node.data.modelId + '-' + node.data.modelName +'-alert-icon'"
class="icon-alert">
- <svg-icon
+ <custom-icon
[mode]="'warning'"
[testId]="'icon-alert'"
[size]="'medium'"
[name]="'alert-triangle-o'">
- </svg-icon>
+ </custom-icon>
</span>
</div>
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.spec.ts
index 6423e8ad1..2f8ece283 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.spec.ts
@@ -2,12 +2,12 @@ import {DuplicateService} from './duplicate.service';
import {LogService} from '../../../shared/utils/log/log.service';
import {NgRedux} from '@angular-redux/store';
import {ITreeNode} from "angular-tree-component/dist/defs/api";
-import {SdcUiServices} from "onap-ui-angular";
-import {IModalConfig} from 'onap-ui-angular/dist/components/common';
import {AppState} from "../../../shared/store/reducers";
import {getTestBed, TestBed} from "@angular/core/testing";
import {FeatureFlagsService} from "../../../shared/services/featureFlag/feature-flags.service";
import {SharedTreeService} from "../objectsToTree/shared.tree.service";
+import {IModalConfig} from "../../../shared/components/customModal/models/modal.model";
+import {ModalService} from "../../../shared/components/customModal/services/modal.service";
class MockAppStore<T> {
getState(){
@@ -73,7 +73,7 @@ describe('Drawing board tree service', () => {
LogService,
{provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
{provide: NgRedux, useClass: MockAppStore},
- {provide: SdcUiServices.ModalService, useClass: MockModalService}
+ {provide: ModalService, useClass: MockModalService}
]
});
await TestBed.compileComponents();
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.ts
index c8338cbfc..c3a5a28c0 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/duplicate/duplicate.service.ts
@@ -8,19 +8,20 @@ import {VfModuleMap} from "../../../shared/models/vfModulesMap";
import * as _ from "lodash";
import {DefaultDataGeneratorService} from "../../../shared/services/defaultDataServiceGenerator/default.data.generator.service";
import {TypeNodeInformation} from "../typeNodeInformation.model";
-import {SdcUiCommon, SdcUiServices} from "onap-ui-angular";
+import {SdcUiCommon} from "onap-ui-angular";
import {changeInstanceCounter, duplicateBulkInstances} from "../../../shared/storeUtil/utils/general/general.actions";
import {IModalConfig} from "onap-ui-angular/dist/modals/models/modal-config";
import {FeatureFlagsService} from "../../../shared/services/featureFlag/feature-flags.service";
import {Utils} from "../../../shared/utils/utils";
import {SharedTreeService} from "../objectsToTree/shared.tree.service";
+import {ModalService} from "../../../shared/components/customModal/services/modal.service";
@Injectable()
export class DuplicateService {
constructor(private _logService: LogService,
private sharedTreeService : SharedTreeService,
- private _store: NgRedux<AppState>, modalService: SdcUiServices.ModalService) {
+ private _store: NgRedux<AppState>, modalService: ModalService) {
this.modalService = modalService;
}
@@ -35,7 +36,7 @@ export class DuplicateService {
maxNumberOfDuplicate: number = 0;
storeKey: string = null;
padding = '0000';
- modalService: SdcUiServices.ModalService;
+ modalService: ModalService;
store: NgRedux<AppState>;
existingNames: { [key: string]: any };
currentNode: ITreeNode = null;
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/basic.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/basic.model.info.ts
index 5ae64376a..eae534c08 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/basic.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/basic.model.info.ts
@@ -1,6 +1,6 @@
import {ITreeNode} from "angular-tree-component/dist/defs/api";
import {AvailableNodeIcons} from "../../available-models-tree/available-models-tree.service";
-import {ComponentInfoModel, ComponentInfoType} from "../../component-info/component-info-model";
+import {ComponentInfoType} from "../../component-info/component-info-model";
import {ModelInformationItem} from "../../../../shared/components/model-information/model-information.component";
export interface ILevelNodeInfo {
@@ -44,12 +44,11 @@ export interface ILevelNodeInfo {
updatePosition(node, that, instanceId, parentStoreKey?) : void;
/***********************************************************
- * return object instance
- * @param modelId - The model id
- * @param serviceHierarchy - The serviceHierarchy store
- * @param instance - existing instance details
+ * return a NodeModel object instance
+ * @param instanceModel - The model of the instance (usually extracted from
+ * serviceHierarchy store)
************************************************************/
- getModel(modelId: string, instance: any, serviceHierarchy): any;
+ getModel(instanceModel: any): any;
/***********************************************************
* return dynamic inputs of current model
@@ -63,8 +62,9 @@ export interface ILevelNodeInfo {
* @param model - The model of current object
* @param parentModel
* @param storeKey - instance storeKey if exist (for duplicate)
+ * @param serviceModelId
************************************************************/
- createInstanceTreeNode(instance: any, model: any, parentModel: any, storeKey: string): any
+ createInstanceTreeNode(instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any
/***********************************************************
* return if instance has some missing data
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.spec.ts
index f8ce819f7..2f143fa37 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.spec.ts
@@ -24,7 +24,7 @@ describe('Collection Resource Model Info', () => {
let collectionResourceModel: CollectionResourceModelInfo;
let _sharedTreeService : SharedTreeService;
- beforeEach(() => {
+ beforeEach(done => (async () => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, NgReduxTestingModule],
providers: [
@@ -38,16 +38,17 @@ describe('Collection Resource Model Info', () => {
FeatureFlagsService,
ComponentInfoService,
IframeService]
- }).compileComponents();
-
+ });
+ await TestBed.compileComponents();
injector = getTestBed();
_store = injector.get(NgRedux);
_componentInfoService = injector.get(ComponentInfoService);
+ _sharedTreeService = injector.get(SharedTreeService);
collectionResourceModel = new CollectionResourceModelInfo(_store, _sharedTreeService);
- });
+ })().then(done).catch(done.fail));
test('collection resource should be defined', () => {
expect(collectionResourceModel).toBeDefined();
@@ -82,10 +83,7 @@ describe('Collection Resource Model Info', () => {
});
test('getModel should return collectionResource model', () => {
- let model: CollectionResourceModel = collectionResourceModel.getModel('CR_sanity 0', <any>{
- originalName : 'CR_sanity 0'
- }, getServiceHierarchy());
- expect(model.type).toEqual('CR');
+ expect(collectionResourceModel.getModel({})).toBeInstanceOf(CollectionResourceModel);
});
test('cr getMenuAction: delete', ()=>{
@@ -100,1108 +98,4 @@ describe('Collection Resource Model Info', () => {
expect(result['delete']['method']).toHaveBeenCalledWith(node, serviceModelId);
});
- function getServiceHierarchy(){
- return {
- "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": "Macro",
- "inputs": {
- "2017488_pasqualevpe0_ASN": {
- "type": "string",
- "description": "AV/PE",
- "entry_schema": null,
- "inputProperties": null,
- "constraints": [],
- "required": true,
- "default": "AV_vPE"
- }
- },
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other"
- }
- },
- "collectionResources": {
- "CR_sanity 0": {
- "uuid": "3467f91f-1a2a-4013-a5ed-8ad99d4e06ad",
- "invariantUuid": "d0060da6-82b8-4ca0-9758-5eb2b111b926",
- "description": "CR_sanity",
- "name": "CR_sanity",
- "version": "1.0",
- "customizationUuid": "7160c618-9314-4c09-8717-b77f3d29d946",
- "inputs": {},
- "commands": {},
- "properties": {
- "cr_sanity..Fixed..0_quantity": "10",
- "cr_sanity..NetworkCollection..0_network_collection_function": "ABCD",
- "ecomp_generated_naming": "false",
- "cr_sanity..NetworkCollection..0_network_collection_description": "ABCD"
- },
- "type": "CR",
- "category": "Network L2-3",
- "subcategory": "Infrastructure",
- "resourceVendor": "ATT",
- "resourceVendorRelease": "2018.06",
- "resourceVendorModelNumber": "",
- "customizationUUID": "7160c618-9314-4c09-8717-b77f3d29d946",
- "networksCollection": {
- "cr_sanity..NetworkCollection..0": {
- "uuid": "445d7fa8-3e59-4606-bd76-30ba5fc677d3",
- "invariantUuid": "9dc623b8-0ae8-47ad-a791-a21b8d8e94a8",
- "name": "cr_sanity..NetworkCollection..0",
- "version": "1",
- "networkCollectionProperties": {
- "networkCollectionFunction": "ABCD",
- "networkCollectionDescription": "ABCD"
- }
- }
- }
- }
- },
- "vnfs": {
- "2017-388_PASQUALE-vPE 1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-388_PASQUALE-vPE 0": {
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-488_PASQUALE-vPE 0": {
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "vfcInstanceGroups": {}
- }
- },
- "networks": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "pnfs": {}
- }
- }
-
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.ts
index 564e04bc2..d144837a9 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/collectionResource/collectionResource.model.info.ts
@@ -28,17 +28,15 @@ export class CollectionResourceModelInfo implements ILevelNodeInfo{
updateDynamicInputsDataFromModel = (currentModel): any => [];
- getModel = (collectionResourceModelId: string, instance: CollectionResourceInstance, serviceHierarchy): CollectionResourceModel => {
- const originalModelName = instance.originalName ? instance.originalName : collectionResourceModelId;
- return new CollectionResourceModel(serviceHierarchy[this.name][originalModelName]);
+ getModel = (instanceModel): CollectionResourceModel => {
+ return new CollectionResourceModel(instanceModel);
};
-
- createInstanceTreeNode = (instance: CollectionResourceInstance, model: CollectionResourceModel, parentModel, storeKey: string): CollectionResourceTreeNode => {
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
let node = new CollectionResourceTreeNode(instance, model, storeKey);
node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
node.typeName = this.typeName;
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
return node;
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.spec.ts
index 6b67de6aa..aa69b5362 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.spec.ts
@@ -1,11 +1,12 @@
import {HttpClientTestingModule} from "@angular/common/http/testing";
-import {TestBed} from "@angular/core/testing";
+import {getTestBed, TestBed} from "@angular/core/testing";
import {MockNgRedux, NgReduxTestingModule} from "@angular-redux/store/testing";
import {DynamicInputsService} from "../../dynamicInputs.service";
import {ConfigurationModelInfo} from "./configuration.model.info";
import {SharedTreeService} from "../../shared.tree.service";
describe('Vnf Model Info', () => {
+ let injector;
let _dynamicInputsService : DynamicInputsService;
let _sharedTreeService : SharedTreeService;
@@ -18,6 +19,9 @@ describe('Vnf Model Info', () => {
DynamicInputsService]
});
await TestBed.compileComponents();
+
+ injector = getTestBed();
+ _sharedTreeService = injector.get(SharedTreeService);
})().then(done).catch(done.fail));
test('ConfigurationModelInfo should be defined', () => {
@@ -50,1451 +54,8 @@ describe('Vnf Model Info', () => {
test('getModel should return Configuration model', () => {
let configurationModelInfo: ConfigurationModelInfo = new ConfigurationModelInfo(_dynamicInputsService, _sharedTreeService);
- let model = configurationModelInfo.getModel('2017-388_PASQUALE-vPE 1__configuration', getServiceHierarchy());
- expect(model.uuid).toEqual('0903e1c0-8e03-4936-b5c2-260653b96413');
+ let model = configurationModelInfo.getModel({ uuid: 'foo' });
+ expect(model.uuid).toEqual('foo');
});
-
- function getServiceHierarchy(){
- return {
- "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": "Macro",
- "inputs": {
- "2017488_pasqualevpe0_ASN": {
- "type": "string",
- "description": "AV/PE",
- "entry_schema": null,
- "inputProperties": null,
- "constraints": [],
- "required": true,
- "default": "AV_vPE"
- }
- },
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other"
- }
- },
- "vnfs": {
- "2017-388_PASQUALE-vPE 1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-388_PASQUALE-vPE 0": {
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-488_PASQUALE-vPE 0": {
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "vfcInstanceGroups": {}
- }
- },
- "networks": {
- "2017-388_PASQUALE-vPE 1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- }
- },
- "collectionResources": {},
- "configurations": {
- "2017-388_PASQUALE-vPE 1__configuration": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- }
-
- },
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "pnfs": {}
- }
- }
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.ts
index 0d1a9aade..9845fb69b 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/configuration/configuration.model.info.ts
@@ -26,20 +26,16 @@ export class ConfigurationModelInfo implements ILevelNodeInfo{
getType = () : string => "Configuration";
/***********************************************************
- * return configuration model
- * @param configurationModelId - current Model id
- * @param serviceHierarchy - serviceHierarchy
+ * @param instanceModel - The model of the instance (usually extracted from serviceHierarchy store)
************************************************************/
- getModel = (configurationModelId : string, serviceHierarchy) : any =>{
- if(!_.isNil(serviceHierarchy)){
- if(!_.isNil(serviceHierarchy[this.name]) && !_.isNil(serviceHierarchy[this.name][configurationModelId])){
- return serviceHierarchy[this.name][configurationModelId];
- }
+ getModel = (instanceModel: any) : any =>{
+ if (!_.isNil(instanceModel)) {
+ return instanceModel;
}
return {};
};
- createInstanceTreeNode(instance: any, model: any, storeKey: string): any {return null;}
+ createInstanceTreeNode(instance: any, model: any, storeKey: string, serviceModelId: string): any {return null;}
childNames: string[];
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.spec.ts
index 6c8382808..951145870 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.spec.ts
@@ -69,7 +69,7 @@ describe('NCF Model Info', () => {
typeName: "NCF"
};
- const ncfTreeNode: NcfTreeNode = ncfModel.createInstanceTreeNode(instance, {}, parentModel, "6b3536cf-3a12-457f-abb5-fa2203e0d923");
+ const ncfTreeNode: NcfTreeNode = ncfModel.createInstanceTreeNode(instance, {}, parentModel, "6b3536cf-3a12-457f-abb5-fa2203e0d923", "dd182d7d-6949-4b90-b3cc-5befe400742e");
expect(ncfTreeNode).toMatchObject(expected);
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.ts
index 4db41c0d1..650d975c9 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/ncf/ncf.model.info.ts
@@ -32,12 +32,12 @@ export class NcfModelInfo implements ILevelNodeInfo {
updateDynamicInputsDataFromModel = (currentModel): any => [];
- getModel = (modelId: string, instance: any, serviceHierarchy): any => {
+ getModel = (instanceModel: any): any => {
return new Level1Model();
};
- createInstanceTreeNode = (instance: Level1Instance, model: Level1Model, parentModel, storeKey: string): NcfTreeNode => {
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
let modelVersion: string = null;
if (parentModel.networksCollection && instance.originalName) {
const ncfRealModel: NcfModelInterface = parentModel.networksCollection[instance.originalName];
@@ -47,7 +47,7 @@ export class NcfModelInfo implements ILevelNodeInfo {
}
let node = new NcfTreeNode(instance, model, storeKey, modelVersion);
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.typeName = this.typeName;
return node;
};
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.spec.ts
index f26ab0cf1..bb8e88288 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.spec.ts
@@ -13,6 +13,7 @@ import {IframeService} from "../../../../../shared/utils/iframe.service";
import {DuplicateService} from "../../../duplicate/duplicate.service";
import {ModelInformationItem} from "../../../../../shared/components/model-information/model-information.component";
import {FeatureFlagsService} from "../../../../../shared/services/featureFlag/feature-flags.service";
+import {NetworkModel} from "../../../../../shared/models/networkModel";
class MockAppStore<T> {
getState() {
@@ -146,8 +147,7 @@ describe('Network Model Info', () => {
});
test('getModel should return Network model', () => {
- let model = networkModel.getModel('2017-388_PASQUALE-vPE 1_1', <any>{}, getServiceHierarchy());
- expect(model.type).toEqual('VL');
+ expect(networkModel.getModel({})).toBeInstanceOf(NetworkModel);
});
test('showNodeIcons should return false if reachLimit of max', () => {
@@ -387,1259 +387,4 @@ describe('Network Model Info', () => {
};
}
-
- function getServiceHierarchy() {
- return {
- "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": "Macro",
- "inputs": {
- "2017488_pasqualevpe0_ASN": {
- "type": "string",
- "description": "AV/PE",
- "entry_schema": null,
- "inputProperties": null,
- "constraints": [],
- "required": true,
- "default": "AV_vPE"
- }
- },
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other"
- }
- },
- "vnfs": {
- "2017-388_PASQUALE-vPE 1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-388_PASQUALE-vPE 0": {
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-488_PASQUALE-vPE 0": {
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "vfcInstanceGroups": {}
- }
- },
- "networks": {
- "2017-388_PASQUALE-vPE 1_1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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": "VL",
- "modelCustomizationName": "2017-388_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- }
- },
- "collectionResources": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "pnfs": {}
- }
- }
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.ts
index 486ac93c0..ce1af451c 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/network/network.model.info.ts
@@ -1,13 +1,15 @@
import {DynamicInputsService} from "../../dynamicInputs.service";
import {ILevelNodeInfo} from "../basic.model.info";
-import {NetworkInstance} from "../../../../../shared/models/networkInstance";
import {NetworkModel} from "../../../../../shared/models/networkModel";
import {NetworkTreeNode} from "../../../../../shared/models/networkTreeNode";
import {SharedTreeService} from "../../shared.tree.service";
import {InputType} from "../../../../../shared/models/inputTypes";
import {NgRedux} from "@angular-redux/store";
import {AppState} from "../../../../../shared/store/reducers";
-import {GenericFormPopupComponent, PopupType} from "../../../../../shared/components/genericFormPopup/generic-form-popup.component";
+import {
+ GenericFormPopupComponent,
+ PopupType
+} from "../../../../../shared/components/genericFormPopup/generic-form-popup.component";
import {DialogService} from "ng2-bootstrap-modal";
import {NetworkPopupService} from "../../../../../shared/components/genericFormPopup/genericFormServices/network/network.popup.service";
import * as _ from "lodash";
@@ -16,14 +18,18 @@ import {AvailableNodeIcons} from "../../../available-models-tree/available-model
import {DuplicateVnfComponent} from "../../../duplicate/duplicate-vnf.component";
import {changeInstanceCounter, removeInstance} from "../../../../../shared/storeUtil/utils/general/general.actions";
import {IframeService} from "../../../../../shared/utils/iframe.service";
-import {SdcUiServices} from "onap-ui-angular";
import {DuplicateService} from "../../../duplicate/duplicate.service";
import {ServiceInstanceActions} from "../../../../../shared/models/serviceInstanceActions";
-import {deleteActionNetworkInstance, undoDeleteActionNetworkInstance, updateNetworkPosition} from "../../../../../shared/storeUtil/utils/network/network.actions";
+import {
+ deleteActionNetworkInstance,
+ undoDeleteActionNetworkInstance,
+ updateNetworkPosition
+} from "../../../../../shared/storeUtil/utils/network/network.actions";
import {IModalConfig} from "onap-ui-angular/dist/modals/models/modal-config";
import {ComponentInfoType} from "../../../component-info/component-info-model";
import {ModelInformationItem} from "../../../../../shared/components/model-information/model-information.component";
import {FeatureFlagsService} from "../../../../../shared/services/featureFlag/feature-flags.service";
+import {ModalService} from "../../../../../shared/components/customModal/services/modal.service";
export class NetworkModelInfo implements ILevelNodeInfo {
constructor(private _dynamicInputsService: DynamicInputsService,
@@ -31,7 +37,7 @@ export class NetworkModelInfo implements ILevelNodeInfo {
private _dialogService: DialogService,
private _networkPopupService: NetworkPopupService,
private _duplicateService: DuplicateService,
- private modalService: SdcUiServices.ModalService,
+ private modalService: ModalService,
private _iframeService: IframeService,
private _featureFlagsService: FeatureFlagsService,
private _store: NgRedux<AppState>) {
@@ -58,14 +64,13 @@ export class NetworkModelInfo implements ILevelNodeInfo {
};
/***********************************************************
- * return network model
- * @param networkModelId - current Model id
- * @param instance
- * @param serviceHierarchy - serviceHierarchy
+ * return a NodeModel object instance
+ * @param instanceModel - The model of the instance (usually extracted from serviceHierarchy store)
************************************************************/
- getModel = (networkModelId: string, instance: NetworkInstance, serviceHierarchy): NetworkModel => {
- const originalModelName = instance.originalName ? instance.originalName : networkModelId;
- return new NetworkModel(serviceHierarchy[this.name][originalModelName], this._featureFlagsService.getAllFlags());
+ getModel = (instanceModel: any): NetworkModel => {
+ return new NetworkModel(
+ instanceModel,
+ this._featureFlagsService.getAllFlags());
};
@@ -76,11 +81,11 @@ export class NetworkModelInfo implements ILevelNodeInfo {
* @param parentModel
* @param storeKey - store key if exist
************************************************************/
- createInstanceTreeNode = (instance: NetworkInstance, model: NetworkModel, parentModel, storeKey: string): NetworkTreeNode => {
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
let node = new NetworkTreeNode(instance, model, storeKey);
node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
node.typeName = this.typeName;
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
node = this._sharedTreeService.addingStatusProperty(node);
@@ -225,8 +230,8 @@ export class NetworkModelInfo implements ILevelNodeInfo {
});
}
},
- visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowDelete(node),
- enable: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowDelete(node)
+ visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowDelete(node, serviceModelId),
+ enable: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowDelete(node, serviceModelId)
},
undoDelete: {
method: (node, serviceModelId) => {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.spec.ts
index ca041e045..8675d36f2 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.spec.ts
@@ -14,14 +14,17 @@ import {MockNgRedux, NgReduxTestingModule} from "@angular-redux/store/testing";
import {HttpClient, HttpHandler} from "@angular/common/http";
import {CollectionResourceModel} from "../../../../../shared/models/collectionResourceModel";
import {ComponentInfoType} from "../../../component-info/component-info-model";
+import {VNFModel} from "../../../../../shared/models/vnfModel";
+import {PNFModel} from "../../../../../shared/models/pnfModel";
describe('PNF model info', () => {
let injector;
let _componentInfoService: ComponentInfoService;
let _store: NgRedux<AppState>;
- let pnfModel: PnfModelInfo = new PnfModelInfo();
- beforeEach(() => {
+ let _sharedTreeService;
+ let pnfModel: PnfModelInfo;
+ beforeEach(done => (async () => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, NgReduxTestingModule],
providers: [
@@ -35,12 +38,14 @@ describe('PNF model info', () => {
FeatureFlagsService,
ComponentInfoService,
IframeService]
- }).compileComponents();
-
+ });
+ await TestBed.compileComponents();
injector = getTestBed();
_store = injector.get(NgRedux);
+ _sharedTreeService = injector.get(SharedTreeService);
+ pnfModel = new PnfModelInfo(_sharedTreeService);
_componentInfoService = injector.get(ComponentInfoService);
- });
+ })().then(done).catch(done.fail));
test('pnf model should be defined', () => {
expect(pnfModel).toBeDefined();
@@ -74,61 +79,7 @@ describe('PNF model info', () => {
});
test('getModel should return pnf model', () => {
- let model: CollectionResourceModel = pnfModel.getModel('PNF1', <any>{
- originalName : 'PNF1'
- }, getServiceHierarchy());
- expect(model.type).toEqual('PNF');
+ expect(pnfModel.getModel({})).toBeInstanceOf(PNFModel);
});
- function getServiceHierarchy(){
- return {
- "service": {
- "uuid": "12550cd7-7708-4f53-a09e-41d3d6327ebc",
- "invariantUuid": "561faa57-7bbb-40ec-a81c-c0d4133e98d4",
- "name": "AIM Transport SVC_ym161f",
- "version": "1.0",
- "toscaModelURL": null,
- "category": "Network L1-3",
- "serviceType": "TRANSPORT",
- "serviceRole": "AIM",
- "description": "AIM Transport service",
- "serviceEcompNaming": "true",
- "instantiationType": "Macro",
- "inputs": {},
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other",
- "viewEditUI": "legacy"
- }
- },
- "vnfs": {},
- "networks": {},
- "collectionResources": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {},
- "volumeGroups": {},
- "pnfs": {
- "PNF1": {
- "uuid": "1c831fa9-28a6-4778-8c1d-80b9e769f2ed",
- "invariantUuid": "74e13a12-dac9-4fba-b102-cd242d9e7f02",
- "description": "AIM Transport service",
- "name": "AIM PNF Model",
- "version": "1.0",
- "customizationUuid": "dce78da7-c842-47a1-aba2-2de1cd03ab7a",
- "inputs": {},
- "commands": {},
- "properties": {
- "nf_function": "SDNGW",
- "nf_role": "pD2IPE",
- "ecomp_generated_naming": "false",
- "nf_type": "ROUTER"
- },
- "type": "PNF"
- }
- },
- "vnfGroups": {}
- }
- }
})
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.ts
index dc01b87ef..a7931b232 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/pnf/pnf.model.info.ts
@@ -5,12 +5,15 @@ import {ITreeNode} from "angular-tree-component/dist/defs/api";
import {AvailableNodeIcons} from "../../../available-models-tree/available-models-tree.service";
import {PnfInstance} from "app/shared/models/pnfInstance";
import {PNFModel} from "../../../../../shared/models/pnfModel";
-import {PnfTreeNode} from "../../../../../shared/models/pnfTreeNode";
+import {SharedTreeService} from "../../shared.tree.service";
+import {NodeModelResponseInterface} from "../../../../../shared/models/nodeModel";
export class PnfModelInfo implements ILevelNodeInfo{
- constructor(){}
+ constructor(
+ private _sharedTreeService: SharedTreeService,
+ ){}
name: string = 'pnfs';
type: string ='PNF';
@@ -18,7 +21,7 @@ export class PnfModelInfo implements ILevelNodeInfo{
childNames: string[];
componentInfoType = ComponentInfoType.PNF;
- createInstanceTreeNode = (instance: PnfInstance, model: PNFModel, parentModel: any, storeKey: string): PnfTreeNode => null;
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => null;
getInfo(model, instance): ModelInformationItem[] {
return [];
@@ -28,9 +31,8 @@ export class PnfModelInfo implements ILevelNodeInfo{
return {};
}
- getModel = (pnfModelId: string, instance: PnfInstance, serviceHierarchy): PNFModel => {
- const originalModelName = instance.originalName ? instance.originalName : pnfModelId;
- return new PNFModel(serviceHierarchy[this.name][originalModelName]);
+ getModel = (instanceModel: any): PNFModel => {
+ return new PNFModel(instanceModel);
};
getNextLevelObject(): any { return null; }
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.spec.ts
index 59ef35abb..8073d1727 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.spec.ts
@@ -109,10 +109,7 @@ describe('Related Vnf member Model Info', () => {
});
test('getModel should return VNF model', () => {
- let model: VNFModel = relatedVnfMemeber.getModel('2017-388_PASQUALE-vPE 1', <any>{
- originalName : '2017-388_PASQUALE-vPE 1'
- }, getServiceHierarchy());
- expect(model.type).toEqual('VF');
+ expect(relatedVnfMemeber.getModel({})).toBeInstanceOf(VNFModel);
});
@@ -141,1073 +138,4 @@ describe('Related Vnf member Model Info', () => {
expect(result['undoDelete']['method']).toHaveBeenCalledWith(node, serviceModelId);
});
-
-
- function getServiceHierarchy(){
- return {
- "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": "Macro",
- "inputs": {
- "2017488_pasqualevpe0_ASN": {
- "type": "string",
- "description": "AV/PE",
- "entry_schema": null,
- "inputProperties": null,
- "constraints": [],
- "required": true,
- "default": "AV_vPE"
- }
- },
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other"
- }
- },
- "vnfs": {
- "2017-388_PASQUALE-vPE 1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-388_PASQUALE-vPE 0": {
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-488_PASQUALE-vPE 0": {
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "vfcInstanceGroups": {}
- }
- },
- "networks": {},
- "collectionResources": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "pnfs": {}
- }
- }
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.ts
index c8807e87d..fdd4c222d 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/relatedVnfMember/relatedVnfMember.info.model.ts
@@ -11,7 +11,6 @@ import {
removeRelatedVnfMemberInstance,
undoDeleteActionRelatedVnfMemberInstance
} from "../../../../../shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.actions";
-import {VnfInstance} from "../../../../../shared/models/vnfInstance";
import {VNFModel} from "../../../../../shared/models/vnfModel";
import {VnfTreeNode} from "../../../../../shared/models/vnfTreeNode";
import {InputType} from "../../../../../shared/models/inputTypes";
@@ -48,14 +47,12 @@ export class RelatedVnfMemberInfoModel implements ILevelNodeInfo {
};
/***********************************************************
- * return vnf model
- * @param vnfModelId - current Model id
- * @param instance - vnf instance
- * @param serviceHierarchy - serviceHierarchy
+ * return a NodeModel object instance
+ * @param instanceModel - The model of the instance (usually extracted from
+ * serviceHierarchy store)
************************************************************/
- getModel = (vnfModelId: string, instance: VnfInstance, serviceHierarchy): VNFModel => {
- const originalModelName = instance.originalName ? instance.originalName : vnfModelId;
- return new VNFModel(serviceHierarchy[this.name][originalModelName]);
+ getModel = (instanceModel: any): VNFModel => {
+ return new VNFModel(instanceModel);
};
@@ -65,12 +62,13 @@ export class RelatedVnfMemberInfoModel implements ILevelNodeInfo {
* @param model - vnf model
* @param parentModel
* @param storeKey - store key if exist
+ * @param serviceModelId
************************************************************/
- createInstanceTreeNode = (instance: VnfInstance, model: VNFModel, parentModel, storeKey: string): VnfTreeNode => {
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
let node = new VnfTreeNode(instance, model, storeKey);
node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
node.typeName = this.typeName;
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage: "";
node = this._sharedTreeService.addingStatusProperty(node);
@@ -128,8 +126,8 @@ export class RelatedVnfMemberInfoModel implements ILevelNodeInfo {
method : (node, serviceModelId) => {
this._store.dispatch(deleteActionRelatedVnfMemberInstance(node.parent.data.vnfGroupStoreKey, node.data.vnfStoreKey, serviceModelId));
},
- visible: (node) => this._sharedTreeService.shouldShowDelete(node),
- enable: (node) => this._sharedTreeService.shouldShowDelete(node)
+ visible: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId),
+ enable: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId)
},
undoDelete : {
method : (node, serviceModelId) => {
@@ -137,7 +135,7 @@ export class RelatedVnfMemberInfoModel implements ILevelNodeInfo {
},
visible: (node) => this._sharedTreeService.shouldShowUndoDelete(node),
- enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && this._sharedTreeService.shouldShowDelete(node.parent) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
+ enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && this._sharedTreeService.shouldShowDelete(node.parent, serviceModelId) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
}
}
}
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.spec.ts
index 216231813..c225687ea 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.spec.ts
@@ -128,7 +128,29 @@ describe('VFModule Model Info', () => {
});
test('getModel should return Module model', () => {
- let model = vfModuleModel.getModel('2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1',null, getServiceHierarchy());
+ let model = vfModuleModel.getModel({
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 2,
+ "maxCountInstances": 3,
+ "initialCount": 0,
+ "vfModuleLabel": "PASQUALE_vRE_BV",
+ "baseModule": false
+ },
+ "inputs": {
+ "vnf_config_template_version": {
+ "type": "string"
+ }
+ },
+ "volumeGroupAllowed": true
+ });
+ expect(model).toBeInstanceOf(VfModule);
expect(model.uuid).toEqual('25284168-24bb-4698-8cb4-3f509146eca5');
expect(model.min).toBe(2);
expect(model.max).toBe(3);
@@ -629,938 +651,4 @@ describe('VFModule Model Info', () => {
};
}
-
- function getServiceHierarchy(){
- return {
- "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": "Macro",
- "inputs": {
- "2017488_pasqualevpe0_ASN": {
- "type": "string",
- "description": "AV/PE",
- "entry_schema": null,
- "inputProperties": null,
- "constraints": [],
- "required": true,
- "default": "AV_vPE"
- }
- },
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other"
- }
- },
- "vnfs": {
- "2017-388_PASQUALE-vPE 1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-388_PASQUALE-vPE 0": {
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-488_PASQUALE-vPE 0": {
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 2,
- "maxCountInstances": 3,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "vfcInstanceGroups": {}
- }
- },
- "networks": {},
- "collectionResources": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 2,
- "maxCountInstances": 3,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "pnfs": {}
- }
- }
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts
index 36b5ed072..f442e1504 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts
@@ -74,20 +74,17 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
/***********************************************************
* return vfModule model
- * @param vfModuleModelId - current Model id
- * @param instance
- * @param serviceHierarchy - serviceHierarchy
+ * @param instanceModel - The model of the instance (usually extracted from
+ * serviceHierarchy store)
************************************************************/
- getModel = (vfModuleModelId: string, instance, serviceHierarchy): Partial<VfModule> => {
- if (!_.isNil(serviceHierarchy)) {
- if (!_.isNil(serviceHierarchy[this.name]) && !_.isNil(serviceHierarchy[this.name][vfModuleModelId])) {
- return new VfModule(serviceHierarchy[this.name][vfModuleModelId], this._featureFlagsService.getAllFlags());
- }
+ getModel = (instanceModel: any): Partial<VfModule> => {
+ if (!_.isNil(instanceModel)) {
+ return new VfModule(instanceModel, this._featureFlagsService.getAllFlags());
}
return {};
};
- createNode(instance: VfModuleInstance, currentModel: VfModule, parentModel: VNFModel, modelName: string, index: number): VfModuleTreeNode {
+ createNode(instance: VfModuleInstance, currentModel: VfModule, parentModel: VNFModel, modelName: string, index: number, serviceModelId: string): VfModuleTreeNode {
let dynamicModelName = Object.keys(instance)[index];
instance = instance[Object.keys(instance)[index]];
const isEcompGeneratedNaming: boolean = this.isEcompGeneratedNaming(currentModel, parentModel);
@@ -97,7 +94,7 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
newVfModule.missingData = this._sharedTreeService.hasMissingData(instance, newVfModule.dynamicInputs, isEcompGeneratedNaming, []);
newVfModule.typeName = this.typeName;
- newVfModule.menuActions = this.getMenuAction(<any>newVfModule, currentModel.uuid);
+ newVfModule.menuActions = this.getMenuAction(<any>newVfModule, serviceModelId);
newVfModule.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
newVfModule.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
@@ -105,16 +102,16 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
return newVfModule;
}
- createInstanceTreeNode(instance: VfModuleInstance, currentModel: VfModule, parentModel: VNFModel, modelName: string): VfModuleTreeNode | VfModuleTreeNode[] {
+ createInstanceTreeNode(instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any {
let numberOfChilds = Object.keys(instance).length;
if (numberOfChilds > 1) {
let result: VfModuleTreeNode[] = [];
for (let i = 0; i < numberOfChilds; i++) {
- result.push(this.createNode(instance, currentModel, parentModel, modelName, i));
+ result.push(this.createNode(instance, model, parentModel, storeKey, i, serviceModelId));
}
return result;
} else {
- return this.createNode(instance, currentModel, parentModel, modelName, 0);
+ return this.createNode(instance, model, parentModel, storeKey, 0, serviceModelId);
}
}
@@ -356,8 +353,8 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
method: (node, serviceModelId) => {
this._store.dispatch(deleteActionVfModuleInstance(node.data.dynamicModelName, node.parent.data.vnfStoreKey, serviceModelId))
},
- visible: (node) => this._sharedTreeService.shouldShowDelete(node),
- enable: (node) => this._sharedTreeService.shouldShowDelete(node)
+ visible: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId),
+ enable: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId)
},
undoDelete: {
method: (node, serviceModelId) => {
@@ -365,7 +362,7 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
this._store.dispatch(deleteVFModuleField(node.data.modelName, node.parent.data.vnfStoreKey, node.data.servicedId ,node.data.dynamicModelName, 'retainAssignments'));
},
visible: (node) => this._sharedTreeService.shouldShowUndoDelete(node),
- enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && this._sharedTreeService.shouldShowDelete(node.parent) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
+ enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && this._sharedTreeService.shouldShowDelete(node.parent, serviceModelId) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
},
upgrade: {
method: (node, serviceModelId) => {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.spec.ts
index f700ed419..53aedddcb 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.spec.ts
@@ -145,10 +145,7 @@ describe('Vnf Model Info', () => {
});
test('getModel should return VNF model', () => {
- let model: VNFModel = vnfModel.getModel('2017-388_PASQUALE-vPE 1', <any>{
- originalName : '2017-388_PASQUALE-vPE 1'
- }, getServiceHierarchy());
- expect(model.type).toEqual('VF');
+ expect(vnfModel.getModel({})).toBeInstanceOf(VNFModel);
});
test('showNodeIcons should return false if reachLimit of max', ()=>{
@@ -607,1072 +604,4 @@ describe('Vnf Model Info', () => {
};
}
- function getServiceHierarchy(){
- return {
- "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": "Macro",
- "inputs": {
- "2017488_pasqualevpe0_ASN": {
- "type": "string",
- "description": "AV/PE",
- "entry_schema": null,
- "inputProperties": null,
- "constraints": [],
- "required": true,
- "default": "AV_vPE"
- }
- },
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other"
- }
- },
- "vnfs": {
- "2017-388_PASQUALE-vPE 1": {
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 1",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-388_PASQUALE-vPE 0": {
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {},
- "volumeGroups": {},
- "vfcInstanceGroups": {}
- },
- "2017-488_PASQUALE-vPE 0": {
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "description": "Name PASQUALE vPE Description The provider edge function for the PASQUALE 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_PASQUALE-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_pasqualevpe0_vnf_config_template_version"
- },
- "bandwidth_units": {
- "displayName": "bandwidth_units",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth_units"
- },
- "bandwidth": {
- "displayName": "bandwidth",
- "command": "get_input",
- "inputName": "pasqualevpe0_bandwidth"
- },
- "AIC_CLLI": {
- "displayName": "AIC_CLLI",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_AIC_CLLI"
- },
- "ASN": {
- "displayName": "ASN",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_ASN"
- },
- "vnf_instance_name": {
- "displayName": "vnf_instance_name",
- "command": "get_input",
- "inputName": "2017488_pasqualevpe0_vnf_instance_name"
- }
- },
- "properties": {
- "vmxvre_retype": "RE-VMX",
- "vnf_config_template_version": "get_input:2017488_pasqualevpe0_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_pasqualevpe0_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:pasqualevpe0_bandwidth_units",
- "vnf_id": "123",
- "vmxvre_oam_prefix": "24",
- "availability_zone_0": "mtpocfo-kvm-az01",
- "ASN": "get_input:2017488_pasqualevpe0_ASN",
- "vmxvre_chassis_i2cid": "161",
- "vmxvpfe_name_0": "vPFEXI",
- "bandwidth": "get_input:pasqualevpe0_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_pasqualevpe0_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_PASQUALE-vPE 0",
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "vfcInstanceGroups": {}
- }
- },
- "networks": {},
- "collectionResources": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- },
- "volumeGroupAllowed": true
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "version": "5",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "properties": {
- "minCountInstances": 1,
- "maxCountInstances": 1,
- "initialCount": 1,
- "vfModuleLabel": "PASQUALE_base_vPE_BV",
- "baseModule": true
- },
- "inputs": {},
- "volumeGroupAllowed": false
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {},
- "volumeGroupAllowed": true
- }
- },
- "volumeGroups": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "baseModule": false
- },
- "inputs": {
- "vnf_config_template_version": {
- "type": "string",
- "description": "VPE Software Version",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_config_template_version"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_config_template_version",
- "constraints": null,
- "required": true,
- "default": "17.2"
- },
- "bandwidth_units": {
- "type": "string",
- "description": "Units of bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth_units"
- },
- "fromInputName": "pasqualevpe0_bandwidth_units",
- "constraints": null,
- "required": true,
- "default": "Gbps"
- },
- "bandwidth": {
- "type": "string",
- "description": "Requested VPE bandwidth",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "bandwidth"
- },
- "fromInputName": "pasqualevpe0_bandwidth",
- "constraints": null,
- "required": true,
- "default": "10"
- },
- "AIC_CLLI": {
- "type": "string",
- "description": "AIC Site CLLI",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "AIC_CLLI"
- },
- "fromInputName": "2017488_pasqualevpe0_AIC_CLLI",
- "constraints": null,
- "required": true,
- "default": "ATLMY8GA"
- },
- "vnf_instance_name": {
- "type": "string",
- "description": "The hostname assigned to the vpe.",
- "entry_schema": null,
- "inputProperties": {
- "sourceType": "HEAT",
- "vfModuleLabel": "PASQUALE_vRE_BV",
- "paramName": "vnf_instance_name"
- },
- "fromInputName": "2017488_pasqualevpe0_vnf_instance_name",
- "constraints": null,
- "required": true,
- "default": "mtnj309me6"
- }
- }
- },
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_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": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "version": "6",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
- "properties": {
- "minCountInstances": 0,
- "maxCountInstances": null,
- "initialCount": 0,
- "vfModuleLabel": "PASQUALE_vPFE_BV",
- "baseModule": false
- },
- "inputs": {}
- }
- },
- "pnfs": {}
- }
- }
-
});
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.ts
index 355b5c597..d391f4a48 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnf/vnf.model.info.ts
@@ -9,7 +9,10 @@ import {SharedTreeService} from "../../shared.tree.service";
import {NgRedux} from "@angular-redux/store";
import {AppState} from "../../../../../shared/store/reducers";
import {DefaultDataGeneratorService} from "../../../../../shared/services/defaultDataServiceGenerator/default.data.generator.service";
-import {GenericFormPopupComponent, PopupType} from "../../../../../shared/components/genericFormPopup/generic-form-popup.component";
+import {
+ GenericFormPopupComponent,
+ PopupType
+} from "../../../../../shared/components/genericFormPopup/generic-form-popup.component";
import {DialogService} from 'ng2-bootstrap-modal';
import {VnfPopupService} from "../../../../../shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service";
import {VfModulePopupService} from "../../../../../shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popup.service";
@@ -17,13 +20,18 @@ import {ITreeNode} from "angular-tree-component/dist/defs/api";
import {AvailableNodeIcons} from "../../../available-models-tree/available-models-tree.service";
import {DuplicateService} from "../../../duplicate/duplicate.service";
import {DuplicateVnfComponent} from "../../../duplicate/duplicate-vnf.component";
-import {SdcUiServices} from "onap-ui-angular";
import {IframeService} from "../../../../../shared/utils/iframe.service";
import {changeInstanceCounter, removeInstance} from "../../../../../shared/storeUtil/utils/general/general.actions";
import {MessageBoxData} from "../../../../../shared/components/messageBox/messageBox.data";
import {MessageBoxService} from "../../../../../shared/components/messageBox/messageBox.service";
import {ServiceInstanceActions} from "../../../../../shared/models/serviceInstanceActions";
-import {deleteActionVnfInstance, undoDeleteActionVnfInstance, undoUpgradeVnf, updateVnfPosition, upgradeVnf} from "../../../../../shared/storeUtil/utils/vnf/vnf.actions";
+import {
+ deleteActionVnfInstance,
+ undoDeleteActionVnfInstance,
+ undoUpgradeVnf,
+ updateVnfPosition,
+ upgradeVnf
+} from "../../../../../shared/storeUtil/utils/vnf/vnf.actions";
import * as _ from 'lodash';
import {IModalConfig} from "onap-ui-angular/dist/modals/models/modal-config";
import {ComponentInfoType} from "../../../component-info/component-info-model";
@@ -31,6 +39,7 @@ import {ComponentInfoService} from "../../../component-info/component-info.servi
import {ModelInformationItem} from "../../../../../shared/components/model-information/model-information.component";
import {VfModuleUpgradePopupService} from "../../../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
import {FeatureFlagsService} from "../../../../../shared/services/featureFlag/feature-flags.service";
+import {ModalService} from "../../../../../shared/components/customModal/services/modal.service";
export class VnfModelInfo implements ILevelNodeInfo {
constructor(private _dynamicInputsService: DynamicInputsService,
@@ -41,7 +50,7 @@ export class VnfModelInfo implements ILevelNodeInfo {
private _vfModulePopupService: VfModulePopupService,
private _vfModuleUpgradePopupService: VfModuleUpgradePopupService,
private _duplicateService: DuplicateService,
- private modalService: SdcUiServices.ModalService,
+ private modalService: ModalService,
private _iframeService: IframeService,
private _componentInfoService: ComponentInfoService,
private _featureFlagsService: FeatureFlagsService,
@@ -78,24 +87,25 @@ export class VnfModelInfo implements ILevelNodeInfo {
* @param instance - vnf instance
* @param serviceHierarchy - serviceHierarchy
************************************************************/
- getModel = (vnfModelId: string, instance: VnfInstance, serviceHierarchy): VNFModel => {
- const originalModelName = instance.originalName ? instance.originalName : vnfModelId;
- return new VNFModel(serviceHierarchy[this.name][originalModelName], this._featureFlagsService.getAllFlags());
+ getModel = (instanceModel: any): VNFModel => {
+ return new VNFModel(
+ instanceModel,
+ this._featureFlagsService.getAllFlags());
};
-
/***********************************************************
* return vnf instance tree node
* @param instance - vnf instance
* @param model - vnf model
* @param parentModel
* @param storeKey - store key if exist
+ * @param serviceModelId
************************************************************/
- createInstanceTreeNode = (instance: VnfInstance, model: VNFModel, parentModel, storeKey: string): VnfTreeNode => {
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
let node = new VnfTreeNode(instance, model, storeKey);
node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
node.typeName = this.typeName;
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
node = this._sharedTreeService.addingStatusProperty(node);
@@ -260,8 +270,8 @@ export class VnfModelInfo implements ILevelNodeInfo {
});
}
},
- visible: (node) => this._sharedTreeService.shouldShowDelete(node),
- enable: (node) => this._sharedTreeService.shouldShowDelete(node)
+ visible: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId),
+ enable: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId)
},
undoDelete: {
method: (node, serviceModelId) => {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.spec.ts
index 802047cb9..057cdd349 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.spec.ts
@@ -14,6 +14,7 @@ import {DrawingBoardModes} from "../../../drawing-board.modes";
import {AaiService} from "../../../../../shared/services/aaiService/aai.service";
import {FeatureFlagsService} from "../../../../../shared/services/featureFlag/feature-flags.service";
import {ITableContent} from "../../../../../shared/components/searchMembersModal/members-table/element-table-row.model";
+import {VNFModel} from "../../../../../shared/models/vnfModel";
describe('VnfGroupingModelInfo Model Info', () => {
let injector;
@@ -171,10 +172,7 @@ describe('VnfGroupingModelInfo Model Info', () => {
});
test('getModel should return VnfGroup model', () => {
- let model: VnfGroupModel = vnfGroupModel.getModel('ResourceGroup0', <any>{
- originalName : 'ResourceGroup0'
- }, getServiceHierarchy());
- expect(model.type).toEqual('VnfGroup');
+ expect(vnfGroupModel.getModel({})).toBeInstanceOf(VnfGroupModel);
});
test('getMenuAction: showAuditInfoVnfGroup', ()=>{
@@ -266,156 +264,5 @@ describe('VnfGroupingModelInfo Model Info', () => {
]);
});
- function getServiceHierarchy(){
- return {
- "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": "Macro",
- "inputs": {
- "2017488_pasqualevpe0_ASN": {
- "type": "string",
- "description": "AV/PE",
- "entry_schema": null,
- "inputProperties": null,
- "constraints": [],
- "required": true,
- "default": "AV_vPE"
- }
- },
- "vidNotions": {
- "instantiationUI": "legacy",
- "modelCategory": "other"
- }
- },
- "vnfGroups": {
- "ResourceGroup0": {
- "type": "VnfGroup",
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "version": "1",
- "name": "ResourceGroup0",
- "modelCustomizationName": "ResourceGroup0",
- "properties": {
- "contained_resource_type": "VF",
- "role": "SERVICE-ACCESS",
- "function": "DATA",
- "description": "DDD0",
- "type": "LOAD-GROUP"
- },
- "members": {
- "vdorothea_svc_vprs_proxy 0": {
- "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
- "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
- "description": "A Proxy for Service vDOROTHEA_Svc_vPRS",
- "name": "vDOROTHEA_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": "vDOROTHEA_Svc_vPRS"
- },
- "vdorothea_svc_vprs_proxy 1": {
- "uuid": "111dfa8-a0d9-443f-95ad-836cd044e26c",
- "invariantUuid": "111ae0c-b3a5-4ca1-a777-afbffe7010bc",
- "description": "A Proxy for Service vDOROTHEA_Svc_vPRS",
- "name": "111_Svc_vPRS Service Proxy",
- "version": "1.0",
- "customizationUuid": "1113d23-e132-4ce7-af2c-a493b4cafac9",
- "inputs": {},
- "commands": {},
- "properties": {},
- "type": "Service Proxy",
- "sourceModelUuid": "11127a2-366d-4be6-8c68-a69153c61274",
- "sourceModelInvariant": "1112e6b-584b-4f45-80d4-fefd75fd9f14",
- "sourceModelName": "111_Svc_vPRS"
- }
- }
- }
- },
- "networks": {},
- "collectionResources": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {},
- "vfModules": {},
- "volumeGroups": {},
- "pnfs": {}
- }
- }
-
- function loadMockMembers(): any[] {
- return [
- {
- "action": "None",
- "instanceName": "VNF1_INSTANCE_NAME",
- "instanceId": "VNF1_INSTANCE_ID",
- "orchStatus": null,
- "productFamilyId": null,
- "lcpCloudRegionId": "hvf23b",
- "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": "hvf23b",
- "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/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.ts
index 148ce22c7..2787c6174 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vnfGrouping/vnfGrouping.model.info.ts
@@ -83,21 +83,20 @@ export class VnfGroupingModelInfo implements ILevelNodeInfo {
getType = (): string => 'VnfGroup';
- createInstanceTreeNode(instance: any, model: any, parentModel: any, storeKey: string): any {
+ createInstanceTreeNode(instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any {
let node = new VnfGroupTreeNode(instance, model, storeKey);
node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
node = this._sharedTreeService.addingStatusProperty(node);
node.typeName = this.typeName;
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
node.limitMembers = (!_.isNil(model.properties.quantity)) ? model.properties.quantity : null;
return node;
}
- getModel(modelId: string, instance: any, serviceHierarchy): any {
- const originalModelName = instance.originalName ? instance.originalName : modelId;
- return new VnfGroupModel(serviceHierarchy[this.name][originalModelName]);
+ getModel(instanceModel: any): any {
+ return new VnfGroupModel(instanceModel);
}
hasMissingData(instance, dynamicInputs: any, isEcompGeneratedNaming: boolean): boolean {
@@ -275,8 +274,8 @@ export class VnfGroupingModelInfo implements ILevelNodeInfo {
});
}
},
- visible: (node) => this._sharedTreeService.shouldShowDelete(node),
- enable: (node) => this._sharedTreeService.shouldShowDelete(node)
+ visible: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId),
+ enable: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId)
},
undoDelete: {
method: (node, serviceModelId) => {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vpn/vpn.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vpn/vpn.model.info.ts
index b951162f8..bc657aeee 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vpn/vpn.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vpn/vpn.model.info.ts
@@ -29,17 +29,17 @@ export class VpnModelInfo implements ILevelNodeInfo {
updateDynamicInputsDataFromModel = (currentModel): any => [];
- getModel = (modelId: string, instance: any, serviceHierarchy): any => {
+ getModel = (instanceModel: any): any => {
return new Level1Model();
};
- createInstanceTreeNode = (instance: NetworkInstance, model: any, parentModel, storeKey: string): VpnTreeNode => {
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
let node = new VpnTreeNode(instance, model, storeKey);
node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
node = this._sharedTreeService.addingStatusProperty(node);
node.typeName = this.typeName;
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
node = this._sharedTreeService.addingStatusProperty(node);
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.spec.ts
index 07d4cee9b..f3e479aca 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.spec.ts
@@ -32,6 +32,7 @@ describe('Vrf Model Info', () => {
let _iframeService : IframeService;
let _networkStepService : NetworkStepService;
let _vpnStepService : VpnStepService;
+ let _featureFlagsService : FeatureFlagsService;
let vrfModel: VrfModelInfo;
beforeEach(() => {
@@ -59,11 +60,12 @@ describe('Vrf Model Info', () => {
_dialogService = injector.get(DialogService);
_iframeService = injector.get(IframeService);
_networkStepService = injector.get(NetworkStepService);
+ _featureFlagsService = injector.get(FeatureFlagsService);
_vpnStepService = injector.get(VpnStepService);
_store = injector.get(NgRedux);
_componentInfoService = injector.get(ComponentInfoService);
- vrfModel = new VrfModelInfo(_store,_sharedTreeService, _dialogService, _iframeService, _networkStepService, _vpnStepService);
+ vrfModel = new VrfModelInfo(_store,_sharedTreeService, _dialogService, _iframeService, _featureFlagsService, _networkStepService, _vpnStepService);
});
@@ -94,9 +96,16 @@ describe('Vrf Model Info', () => {
test('getModel should return VRF model with min and max are equal to 1 (hard coded)', () => {
- let model: VrfModel = vrfModel.getModel('VRF Entry Configuration 0', <any>{
- originalName : 'VRF Entry Configuration 0'
- }, getServiceHierarchy());
+ let model: VrfModel = vrfModel.getModel({
+ "uuid": "9cac02be-2489-4374-888d-2863b4511a59",
+ "invariantUuid": "b67a289b-1688-496d-86e8-1583c828be0a",
+ "properties": {
+ "ecomp_generated_naming": "false",
+ "type": "VRF-ENTRY",
+ },
+ "type": "Configuration"
+ }
+ );
expect(model.properties['type']).toEqual('VRF-ENTRY');
expect(model.min).toEqual(1);
expect(model.max).toEqual(1);
@@ -159,80 +168,5 @@ describe('Vrf Model Info', () => {
};
}
- function getServiceHierarchy() {
- return {
- "service": {
- "uuid": "f028b2e2-7080-4b13-91b2-94944d4c42d8",
- "invariantUuid": "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb",
- "name": "infraVPN",
- "version": "1.0",
- "toscaModelURL": null,
- "category": "Network Service",
- "serviceType": "BONDING",
- "serviceRole": "INFRASTRUCTURE-VPN",
- "description": "ddd",
- "serviceEcompNaming": "true",
- "instantiationType": "A-La-Carte",
- "inputs": {},
- "vidNotions": {
- "instantiationUI": "macroService",
- "modelCategory": "other",
- "viewEditUI": "legacy"
- }
- },
- "vnfs": {},
- "networks": {},
- "collectionResources": {},
- "configurations": {},
- "fabricConfigurations": {},
- "serviceProxies": {
- "misvpn_service_proxy 0": {
- "uuid": "35186eb0-e6b6-4fa5-86bb-1501b342a7b1",
- "invariantUuid": "73f89e21-b96c-473f-8884-8b93bcbd2f76",
- "description": "A Proxy for Service MISVPN_SERVICE",
- "name": "MISVPN_SERVICE Service Proxy",
- "version": "3.0",
- "customizationUuid": "4c2fb7e0-a0a5-4b32-b6ed-6a974e55d923",
- "inputs": {},
- "commands": {},
- "properties": {
- "ecomp_generated_naming": "false"
- },
- "type": "Service Proxy",
- "sourceModelUuid": "d5cc7d15-c842-450e-95ae-2a69e66dd23b",
- "sourceModelInvariant": "c126ec86-59fe-48c0-9532-e39a9b3e5272",
- "sourceModelName": "MISVPN_SERVICE"
- }
- },
- "vfModules": {},
- "volumeGroups": {},
- "pnfs": {},
- "vnfGroups": {},
- "vrfs": {
- "VRF Entry Configuration 0": {
- "uuid": "9cac02be-2489-4374-888d-2863b4511a59",
- "invariantUuid": "b67a289b-1688-496d-86e8-1583c828be0a",
- "description": "VRF Entry configuration object",
- "name": "VRF Entry Configuration",
- "version": "30.0",
- "customizationUuid": "dd024d73-9bd1-425d-9db5-476338d53433",
- "inputs": {},
- "commands": {},
- "properties": {
- "ecomp_generated_naming": "false",
- "type": "VRF-ENTRY",
- "role": "INFRASTRUCTURE-CLOUD-VPN"
- },
- "type": "Configuration",
- "modelCustomizationName": "VRF Entry Configuration 0",
- "sourceNodes": [],
- "collectorNodes": null,
- "configurationByPolicy": false
- }
- }
- }
- }
-
-
})
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.ts
index 3dbc60adb..53985d07d 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrf.model.info.ts
@@ -3,7 +3,6 @@ import {ComponentInfoType} from "../../../component-info/component-info-model";
import {ITreeNode} from "angular-tree-component/dist/defs/api";
import {AvailableNodeIcons} from "../../../available-models-tree/available-models-tree.service";
import {ModelInformationItem} from "../../../../../shared/components/model-information/model-information.component";
-import {VrfInstance} from "../../../../../shared/models/vrfInstance";
import {VrfTreeNode} from "../../../../../shared/models/vrfTreeNode";
import {VrfModel} from "../../../../../shared/models/vrfModel";
import {NgRedux} from "@angular-redux/store";
@@ -50,17 +49,16 @@ export class VrfModelInfo implements ILevelNodeInfo {
updateDynamicInputsDataFromModel = (currentModel): any => [];
- getModel = (vrfModelId: string, instance: VrfInstance, serviceHierarchy): VrfModel => {
- const originalModelName = instance.originalName ? instance.originalName : vrfModelId;
- return new VrfModel(serviceHierarchy[this.name][originalModelName]);
+ getModel = (instanceModel: any): VrfModel => {
+ return new VrfModel(instanceModel);
};
- createInstanceTreeNode = (instance: VrfInstance, model: VrfModel, parentModel, storeKey: string): VrfTreeNode => {
+ createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
let node = new VrfTreeNode(instance, model, storeKey);
node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
node.typeName = this.typeName;
- node.menuActions = this.getMenuAction(<any>node, model.uuid);
+ node.menuActions = this.getMenuAction(<any>node, serviceModelId);
node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
return node;
@@ -111,7 +109,13 @@ export class VrfModelInfo implements ILevelNodeInfo {
let counter: number = !_.isNil(this._store.getState().service.serviceInstance[serviceModelId]) ?
(this._store.getState().service.serviceInstance[serviceModelId].existingVRFCounterMap[node.data.modelUniqueId] || 0) : 0;
counter -= this._sharedTreeService.getExistingInstancesWithDeleteMode(node, serviceModelId, 'vrfs');
- const model = node.data.getModel(node.data.name, node.data, serviceHierarchy);
+
+ const instanceModel = this._sharedTreeService.modelByIdentifiers(
+ serviceHierarchy, node.data.modelTypeName,
+ this._sharedTreeService.modelUniqueNameOrId(node.data), node.data.name
+ );
+
+ const model = node.data.getModel(instanceModel);
const maxInstances: number = model.max;
const isReachedLimit = !(maxInstances > counter);
const showAddIcon = this._sharedTreeService.shouldShowAddIcon() && !isReachedLimit;
@@ -157,8 +161,8 @@ export class VrfModelInfo implements ILevelNodeInfo {
method: (node, serviceModelId) => {
this._store.dispatch(deleteActionVrfInstance(node.data.vrfStoreKey, serviceModelId));
},
- visible: (node) => this._sharedTreeService.shouldShowDelete(node),
- enable: (node) => this._sharedTreeService.shouldShowDelete(node)
+ visible: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId),
+ enable: (node) => this._sharedTreeService.shouldShowDelete(node, serviceModelId)
},
undoDelete: {
method: (node, serviceModelId) => {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.spec.ts
index 1cec62b2c..5cf6e96f7 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.spec.ts
@@ -27,13 +27,15 @@ import {VfModuleControlGenerator} from "../../../../shared/components/genericFor
import {VnfGroupPopupService} from "../../../../shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service";
import {VnfGroupControlGenerator} from "../../../../shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator";
import {DuplicateService} from "../../duplicate/duplicate.service";
-import {SdcUiComponentsModule, SdcUiServices} from "onap-ui-angular";
+import {SdcUiComponentsModule} from "onap-ui-angular";
import {ErrorMsgService} from "../../../../shared/components/error-msg/error-msg.service";
import {ComponentInfoService} from "../../component-info/component-info.service";
import {NetworkStepService} from "../models/vrf/vrfModal/networkStep/network.step.service";
import {VpnStepService} from "../models/vrf/vrfModal/vpnStep/vpn.step.service";
import {VfModuleUpgradePopupService} from "../../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
import {SharedControllersService} from "../../../../shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {ModalService} from "../../../../shared/components/customModal/services/modal.service";
+import {CreateDynamicComponentService} from "../../../../shared/components/customModal/services/create-dynamic-component.service";
class MockAppStore<T> {
getState() {
@@ -86,9 +88,11 @@ describe('Model Tree Generator service', () => {
DialogService,
ErrorMsgService,
ComponentInfoService,
- SdcUiServices.ModalService,
+ ModalService,
NetworkStepService,
VpnStepService,
+ ModalService,
+ CreateDynamicComponentService,
{ provide: NgRedux, useClass: MockAppStore },
MockNgRedux]
});
@@ -2462,7 +2466,6 @@ describe('Model Tree Generator service', () => {
"tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
"platformName": "xxx1",
"lineOfBusiness": "ONAP",
- "uuid": "network-instance-model-version-id",
"routeTarget": {
"globalRouteTarget": "mock-global-1",
"routeTargetRole": "mock-role-x"
@@ -2583,6 +2586,7 @@ describe('Model Tree Generator service', () => {
{
"action": 'None',
"modelId": "afacccf6-397d-45d6-b5ae-94c39734b168",
+ "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
"modelCustomizationId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
"modelUniqueId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
"missingData": true,
@@ -2592,6 +2596,7 @@ describe('Model Tree Generator service', () => {
"inMaint": true,
"name": "2017-388_PASQUALE-vPE 0",
"modelName": "2017-388_PASQUALE-vPE 0",
+ "modelTypeName": "vnfs",
"type": "VF",
"parentType": '',
"isEcompGeneratedNaming": false,
@@ -2619,6 +2624,7 @@ describe('Model Tree Generator service', () => {
"parentType": '',
"name": "2017-488_PASQUALE-vPE 0",
"modelName": "2017-488_PASQUALE-vPE 0",
+ "modelTypeName": "vnfs",
"type": "VF",
"isEcompGeneratedNaming": false,
"networkStoreKey": "2017-488_PASQUALE-vPE 0",
@@ -2633,6 +2639,7 @@ describe('Model Tree Generator service', () => {
"parentType": 'VNF',
"action": 'None',
"modelId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
"modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
"modelUniqueId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
"missingData": true,
@@ -2640,6 +2647,7 @@ describe('Model Tree Generator service', () => {
"statusMessage": "Failed vfModel message",
"name": "&lt;Automatically Assigned&gt;",
"modelName": "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
+ "modelTypeName": "vfModules",
"type": "VFmodule",
"isEcompGeneratedNaming": false,
"dynamicInputs": [],
@@ -2664,6 +2672,7 @@ describe('Model Tree Generator service', () => {
"id": "o65b26t2thj",
"name": "2017488_PASQUALEvPE",
"modelName": "2017-488_PASQUALE-vPE 0",
+ "modelTypeName": "vnfs",
"type": "VF",
"isEcompGeneratedNaming": false,
"vnfStoreKey": "2017-488_PASQUALE-vPE 0",
@@ -2680,6 +2689,7 @@ describe('Model Tree Generator service', () => {
"missingData": false,
"name": "yoav",
"modelName": "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
+ "modelTypeName": "vfModules",
"type": "VFmodule",
"isEcompGeneratedNaming": false,
"typeName": "M",
@@ -2733,6 +2743,7 @@ describe('Model Tree Generator service', () => {
"parentType": '',
"action": 'None',
"modelId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+ "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
"modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
"modelUniqueId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
"missingData": false,
@@ -2742,6 +2753,7 @@ describe('Model Tree Generator service', () => {
"routeTargetRole": "mock-role-x",
"statusMessage": "Network failed message",
"modelName": "ExtVL 0",
+ "modelTypeName": "networks",
"type": "VL",
"isEcompGeneratedNaming": true,
"networkStoreKey": "ExtVL 0",
@@ -2761,6 +2773,7 @@ describe('Model Tree Generator service', () => {
"id": "2mdxioxca9h",
"name": "&lt;Automatically Assigned&gt;",
"modelName": "ExtVL 0",
+ "modelTypeName": "networks",
"type": "VL",
"isEcompGeneratedNaming": true,
"networkStoreKey": "ExtVL 0:0001",
@@ -2775,6 +2788,7 @@ describe('Model Tree Generator service', () => {
"id": "z7vd1gmpbs",
"name": "ExtVL",
"modelName": "ExtVL 0",
+ "modelTypeName": "networks",
"type": "VL",
"isEcompGeneratedNaming": true,
"networkStoreKey": "ExtVL 0_1",
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.ts
index 8ddb4ba2d..13dca560c 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToInstanceTree/objectToInstanceTree.service.ts
@@ -8,10 +8,12 @@ import {ErrorMsgService} from "../../../../shared/components/error-msg/error-msg
import {FeatureFlagsService, Features} from "../../../../shared/services/featureFlag/feature-flags.service";
import {NgRedux} from "@angular-redux/store";
import {AppState} from "../../../../shared/store/reducers";
+import {SharedTreeService} from "../shared.tree.service";
@Injectable()
export class ObjectToInstanceTreeService {
- constructor(private _objectToTreeService: ObjectToTreeService, private _errorMsgService: ErrorMsgService, private store: NgRedux<AppState>) {
+ constructor(private _objectToTreeService: ObjectToTreeService, private _errorMsgService: ErrorMsgService,
+ private store: NgRedux<AppState>, private _sharedTreeService: SharedTreeService) {
this.numberOfFailed = 0;
this.numberOfElements = 0;
@@ -34,10 +36,11 @@ export class ObjectToInstanceTreeService {
this.numberOfFailed = 0;
this.numberOfElements = 0;
let _this = this;
+ const serviceModelId:string = serviceInstance.modelInfo.modelVersionId;
const firstLevelOptions: ILevelNodeInfo[] = _this._objectToTreeService.getFirstLevelOptions();
for (let option of firstLevelOptions) {
_.forOwn(serviceInstance[option.name], function (instance, modelName) {
- nodes.push(_this.getNodeInstance(modelName, null, instance, serviceHierarchy, option));
+ nodes.push(_this.getNodeInstance(modelName, null, instance, serviceHierarchy, option, serviceModelId));
});
}
return this.sortElementsByPosition(nodes);
@@ -71,18 +74,23 @@ export class ObjectToInstanceTreeService {
* @param instance
* @param serviceHierarchy - The service Hierarchy store
* @param option
+ * @param serviceModelId
* @param parentType
****************************************************************/
- getNodeInstance(modelName: string, parentModel: any, instance: any, serviceHierarchy, option: ILevelNodeInfo, parentType ?: string) {
- const model = option.getModel(modelName, instance, serviceHierarchy);
-
- let optionalNodes = option.createInstanceTreeNode(instance, model, parentModel, modelName);
+ getNodeInstance(modelName: string, parentModel: any, instance: any, serviceHierarchy, option: ILevelNodeInfo, serviceModelId: string, parentType ?: string) {
+ const instanceModel = this._sharedTreeService.modelByIdentifiers(
+ serviceHierarchy, option.name,
+ this._sharedTreeService.modelUniqueNameOrId(instance), modelName
+ );
+ const model = option.getModel(instanceModel);
+
+ let optionalNodes = option.createInstanceTreeNode(instance, model, parentModel, modelName, serviceModelId);
this.increaseNumberOfFailed(optionalNodes);
this.increaseNumberOfExcitingElements();
let nodes: any[] = _.isArray(optionalNodes) ? optionalNodes : [optionalNodes];
for (let node of nodes) {
node = this.addingExtraDataToNode(node, modelName, parentModel, instance, serviceHierarchy, option, parentType);
- let children = this.addNextInstanceTreeNode(instance, model, option, node, serviceHierarchy);
+ let children = this.addNextInstanceTreeNode(instance, model, option, node, serviceHierarchy, serviceModelId);
if (!_.isNil(children) && children.length > 0) {
node.children = this.sortElementsByPosition(children);
}
@@ -97,6 +105,7 @@ export class ObjectToInstanceTreeService {
node.parentType = !_.isNil(parentType) ? parentType : "";
node.updatePoistionFunction = option.updatePosition;
node.position = option.getNodePosition(instance, node.dynamicModelName);
+ node.modelTypeName = option.name;
node.getModel = option.getModel.bind(option);
node.getInfo = !_.isNil(option.getInfo) ? option.getInfo.bind(option) : ()=>{};
node.componentInfoType = option.componentInfoType;
@@ -119,8 +128,9 @@ export class ObjectToInstanceTreeService {
* @param levelNodeInfo
* @param parentNode
* @param serviceHierarchy - The service Hierarchy store
+ * @param serviceModelId
****************************************************************/
- addNextInstanceTreeNode(parentInstance, parentModel, levelNodeInfo: ILevelNodeInfo, parentNode, serviceHierarchy): any[] {
+ addNextInstanceTreeNode(parentInstance, parentModel, levelNodeInfo: ILevelNodeInfo, parentNode, serviceHierarchy, serviceModelId: string): any[] {
if (!_.isNil(levelNodeInfo.childNames)&& levelNodeInfo.childNames.length > 0) {
const that = this;
parentNode.children = [];
@@ -130,7 +140,7 @@ export class ObjectToInstanceTreeService {
let nextLevelNodeInfo = levelNodeInfo.getNextLevelObject.apply(that, [childName]);
Object.keys(parentInstance[childName]).map((modelName) => {
let nextLevelInstance = parentInstance[childName][modelName];
- let nodes: any[] | any = that.getNodeInstance(modelName, parentModel, nextLevelInstance, serviceHierarchy, nextLevelNodeInfo, parentType);
+ let nodes: any[] | any = that.getNodeInstance(modelName, parentModel, nextLevelInstance, serviceHierarchy, nextLevelNodeInfo, serviceModelId, parentType);
if (_.isArray(nodes)) {
parentNode.children = parentNode.children.concat(nodes);
} else {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.spec.ts
index 0f7bf9a61..7fa679bb5 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.spec.ts
@@ -37,6 +37,8 @@ import {VpnStepService} from "../models/vrf/vrfModal/vpnStep/vpn.step.service";
import {NetworkStepService} from "../models/vrf/vrfModal/networkStep/network.step.service";
import {VfModuleUpgradePopupService} from "../../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
import {SharedControllersService} from "../../../../shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {ModalService} from "../../../../shared/components/customModal/services/modal.service";
+import {CreateDynamicComponentService} from "../../../../shared/components/customModal/services/create-dynamic-component.service";
class MockAppStore<T> {
getState() {
@@ -112,6 +114,8 @@ describe('Model Tree Generator service', () => {
ComponentInfoService,
NetworkStepService,
VpnStepService,
+ ModalService,
+ CreateDynamicComponentService,
SharedControllersService,
{provide: NgRedux, useClass: MockAppStore},
MockNgRedux ]
@@ -207,6 +211,7 @@ describe('Model Tree Generator service', () => {
"name": "2017-388_PASQUALE-vPE 1",
"tooltip": "VF",
"type": "VF",
+ "modelTypeName": "vnfs",
"count": 0,
"max": 1,
"children": [],
@@ -224,6 +229,7 @@ describe('Model Tree Generator service', () => {
"name": "2017-388_PASQUALE-vPE 0",
"tooltip": "VF",
"type": "VF",
+ "modelTypeName": "vnfs",
"count": 0,
"max": 1,
"children": [],
@@ -239,6 +245,7 @@ describe('Model Tree Generator service', () => {
"name": "2017-488_PASQUALE-vPE 0",
"tooltip": "VF",
"type": "VF",
+ "modelTypeName": "vnfs",
"count": 0,
"max": 1,
"children": [{
@@ -249,6 +256,7 @@ describe('Model Tree Generator service', () => {
"name": "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1",
"tooltip": "VFmodule",
"type": "VFmodule",
+ "modelTypeName": "vfModules",
"count": 0,
"max": 1,
"children": [],
@@ -264,6 +272,7 @@ describe('Model Tree Generator service', () => {
"name": "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
"tooltip": "VFmodule",
"type": "VFmodule",
+ "modelTypeName": "vfModules",
"count": 0,
"max": 1,
"children": [],
@@ -279,6 +288,7 @@ describe('Model Tree Generator service', () => {
"name": "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2",
"tooltip": "VFmodule",
"type": "VFmodule",
+ "modelTypeName": "vfModules",
"count": 0,
"max": 1,
"children": [],
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.ts
index f1ebdaff9..c3c8fa1b3 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToModelTree/objectToModelTree.service.ts
@@ -121,11 +121,11 @@ export class ObjectToModelTreeService {
node.getNodeCount = (node, serviceId) => levelNodeInfo.getNodeCount(node, serviceId);
node.getMenuAction = (node, serviceId) => levelNodeInfo.getMenuAction(node, serviceId);
node.showNodeIcons = (node, serviceId) => levelNodeInfo.showNodeIcons(node, serviceId);
- node.typeName = levelNodeInfo.typeName;
node.getModel = levelNodeInfo.getModel.bind(levelNodeInfo);
- node.getInfo = !_.isNil(levelNodeInfo.getInfo) ? levelNodeInfo.getInfo.bind(levelNodeInfo) : () => {
- };
+ node.getInfo = !_.isNil(levelNodeInfo.getInfo) ? levelNodeInfo.getInfo.bind(levelNodeInfo) : () => {};
node.componentInfoType = levelNodeInfo.componentInfoType;
+ node.typeName = levelNodeInfo.typeName;
+ node.modelTypeName = levelNodeInfo.name;
return node;
}
}
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToTree.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToTree.service.ts
index 9b68627e2..a70b7efeb 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToTree.service.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/objectToTree.service.ts
@@ -15,7 +15,6 @@ import {VfModulePopupService} from "../../../shared/components/genericFormPopup/
import {VnfGroupingModelInfo} from "./models/vnfGrouping/vnfGrouping.model.info";
import {VnfGroupPopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service";
import {DuplicateService} from "../duplicate/duplicate.service";
-import {SdcUiServices} from "onap-ui-angular";
import {IframeService} from "../../../shared/utils/iframe.service";
import {ComponentInfoService} from "../component-info/component-info.service";
import {PnfModelInfo} from "./models/pnf/pnf.model.info";
@@ -24,8 +23,9 @@ import {AaiService} from "../../../shared/services/aaiService/aai.service";
import {VrfModelInfo} from "./models/vrf/vrf.model.info";
import {NetworkStepService} from "./models/vrf/vrfModal/networkStep/network.step.service";
import {VpnStepService} from "./models/vrf/vrfModal/vpnStep/vpn.step.service";
-import { VfModuleUpgradePopupService } from "../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
+import {VfModuleUpgradePopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
import {FeatureFlagsService} from "../../../shared/services/featureFlag/feature-flags.service";
+import {ModalService} from "../../../shared/components/customModal/services/modal.service";
@Injectable()
export class ObjectToTreeService {
@@ -39,7 +39,7 @@ export class ObjectToTreeService {
private _vfModuleUpgradePopupService : VfModuleUpgradePopupService,
private _vnfGroupPopupService : VnfGroupPopupService,
private _duplicateService : DuplicateService,
- private _modalService: SdcUiServices.ModalService,
+ private _modalService: ModalService,
private _iframeService : IframeService,
private _componentInfoService : ComponentInfoService,
private _networkStepService : NetworkStepService,
@@ -50,15 +50,13 @@ export class ObjectToTreeService {
}
-
-
/***********************************************************
* return all first optional first level of the model tree
************************************************************/
getFirstLevelOptions(): ILevelNodeInfo[] {
return [new VnfModelInfo(this._dynamicInputsService, this._sharedTreeService, this._defaultDataGeneratorService, this._dialogService, this._vnfPopupService, this._vfModulePopupService, this._vfModuleUpgradePopupService,this._duplicateService, this._modalService, this._iframeService, this._componentInfoService, this._featureFlagsService, this._store)
, new NetworkModelInfo(this._dynamicInputsService, this._sharedTreeService, this._dialogService, this._networkPopupService, this._duplicateService, this._modalService, this._iframeService, this._featureFlagsService, this._store),
- new PnfModelInfo(),
+ new PnfModelInfo(this._sharedTreeService),
new VrfModelInfo(this._store, this._sharedTreeService, this._dialogService, this._iframeService, this._featureFlagsService, this._networkStepService, this._vpnStepService),
new CollectionResourceModelInfo(this._store, this._sharedTreeService),
new ConfigurationModelInfo(this._dynamicInputsService, this._sharedTreeService),
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.spec.ts
index 3a65b93ef..8905d4110 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.spec.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.spec.ts
@@ -42,6 +42,8 @@ import {VpnStepService} from "./models/vrf/vrfModal/vpnStep/vpn.step.service";
import {NetworkStepService} from "./models/vrf/vrfModal/networkStep/network.step.service";
import {VfModuleUpgradePopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
import {SharedControllersService} from "../../../shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {ModalService} from "../../../shared/components/customModal/services/modal.service";
+import {CreateDynamicComponentService} from "../../../shared/components/customModal/services/create-dynamic-component.service";
class MockAppStore<T> {
getState() {
@@ -61,7 +63,7 @@ function getNodeWithData(menuAction:string){
};
nodeData['menuActions'][menuAction] = {
method: (node, serviceModelId) => {}
- }
+ };
const node = {
parent: {
data: nodeData,
@@ -114,6 +116,8 @@ describe('Shared Tree Service', () => {
ComponentInfoService,
NetworkStepService,
VpnStepService,
+ ModalService,
+ CreateDynamicComponentService,
{provide: NgRedux, useClass: MockAppStore}
]
});
@@ -130,7 +134,7 @@ describe('Shared Tree Service', () => {
test('SharedTreeService upgradeBottomUp should call redux actions', () => {
const serviceModelId = "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd";
- const node = getNodeWithData("upgrade")
+ const node = getNodeWithData("upgrade");
spyOn(node.parent.data.menuActions['upgrade'], 'method');
service.upgradeBottomUp(node, serviceModelId);
expect(node.parent.data.menuActions['upgrade'].method).toBeCalledWith(node.parent, serviceModelId);
@@ -140,7 +144,7 @@ describe('Shared Tree Service', () => {
test('SharedTreeService undoUpgradeBottomUp should call redux actions', () => {
const serviceModelId = "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd";
- const node = getNodeWithData("undoUpgrade")
+ const node = getNodeWithData("undoUpgrade");
spyOn(node.parent.data.menuActions['undoUpgrade'], 'method');
service.undoUpgradeBottomUp(node, serviceModelId);
expect(node.parent.data.menuActions['undoUpgrade'].method).toBeCalledWith(node.parent, serviceModelId);
@@ -162,7 +166,37 @@ describe('Shared Tree Service', () => {
expect(MessageBoxService.openModal.next).toHaveBeenCalled();
});
- test('openAuditInfoModal should open modal for failed instance', () => {
+ each([
+ ['volumeGroups by entry name', "volumeGroups",
+ "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_vRE_BV..module-1", "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1"],
+ ['vfmodule by customizationUuid', "vfModules",
+ "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401", "2017488PasqualeVpe..PASQUALE_vRE_BV..module-1"],
+ ['vnf by customizationUuid', "vnfs",
+ "1da7b585-5e61-4993-b95e-8e6606c81e45", "2017-488_PASQUALE-vPE 0"],
+ ['vnfGroups by invariantUuid because no customizationUuid', "vnfGroups",
+ "4bb2e27e-ddab-4790-9c6d-1f731bc14a45", "groupingservicefortest..ResourceInstanceGroup..0"],
+ ]).test('modelByIdentifier should success: %s', (description, modelTypeName, modelUniqueIdOrName, expectedModelCustomizationName) => {
+ let serviceModelFromHierarchy =
+ getStore().service.serviceHierarchy["1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"];
+
+ expect(service.modelByIdentifiers(serviceModelFromHierarchy, modelTypeName, modelUniqueIdOrName))
+ .toHaveProperty("modelCustomizationName", expectedModelCustomizationName);
+ });
+
+ each([
+ ['vfmodule by invariantUuid when there is customizationUuid', "vfModules", "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1"],
+ ['network by non-existing modelUniqueIdOrName', "networks", "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1"],
+ ['collectionResource has no resource', "collectionResources", "whatever"],
+ ['non-existing model-type', "fooBar", "whatever"],
+ ]).test('modelByIdentifier should fail: %s', (description, modelTypeName, modelUniqueIdOrName) => {
+ let serviceModelFromHierarchy =
+ getStore().service.serviceHierarchy["1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"];
+
+ expect(service.modelByIdentifiers(serviceModelFromHierarchy, modelTypeName, modelUniqueIdOrName))
+ .toBeUndefined();
+ });
+
+ test('openAuditInfoModalInsideIframe should open modal for failed instance', () => {
jest.spyOn(AuditInfoModalComponent.openInstanceAuditInfoModal, 'next');
let modelInfoServiceMock: ILevelNodeInfo = new VnfModelInfo(null, null,
@@ -230,7 +264,6 @@ describe('Shared Tree Service', () => {
});
-
test('statusProperties should be prop on node according to node properties', () => {
let node = service.addingStatusProperty({orchStatus: 'completed', provStatus: 'inProgress', inMaint: false});
expect(node.statusProperties).toBeDefined();
@@ -250,6 +283,39 @@ describe('Shared Tree Service', () => {
testId: 'inMaint'
})]);
});
+
+ each([
+ [false, 'method is not in menu actions', ServiceInstanceActions.None, DrawingBoardModes.EDIT, {}, true],
+ [false, 'there is no action in node', null, DrawingBoardModes.EDIT, {someMethod: "someValue"}, true],
+ [true, 'edit mode, action is none, method in menu action', ServiceInstanceActions.None, DrawingBoardModes.EDIT, {someMethod: "someValue"}, true],
+ [false, 'edit mode, action is none, method in menu action, macro service', ServiceInstanceActions.None, DrawingBoardModes.EDIT, {someMethod: "someValue"}, false],
+ [false, 'edit mode, action is not none, method in menu action', ServiceInstanceActions.Resume, DrawingBoardModes.EDIT, {someMethod: "someValue"}, true],
+ [false, 'edit mode, action is CREATE, method in menu action', ServiceInstanceActions.Resume, DrawingBoardModes.EDIT, {someMethod: "someValue"}, true]
+ ]).test('shouldShowButtonGeneric return %s if %s ', (expected, description, action, mode, menuActions, isALaCarte) => {
+ jest.spyOn(store, 'getState').mockReturnValue(<any>{
+ global: {
+ drawingBoardStatus: mode
+ },
+ service : {
+ serviceInstance: {
+ someModelId : {
+ isALaCarte
+ }
+ }
+
+ }
+ });
+ let node = <any>{
+ data:{
+ action: action,
+ menuActions: menuActions
+ },
+ };
+
+ let res = service.shouldShowButtonGeneric(node, "someMethod", "someModelId");
+ expect(res).toBe(expected);
+ });
+
const enableRemoveAndEditItemsDataProvider = [
['Create action CREATE mode', DrawingBoardModes.CREATE ,ServiceInstanceActions.Create, true],
['Create action VIEW mode',DrawingBoardModes.VIEW , ServiceInstanceActions.Create,false],
@@ -272,205 +338,61 @@ describe('Shared Tree Service', () => {
let res = service.shouldShowRemoveAndEdit(node);
expect(res).toBe(enabled);
});
-});
-function generateService() {
- return {
- "vnfs": {
- "2017-488_PASQUALE-vPE 0": {
- "inMaint": false,
- "rollbackOnFailure": "true",
- "originalName": "2017-488_PASQUALE-vPE 0",
- "isMissingData": false,
- "trackById": "stigekyxrqi",
- "vfModules": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0": {
- "2017488_pasqualevpe0..2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0gytfi": {
- "isMissingData": false,
- "sdncPreReload": null,
- "modelInfo": {
- "modelType": "VFmodule",
- "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
- "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
- "modelName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0",
- "modelVersion": "5",
- "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
- "modelCustomizationName": "2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0"
- },
- "instanceParams": [{}],
- "trackById": "3oj23o7nupo"
+
+
+ const isVfmoduleAlmostPartOfModelOnlyCustomizationUuidDifferProvider = [
+ ['node is part of model, but vfmodule diff by customization',
+ true, 'mDNS 01222020 0', '9fdc68e9-9f53-431c-b8a2-7e337b9a0d0a', '82160e6e-d9c4-45ef-bd19-01573ab11b61'],
+
+ ['vnf model-name not found',
+ false, 'mDNS 01222020 1', '9fdc68e9-9f53-431c-b8a2-7e337b9a0d0a', '82160e6e-d9c4-45ef-bd19-01573ab11b61'],
+
+ ['vfmodule invariant-id not found',
+ false, 'mDNS 01222020 0', 'wrong invariant-id', '82160e6e-d9c4-45ef-bd19-01573ab11b61'],
+
+ ['vfmodule customization-id match',
+ false, 'mDNS 01222020 0', '9fdc68e9-9f53-431c-b8a2-7e337b9a0d0a', 'c9b32003-febc-44e0-a97f-7630fa7fa4a0'],
+ ];
+
+ each(isVfmoduleAlmostPartOfModelOnlyCustomizationUuidDifferProvider).test('isVfmoduleAlmostPartOfModelOnlyCustomizationUuidDiffer: when %s should return %s', (description, expected, vnfModelName, invariantUuid, customizationUuid) => {
+ const serviceModelId : string = 'a243da28-c11e-45a8-9f26-0284a9a789bc';
+ spyOn(store, 'getState').and.returnValue({
+ service : {
+ serviceHierarchy : {
+ [serviceModelId] : {
+ vnfs : {
+ [vnfModelName] : {
+ vfModules : {
+ vfModuleModelName : {
+ invariantUuid : invariantUuid,
+ customizationUuid : customizationUuid
+ }
+ }
+ }
}
}
- },
- "vnfStoreKey": "2017-488_PASQUALE-vPE 0",
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "productFamilyId": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
- "lcpCloudRegionId": "AAIAIC25",
- "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
- "lineOfBusiness": "ONAP",
- "platformName": "xxx1",
- "modelInfo": {
- "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
- "modelName": "2017-488_PASQUALE-vPE",
- "modelVersion": "5.0",
- "modelCustomizationName": "2017-488_PASQUALE-vPE 0",
- "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
- "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
- },
- "legacyRegion": "11111111",
- "instanceParams": [{}]
- },
- "2017-388_PASQUALE-vPE 0": {
- "inMaint": false,
- "rollbackOnFailure": "true",
- "originalName": "2017-388_PASQUALE-vPE 0",
- "isMissingData": false,
- "trackById": "nib719t5vca",
- "vfModules": {},
- "vnfStoreKey": "2017-388_PASQUALE-vPE 0",
- "productFamilyId": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
- "lcpCloudRegionId": "AAIAIC25",
- "legacyRegion": "11111",
- "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
- "platformName": "platform",
- "lineOfBusiness": "zzz1",
- "instanceParams": [{}],
- "modelInfo": {
- "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
- "modelVersionId": "afacccf6-397d-45d6-b5ae-94c39734b168",
- "modelName": "2017-388_PASQUALE-vPE",
- "modelVersion": "4.0",
- "modelCustomizationId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
- "modelCustomizationName": "2017-388_PASQUALE-vPE 0",
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168"
- },
- "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168"
- },
- "2017-388_PASQUALE-vPE 1": {
- "inMaint": false,
- "rollbackOnFailure": "true",
- "originalName": "2017-388_PASQUALE-vPE 1",
- "isMissingData": false,
- "trackById": "cv7l1ak8vpe",
- "vfModules": {},
- "vnfStoreKey": "2017-388_PASQUALE-vPE 1",
- "productFamilyId": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
- "lcpCloudRegionId": "AAIAIC25",
- "legacyRegion": "123",
- "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
- "platformName": "platform",
- "lineOfBusiness": "ONAP",
- "instanceParams": [{}],
- "modelInfo": {
- "modelInvariantId": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
- "modelVersionId": "0903e1c0-8e03-4936-b5c2-260653b96413",
- "modelName": "2017-388_PASQUALE-vPE",
- "modelVersion": "1.0",
- "modelCustomizationId": "280dec31-f16d-488b-9668-4aae55d6648a",
- "modelCustomizationName": "2017-388_PASQUALE-vPE 1",
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413"
- },
- "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413"
- }
- },
- "instanceParams": [{}],
- "validationCounter": 0,
- "existingNames": {"yoav": ""},
- "existingVNFCounterMap": {
- "69e09f68-8b63-4cc9-b9ff-860960b5db09": 1,
- "afacccf6-397d-45d6-b5ae-94c39734b168": 1,
- "0903e1c0-8e03-4936-b5c2-260653b96413": 1
- },
- "existingVnfGroupCounterMap": {
- "daeb6568-cef8-417f-9075-ed259ce59f48": 0,
- "c2b300e6-45de-4e5e-abda-3032bee2de56": -1
- },
- "existingNetworksCounterMap": {"ddc3f20c-08b5-40fd-af72-c6d14636b986": 1},
- "networks": {
- "ExtVL 0": {
- "inMaint": false,
- "rollbackOnFailure": "true",
- "originalName": "ExtVL 0",
- "isMissingData": false,
- "trackById": "s6okajvv2n8",
- "networkStoreKey": "ExtVL 0",
- "productFamilyId": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
- "lcpCloudRegionId": "AAIAIC25",
- "legacyRegion": "12355555",
- "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
- "platformName": "platform",
- "lineOfBusiness": null,
- "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"
+ }
}
- },
- "vnfGroups": {
- "groupingservicefortest..ResourceInstanceGroup..0": {
- "inMaint": false,
- "rollbackOnFailure": "true",
- "originalName": "groupingservicefortest..ResourceInstanceGroup..0",
- "isMissingData": false,
- "trackById": "se0obn93qq",
- "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"
+ });
+
+ const node = <any>{
+ data:{
+ modelInvariantId : '9fdc68e9-9f53-431c-b8a2-7e337b9a0d0a',
+ modelCustomizationId : 'c9b32003-febc-44e0-a97f-7630fa7fa4a0',
+ modelName : 'vfModuleModelName'
+ },
+ parent : {
+ data : {
+ modelName : "mDNS 01222020 0"
+ }
}
- },
- "instanceName": "yoav",
- "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
- "subscriptionServiceType": "TYLER SILVIA",
- "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
- "productFamilyId": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
- "lcpCloudRegionId": "AAIAIC25",
- "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
- "aicZoneId": "ATL53",
- "pause": null,
- "projectName": "WATKINS",
- "rollbackOnFailure": "true",
- "bulkSize": 1,
- "aicZoneName": "AAIATLTE-ATL53",
- "owningEntityName": "WayneHolland",
- "testApi": "VNF_API",
- "isEcompGeneratedNaming": false,
- "tenantName": "USP-SIP-IC-24335-T-01",
- "modelInfo": {
- "modelInvariantId": "cdb90b57-ed78-4d44-a5b4-7f43a02ec632",
- "modelVersionId": "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
- "modelName": "action-data",
- "modelVersion": "1.0",
- "uuid": "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"
- },
- "isALaCarte": false,
- "name": "action-data",
- "version": "1.0",
- "description": "PASQUALE vMX vPE based on Juniper 17.2 release. Updated with updated VF for v8.0 of VLM",
- "category": "Network L1-3",
- "uuid": "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
- "invariantUuid": "cdb90b57-ed78-4d44-a5b4-7f43a02ec632",
- "serviceType": "pnf",
- "serviceRole": "Testing",
- "vidNotions": {"instantiationUI": "legacy", "modelCategory": "other", "viewEditUI": "legacy"},
- "isMultiStepDesign": true
- };
-}
+ };
+
+ const isDiffCustomizationUuidResponse : boolean = service.isVfmoduleAlmostPartOfModelOnlyCustomizationUuidDiffer(node, serviceModelId);
+ expect(isDiffCustomizationUuidResponse).toEqual(expected);
+ });
+
+});
function getStore() {
return {
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.ts
index 1115d1bc6..9e7a0211e 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.ts
@@ -19,7 +19,6 @@ import {NodeInstance} from "../../../shared/models/nodeInstance";
@Injectable()
export class SharedTreeService {
- private _sharedTreeService: SharedTreeService;
constructor(private _store: NgRedux<AppState>) {
}
@@ -54,6 +53,51 @@ export class SharedTreeService {
: (nodeInstance.modelInfo.modelCustomizationId || nodeInstance.modelInfo.modelInvariantId);
};
+ modelUniqueNameOrId = (instance): string => {
+ if (_.isNil(instance)) {
+ return null;
+ }
+
+ const innerInstance = _.find(instance) || {};
+
+ return instance.originalName
+ || this.modelUniqueId(instance)
+ || innerInstance.originalName
+ || this.modelUniqueId(innerInstance);
+ };
+
+ /**
+ * Finds a model inside a full service model
+ * @param serviceModelFromHierarchy
+ * @param modelTypeName "vnfs" | "networks" | "vfModules" | "collectionResources" | ...
+ * @param modelUniqueNameOrId Either an entry name (i.e. "originalName"), modelCustomizationId or modelInvariantId.
+ * Note that modelInvariantId will work only where model lacks a modelCustomizationId.
+ * @param modelName An optional entry name (i.e. "originalName"); will not try to use as id
+ */
+ modelByIdentifiers = (serviceModelFromHierarchy, modelTypeName: string, modelUniqueNameOrId: string, modelName?: string): any => {
+ const logErrorAndReturnUndefined = () =>
+ console.info(`modelByIdentifiers: could not find a model matching query`, {
+ modelTypeName, modelUniqueNameOrId, modelName, serviceModelFromHierarchy
+ });
+
+ if (_.isNil(serviceModelFromHierarchy)) return logErrorAndReturnUndefined();
+
+ const modelsOfType = serviceModelFromHierarchy[modelTypeName];
+ if (_.isNil(modelsOfType)) return logErrorAndReturnUndefined();
+
+ const modelIfModelIdentifierIsEntryName = modelsOfType[modelUniqueNameOrId];
+ const modelIfModeNameExists = _.isNil(modelName) ? null : modelsOfType[modelName];
+
+ if (!_.isNil(modelIfModelIdentifierIsEntryName)) {
+ return modelIfModelIdentifierIsEntryName;
+ } else if (!_.isNil(modelIfModeNameExists)) {
+ return modelIfModeNameExists;
+ } else {
+ // try modelUniqueNameOrId as an id
+ return _.find(modelsOfType, o => (o.customizationUuid || o.invariantUuid) === modelUniqueNameOrId) || logErrorAndReturnUndefined()
+ }
+ };
+
hasMissingData(instance, dynamicInputs: any, isEcompGeneratedNaming: boolean, requiredFields: string[]): boolean {
if (!isEcompGeneratedNaming && _.isEmpty(instance.instanceName)) {
return true;
@@ -120,8 +164,8 @@ export class SharedTreeService {
/**********************************************
* should return true if can delete
**********************************************/
- shouldShowDelete(node): boolean {
- return this.shouldShowButtonGeneric(node, "delete")
+ shouldShowDelete(node, serviceModelId): boolean {
+ return this.shouldShowButtonGeneric(node, "delete", serviceModelId)
}
/**********************************************
@@ -173,21 +217,74 @@ export class SharedTreeService {
****************************************************/
shouldShowUpgrade(node, serviceModelId): boolean {
if (FeatureFlagsService.getFlagState(Features.FLAG_FLASH_REPLACE_VF_MODULE, this._store) &&
- this.isThereAnUpdatedLatestVersion(serviceModelId)) {
- return this.shouldShowButtonGeneric(node, VNFMethods.UPGRADE);
+ (this.isThereAnUpdatedLatestVersion(serviceModelId)) || this.isVfmoduleAlmostPartOfModelOnlyCustomizationUuidDiffer(node, serviceModelId)) {
+ return this.shouldShowButtonGeneric(node, VNFMethods.UPGRADE, serviceModelId);
}
else {
return false
}
}
- private isThereAnUpdatedLatestVersion(serviceModelId) : boolean{
- let serviceInstance = this._store.getState().service.serviceInstance[serviceModelId];
+
+ isVfmoduleAlmostPartOfModelOnlyCustomizationUuidDiffer(vfModuleNode, serviceModelId) : boolean {
+ /*
+ for `true`, should all:
+ 1. parent vnf found by model-mane
+ 2. vfmodule found by invariant
+ 3. vfmodule diff by customization
+ */
+
+ if (_.isNil(vfModuleNode.data)) {
+ return false;
+ }
+
+ const vnfHierarchy = this.getParentVnfHierarchy(vfModuleNode, serviceModelId);
+ if (_.isNil(vnfHierarchy)) {
+ return false;
+ }
+
+ const vfModuleHierarchyByInvariantId = this.getVfModuleHFromVnfHierarchyByInvariantId(vfModuleNode, vnfHierarchy);
+ if(_.isNil(vfModuleHierarchyByInvariantId)){
+ return false;
+ }
+
+ return vfModuleHierarchyByInvariantId.customizationUuid
+ && (vfModuleHierarchyByInvariantId.customizationUuid !== vfModuleNode.data.modelCustomizationId);
+ }
+
+ getParentVnfHierarchy(vfModuleNode, serviceModelId) {
+ if (vfModuleNode.parent && vfModuleNode.parent.data) {
+ return this._store.getState().service.serviceHierarchy[serviceModelId].vnfs[vfModuleNode.parent.data.modelName];
+ } else {
+ return null;
+ }
+ }
+
+ getVfModuleHFromVnfHierarchyByInvariantId(vfModuleNode, parentVnfHierarchy) {
+ if(vfModuleNode.data.modelInvariantId && parentVnfHierarchy && parentVnfHierarchy.vfModules){
+ return _.find(parentVnfHierarchy.vfModules, o => o.invariantUuid === vfModuleNode.data.modelInvariantId);
+ }
+ return null;
+ }
+
+
+ isThereAnUpdatedLatestVersion(serviceModelId) : boolean{
+ let serviceInstance = this.getServiceInstance(serviceModelId);
return !_.isNil(serviceInstance.latestAvailableVersion) && (Number(serviceInstance.modelInfo.modelVersion) < serviceInstance.latestAvailableVersion);
}
- private shouldShowButtonGeneric(node, method) {
+ private getServiceInstance(serviceModelId): any {
+ return this._store.getState().service.serviceInstance[serviceModelId];
+ }
+
+ shouldShowButtonGeneric(node, method, serviceModelId) {
const mode = this._store.getState().global.drawingBoardStatus;
+ const isMacro = !(this.getServiceInstance(serviceModelId).isALaCarte);
+
+ if (isMacro) { //if macro action allowed only for service level
+ return false;
+ }
+
if (!_.isNil(node) && !_.isNil(node.data) && !_.isNil(node.data.action) && !_.isNil(node.data.menuActions[method])) {
if (mode !== DrawingBoardModes.EDIT || node.data.action === ServiceInstanceActions.Create) {
return false;
@@ -269,7 +366,7 @@ export class SharedTreeService {
************************************************/
getExistingInstancesWithDeleteMode(node, serviceModelId: string, type: string): number {
let counter = 0;
- const existingInstances = this._store.getState().service.serviceInstance[serviceModelId][type];
+ const existingInstances = this.getServiceInstance(serviceModelId)[type];
const modelUniqueId = node.data.modelUniqueId;
if (!_.isNil(existingInstances)) {
for (let instanceKey in existingInstances) {
@@ -358,7 +455,13 @@ export class SharedTreeService {
AuditInfoModalComponent.openInstanceAuditInfoModal.next({
instanceId: serviceModelId,
type: instanceType,
- model: modelInfoService.getModel(node.data.modelName, instance, this._store.getState().service.serviceHierarchy[serviceModelId]),
+ model: modelInfoService.getModel(
+ this.modelByIdentifiers(
+ this._store.getState().service.serviceHierarchy[serviceModelId],
+ modelInfoService.name,
+ this.modelUniqueNameOrId(instance), node.data.modelName
+ )
+ ),
instance
});
}
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts
index cbe8445ca..59988f7c3 100644
--- a/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts
@@ -26,8 +26,8 @@ export class ServicePlanningComponent implements OnInit {
}
pageMode: DrawingBoardModes = DrawingBoardModes.CREATE;
- @ViewChild(DrawingBoardTreeComponent) drawingModelTree;
- @ViewChild(AvailableModelsTreeComponent) availableModelTree;
+ @ViewChild(DrawingBoardTreeComponent, {static: false}) drawingModelTree;
+ @ViewChild(AvailableModelsTreeComponent, {static: false}) availableModelTree;
isShowTree(): boolean {
return true;
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html
index 16b8c0132..dcc32a5e4 100644
--- a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html
@@ -65,13 +65,13 @@
<td class="mediumTd" id="created"><custom-ellipsis [id]="data.created" [value]="data.created | date:'MMM. dd, yyyy HH:mm'"></custom-ellipsis></td>
<td class="last" id="jobStatus" [ngClass]="data.jobStatus">
<custom-popover [value]="data.serviceStatus.tooltip" [popoverType]="data?.serviceStatus?.color" style="float: left;">
- <svg-icon
+ <custom-icon
id="jobStatusIcon-{{i}}"
(click)="auditInfo(data)"
[mode]="data.serviceStatus.color"
[size]="'large'"
[name]="data.serviceStatus.iconClassName">
- </svg-icon>
+ </custom-icon>
</custom-popover>
<div class="menu-div" (click)="onContextMenu($event, data)" [attr.data-tests-id]="'menu-'+data.jobId">
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts
index 4f84b7125..f27faac60 100644
--- a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts
@@ -39,7 +39,7 @@ export class InstantiationStatusComponent implements OnInit {
instantiationStatusComponentService: InstantiationStatusComponentService;
configurationService : ConfigurationService;
serviceInfoData: ServiceInfoModel[] = null;
- @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
+ @ViewChild(ContextMenuComponent, {static: false}) public contextMenu: ContextMenuComponent;
public contextMenuActions: Array<MenuAction> = [
{
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
index 5145784e2..3dff92cdc 100644
--- a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html
@@ -14,7 +14,14 @@
</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">
+ <div class="col-md-6 leftColumn"><span class="table-title">VID status</span></div>
+ <div class="col-md-6 rightColumn"><span *ngIf="showMoreAuditInfoLink">
+ <a id="full_screen_link" target="_parent" title="Full-screen audit info" [href]="readOnlyRetryUrl()">
+ <i class="fa fa-external-link"></i>
+ </a>
+ </span></div>
+ </div>
<div class="row" *ngIf="showVidStatus">
<table id="service-instantiation-audit-info-vid" class="table table-bordered">
<thead class="thead-dark">
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
index 95e9825da..3a7f4ecfa 100644
--- a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts
@@ -10,6 +10,7 @@ import {IframeService} from "../../utils/iframe.service";
import {NgRedux} from "@angular-redux/store";
import {AppState} from "../../store/reducers";
import {AuditInfoModalComponentService} from "./auditInfoModal.component.service";
+import {FeatureFlagsService, Features} from "../../services/featureFlag/feature-flags.service";
@Component({
selector: 'audit-info-modal',
@@ -19,11 +20,13 @@ import {AuditInfoModalComponentService} from "./auditInfoModal.component.service
export class AuditInfoModalComponent {
static openModal: Subject<ServiceInfoModel> = new Subject<ServiceInfoModel>();
static openInstanceAuditInfoModal: Subject<{instanceId , type, model, instance}> = new Subject<{instanceId , type, model, instance}>();
- @ViewChild('auditInfoModal') public auditInfoModal: ModalDirective;
+ @ViewChild('auditInfoModal', {static: false}) public auditInfoModal: ModalDirective;
title: string = 'Service Instantiation Information';
modelInfoItems: ModelInformationItem[] = [];
serviceModel: ServiceModel;
serviceModelName: string;
+ serviceModelId: string;
+ jobId: string;
vidInfoData: AuditStatus[] = [];
msoInfoData: AuditStatus[] = [];
isAlaCarte: boolean;
@@ -32,15 +35,18 @@ export class AuditInfoModalComponent {
model: any;
instanceId: string;
isALaCarteFlagOn: boolean;
+ showMoreAuditInfoLink: boolean;
type : string = "Service";
showVidStatus : boolean = true;
auditInfoModalComponentService : AuditInfoModalComponentService;
constructor(private _serviceInfoService: ServiceInfoService, private _iframeService : IframeService,
private _auditInfoModalComponentService : AuditInfoModalComponentService,
+ private _featureFlagsService: FeatureFlagsService,
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.showMoreAuditInfoLink = _featureFlagsService.getFlagState(Features.FLAG_MORE_AUDIT_INFO_LINK_ON_AUDIT_INFO);
this.initializeProperties();
this.showVidStatus = true;
if (jobData) {
@@ -48,6 +54,8 @@ export class AuditInfoModalComponent {
this.openAuditInfoModal(jobData);
_iframeService.addClassOpenModal(this.parentElementClassName);
this.serviceModelName = jobData.serviceModelName ? jobData.serviceModelName : '';
+ this.serviceModelId = jobData.serviceModelId;
+ this.jobId = jobData.jobId;
this.auditInfoModal.show();
} else {
_iframeService.removeClassCloseModal(this.parentElementClassName);
@@ -57,6 +65,7 @@ export class AuditInfoModalComponent {
AuditInfoModalComponent.openInstanceAuditInfoModal.subscribe(({instanceId , type , model, instance}) => {
this.showVidStatus = false;
+ this.showMoreAuditInfoLink = false;
this.initializeProperties();
this.setModalTitles(type);
this.serviceModelName = AuditInfoModalComponentService.getInstanceModelName(model);
@@ -118,5 +127,8 @@ export class AuditInfoModalComponent {
onNavigate(){
window.open("http://ecompguide.web.att.com:8000/#ecomp_ug/c_ecomp_ops_vid.htmll#r_ecomp_ops_vid_bbglossary", "_blank");
}
+
+ readOnlyRetryUrl = (): string =>
+ `../../serviceModels.htm?more#/servicePlanning/RETRY?serviceModelId=${this.serviceModelId}&jobId=${this.jobId}`
}
diff --git a/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.html b/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.html
new file mode 100644
index 000000000..a50522a67
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.html
@@ -0,0 +1,16 @@
+<div>
+ <button class="custom-button sdc-button__{{ type }} btn-{{ size }} {{ iconPositionClass }}"
+ [disabled]="disabled || show_spinner"
+ [attr.data-tests-id]="testId">
+ <custom-icon
+ *ngIf="icon_name"
+ [name]="icon_name"
+ [mode]="icon_mode"
+ [size]="'medium'"
+ >
+ </custom-icon>
+ {{text}}
+ </button>
+ <custom-icon *ngIf="show_spinner" name="spinner" [size]="'medium'" class="sdc-button__spinner"
+ [ngClass]="{left: spinner_position === placement.right}"></custom-icon>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.scss b/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.scss
new file mode 100644
index 000000000..89f90d44d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.scss
@@ -0,0 +1,273 @@
+.custom-button {
+ order: 1;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: row;
+ outline: none;
+ border-radius: 2px;
+ padding: 0 12px;
+ height: 36px;
+ line-height: 36px;
+ width: 120px;
+ min-width: 90px;
+ cursor: pointer;
+ text-align: center;
+ text-transform: uppercase;
+ font-family: OpenSans-Regular, Arial, sans-serif;
+ font-style: normal;
+ font-weight: 400;
+ font-size: 14px;
+ /*** Sizes ***/
+ /*** Sizes ***/
+ /*** Buttons with icons ***/
+}
+
+.custom-button:disabled {
+ cursor: default;
+}
+
+.custom-button.sdc-button__primary {
+ border: 1px solid transparent;
+ background-color: #009fdb;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__primary:not(:disabled):hover, .custom-button.sdc-button__primary:not(:disabled):active {
+ background-color: #1eb9f3;
+}
+
+.custom-button.sdc-button__primary:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #1eb9f3;
+ box-shadow: 0px 0px 0px 1px #1eb9f3;
+}
+
+.custom-button.sdc-button__primary:disabled {
+ background: #9dd9ef;
+}
+
+.custom-button.sdc-button__secondary {
+ border: 1px solid #009fdb;
+ background-color: transparent;
+ color: #009fdb;
+}
+
+.custom-button.sdc-button__secondary:not(:disabled):hover, .custom-button.sdc-button__secondary:not(:disabled):active {
+ background-color: #1eb9f3;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__secondary:not(:disabled):focus:not(:active) {
+ color: #1eb9f3;
+ box-shadow: inset 0px 0px 0px 0px #0568ae, 0px 0px 0px 1px #009fdb;
+}
+
+.custom-button.sdc-button__secondary:not(:disabled):focus:not(:active):hover {
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__secondary:disabled {
+ color: #9dd9ef;
+ border-color: #9dd9ef;
+}
+
+.custom-button.sdc-button__link {
+ background-color: transparent;
+ color: #009fdb;
+ fill: #009fdb;
+ border: none;
+}
+
+.custom-button.sdc-button__link:not(:disabled):hover, .custom-button.sdc-button__link:not(:disabled):active {
+ color: #1eb9f3;
+}
+
+.custom-button.sdc-button__link:not(:disabled):focus:not(:active) {
+ border: 1px solid #0568ae;
+ color: #1eb9f3;
+}
+
+.custom-button.sdc-button__link:disabled {
+ color: #9dd9ef;
+}
+
+.custom-button.sdc-button__success {
+ border: 1px solid transparent;
+ background-color: #4ca90c;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__success:not(:disabled):hover, .custom-button.sdc-button__success:not(:disabled):active {
+ background-color: #57c00e;
+}
+
+.custom-button.sdc-button__success:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #57c00e;
+ box-shadow: 0px 0px 0px 1px #57c00e;
+}
+
+.custom-button.sdc-button__success:disabled {
+ background: #a5d485;
+}
+
+.custom-button.sdc-button__error, .custom-button.sdc-button__alert {
+ border: 1px solid transparent;
+ background-color: #cf2a2a;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__error:not(:disabled):hover, .custom-button.sdc-button__error:not(:disabled):active, .custom-button.sdc-button__alert:not(:disabled):hover, .custom-button.sdc-button__alert:not(:disabled):active {
+ background-color: #ed4141;
+}
+
+.custom-button.sdc-button__error:not(:disabled):focus:not(:active), .custom-button.sdc-button__alert:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #ed4141;
+ box-shadow: 0px 0px 0px 1px #ed4141;
+}
+
+.custom-button.sdc-button__error:disabled, .custom-button.sdc-button__alert:disabled {
+ background: #f4adad;
+}
+
+.custom-button.sdc-button__warning {
+ border: 1px solid transparent;
+ background-color: #ffb81c;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__warning:not(:disabled):hover, .custom-button.sdc-button__warning:not(:disabled):active {
+ background-color: #f6c632;
+}
+
+.custom-button.sdc-button__warning:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #f6c632;
+ box-shadow: 0px 0px 0px 1px #f6c632;
+}
+
+.custom-button.sdc-button__warning:disabled {
+ background: #ffdb8d;
+}
+
+.custom-button.sdc-button__info {
+ border: 1px solid transparent;
+ background-color: #009fdb;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__info:not(:disabled):hover, .custom-button.sdc-button__info:not(:disabled):active {
+ background-color: #1eb9f3;
+}
+
+.custom-button.sdc-button__info:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #1eb9f3;
+ box-shadow: 0px 0px 0px 1px #1eb9f3;
+}
+
+.custom-button.sdc-button__info:disabled {
+ background: #9dd9ef;
+}
+
+.custom-button.sdc-button__file-opener input[type=file] {
+ height: 36px;
+ opacity: 0;
+ position: absolute;
+ cursor: pointer;
+}
+
+.custom-button.btn-xx-large {
+ width: 350px;
+}
+
+.custom-button.btn-xx-large input[type=file] {
+ width: 350px;
+}
+
+.custom-button.btn-x-large {
+ width: 250px;
+}
+
+.custom-button.btn-x-large input[type=file] {
+ width: 250px;
+}
+
+.custom-button.btn-large {
+ width: 180px;
+}
+
+.custom-button.btn-large input[type=file] {
+ width: 180px;
+}
+
+.custom-button.btn-medium {
+ width: 140px;
+}
+
+.custom-button.btn-medium input[type=file] {
+ width: 140px;
+}
+
+.custom-button.btn-small {
+ width: 110px;
+}
+
+.custom-button.btn-small input[type=file] {
+ width: 110px;
+}
+
+.custom-button.btn-x-small {
+ width: 90px;
+}
+
+.custom-button.btn-x-small input[type=file] {
+ width: 90px;
+}
+
+.custom-button.btn-default {
+ width: auto;
+}
+
+.custom-button.btn-default input[type=file] {
+ width: auto;
+}
+
+.custom-button.sdc-icon-right {
+ flex-direction: row-reverse;
+}
+
+.custom-button.sdc-icon-right .svg-icon {
+ margin-left: 15px;
+}
+
+.custom-button.sdc-icon-left {
+ flex-direction: row;
+}
+
+.custom-button.sdc-icon-left .svg-icon {
+ margin-right: 15px;
+}
+
+.custom-button svg {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.sdc-button__wrapper {
+ display: inline-flex;
+}
+
+.sdc-button__spinner {
+ padding-top: 6px;
+ margin: 0 2px;
+}
+
+.sdc-button__spinner.left {
+ order: 2;
+}
diff --git a/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.ts b/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.ts
new file mode 100644
index 000000000..61fa02832
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customButton/custom-button.component.ts
@@ -0,0 +1,65 @@
+import {Component, HostBinding, Input, OnInit} from "@angular/core";
+import {IButtonComponent} from "../customModal/models/modal-button.model";
+import {ButtonType} from "../customModal/models/button.type";
+import {Mode} from "./models/mode.model";
+import {Placement} from "../customModal/models/modal.placement";
+
+
+@Component({
+ selector: "sdc-button",
+ templateUrl: './custom-button.component.html',
+ styleUrls: ['./custom-button.component.scss']
+
+})
+
+export class CustomButtonComponent implements OnInit, IButtonComponent {
+ @Input() public text: string;
+ @Input() public disabled: boolean;
+ @Input() public type: ButtonType;
+ @Input() public icon_mode: Mode;
+ @Input() public size: string;
+ @Input() public preventDoubleClick: boolean;
+ @Input() public icon_name: string;
+ @Input() public icon_position: string;
+ @Input() public show_spinner: boolean;
+ @Input() public spinner_position: Placement;
+ @Input() public testId: string;
+
+ public placement = Placement;
+ private lastClick: Date;
+ public iconPositionClass: string;
+
+ @HostBinding('class.sdc-button__wrapper') true;
+
+ constructor() {
+ this.type = ButtonType.primary;
+ this.size = "default";
+ this.disabled = false;
+ }
+
+ public ngOnInit(): void {
+ this.iconPositionClass = this.icon_position ? 'sdc-icon-' + this.icon_position : '';
+ }
+
+ public onClick = (e): void => {
+ const now: Date = new Date();
+ if (this.preventDoubleClick && this.lastClick && (now.getTime() - this.lastClick.getTime()) <= 500) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ this.lastClick = now;
+ }
+
+ public disableButton = () => {
+ if (!this.disabled) {
+ this.disabled = true;
+ }
+ }
+
+ public enableButton = () => {
+ if (this.disabled) {
+ this.disabled = false;
+ }
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/customButton/models/mode.model.ts b/vid-webpack-master/src/app/shared/components/customButton/models/mode.model.ts
new file mode 100644
index 000000000..c8a7ddef3
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customButton/models/mode.model.ts
@@ -0,0 +1,10 @@
+export enum Mode {
+ primary = 'primary',
+ primary2 = 'primary2',
+ secondary = 'secondary',
+ success = 'success',
+ error = 'error',
+ warning = 'warning',
+ info = 'info',
+ white = 'white'
+}
diff --git a/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.html b/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.html
new file mode 100644
index 000000000..0ac56d2d2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.html
@@ -0,0 +1,2 @@
+<div [ngClass]="classes" [attr.disabled]="disabled || undefined" [innerHtml]="svgIconContentSafeHtml"
+ [attr.data-tests-id]="testId"></div>
diff --git a/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.scss b/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.scss
new file mode 100644
index 000000000..54b375702
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.scss
@@ -0,0 +1,297 @@
+@import 'node_modules/onap-ui-common/lib/scss/variables.scss';
+
+:host {
+ display: inline-flex;
+}
+
+@mixin color-icon($primary-color) {
+ color: $primary-color;
+ fill: $primary-color;
+}
+
+@mixin color-icon-hover($secondary-color) {
+ &.clickable {
+ cursor: pointer;
+ &:not([disabled]):hover, &:active, &:focus {
+ @include color-icon($secondary-color);
+ }
+ }
+}
+
+@mixin color-icon-label($primary-color) {
+ @include color-icon($primary-color);
+
+ .custom-icon {
+ @include color-icon($primary-color);
+ }
+}
+
+@mixin color-icon-label-hover($secondary-color) {
+ &.clickable {
+ &:not([disabled]):hover, &:active, &:focus {
+ @include color-icon-label($secondary-color);
+ }
+ }
+}
+
+/deep/ .custom-icon {
+ display: inline-flex;
+ width: 24px;
+ height: 24px;
+ box-sizing: content-box;
+
+ & > svg {
+ width: 100%;
+ height: 100%;
+ }
+
+ &[disabled] {
+ opacity: 0.7;
+ }
+
+ &.mode-primary {
+ @include color-icon($blue);
+ @include color-icon-hover($light-blue);
+ }
+
+ &.mode-primary2 {
+ @include color-icon($dark-gray);
+ @include color-icon-hover($light-blue);
+ }
+
+ &.mode-secondary {
+ @include color-icon($gray);
+ @include color-icon-hover($dark-gray);
+ }
+
+ &.mode-success {
+ @include color-icon($green);
+ }
+
+ &.mode-error {
+ @include color-icon($red);
+ }
+
+ &.mode-warning {
+ @include color-icon($yellow);
+ }
+
+ &.mode-info {
+ @include color-icon($text-black);
+ @include color-icon-hover($dark-blue);
+ }
+
+ &.mode-white {
+ @include color-icon($white);
+ @include color-icon-hover($light-gray);
+ }
+
+ &.size-x_small {
+ width: 8px;
+ height: 8px;
+ }
+
+ &.size-small {
+ width: 12px;
+ height: 12px;
+ }
+
+ &.size-medium {
+ width: 16px;
+ height: 16px;
+ }
+
+ &.size-large {
+ width: 24px;
+ height: 24px;
+ }
+
+ &.size-x_large {
+ width: 36px;
+ height: 36px;
+ }
+
+ &.size-x_x_large {
+ width: 48px;
+ height: 48px;
+ }
+
+ &.bg-type-circle {
+ border-radius: 50%;
+ padding: 6px;
+ }
+
+ &.bg-type-rectangle {
+ padding: 6px;
+ }
+
+ &.bg-color-purple {
+ background-color: $purple;
+ }
+
+ &.bg-color-light-blue {
+ background-color: $light-blue;
+ }
+
+ &.bg-color-green {
+ background-color: $green;
+ }
+
+ &.bg-color-red {
+ background-color: $red;
+ }
+
+ &.bg-color-yellow {
+ background-color: $yellow;
+ }
+
+ &.bg-color-blue {
+ background-color: $blue;
+ }
+
+ &.bg-color-lightBlue {
+ background-color: $light-blue;
+ }
+
+ &.bg-color-darkBlue {
+ background-color: $dark-blue;
+ }
+
+ &.bg-color-darkBlue2 {
+ background-color: $dark-blue2;
+ }
+
+ &.bg-color-disabledBlue {
+ background-color: $disabled-blue;
+ }
+
+ &.bg-color-gray {
+ background-color: $gray;
+ }
+
+ &.bg-color-white {
+ background-color: $white;
+ }
+
+ &.bg-color-transparent {
+ background-color:transparent;
+ }
+ &.bg-color-silver {
+ background-color: $light-silver;
+ }
+}
+
+.custom-icon-wrapper {
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+
+ &.custom-icon-label {
+ }
+
+ &.custom-icon {
+ }
+
+ &[disabled] {
+ opacity: 0.7;
+ }
+
+ &.label-placement-bottom {
+ flex-direction: column;
+ .custom-icon-label {
+ margin-top: 0.25em;
+ }
+ }
+
+ &.label-placement-right {
+ .custom-icon-label {
+ margin-left: 0.25em;
+ }
+ }
+
+ &.label-placement-top {
+ flex-direction: column-reverse;
+ .custom-icon-label {
+ margin-bottom: 0.25em;
+ }
+ }
+
+ &.label-placement-left {
+ flex-direction: row-reverse;
+ .custom-icon-label {
+ margin-right: 0.25em;
+ }
+ }
+
+ &.mode-primary {
+ @include color-icon-label($blue);
+ @include color-icon-label-hover($light-blue);
+ }
+
+ &.mode-secondary {
+ @include color-icon-label($gray);
+ @include color-icon-label-hover($light-blue);
+ }
+
+ &.mode-success {
+ @include color-icon-label($green);
+ }
+
+ &.mode-error {
+ @include color-icon-label($red);
+ }
+
+ &.mode-warning {
+ @include color-icon-label($yellow);
+ }
+
+ &.mode-info {
+ @include color-icon-label($text-black);
+ @include color-icon-label-hover($light-blue);
+ }
+
+ &.size-x_small {
+ font-size: 8px;
+ line-height: 10px;
+
+ .custom-icon {
+ @extend .custom-icon.size-x_small;
+ }
+ }
+
+ &.size-small {
+ font-size: 12px;
+ line-height: 14px;
+
+ .custom-icon {
+ @extend .custom-icon.size-small;
+ }
+ }
+
+ &.size-medium {
+ font-size: 16px;
+ line-height: 20px;
+
+ .custom-icon {
+ @extend .custom-icon.size-medium;
+ }
+ }
+
+ &.size-large {
+ font-size: 24px;
+ line-height: 28px;
+
+ .custom-icon {
+ @extend .custom-icon.size-large;
+ }
+ }
+
+ &.size-x_large {
+ font-size: 34px;
+ line-height: 40px;
+
+ .custom-icon {
+ @extend .custom-icon.size-x_large;
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.ts b/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.ts
new file mode 100644
index 000000000..c59bc5945
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customIcon/custom-icon.component.ts
@@ -0,0 +1,85 @@
+import {Component, Input, OnChanges, SimpleChanges} from "@angular/core";
+import {Mode} from "../customButton/models/mode.model";
+import {Size} from "./models/icon-size.model";
+import {BackgroundShape} from "./models/background-shape.model";
+import {BackgroundColor} from "./models/background-color.model";
+import {DomSanitizer, SafeHtml} from "@angular/platform-browser";
+import {iconsMap} from 'onap-ui-common';
+
+@Component({
+ selector: 'custom-icon',
+ templateUrl: './custom-icon.component.html',
+ styleUrls: ['./custom-icon.component.scss'],
+})
+export class SvgIconComponent implements OnChanges {
+
+ @Input() public name: string;
+ @Input() public type: string;
+ @Input() public mode: Mode;
+ @Input() public size: Size;
+ @Input() public backgroundShape: BackgroundShape;
+ @Input() public backgroundColor: BackgroundColor;
+ @Input() public disabled: boolean;
+ @Input() public clickable: boolean;
+ @Input() public className: any;
+ @Input() public testId: string;
+
+ public svgIconContent: string;
+ public svgIconContentSafeHtml: SafeHtml;
+ public svgIconCustomClassName: string;
+ public classes: string;
+
+ constructor(protected domSanitizer: DomSanitizer) {
+ this.size = Size.medium;
+ this.disabled = false;
+ this.type = this.type || "common";
+ }
+
+ static Icons(): { [key: string]: string } {
+ return iconsMap;
+ }
+
+ public ngOnChanges(changes: SimpleChanges) {
+ this.updateSvgIconByName();
+ this.buildClasses();
+ }
+
+ protected updateSvgIconByName() {
+ this.svgIconContent = iconsMap[this.type][this.name] || null;
+ if (this.svgIconContent) {
+ this.svgIconContentSafeHtml = this.domSanitizer.bypassSecurityTrustHtml(this.svgIconContent);
+ this.svgIconCustomClassName = '__' + this.name.replace(/\s+/g, '_');
+ } else {
+ this.svgIconContentSafeHtml = null;
+ this.svgIconCustomClassName = 'missing';
+ }
+ }
+
+ private buildClasses = (): void => {
+ const _classes = ['svg-icon'];
+ if (this.mode) {
+ _classes.push('mode-' + this.mode);
+ }
+ if (this.size) {
+ _classes.push('size-' + this.size);
+ }
+ if (this.clickable) {
+ !this.disabled && _classes.push('clickable');
+ }
+ if (this.svgIconCustomClassName) {
+ _classes.push(this.svgIconCustomClassName);
+ }
+ if (this.className) {
+ _classes.push(this.className);
+ }
+ if (this.backgroundShape) {
+ _classes.push('bg-type-' + this.backgroundShape);
+ }
+ if (this.backgroundShape && this.backgroundColor) {
+ _classes.push('bg-color-' + this.backgroundColor);
+ } else if (this.backgroundShape && !this.backgroundColor) {
+ _classes.push('bg-color-primary');
+ }
+ this.classes = _classes.join(" ");
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/customIcon/models/background-color.model.ts b/vid-webpack-master/src/app/shared/components/customIcon/models/background-color.model.ts
new file mode 100644
index 000000000..324f51ba4
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customIcon/models/background-color.model.ts
@@ -0,0 +1,15 @@
+export enum BackgroundColor {
+ gray = 'gray',
+ purple = 'purple',
+ blue = 'blue',
+ lightBlue = 'light-blue',
+ darkBlue = 'dark-blue',
+ darkBlue2 = 'dark-blue2',
+ disabledBlue = 'disabled-blue',
+ white = 'white',
+ transparent = 'transparent',
+ green = 'green',
+ red = 'red',
+ yellow = 'yellow',
+ silver ='silver'
+}
diff --git a/vid-webpack-master/src/app/shared/components/customIcon/models/background-shape.model.ts b/vid-webpack-master/src/app/shared/components/customIcon/models/background-shape.model.ts
new file mode 100644
index 000000000..924ce3da1
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customIcon/models/background-shape.model.ts
@@ -0,0 +1,4 @@
+export enum BackgroundShape {
+ circle = 'circle',
+ rectangle = 'rectangle'
+}
diff --git a/vid-webpack-master/src/app/shared/components/customIcon/models/icon-size.model.ts b/vid-webpack-master/src/app/shared/components/customIcon/models/icon-size.model.ts
new file mode 100644
index 000000000..a6cd9f537
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customIcon/models/icon-size.model.ts
@@ -0,0 +1,7 @@
+export enum Size {
+ x_large = 'x_large',
+ large = 'large',
+ medium = 'medium',
+ small = 'small',
+ x_small = 'x_small'
+}
diff --git a/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.html b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.html
new file mode 100644
index 000000000..999d5d3f9
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.html
@@ -0,0 +1,15 @@
+<div>
+ <div class="custom-loader-wrapper" *ngIf="!global" [attr.data-tests-id]="testId">
+ <div class="custom-loader-background" *ngIf="active"
+ [style.top]="offset.top" [style.left]="offset.left" [style.width]="offset.width"
+ [style.height]="offset.height">
+ <div class="custom-loader {{ size }}" *ngIf="active"></div>
+ </div>
+ <ng-content></ng-content>
+ </div>
+ <div *ngIf="global && active" [attr.data-tests-id]="testId">
+ <div class="custom-loader-global-wrapper custom-loader-background">
+ <div class="custom-loader {{ size }}"></div>
+ </div>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.scss b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.scss
new file mode 100644
index 000000000..7572c6e11
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.scss
@@ -0,0 +1,222 @@
+.custom-loader-background {
+ background-color: #000000;
+ position: absolute;
+ z-index: 9999;
+ opacity: 0.5;
+ display: flex;
+ justify-content: center;
+ align-items: center; }
+
+.sdc-loader-wrapper-absolute {
+ position: absolute;
+ top: 0; }
+
+.custom-loader {
+ z-index: 10002; }
+
+.custom-loader-global-wrapper {
+ position: fixed;
+ width: 100%;
+ height: 100%; }
+
+.loader-fixed {
+ display: block;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%; }
+@keyframes fadein {
+ from {
+ opacity: 0; }
+ to {
+ opacity: 0.8; } }
+
+/* Firefox < 16 */
+@-moz-keyframes fadein {
+ from {
+ opacity: 0; }
+ to {
+ opacity: 0.8; } }
+
+/* Safari, Chrome and Opera > 12.1 */
+@-webkit-keyframes fadein {
+ from {
+ opacity: 0; }
+ to {
+ opacity: 0.8; } }
+
+/* Internet Explorer */
+@-ms-keyframes fadein {
+ from {
+ opacity: 0; }
+ to {
+ opacity: 0.8; } }
+
+/* Opera < 12.1 */
+@-o-keyframes fadein {
+ from {
+ opacity: 0; }
+ to {
+ opacity: 0.8; } }
+
+@keyframes fadeout {
+ from {
+ opacity: 0.8; }
+ to {
+ opacity: 0; } }
+
+/* Firefox < 16 */
+@-moz-keyframes fadeout {
+ from {
+ opacity: 0.8; }
+ to {
+ opacity: 0; } }
+
+/* Safari, Chrome and Opera > 12.1 */
+@-webkit-keyframes fadeout {
+ from {
+ opacity: 0.8; }
+ to {
+ opacity: 0; } }
+
+/* Internet Explorer */
+@-ms-keyframes fadeout {
+ from {
+ opacity: 0.8; }
+ to {
+ opacity: 0; } }
+
+/* Opera < 12.1 */
+@-o-keyframes fadeout {
+ from {
+ opacity: 0.8; }
+ to {
+ opacity: 0; } }
+
+.custom-loader {
+ height: 63px;
+ width: 63px;
+ position: absolute; }
+
+.custom-loader.small {
+ transform: scale(0.26); }
+
+.custom-loader.medium {
+ transform: scale(0.5); }
+
+.custom-loader.large {
+ transform: scale(1); }
+
+.custom-loader::before {
+ background-color: #eaeaea;
+ border-radius: 50%;
+ box-shadow: 21px 21px 0px 0px #eaeaea, 0px 42px 0px 0px #eaeaea, -21px 21px 0px 0px #eaeaea;
+ content: '';
+ display: block;
+ height: 21px;
+ width: 21px;
+ position: absolute;
+ left: 50%;
+ margin-left: -10.5px; }
+
+.custom-loader::after {
+ border-radius: 50%;
+ content: '';
+ display: block;
+ position: absolute;
+ height: 21px;
+ width: 21px;
+ animation: dot-move-2 4.5s infinite ease-in; }
+
+@keyframes dot-move {
+ 0% {
+ background-color: #1eb9f3;
+ left: 21px;
+ top: 0; }
+ 25% {
+ background-color: #ffb81c;
+ left: 42px;
+ top: 21px; }
+ 50% {
+ background-color: #caa2dd;
+ left: 21px;
+ top: 42px; }
+ 75% {
+ background-color: #f6c632;
+ left: 0;
+ top: 21px; }
+ 100% {
+ background-color: #1eb9f3;
+ left: 21px;
+ top: 0; } }
+
+@keyframes dot-move-2 {
+ 0% {
+ background-color: #1eb9f3;
+ left: 21px;
+ top: 0; }
+ 6.25% {
+ background-color: #1eb9f3;
+ left: 42px;
+ top: 21px; }
+ 12.5% {
+ background-color: #1eb9f3;
+ left: 21px;
+ top: 42px; }
+ 18.75% {
+ background-color: #1eb9f3;
+ left: 0;
+ top: 21px; }
+ 25% {
+ background-color: #ffb81c;
+ left: 21px;
+ top: 0; }
+ 31.25% {
+ background-color: #ffb81c;
+ left: 42px;
+ top: 21px; }
+ 37.5% {
+ background-color: #ffb81c;
+ left: 21px;
+ top: 42px; }
+ 43.75% {
+ background-color: #ffb81c;
+ left: 0;
+ top: 21px; }
+ 50% {
+ background-color: #caa2dd;
+ left: 21px;
+ top: 0; }
+ 56.25% {
+ background-color: #caa2dd;
+ left: 42px;
+ top: 21px; }
+ 62.5% {
+ background-color: #caa2dd;
+ left: 21px;
+ top: 42px; }
+ 68.75% {
+ background-color: #caa2dd;
+ left: 0;
+ top: 21px; }
+ 75% {
+ background-color: #f6c632;
+ left: 21px;
+ top: 0; }
+ 81.25% {
+ background-color: #f6c632;
+ left: 42px;
+ top: 21px; }
+ 87.5% {
+ background-color: #f6c632;
+ left: 21px;
+ top: 42px; }
+ 93.75% {
+ background-color: #f6c632;
+ left: 0;
+ top: 21px; }
+ 100% {
+ background-color: #1eb9f3;
+ left: 21px;
+ top: 0; } }
diff --git a/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.ts b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.ts
new file mode 100644
index 000000000..98bcce1a1
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.component.ts
@@ -0,0 +1,76 @@
+import {Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewContainerRef} from "@angular/core";
+import {LoaderSize} from "./models/loader-size.model";
+import {LoaderService} from "./custom-loader.service";
+
+@Component({
+ selector: "custom-loader",
+ templateUrl: './custom-loader.component.html',
+ styleUrls: ['./custom-loader.component.scss']
+
+})
+
+export class LoaderComponent implements OnInit, OnDestroy {
+ @Input() active: number;
+ @Input() size?: LoaderSize;
+ @Input() global?: boolean;
+ @Input() name?: string;
+ @Input() testId: string;
+ @Input() relative: boolean;
+ @Output() activeChange: EventEmitter<number> = new EventEmitter<number>();
+ private offset : {
+ top: string;
+ left: string;
+ width: string;
+ height: string;
+ };
+
+ constructor(private loaderService: LoaderService, private viewContainerRef: ViewContainerRef) {
+ this.active = 0;
+ this.size = LoaderSize.large;
+ this.global = false;
+ }
+
+ public ngOnInit(): void {
+ if (this.name !== undefined) {
+ this.loaderService.register(this.name, this);
+ }
+ this.setLoaderPlace();
+ }
+
+ public ngOnDestroy(): void {
+ if (this.name !== undefined) {
+ this.loaderService.unregister(this.name);
+ }
+ }
+
+ public activate() {
+ this.active++;
+ this.activeChange.emit(this.active);
+ }
+
+ public deactivate() {
+ if (this.active > 0) {
+ this.active--;
+ this.activeChange.emit(this.active);
+ }
+ }
+ public setLoaderPlace = () => {
+ if (this.relative === true) {
+ let parentElement = this.viewContainerRef.element.nativeElement.parentElement;
+ this.offset = {
+ left: (parentElement.offsetLeft !== undefined) ? parentElement.offsetLeft + "px" : undefined,
+ top: (parentElement.offsetTop !== undefined) ? parentElement.offsetTop + "px" : undefined,
+ width: (parentElement.offsetWidth !== undefined) ? parentElement.offsetWidth + "px" : undefined,
+ height: (parentElement.offsetHeight !== undefined) ? parentElement.offsetHeight + "px" : undefined
+ };
+ } else {
+ this.offset = {
+ left: '0px',
+ top: '0px',
+ width: '100%',
+ height: '100%'
+ }
+ }
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.service.ts b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.service.ts
new file mode 100644
index 000000000..398eac233
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customLoader/custom-loader.service.ts
@@ -0,0 +1,34 @@
+import {Injectable} from "@angular/core";
+import {LoaderComponent} from "./custom-loader.component";
+
+@Injectable()
+export class LoaderService {
+
+ private mainLoaderName = 'general';
+ public registeredLoaders = {};
+
+ register(name: string, loader: LoaderComponent) {
+ if (!this.registeredLoaders[name]) {
+ this.registeredLoaders[name] = loader;
+ }
+ }
+
+ unregister(name: string) {
+ if (this.registeredLoaders[name]) {
+ delete this.registeredLoaders[name];
+ }
+ }
+
+ activate(name: string = this.mainLoaderName) {
+ if (this.registeredLoaders[name]) {
+ this.registeredLoaders[name].activate();
+ }
+ }
+
+ deactivate(name: string = this.mainLoaderName) {
+ if (this.registeredLoaders[name]) {
+ this.registeredLoaders[name].deactivate();
+ }
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/customLoader/models/loader-size.model.ts b/vid-webpack-master/src/app/shared/components/customLoader/models/loader-size.model.ts
new file mode 100644
index 000000000..d5400efb5
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customLoader/models/loader-size.model.ts
@@ -0,0 +1,5 @@
+export enum LoaderSize {
+ large = 'large',
+ medium = 'medium',
+ small = 'small',
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.html b/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.html
new file mode 100644
index 000000000..a50522a67
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.html
@@ -0,0 +1,16 @@
+<div>
+ <button class="custom-button sdc-button__{{ type }} btn-{{ size }} {{ iconPositionClass }}"
+ [disabled]="disabled || show_spinner"
+ [attr.data-tests-id]="testId">
+ <custom-icon
+ *ngIf="icon_name"
+ [name]="icon_name"
+ [mode]="icon_mode"
+ [size]="'medium'"
+ >
+ </custom-icon>
+ {{text}}
+ </button>
+ <custom-icon *ngIf="show_spinner" name="spinner" [size]="'medium'" class="sdc-button__spinner"
+ [ngClass]="{left: spinner_position === placement.right}"></custom-icon>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.scss b/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.scss
new file mode 100644
index 000000000..89f90d44d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.scss
@@ -0,0 +1,273 @@
+.custom-button {
+ order: 1;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: row;
+ outline: none;
+ border-radius: 2px;
+ padding: 0 12px;
+ height: 36px;
+ line-height: 36px;
+ width: 120px;
+ min-width: 90px;
+ cursor: pointer;
+ text-align: center;
+ text-transform: uppercase;
+ font-family: OpenSans-Regular, Arial, sans-serif;
+ font-style: normal;
+ font-weight: 400;
+ font-size: 14px;
+ /*** Sizes ***/
+ /*** Sizes ***/
+ /*** Buttons with icons ***/
+}
+
+.custom-button:disabled {
+ cursor: default;
+}
+
+.custom-button.sdc-button__primary {
+ border: 1px solid transparent;
+ background-color: #009fdb;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__primary:not(:disabled):hover, .custom-button.sdc-button__primary:not(:disabled):active {
+ background-color: #1eb9f3;
+}
+
+.custom-button.sdc-button__primary:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #1eb9f3;
+ box-shadow: 0px 0px 0px 1px #1eb9f3;
+}
+
+.custom-button.sdc-button__primary:disabled {
+ background: #9dd9ef;
+}
+
+.custom-button.sdc-button__secondary {
+ border: 1px solid #009fdb;
+ background-color: transparent;
+ color: #009fdb;
+}
+
+.custom-button.sdc-button__secondary:not(:disabled):hover, .custom-button.sdc-button__secondary:not(:disabled):active {
+ background-color: #1eb9f3;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__secondary:not(:disabled):focus:not(:active) {
+ color: #1eb9f3;
+ box-shadow: inset 0px 0px 0px 0px #0568ae, 0px 0px 0px 1px #009fdb;
+}
+
+.custom-button.sdc-button__secondary:not(:disabled):focus:not(:active):hover {
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__secondary:disabled {
+ color: #9dd9ef;
+ border-color: #9dd9ef;
+}
+
+.custom-button.sdc-button__link {
+ background-color: transparent;
+ color: #009fdb;
+ fill: #009fdb;
+ border: none;
+}
+
+.custom-button.sdc-button__link:not(:disabled):hover, .custom-button.sdc-button__link:not(:disabled):active {
+ color: #1eb9f3;
+}
+
+.custom-button.sdc-button__link:not(:disabled):focus:not(:active) {
+ border: 1px solid #0568ae;
+ color: #1eb9f3;
+}
+
+.custom-button.sdc-button__link:disabled {
+ color: #9dd9ef;
+}
+
+.custom-button.sdc-button__success {
+ border: 1px solid transparent;
+ background-color: #4ca90c;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__success:not(:disabled):hover, .custom-button.sdc-button__success:not(:disabled):active {
+ background-color: #57c00e;
+}
+
+.custom-button.sdc-button__success:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #57c00e;
+ box-shadow: 0px 0px 0px 1px #57c00e;
+}
+
+.custom-button.sdc-button__success:disabled {
+ background: #a5d485;
+}
+
+.custom-button.sdc-button__error, .custom-button.sdc-button__alert {
+ border: 1px solid transparent;
+ background-color: #cf2a2a;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__error:not(:disabled):hover, .custom-button.sdc-button__error:not(:disabled):active, .custom-button.sdc-button__alert:not(:disabled):hover, .custom-button.sdc-button__alert:not(:disabled):active {
+ background-color: #ed4141;
+}
+
+.custom-button.sdc-button__error:not(:disabled):focus:not(:active), .custom-button.sdc-button__alert:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #ed4141;
+ box-shadow: 0px 0px 0px 1px #ed4141;
+}
+
+.custom-button.sdc-button__error:disabled, .custom-button.sdc-button__alert:disabled {
+ background: #f4adad;
+}
+
+.custom-button.sdc-button__warning {
+ border: 1px solid transparent;
+ background-color: #ffb81c;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__warning:not(:disabled):hover, .custom-button.sdc-button__warning:not(:disabled):active {
+ background-color: #f6c632;
+}
+
+.custom-button.sdc-button__warning:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #f6c632;
+ box-shadow: 0px 0px 0px 1px #f6c632;
+}
+
+.custom-button.sdc-button__warning:disabled {
+ background: #ffdb8d;
+}
+
+.custom-button.sdc-button__info {
+ border: 1px solid transparent;
+ background-color: #009fdb;
+ color: #ffffff;
+}
+
+.custom-button.sdc-button__info:not(:disabled):hover, .custom-button.sdc-button__info:not(:disabled):active {
+ background-color: #1eb9f3;
+}
+
+.custom-button.sdc-button__info:not(:disabled):focus:not(:active) {
+ border: 1px solid #ffffff;
+ background-color: #1eb9f3;
+ box-shadow: 0px 0px 0px 1px #1eb9f3;
+}
+
+.custom-button.sdc-button__info:disabled {
+ background: #9dd9ef;
+}
+
+.custom-button.sdc-button__file-opener input[type=file] {
+ height: 36px;
+ opacity: 0;
+ position: absolute;
+ cursor: pointer;
+}
+
+.custom-button.btn-xx-large {
+ width: 350px;
+}
+
+.custom-button.btn-xx-large input[type=file] {
+ width: 350px;
+}
+
+.custom-button.btn-x-large {
+ width: 250px;
+}
+
+.custom-button.btn-x-large input[type=file] {
+ width: 250px;
+}
+
+.custom-button.btn-large {
+ width: 180px;
+}
+
+.custom-button.btn-large input[type=file] {
+ width: 180px;
+}
+
+.custom-button.btn-medium {
+ width: 140px;
+}
+
+.custom-button.btn-medium input[type=file] {
+ width: 140px;
+}
+
+.custom-button.btn-small {
+ width: 110px;
+}
+
+.custom-button.btn-small input[type=file] {
+ width: 110px;
+}
+
+.custom-button.btn-x-small {
+ width: 90px;
+}
+
+.custom-button.btn-x-small input[type=file] {
+ width: 90px;
+}
+
+.custom-button.btn-default {
+ width: auto;
+}
+
+.custom-button.btn-default input[type=file] {
+ width: auto;
+}
+
+.custom-button.sdc-icon-right {
+ flex-direction: row-reverse;
+}
+
+.custom-button.sdc-icon-right .svg-icon {
+ margin-left: 15px;
+}
+
+.custom-button.sdc-icon-left {
+ flex-direction: row;
+}
+
+.custom-button.sdc-icon-left .svg-icon {
+ margin-right: 15px;
+}
+
+.custom-button svg {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.sdc-button__wrapper {
+ display: inline-flex;
+}
+
+.sdc-button__spinner {
+ padding-top: 6px;
+ margin: 0 2px;
+}
+
+.sdc-button__spinner.left {
+ order: 2;
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.ts b/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.ts
new file mode 100644
index 000000000..d93c67851
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/components/modalButton/modal-button.component.ts
@@ -0,0 +1,28 @@
+import {Component, EventEmitter, HostListener, Input, Output} from "@angular/core";
+import {CustomButtonComponent} from "../../../customButton/custom-button.component";
+
+@Component({
+ selector: "custom-modal-button",
+ templateUrl: './modal-button.component.html',
+ styleUrls: ['./modal-button.component.scss']
+})
+export class CustomModalButtonComponent extends CustomButtonComponent {
+
+ @Input() public id?: string;
+ @Input() public callback: Function;
+ @Input() public closeModal: boolean;
+ @Output() closeModalEvent: EventEmitter<any> = new EventEmitter<any>();
+ @HostListener('click') invokeCallback = (): void => {
+ if (this.callback) {
+ this.callback();
+ }
+ if (this.closeModal) {
+ this.closeModalEvent.emit();
+ }
+ }
+
+ constructor() {
+ super();
+ this.closeModal = false;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/components/modalCloseButton/modal-close-button.component.ts b/vid-webpack-master/src/app/shared/components/customModal/components/modalCloseButton/modal-close-button.component.ts
new file mode 100644
index 000000000..9528f778d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/components/modalCloseButton/modal-close-button.component.ts
@@ -0,0 +1,36 @@
+import {Component, ComponentRef, Input} from "@angular/core";
+import {ModalComponent} from "../../modal.component";
+import {CustomButtonComponent} from "../../../customButton/custom-button.component";
+import {RippleAnimationAction} from "../../directives/ripple-click.animation.directive";
+
+
+@Component({
+ selector: "sdc-modal-close-button",
+ template: `
+ <div class="sdc-modal__close-button"
+ customRippleClickAnimation
+ [ngClass]="disabled ? 'disabled' : ''"
+ [rippleOnAction]="!disabled && rippleAnimationAction"
+ [attr.data-tests-id]="testId"
+ (click)="!disabled && closeModal('close')"
+ >
+ <custom-icon name="close" [mode]="disabled? 'secondary' : 'info'" size="small"></custom-icon>
+ </div>
+ `
+})
+export class ModalCloseButtonComponent extends CustomButtonComponent {
+
+ @Input() testId: string;
+ @Input() disabled: boolean;
+ @Input() modalInstanceRef: ComponentRef<ModalComponent>;
+
+ public rippleAnimationAction: RippleAnimationAction = RippleAnimationAction.MOUSE_ENTER;
+
+ constructor() {
+ super();
+ }
+
+ public closeModal = (btnName: string): void => {
+ this.modalInstanceRef.instance.closeModal(btnName);
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/directives/ripple-click.animation.directive.ts b/vid-webpack-master/src/app/shared/components/customModal/directives/ripple-click.animation.directive.ts
new file mode 100644
index 000000000..d343d5dc2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/directives/ripple-click.animation.directive.ts
@@ -0,0 +1,47 @@
+import { Directive, Input, HostBinding, HostListener } from "@angular/core";
+
+export enum RippleAnimationAction {
+ CLICK = 0,
+ MOUSE_ENTER = 1
+}
+
+@Directive({
+ selector: `[customRippleClickAnimation]`
+})
+export class CustomRippleClickAnimationDirective {
+ private animated: boolean;
+
+ @Input() rippleClickDisabled: boolean;
+ @Input() rippleOnAction:RippleAnimationAction = RippleAnimationAction.CLICK;
+
+ @HostBinding('class.sdc-ripple-click__animated') animationClass: string;
+
+ @HostListener('click') onClick() {
+ if(this.rippleOnAction === RippleAnimationAction.CLICK){
+ this.animateStart();
+ }
+ }
+
+ @HostListener('mouseenter') onMouseEnter() {
+ //console.log("Mouseenter!", this.rippleOnAction);
+ if(this.rippleOnAction === RippleAnimationAction.MOUSE_ENTER){
+ this.animateStart();
+ }
+ }
+
+ private animateStart():void{
+ if (!this.rippleClickDisabled) {
+ this.animated = true;
+ this.animationClass = 'sdc-ripple-click__animated';
+ }
+ }
+ @HostListener('animationend') onAnimationComplete() {
+ this.animated = false;
+ this.animationClass = '';
+ }
+
+ constructor() {
+ this.rippleClickDisabled = false;
+ this.animated = false;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/modal.component.html b/vid-webpack-master/src/app/shared/components/customModal/modal.component.html
new file mode 100644
index 000000000..059eb8a3f
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/modal.component.html
@@ -0,0 +1,46 @@
+<div>
+ <div class="modal-background" [@toggleBackground]="modalVisible" ></div>
+ <div class="sdc-modal {{size}}">
+ <div class="sdc-modal__wrapper sdc-modal-type-{{type}}" [@toggleModal]="modalVisible" (@toggleModal.done)="modalToggled($event)">
+
+ <div class="sdc-modal__header sdc-{{type}}__header">
+ <div class="sdc-modal__icon" *ngIf="type!='custom'" [innerHtml]="svgIconContentSafeHtml"></div>
+
+ <div *ngIf="title" class="title" >
+ {{ title }}
+ <custom-icon
+ *ngIf="titleIcon"
+ [name]="titleIcon.iconName"
+ [mode]="titleIcon.iconMode"
+ [size]="titleIcon.iconSize">
+ </custom-icon>
+ </div>
+ <sdc-modal-close-button #modalCloseButton [testId]="'close' | calculateTestId : testId" [modalInstanceRef]="instanceRef"></sdc-modal-close-button>
+ </div>
+
+ <div class="sdc-modal__content">
+ <div *ngIf="message" [innerHtml]="message"></div>
+ <div #dynamicContentContainer></div>
+ <div class="disabled-modal" *ngIf="isDisabled"></div>
+ </div>
+
+ <div class="sdc-modal__footer">
+ <custom-modal-button *ngFor="let button of buttons"
+ [text]="button.text"
+ [type]="button.type || 'primary'"
+ [disabled]="button.disabled"
+ [size] = "button.size ? button.size : 'default'"
+ [closeModal]="button.closeModal"
+ [spinner_position]="button.spinner_position"
+ [show_spinner]="button.show_spinner"
+ [callback]="button.callback"
+ [testId]="'button-' + button.text | calculateTestId : testId"
+ (closeModalEvent)="closeModal(button.text)"
+ >
+ </custom-modal-button>
+ </div>
+
+ </div>
+ </div>
+</div>
+
diff --git a/vid-webpack-master/src/app/shared/components/customModal/modal.component.ts b/vid-webpack-master/src/app/shared/components/customModal/modal.component.ts
new file mode 100644
index 000000000..eb001c068
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/modal.component.ts
@@ -0,0 +1,166 @@
+import {
+ Component,
+ ComponentRef,
+ EventEmitter,
+ Input,
+ OnInit,
+ Output,
+ Renderer,
+ ViewChild,
+ ViewContainerRef
+} from "@angular/core";
+import {animate, style, transition, trigger} from "@angular/animations";
+import {TitleIconDetails} from "./models/modal.model";
+import {ModalType} from "./models/modal.type";
+import {DomSanitizer, SafeHtml} from "@angular/platform-browser";
+import {ModalCloseButtonComponent} from "./components/modalCloseButton/modal-close-button.component";
+import {CustomModalButtonComponent} from "./components/modalButton/modal-button.component";
+
+@Component({
+ selector: 'sdc-modal',
+ templateUrl: './modal.component.html',
+ animations: [
+ trigger('toggleBackground', [
+ transition('* => 1', [style({ opacity: 0 }), animate('.45s cubic-bezier(0.23, 1, 0.32, 1)')]),
+ transition('1 => *', [animate('.35s cubic-bezier(0.23, 1, 0.32, 1)', style({ opacity: 0 }))])
+ ]),
+ trigger('toggleModal', [
+ transition('* => 1', [style({ opacity: 0, transform: 'translateY(-80px)' }), animate('.45s cubic-bezier(0.23, 1, 0.32, 1)')]),
+ transition('1 => *', [style({ opacity: 1, transform: 'translateY(0px)' }), animate('.35s ease-in-out', style({ opacity: 0, transform: 'translateY(-80px)' }))])
+ ])
+ ]
+})
+
+export class ModalComponent implements OnInit {
+
+ @Input() size: string; 'xl|l|md|sm|xsm';
+ @Input() title: string;
+ @Input() titleIcon: TitleIconDetails;
+ @Input() message: string;
+ @Input() buttons: CustomModalButtonComponent[];
+ @Input() type: ModalType;
+ @Input() testId: string;
+ @Input() isDisabled: boolean;
+ @Input() instanceRef: ComponentRef<ModalComponent>; // the component ref is injected to the component in order to destroy the componet from itself
+
+ @Output() onClose : EventEmitter<string> = new EventEmitter<string>();
+
+ @ViewChild('modalCloseButton', {static: false})
+ set refCloseButton(_modalCloseButton: ModalCloseButtonComponent) {
+ this.modalCloseButton = _modalCloseButton;
+ }
+
+ modalVisible: boolean;
+ // Allows for custom component as body instead of simple message.
+ @ViewChild('dynamicContentContainer', { read: ViewContainerRef, static: true }) dynamicContentContainer: ViewContainerRef;
+ innerModalContent: ComponentRef<any>;
+
+ public calculatedTestId: string;
+ public modalCloseButton: ModalCloseButtonComponent;
+ public svgIconContentSafeHtml: SafeHtml;
+
+
+ private infoSvg = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="30" viewBox="0 0 24 24">
+ <defs><path fill="#000" id="info-a" d="M11,20 C6,20 2,16 2,11 C2,6 6,2 11,2 C16,2 20,6 20,11 C20,16 16,20 11,20 M11,0 C4.9,0 0,4.9 0,11 C0,17.101 4.9,22 11,22 C17.1,22 22,17.101 22,11 C22,4.9 17.1,0 11,0 M11,10 C10.4,
+ 10 10,10.4 10,11 L10,15 C10,15.601 10.4,16 11,16 C11.6,16 12,15.601 12,15 L12,11 C12,10.4 11.6,10 11,10 M10.2998,6.2998 C10.0998,6.4998 9.9998,6.6998 9.9998,6.9998 C9.9998,7.2998 10.0998,7.4998 10.2998,7.6998 C10.4998,
+ 7.9008 10.6998,7.9998 10.9998,7.9998 C11.2998,7.9998 11.4998,7.9008 11.6998,7.6998 C11.9008,7.4998 11.9998,7.2998 11.9998,6.9998 C11.9998,6.6998 11.9008,6.4998 11.6998,6.2998 C11.2998,5.9008 10.6998,5.9008 10.2998,6.2998"/>
+ </defs><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><use class="sdc-modal__svg-use" xlink:href="#info-a"/></g></svg>`;
+ private warningSvg = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="30" viewBox="0 0 24 24"><defs><path fill="#000" id="alert-a" d="M20.5815,18.7997 C20.3815,
+ 18.9997 20.0815,19.0997 19.8815,19.0997 L2.8815,19.0997 C2.6815,19.0997 2.5815,19.0997 2.3815,18.9997 C1.8815,18.6997 1.7815,18.0997 1.9815,17.5997 L10.4815,3.4997 C10.5815,3.4007 10.6815,3.1997 10.7815,3.1997 C11.2815,
+ 2.9007 11.8815,3.0997 12.1815,3.4997 L20.6825,17.5997 C20.7815,17.6997 20.7815,17.9007 20.7815,18.0997 C20.8815,18.4007 20.6825,18.5997 20.5815,18.7997 M22.3815,16.5997 L13.9815,2.4007 C13.5815,1.6997 12.8815,1.1997 12.0815,
+ 0.9997 C11.2815,0.7997 10.4815,0.9007 9.7815,1.2997 C9.3815,1.4997 8.9815,1.9007 8.7815,2.2997 L0.3815,16.5997 C-0.4185,17.9997 0.0815,19.9007 1.4815,20.6997 C1.8815,20.9997 2.3815,21.0997 2.8815,21.0997 L19.8815,
+ 21.0997 C20.6825,21.0997 21.4815,20.7997 21.9815,20.1997 C22.5815,19.5997 22.8815,18.9007 22.8815,18.0997 C22.7815,17.5997 22.6825,16.9997 22.3815,16.5997 M11,7 C10.4,7 10,7.4 10,8 L10,12 C10,12.601 10.4,13 11,13 C11.6,13 12,
+ 12.601 12,12 L12,8 C12,7.4 11.6,7 11,7 M10.3,15.3 C10.1,15.499 10,15.699 10,15.999 C10,16.3 10.1,16.499 10.3,16.699 C10.5,16.9 10.7,16.999 11,16.999 C11.3,16.999 11.5,16.9 11.7,16.699 C11.9,16.499 12,16.199 12,15.999 C12,
+ 15.8 11.9,15.499 11.7,15.3 C11.3,14.9 10.7,14.9 10.3,15.3"/></defs><g fill="#ffb81c" fill-rule="evenodd" transform="translate(1 1)"><use class="sdc-modal__svg-use" xlink:href="#alert-a"/></g></svg>`;
+ private errorSvg = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="30" viewBox="0 0 24 24"><defs><path fill="#000" id="x-a" d="M11,20 C6,20 2,16 2,11 C2,6 6,2 11,
+ 2 C16,2 20,6 20,11 C20,16 16,20 11,20 M11,0 C4.9,0 0,4.9 0,11 C0,17.1 4.9,22 11,22 C17.1,22 22,17.1 22,11 C22,4.9 17.1,0 11,0 M14.2591,7.29935 C13.8591,6.90035 13.2591,6.90035 12.8591,7.29935 L10.5591,9.59935 L8.2591,
+ 7.29935 C7.8591,6.90035 7.2591,6.90035 6.8591,7.29935 C6.4591,7.69935 6.4591,8.29935 6.8591,8.69935 L9.1581,10.99935 L6.8591,13.29935 C6.4591,13.69935 6.4591,14.29935 6.8591,14.69935 C7.0591,14.90035 7.2591,14.99935 7.5591,
+ 14.99935 C7.8591,14.99935 8.0591,14.90035 8.2591,14.69935 L10.5591,12.40035 L12.8591,14.69935 C13.0591,14.90035 13.3591,14.99935 13.5591,14.99935 C13.7591,14.99935 14.0591,14.90035 14.2591,14.69935 C14.6581,14.29935 14.6581,
+ 13.69935 14.2591,13.29935 L11.9591,10.99935 L14.2591,8.69935 C14.6581,8.29935 14.6581,7.69935 14.2591,7.29935"/></defs><g fill="none" fill-rule="evenodd" transform="translate(1 1)">
+ <use class="sdc-modal__svg-use" xlink:href="#x-a"/></g></svg>`;
+ private successSvg = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="30" viewBox="0 0 24 24" fill="#4ca90c"><path id="success+20-a" d="M20.1825992,10.445793 C20.6735306,
+ 10.445793 21.0008182,10.7730806 21.0008182,11.264012 L21.0008182,12.0004091 C21.0008182,16.9915451 16.9915451,21 12.0004091,21 C7.00927315,21 3,16.9915451 3,12.0004091 C3,7.00927315 7.00927315,3 12.0004091,3 C13.3095595,3 14.536888,
+ 3.3272876 15.6823947,3.81821901 C16.0915042,3.98186281 16.255148,4.47279422 16.0915042,4.88190372 C15.9278604,5.29101323 15.436929,5.45465703 15.0278194,5.29101323 C14.0459566,4.88190372 13.0640938,4.63643802 12.0004091,
+ 4.63643802 C7.90931406,4.63643802 4.63643802,7.90931406 4.63643802,12.0004091 C4.63643802,16.0906859 7.90931406,19.363562 12.0004091,19.363562 C16.0915042,19.363562 19.3643802,16.0906859 19.3643802,12.0004091 L19.3643802,
+ 11.264012 C19.3643802,10.7730806 19.6916678,10.445793 20.1825992,10.445793 Z M21.5737352,4.06343925 C21.9002046,4.39072685 21.9002046,4.88165826 21.5737352,5.20894586 L12.5733261,14.209355 C12.4096823,14.3729988 12.1642166,
+ 14.4548207 12.0005728,14.4548207 C11.836929,14.4548207 11.5914632,14.3729988 11.4278194,14.209355 L8.97316242,11.7546979 C8.64587481,11.4274103 8.64587481,10.9364789 8.97316242,10.6091913 C9.30045002,10.2819037 9.79138143,
+ 10.2819037 10.118669,10.6091913 L12.0005728,12.491095 L20.4282286,4.06343925 C20.7555162,3.73615164 21.2464476,3.73615164 21.5737352,4.06343925 Z"></path></svg>`;
+ private noSvg = ``;
+
+ constructor(private renderer: Renderer,
+ private domSanitizer: DomSanitizer) {
+ this.modalVisible = true;
+ }
+
+ ngOnInit() {
+
+ switch (this.type) {
+ case ModalType.info:
+ this.svgIconContentSafeHtml = this.domSanitizer.bypassSecurityTrustHtml(this.infoSvg);
+ break;
+ case ModalType.warning:
+ this.svgIconContentSafeHtml = this.domSanitizer.bypassSecurityTrustHtml(this.warningSvg);
+ break;
+ case ModalType.error:
+ this.svgIconContentSafeHtml = this.domSanitizer.bypassSecurityTrustHtml(this.errorSvg);
+ break;
+ case ModalType.success:
+ this.svgIconContentSafeHtml = this.domSanitizer.bypassSecurityTrustHtml(this.successSvg);
+ break;
+ default:
+ this.svgIconContentSafeHtml = this.domSanitizer.bypassSecurityTrustHtml(this.noSvg);
+ }
+ }
+
+ public modalToggled = (toggleEvent: any) => {
+ if (!toggleEvent.toState) {
+ this.instanceRef.destroy();
+ }
+ }
+
+ public getCloseButton = (): ModalCloseButtonComponent => {
+ return this.modalCloseButton;
+ }
+
+ public getButtonById = (id: string): CustomModalButtonComponent => {
+ // Support ES5
+ // return this.buttons.find((button) => {
+ return this.buttons.filter((button) => {
+ return button.id && button.id === id;
+ })[0];
+ }
+
+ public getButtons = (): CustomModalButtonComponent[] => {
+ return this.buttons;
+ }
+
+ public setButtons = (_buttons: CustomModalButtonComponent[]): void => {
+ this.buttons = _buttons;
+ }
+
+ public getTitle = (): string => {
+ return this.title;
+ }
+
+ public setTitle = (_title: string): void => {
+ this.title = _title;
+ }
+
+ public hoverAnimation(evn: MouseEvent) {
+ this.renderer.setElementClass(evn.target as HTMLElement, 'sdc-ripple-click__animated', true);
+ // evn.taregt.classList.add('sdc-ripple-click__animated');
+ }
+
+ public closeModal = (btnName : string): void => {
+ this.onClose.emit(btnName);
+ this.modalVisible = false;
+ }
+
+ public disabledModal = (isDisabled: boolean): void => {
+ this.isDisabled = isDisabled;
+ this.buttons.forEach((button: CustomModalButtonComponent) => {
+ button.disabled = isDisabled;
+ });
+ this.modalCloseButton.disabled = false;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/models/button.type.ts b/vid-webpack-master/src/app/shared/components/customModal/models/button.type.ts
new file mode 100644
index 000000000..a0673013d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/models/button.type.ts
@@ -0,0 +1,8 @@
+export enum ButtonType {
+ primary = 'primary',
+ secondary = 'secondary',
+ success = 'success',
+ error = 'error',
+ warning = 'warning',
+ info = 'info'
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/models/modal-button.model.ts b/vid-webpack-master/src/app/shared/components/customModal/models/modal-button.model.ts
new file mode 100644
index 000000000..5e1f4a4a8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/models/modal-button.model.ts
@@ -0,0 +1,15 @@
+import {ButtonType} from "onap-ui-angular/dist/dist/common";
+import {Placement} from "./modal.placement";
+
+export interface IButtonComponent {
+ text: string;
+ disabled?: boolean;
+ type?: ButtonType;
+ testId?: string;
+ preventDoubleClick?: boolean;
+ icon_name?: string;
+ icon_position?: string;
+ show_spinner?: boolean;
+ spinner_position?: Placement;
+ size?: string;
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/models/modal.model.ts b/vid-webpack-master/src/app/shared/components/customModal/models/modal.model.ts
new file mode 100644
index 000000000..4b814f0aa
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/models/modal.model.ts
@@ -0,0 +1,26 @@
+import {ModalType} from "./modal.type";
+import {IButtonComponent} from "./modal-button.model";
+
+export interface IModalConfig {
+ size?: string; // xl|l|md|sm|xsm
+ title?: string;
+ titleIcon?: TitleIconDetails;
+ message?: string;
+ buttons?: IModalButtonComponent[];
+ testId?: string;
+ type?: ModalType;
+}
+
+export interface IModalButtonComponent extends IButtonComponent {
+ id?: string;
+ callback?: () => void;
+ closeModal?: boolean;
+}
+
+export interface TitleIconDetails {
+ iconName?: string;
+ iconMode?: string;
+ iconSize?: string;
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/components/customModal/models/modal.placement.ts b/vid-webpack-master/src/app/shared/components/customModal/models/modal.placement.ts
new file mode 100644
index 000000000..f7f229cd4
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/models/modal.placement.ts
@@ -0,0 +1,6 @@
+export enum Placement {
+ left = 'left',
+ right = 'right',
+ top = 'top',
+ bottom = 'bottom'
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/models/modal.size.ts b/vid-webpack-master/src/app/shared/components/customModal/models/modal.size.ts
new file mode 100644
index 000000000..0a96810c7
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/models/modal.size.ts
@@ -0,0 +1,7 @@
+export enum ModalSize {
+ xlarge = "xl",
+ large = "l",
+ medium = "md",
+ small = "sm",
+ xsmall = "xsm"
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/models/modal.type.ts b/vid-webpack-master/src/app/shared/components/customModal/models/modal.type.ts
new file mode 100644
index 000000000..ca987ebba
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/models/modal.type.ts
@@ -0,0 +1,10 @@
+export enum ModalType {
+ info = 'info',
+ warning = 'warning',
+ error = 'error',
+ success = 'success',
+ action = 'action',
+ custom = 'custom'
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/components/customModal/services/create-dynamic-component.service.ts b/vid-webpack-master/src/app/shared/components/customModal/services/create-dynamic-component.service.ts
new file mode 100644
index 000000000..64fe66ce6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/services/create-dynamic-component.service.ts
@@ -0,0 +1,107 @@
+import {
+ ApplicationRef,
+ ComponentFactoryResolver,
+ ComponentRef,
+ EmbeddedViewRef,
+ Injectable,
+ Injector, Type, ViewContainerRef
+} from "@angular/core";
+
+@Injectable()
+export class CreateDynamicComponentService {
+
+ constructor(private componentFactoryResolver: ComponentFactoryResolver,
+ private applicationRef: ApplicationRef,
+ private injector: Injector) {
+ }
+
+ /**
+ * Gets the root view container to inject the component to.
+ *
+ * @returns {ComponentRef<any>}
+ *
+ * @memberOf InjectionService
+ */
+ private getRootViewContainer(): ComponentRef<any> {
+ const rootComponents = this.applicationRef['components'];
+ if (rootComponents.length) {
+ return rootComponents[0];
+ }
+ throw new Error('View Container not found! ngUpgrade needs to manually set this via setRootViewContainer.');
+ }
+
+ /**
+ * Gets the html element for a component ref.
+ *
+ * @param {ComponentRef<any>} componentRef
+ * @returns {HTMLElement}
+ *
+ * @memberOf InjectionService
+ */
+ private getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {
+ return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;
+ }
+
+ /**
+ * Gets the root component container html element.
+ *
+ * @returns {HTMLElement}
+ *
+ * @memberOf InjectionService
+ */
+ private getRootViewContainerNode(): HTMLElement {
+ return this.getComponentRootNode(this.getRootViewContainer());
+ }
+
+ /**
+ * Projects the inputs onto the component
+ *
+ * @param {ComponentRef<any>} component
+ * @param {*} options
+ * @returns {ComponentRef<any>}
+ *
+ * @memberOf InjectionService
+ */
+ private projectComponentInputs(component: ComponentRef<any>, options: any): ComponentRef<any> {
+ if (options) {
+ const props = Object.getOwnPropertyNames(options);
+ for (const prop of props) {
+ component.instance[prop] = options[prop];
+ }
+ }
+
+ return component;
+ }
+
+ public createComponentDynamically<T>(componentClass: Type<T>, options: any = {}, location: Element = this.getRootViewContainerNode()): ComponentRef<any> {
+ const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentClass);
+ const componentRef = componentFactory.create(this.injector);
+ const componentRootNode = this.getComponentRootNode(componentRef);
+
+ // project the options passed to the component instance
+ this.projectComponentInputs(componentRef, options);
+ this.applicationRef.attachView(componentRef.hostView);
+
+ componentRef.onDestroy(() => {
+ this.applicationRef.detachView(componentRef.hostView);
+ });
+
+ location.appendChild(componentRootNode);
+ return componentRef;
+ }
+
+ /**
+ * Inserts a component into an existing viewContainer
+ * @param componentType - type of component to create
+ * @param options - Inputs to project on new component
+ * @param vcRef - viewContainerRef in which to insert the newly created component
+ */
+ public insertComponentDynamically<T>(componentType: Type<T>, options: any = {}, vcRef: ViewContainerRef): ComponentRef<any> {
+ const factory = this.componentFactoryResolver.resolveComponentFactory(componentType);
+ const dynamicComponent = factory.create(vcRef.parentInjector);
+ this.projectComponentInputs(dynamicComponent, options);
+ vcRef.insert(dynamicComponent.hostView);
+ return dynamicComponent;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/customModal/services/modal.service.ts b/vid-webpack-master/src/app/shared/components/customModal/services/modal.service.ts
new file mode 100644
index 000000000..f46ee4896
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customModal/services/modal.service.ts
@@ -0,0 +1,64 @@
+import {ComponentRef, Injectable, Type} from "@angular/core";
+import {CreateDynamicComponentService} from "./create-dynamic-component.service";
+import {ModalType} from "../models/modal.type";
+import {ButtonType} from "../models/button.type";
+import {ModalButtonComponent} from "onap-ui-angular/dist/modals/modal-button.component";
+import {ModalSize} from "../models/modal.size";
+import {IModalConfig} from "../models/modal.model";
+import {ModalComponent} from "../modal.component";
+
+
+@Injectable()
+export class ModalService {
+
+ constructor(private createDynamicComponentService: CreateDynamicComponentService) {
+ }
+
+ private getBaseModal = (type: ModalType | ButtonType, title: string, message: string, testId: string, buttons?: ModalButtonComponent[]): ModalComponent => {
+ const modalConfig = {
+ size: ModalSize.small,
+ title: title,
+ message: message,
+ testId: testId,
+ buttons: buttons ? buttons : [{text: 'OK', type: type, closeModal: true}],
+ type: type
+ } as IModalConfig;
+ const modalInstance: ComponentRef<ModalComponent> = this.openModal(modalConfig);
+ return modalInstance.instance;
+ };
+
+ /* Shortcut method to open basic modals with title, message, and OK button that simply closes the modal. */
+ public openInfoModal = (title: string, message: string, testId: string, buttons?: ModalButtonComponent[]): ModalComponent => {
+
+ return this.getBaseModal(ModalType.info, title, message, testId, buttons);
+ };
+
+ public openWarningModal = (title: string, message: string, testId: string, buttons?: ModalButtonComponent[]): ModalComponent => {
+ return this.getBaseModal(ModalType.warning, title, message, testId, buttons);
+ };
+
+ public openErrorModal = (title: string, message: string, testId: string, buttons?: ModalButtonComponent[]): ModalComponent => {
+ return this.getBaseModal(ModalType.error, title, message, testId, buttons);
+ };
+
+ public openSuccessModal = (title: string, message: string, testId: string, buttons?: ModalButtonComponent[]): ModalComponent => {
+ return this.getBaseModal(ModalType.success, title, message, testId, buttons);
+ };
+
+ public openCustomModal = (modalConfig: IModalConfig, dynamicComponentType: Type<any>, dynamicComponentInput?: any) => {
+ const modalInstance: ComponentRef<ModalComponent> = this.openModal(modalConfig);
+ this.createInnnerComponent(modalInstance, dynamicComponentType, dynamicComponentInput);
+ return modalInstance.instance;
+ };
+
+ public createInnnerComponent = (modalInstance: ComponentRef<ModalComponent>, dynamicComponentType: Type<any>, dynamicComponentInput?: any): void => {
+ modalInstance.instance.innerModalContent = this.createDynamicComponentService.insertComponentDynamically(dynamicComponentType, dynamicComponentInput, modalInstance.instance.dynamicContentContainer);
+ };
+
+ public openModal = (customModalData: IModalConfig): ComponentRef<ModalComponent> => {
+ let modalInstance: ComponentRef<ModalComponent> = this.createDynamicComponentService.createComponentDynamically(ModalComponent, customModalData);
+ modalInstance.instance.instanceRef = modalInstance;
+ return modalInstance;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/customTooltip/custom-tooltip.component.ts b/vid-webpack-master/src/app/shared/components/customTooltip/custom-tooltip.component.ts
new file mode 100644
index 000000000..a8163a6d8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customTooltip/custom-tooltip.component.ts
@@ -0,0 +1,20 @@
+import {AfterViewInit, Component, ViewChild, ViewContainerRef} from "@angular/core";
+import {BehaviorSubject} from "rxjs";
+
+@Component({
+ selector: 'tooltip-template',
+ template: `
+ <div class="custom-tooltip-template-container">
+ <ng-container #templateContainer></ng-container>
+ </div>`
+})
+
+export class TooltipTemplateComponent implements AfterViewInit {
+ @ViewChild('templateContainer', {read: ViewContainerRef, static: true}) public container: ViewContainerRef;
+
+ public viewReady: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
+
+ ngAfterViewInit() : void {
+ this.viewReady.next(true);
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/customTooltip/tooltip.directive.ts b/vid-webpack-master/src/app/shared/components/customTooltip/tooltip.directive.ts
new file mode 100644
index 000000000..4c3b8bd3d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/customTooltip/tooltip.directive.ts
@@ -0,0 +1,461 @@
+import {Directive, ElementRef, HostListener, Input, OnInit, Renderer, TemplateRef} from "@angular/core";
+import {CreateDynamicComponentService} from "../customModal/services/create-dynamic-component.service";
+import {TooltipTemplateComponent} from "./custom-tooltip.component";
+
+const pixel = 'px';
+const leftStyle = 'left';
+const topStyle = 'top';
+const showSuffix = 'show';
+const rightBottomSuffix = 'right__bottom';
+const centerMiddleSuffix = 'center__middle';
+
+@Directive({
+ selector: '[custom-tooltip]'
+})
+export class TooltipDirective implements OnInit {
+ @Input('tooltip-text') public text;
+ @Input('tooltip-placement') public placement: TooltipPlacement = TooltipPlacement.Top;
+ @Input('tooltip-css-class') public customCssClass: string;
+ @Input('tooltip-template') public template: TemplateRef<any>;
+ @Input('tooltip-arrow-offset') public arrowOffset: number = 10;
+ @Input('tooltip-arrow-placement') public arrowPlacement: ArrowPlacement = ArrowPlacement.LeftTop;
+ @Input('tooltip-offset') public tooltipOffset: number = 3;
+
+ private cssClass: string = 'sdc-tooltip'; // default css class
+ private tooltip: any; // tooltip html element
+ private elemPosition: any;
+ private tooltipTemplateContainer: any;
+
+ private scrollEventHandler = () => {};
+
+ constructor(
+ private elementRef: ElementRef,
+ private service: CreateDynamicComponentService,
+ private renderer: Renderer) {
+
+ this.elementRef.nativeElement.title = "";
+ }
+
+ @HostListener('mouseenter')
+ public onMouseEnter() {
+ this.show();
+ this.activateScrollEvent();
+ }
+
+ @HostListener('mouseleave')
+ public onMouseLeave() {
+ this.hide();
+ this.deactivateScrollEvent();
+ }
+
+ ngOnInit(): void {
+ this.initScrollEvent();
+ }
+
+ private get ScreenWidth() {
+ return document.documentElement.clientWidth;
+ }
+
+ private get ScreenHeight() {
+ return document.documentElement.clientHeight;
+ }
+
+ private create() {
+ this.tooltipTemplateContainer = this.service.createComponentDynamically(TooltipTemplateComponent, document.body);
+
+ /**
+ * Creating a view (injecting our template) from template in our component.
+ */
+ this.tooltip = this.tooltipTemplateContainer.location.nativeElement.querySelector(
+ '.sdc-tooltip-template-container');
+
+ if (this.template) {
+ this.tooltipTemplateContainer.instance.container.createEmbeddedView(this.template);
+ } else if(this.text) {
+ this.tooltip.textContent = this.text;
+ } else {
+ this.tooltip = undefined;
+ }
+
+ this.setCssClass(true);
+ }
+
+ private destroy() {
+ this.tooltipTemplateContainer.destroy();
+ this.tooltip = null;
+ }
+
+ private show() {
+ this.create();
+
+ /**
+ * View is ready (AfterViewInit event in template component)
+ */
+ this.tooltipTemplateContainer.instance.viewReady.subscribe((isReady) => {
+ if (isReady) {
+ this.setPosition();
+ this.toggleShowCssClass(true); // add css class
+ }
+ });
+ }
+
+ private hide() {
+ this.toggleShowCssClass(false); // remove css class
+
+ this.destroy();
+ }
+
+ private toggleShowCssClass(isAdd: boolean) {
+ if (this.tooltip) {
+ this.setCssClass(isAdd, '-' + showSuffix);
+ }
+ }
+
+ /**
+ * Adds placement css class and sets tooltip position in style
+ */
+ private setPosition() {
+ const tooltipPos: IPlacementData = this.getPlacementData();
+
+ const placementSuffix: string = TooltipPlacement[tooltipPos.placement].toLowerCase();
+
+ this.setCssClass(true, '-' + placementSuffix);
+
+ this.setAdditionalCssClass(placementSuffix);
+
+ this.renderer.setElementStyle(this.tooltip, topStyle, tooltipPos.top + pixel);
+ this.renderer.setElementStyle(this.tooltip, leftStyle, tooltipPos.left + pixel);
+ }
+
+ private setAdditionalCssClass(placementSuffix: string) {
+ if (this.arrowPlacement === ArrowPlacement.RightBottom) {
+ this.setCssClass(true, '-' + placementSuffix + '-' + rightBottomSuffix);
+ } else if (this.arrowPlacement === ArrowPlacement.CenterMiddle) {
+ this.setCssClass(true, '-' + placementSuffix + '-' + centerMiddleSuffix);
+ }
+ }
+
+ private setCssClass(isAdd: boolean, suffix: string = '') {
+ this.renderer.setElementClass(this.tooltip, this.cssClass + suffix, isAdd);
+
+ if (this.customCssClass) {
+ this.renderer.setElementClass(this.tooltip, this.customCssClass + suffix, isAdd);
+ }
+ }
+
+ /**
+ * Checks the specified placement (first element in array), if it is not valid - checks other placements
+ * @returns {IPlacementData}
+ */
+ private getPlacementData(): IPlacementData {
+ const placement: TooltipPlacement = this.placement;
+ let tooltipPos: IPlacementData;
+
+ const tooltipPosWithPlacement = this.getPlacement.bind(this, placement);
+
+ // TODO add comments - done
+ switch (placement) {
+ case TooltipPlacement.Left:
+ tooltipPos = tooltipPosWithPlacement(
+ TooltipPlacement.Right,
+ TooltipPlacement.Top,
+ TooltipPlacement.Bottom);
+ break;
+
+ case TooltipPlacement.Right:
+ tooltipPos = tooltipPosWithPlacement(
+ TooltipPlacement.Left,
+ TooltipPlacement.Top,
+ TooltipPlacement.Bottom);
+ break;
+
+ case TooltipPlacement.Top:
+ tooltipPos = tooltipPosWithPlacement(
+ TooltipPlacement.Bottom,
+ TooltipPlacement.Left,
+ TooltipPlacement.Right);
+ break;
+
+ case TooltipPlacement.Bottom:
+ tooltipPos = tooltipPosWithPlacement(
+ TooltipPlacement.Top,
+ TooltipPlacement.Left,
+ TooltipPlacement.Right);
+ break;
+ }
+
+ return tooltipPos;
+ }
+
+ /**
+ * Returns valid tooltip position data
+ * @param {TooltipPlacement} placement
+ * @param {TooltipPlacement} additionalPlacements
+ * @returns {IPlacementData}
+ */
+ private getPlacement(placement: TooltipPlacement,
+ ...additionalPlacements: TooltipPlacement[]
+ ): IPlacementData {
+ const placements: TooltipPlacement[] = [placement, ...additionalPlacements];
+ const filterPlacements = placements
+ .map((pl) => this.getPosition(pl))
+ .filter((item) => this.validatePosition(item));
+ return filterPlacements.length > 0 ? filterPlacements[0] : this.getPosition(placement);
+ }
+
+ /**
+ * Returns input data for getPosition method
+ * @returns {ITooltipPositionParams}
+ */
+ private getPlacementInputParams(): ITooltipPositionParams {
+ this.elemPosition = this.elementRef.nativeElement.getBoundingClientRect();
+
+ return {
+ elemHeight: this.elementRef.nativeElement.offsetHeight,
+ elemLeft: this.elemPosition.left,
+ elemTop: this.elemPosition.top,
+ elemWidth: this.elementRef.nativeElement.offsetWidth,
+ pageYOffset: window.pageYOffset,
+ tooltipHeight: this.tooltip.offsetHeight, // .clientHeight,
+ tooltipOffset: this.tooltipOffset,
+ tooltipWidth: this.tooltip.offsetWidth,
+ arrowOffset: this.arrowOffset
+ };
+ }
+
+ /**
+ * Returns tooltip position data
+ * @param {TooltipPlacement} placement (left, top, right, bottom)
+ * @returns {IPlacementData}
+ */
+ private getPosition(placement: TooltipPlacement): IPlacementData {
+ switch(this.arrowPlacement) {
+ case ArrowPlacement.LeftTop:
+ return this.getLeftTopPosition(placement);
+
+ case ArrowPlacement.RightBottom:
+ return this.getRightBottomPosition(placement);
+ }
+
+ return this.getCenterMiddlePosition(placement);
+ }
+
+ /**
+ * Returns tooltip position data (center / middle arrow)
+ * @param {TooltipPlacement} placement (left, top, right, bottom)
+ * @returns {IPlacementData}
+ */
+ private getCenterMiddlePosition(placement: TooltipPlacement): IPlacementData {
+ let left = 0;
+ let top = 0;
+
+ const inputPos: ITooltipPositionParams = this.getPlacementInputParams();
+ switch (placement) {
+ case TooltipPlacement.Left:
+ left = inputPos.elemLeft - inputPos.tooltipWidth - inputPos.tooltipOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight / 2 - inputPos.tooltipHeight / 2;
+ break;
+
+ case TooltipPlacement.Right:
+ left = inputPos.elemLeft + inputPos.elemWidth + inputPos.tooltipOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight / 2 - inputPos.tooltipHeight / 2;
+ break;
+
+ case TooltipPlacement.Top:
+ left = inputPos.elemLeft + inputPos.elemWidth / 2 - inputPos.tooltipWidth / 2;
+ top = inputPos.elemTop + inputPos.pageYOffset - inputPos.tooltipHeight - inputPos.tooltipOffset;
+ break;
+
+ case TooltipPlacement.Bottom:
+ left = inputPos.elemLeft + inputPos.elemWidth / 2 - inputPos.tooltipWidth / 2;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight + inputPos.tooltipOffset;
+ break;
+ }
+
+ return {
+ height: inputPos.tooltipHeight,
+ left,
+ placement,
+ top,
+ width: inputPos.tooltipWidth,
+ pageYOffset: inputPos.pageYOffset
+ } as IPlacementData;
+ }
+
+ /**
+ * Returns tooltip position data (left / top arrow)
+ * @param {TooltipPlacement} placement (left, top, right, bottom)
+ * @returns {IPlacementData}
+ */
+ private getLeftTopPosition(placement: TooltipPlacement): IPlacementData {
+ let left = 0;
+ let top = 0;
+
+ const inputPos: ITooltipPositionParams = this.getPlacementInputParams();
+ switch (placement) {
+ case TooltipPlacement.Left:
+ left = inputPos.elemLeft - inputPos.tooltipWidth - inputPos.tooltipOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight / 2 - inputPos.arrowOffset;
+ break;
+
+ case TooltipPlacement.Right:
+ left = inputPos.elemLeft + inputPos.elemWidth + inputPos.tooltipOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight / 2 - inputPos.arrowOffset;
+ break;
+
+ case TooltipPlacement.Top:
+ left = inputPos.elemLeft + inputPos.elemWidth / 2 - inputPos.arrowOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset - inputPos.tooltipHeight - inputPos.tooltipOffset;
+ break;
+
+ case TooltipPlacement.Bottom:
+ left = inputPos.elemLeft + inputPos.elemWidth / 2 - inputPos.arrowOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight + inputPos.tooltipOffset;
+ break;
+ }
+
+ return {
+ height: inputPos.tooltipHeight,
+ left,
+ placement,
+ top,
+ width: inputPos.tooltipWidth,
+ pageYOffset: inputPos.pageYOffset
+ } as IPlacementData;
+ }
+
+ /**
+ * Returns tooltip position data (right / bottom arrow)
+ * @param {TooltipPlacement} placement (left, top, right, bottom)
+ * @returns {IPlacementData}
+ */
+ private getRightBottomPosition(placement: TooltipPlacement): IPlacementData {
+ let left = 0;
+ let top = 0;
+
+ const inputPos: ITooltipPositionParams = this.getPlacementInputParams();
+ switch (placement) {
+ case TooltipPlacement.Left:
+ left = inputPos.elemLeft - inputPos.tooltipWidth - inputPos.tooltipOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight / 2 - inputPos.tooltipHeight + inputPos.arrowOffset;
+ break;
+
+ case TooltipPlacement.Right:
+ left = inputPos.elemLeft + inputPos.elemWidth + inputPos.tooltipOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight / 2 - inputPos.tooltipHeight + inputPos.arrowOffset;
+ break;
+
+ case TooltipPlacement.Top:
+ left = inputPos.elemLeft + inputPos.elemWidth / 2 - inputPos.tooltipWidth + inputPos.arrowOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset - inputPos.tooltipHeight - inputPos.tooltipOffset;
+ break;
+
+ case TooltipPlacement.Bottom:
+ left = inputPos.elemLeft + inputPos.elemWidth / 2 - inputPos.tooltipWidth + inputPos.arrowOffset;
+ top = inputPos.elemTop + inputPos.pageYOffset + inputPos.elemHeight + inputPos.tooltipOffset;
+ break;
+ }
+
+ return {
+ height: inputPos.tooltipHeight,
+ left,
+ placement,
+ top,
+ width: inputPos.tooltipWidth,
+ pageYOffset: inputPos.pageYOffset
+ } as IPlacementData;
+ }
+
+ /**
+ * Checks if tooltip position is valid
+ * @param {IPlacementData} pos
+ * @returns {boolean}
+ */
+ private validatePosition(pos: IPlacementData): boolean {
+ if (pos.left < 0 || pos.left + pos.width - 1 > this.ScreenWidth) {
+ return false;
+ }
+
+ if (pos.top - pos.pageYOffset < 0 || pos.top - pos.pageYOffset + pos.height - 1 > this.ScreenHeight) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Scrolling
+ */
+
+ private debounce(func: Function, wait: number, immediate?: boolean) {
+ let timeout;
+ return function() {
+ const context = this;
+ const args = arguments;
+ const later = () => {
+ timeout = null;
+ if (!immediate) {
+ func.apply(context, args);
+ }
+ };
+ const callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ func.apply(context, args);
+ }
+ };
+ }
+
+ private initScrollEvent() {
+ this.scrollEventHandler = this.debounce(() => {
+ try {
+ this.setPosition();
+ } catch (e) {
+
+ }
+ }, 10);
+ }
+
+ private activateScrollEvent() {
+ window.addEventListener('scroll', this.scrollEventHandler , true);
+ }
+
+ private deactivateScrollEvent() {
+ window.removeEventListener('scroll', this.scrollEventHandler , true);
+ }
+}
+
+export enum TooltipPlacement {
+ Left,
+ Right,
+ Top,
+ Bottom
+}
+
+export enum ArrowPlacement {
+ CenterMiddle,
+ LeftTop,
+ RightBottom
+}
+
+interface ITooltipPositionParams {
+ elemLeft: number;
+ elemTop: number;
+ elemWidth: number;
+ elemHeight: number;
+ tooltipWidth: number;
+ tooltipHeight: number;
+ tooltipOffset: number;
+ pageYOffset: number;
+ arrowOffset: number;
+}
+
+interface IPlacementData {
+ left: number;
+ top: number;
+ width: number;
+ height: number;
+ pageYOffset: number;
+ placement?: TooltipPlacement;
+}
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 a7b8ac744..9828645bf 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
@@ -6,7 +6,7 @@ import * as _ from 'lodash';
selector: 'custom-ellipsis',
template: `
<span
- sdc-tooltip
+ custom-tooltip
class="ellipsis"
[attr.data-tests-id]="dataTestId"
id="{{id}}"
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
index 26362ebed..fe7744e43 100644
--- 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
@@ -8,4 +8,9 @@
data-toggle="toggle">
<label class="checkbox-label"
for="{{data?.dataTestId}}">{{data?.displayName}}</label>
+ <div *ngFor="let extraContent of data?.extraContents" class="form-conrtols">
+ <div [ngSwitch]="extraContent.type">
+ <upload-files *ngSwitchCase="'UPLOAD_FILE'" [uploadFilesModel]="extraContent" [form]="form"></upload-files>
+ </div>
+ </div>
</div>
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.scss b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.scss
index 005e28cc6..81180e06f 100644
--- a/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.scss
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.scss
@@ -11,6 +11,7 @@
.details-item label {
position: relative;
cursor: pointer;
+ float: left;
}
.details-item label:before {
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
index 2c2172005..aadf13ebe 100644
--- 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
@@ -11,7 +11,7 @@ import {FileFormControl} from "../../../../models/formControlModels/fileFormCont
export class FileFormControlComponent {
@Input() data: FileFormControl = null;
@Input() form: FormGroup;
- @ViewChild('fileUploader')
+ @ViewChild('fileUploader', {static: false})
fileUploader:ElementRef ;
onDelete(event, data, form) {
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
index 1e8c28104..7a7ab72d0 100644
--- 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
@@ -9,7 +9,7 @@ import {FormGroup} from "@angular/forms";
})
export class InputFormControlComponent{
- @ViewChild('customInput') element:ElementRef;
+ @ViewChild('customInput', {static: false}) element:ElementRef;
@Input() data: InputFormControl = null;
@Input() form: FormGroup;
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts
index e82ea5d85..83f722704 100644
--- a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts
@@ -133,13 +133,14 @@ export class SharedControllersService {
})
};
- getSDNCControl = (instance: any): FormControlModel => {
+ getSDNCControl = (instance: any, extraContents? : object[]): FormControlModel => {
return new CheckboxFormControl({
controlName: SDN_C_PRE_LOAD,
displayName: 'SDN-C pre-load',
dataTestId: 'sdncPreLoad',
value: instance ? instance.sdncPreLoad : false,
- validations: [new ValidatorModel(ValidatorOptions.required, 'is required')]
+ validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+ extraContents
})
};
@@ -167,7 +168,7 @@ export class SharedControllersService {
placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided',
validations: validations,
isVisible : true,
- value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName)))
+ value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName) && instance.instanceName !== ""))
? this._basicControlGenerator.getDefaultInstanceName(instance, model) : null,
onKeypress : (event) => {
const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
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
index f3d32b9bb..154c60f9e 100644
--- 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
@@ -6,12 +6,20 @@ 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 {
+ FormControlModel,
+ ValidatorModel,
+ ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
import {FormControlNames, VfModuleControlGenerator} from "./vfModule.control.generator";
-import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+import {FeatureFlagsService, Features} from "../../../../services/featureFlag/feature-flags.service";
import {VfModuleInstance} from "../../../../models/vfModuleInstance";
import {VfModule} from "../../../../models/vfModule";
import {SharedControllersService} from "../sharedControlles/shared.controllers.service";
+import {AppState} from "../../../../store/reducers";
+import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
+import {instance, mock, when} from "ts-mockito";
+import each from "jest-each";
class MockAppStore<T> {
getState() {
@@ -914,6 +922,9 @@ describe('VFModule Control Generator', () => {
let injector;
let service: VfModuleControlGenerator;
let httpMock: HttpTestingController;
+ let store : NgRedux<AppState>;
+ let mockFeatureFlagsService: FeatureFlagsService = mock(FeatureFlagsService);
+
beforeAll(done => (async () => {
TestBed.configureTestingModule({
@@ -925,7 +936,8 @@ describe('VFModule Control Generator', () => {
AaiService,
FormBuilder,
LogService,
- {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+ SharedTreeService,
+ {provide: FeatureFlagsService, useValue: instance(mockFeatureFlagsService)},
{provide: NgRedux, useClass: MockAppStore}]
});
await TestBed.compileComponents();
@@ -933,10 +945,28 @@ describe('VFModule Control Generator', () => {
injector = getTestBed();
service = injector.get(VfModuleControlGenerator);
httpMock = injector.get(HttpTestingController);
+ store = injector.get(NgRedux);
jest.spyOn(console, 'error');
})().then(done).catch(done.fail));
+ let formControlsWithoutLcpRegionTenantLegacy : string[] =
+ [FormControlNames.INSTANCE_NAME,
+ FormControlNames.VOLUME_GROUP_NAME,
+ FormControlNames.ROLLBACK_ON_FAILURE,
+ SDN_C_PRE_LOAD,];
+
+ let formControlsWithLcpRegionTenantLegacy : string[] =
+ [FormControlNames.INSTANCE_NAME,
+ FormControlNames.VOLUME_GROUP_NAME,
+ FormControlNames.LCPCLOUD_REGION_ID,
+ FormControlNames.LEGACY_REGION,
+ FormControlNames.TENANT_ID,
+ FormControlNames.ROLLBACK_ON_FAILURE,
+ SDN_C_PRE_LOAD,];
+
+
+
test(' getMacroFormControls gets vnfStoreKey === null', () => {
const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
const vnfStoreKey: string = null;
@@ -1049,20 +1079,15 @@ describe('VFModule Control Generator', () => {
expect(console.error).toHaveBeenCalled();
});
- test('getAlaCarteFormControls should return the correct order of controls', () => {
+ each([
+ [true, 4, formControlsWithoutLcpRegionTenantLegacy],
+ [false, 7,formControlsWithLcpRegionTenantLegacy]
+ ]).
+ test('getAlaCarteFormControls should return the correct order of controls', (flag: boolean, controlAmount: number, orderedControls: string[]) => {
+ when(mockFeatureFlagsService.getFlagState(Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF)).thenReturn(flag);
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,
- SDN_C_PRE_LOAD,
- ];
-
- expect(controls.length).toEqual(7);
+ expect(controls.length).toEqual(controlAmount);
for(let i = 0 ; i < orderedControls.length ; i++) {
expect(controls[i].controlName).toEqual(orderedControls[i]);
}
@@ -1084,26 +1109,6 @@ describe('VFModule Control Generator', () => {
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,
- 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_vGeraldine 0';
@@ -1140,23 +1145,28 @@ describe('VFModule Control Generator', () => {
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,
- SDN_C_PRE_LOAD,
- ];
+ test('when flag is active - response should contains upload file', ()=>{
+ spyOn(store, 'getState').and.returnValue( {
+ "global": {
+ "flags": {
+ "FLAG_2006_VFM_SDNC_PRELOAD_FILES" : true
+ }
+ }
+ });
+
+ const extraContent = service.getSdncExtraContents();
+ console.log("extraContent", extraContent);
+ const uploadFileData = <any>extraContent[0];
+
+ expect(uploadFileData.type).toEqual('UPLOAD_FILE');
+ expect(uploadFileData.dataTestId).toEqual('sdnc_pereload_upload_link');
+ expect(uploadFileData.uploadMethod).toBeDefined();
+ expect(uploadFileData.isDisabled).toBeDefined();
+ expect(uploadFileData.onSuccess).toBeDefined();
+ expect(uploadFileData.onFailed).toBeDefined();
+
+ })
- 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
index 60ffc3e96..b614ecf30 100644
--- 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
@@ -3,7 +3,7 @@ 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 {ControlGeneratorUtil} from "../control.generator.util.service";
+import {ControlGeneratorUtil, SDN_C_PRE_LOAD} from "../control.generator.util.service";
import {
CustomValidatorOptions,
FormControlModel,
@@ -20,6 +20,10 @@ import {VNFModel} from "../../../../models/vnfModel";
import {VnfInstance} from "../../../../models/vnfInstance";
import * as _ from 'lodash';
import {SharedControllersService} from "../sharedControlles/shared.controllers.service";
+import {MessageModal} from "../../../messageModal/message-modal.service";
+import {ButtonType} from "../../../customModal/models/button.type";
+import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
+import {FeatureFlagsService, Features} from "../../../../services/featureFlag/feature-flags.service";
export enum FormControlNames {
INSTANCE_NAME = 'instanceName',
@@ -35,15 +39,17 @@ export enum FormControlNames {
export class VfModuleControlGenerator {
aaiService: AaiService;
vfModuleModel: VfModule;
- isUpdateMode : boolean;
+ isUpdateMode: boolean;
constructor(private genericFormService: GenericFormService,
private _basicControlGenerator: ControlGeneratorUtil,
private _sharedControllersService: SharedControllersService,
+ private _sharedTreeService: SharedTreeService,
private store: NgRedux<AppState>,
private http: HttpClient,
private _aaiService: AaiService,
- private _logService: LogService) {
+ private _logService: LogService,
+ private _featureFlagsService:FeatureFlagsService) {
this.aaiService = _aaiService;
}
@@ -52,7 +58,7 @@ export class VfModuleControlGenerator {
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']]);
+ vfModuleInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules[UUIDData['modelName']][UUIDData['vFModuleStoreKey']]);
}
return vfModuleInstance;
};
@@ -63,11 +69,11 @@ export class VfModuleControlGenerator {
return vfModule;
}
- getMacroFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] {
+ 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){
+ if (isUpdateMode) {
this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId);
return [];
}
@@ -76,21 +82,28 @@ export class VfModuleControlGenerator {
const vfModuleInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, 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]);
+ const vnfModel = this.newVNFModel(serviceId, vnf);
let result: FormControlModel[] = [];
if (!_.isNil(vfModuleModel)) {
result = this.pushInstanceAndVGToForm(result, vfModuleInstance, serviceId, vnfModel, false);
}
- if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
+ if (this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
result = this._basicControlGenerator.concatSupplementaryFile(result, vfModuleInstance);
}
return result;
}
- pushInstanceAndVGToForm(result: FormControlModel[], vfModuleElement: any, serviceId: string, vnfModel: any, isALaCarte: boolean) :FormControlModel[]{
+ private newVNFModel(serviceId: string, vnf: VnfInstance) {
+ const vnfModelName: string = this._sharedTreeService.modelUniqueNameOrId(vnf);
+
+ const serviceModelFromHierarchy = this.store.getState().service.serviceHierarchy[serviceId];
+ const model = this._sharedTreeService.modelByIdentifiers(serviceModelFromHierarchy, "vnfs", vnfModelName);
+ return new VNFModel(model);
+ }
+
+ pushInstanceAndVGToForm(result: FormControlModel[], vfModuleElement: any, serviceId: string, vnfModel: any, isALaCarte: boolean): FormControlModel[] {
result.push(this.getInstanceName(vfModuleElement, serviceId, vnfModel.isEcompGeneratedNaming));
if (this.vfModuleModel.volumeGroupAllowed) {
result.push(this.getVolumeGroupData(vfModuleElement, serviceId, vnfModel.isEcompGeneratedNaming, isALaCarte));
@@ -98,46 +111,85 @@ export class VfModuleControlGenerator {
return result;
}
- getAlaCarteFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] {
+ 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){
+ 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 vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
+ const vnfModel = this.newVNFModel(serviceId, vnf);
const vfModuleInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode));
let result: FormControlModel[] = [];
this.pushInstanceAndVGToForm(result, vfModuleInstance, serviceId, vnfModel, true);
- result.push(this._sharedControllersService.getLcpRegionControl(serviceId, vfModuleInstance, result));
- result.push(this._sharedControllersService.getLegacyRegion(vfModuleInstance));
- result.push(this._sharedControllersService.getTenantControl(serviceId, vfModuleInstance));
+ if( !this._featureFlagsService.getFlagState(Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF)) {
+ result.push(this._sharedControllersService.getLcpRegionControl(serviceId, vfModuleInstance, result));
+ result.push(this._sharedControllersService.getLegacyRegion(vfModuleInstance));
+ result.push(this._sharedControllersService.getTenantControl(serviceId, vfModuleInstance));
+ }
result.push(this._sharedControllersService.getRollbackOnFailureControl(vfModuleInstance));
- result.push(this._sharedControllersService.getSDNCControl(vfModuleInstance));
- if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
+ result.push(this._sharedControllersService.getSDNCControl(vfModuleInstance, this.getSdncExtraContents()));
+ if (this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
result = this._basicControlGenerator.concatSupplementaryFile(result, vfModuleInstance);
}
return result;
}
- getInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): FormControlModel {
- let formControlModel:FormControlModel = this._sharedControllersService.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");
+ getSdncExtraContents() : object[] {
+ return _.compact([
+ !!this.store.getState().global.flags['FLAG_2006_VFM_SDNC_PRELOAD_FILES'] ? {
+ type: 'UPLOAD_FILE',
+ dataTestId: 'sdnc_pereload_upload_link',
+ uploadMethod: (form: FormGroup) : Promise<boolean> => {
+ // this -> files item
+ return this._aaiService.sdncPreload().toPromise()
+ .then((response : boolean)=>{
+ return response;
+ }).catch(err => {
+ return false;
+ });
+ },
+ isDisabled: (form: FormGroup): boolean => {
+ return !form.controls[SDN_C_PRE_LOAD].value;
+ },
+ onSuccess: (form: FormGroup): void => {
+ MessageModal.showMessageModal({
+ text: 'The pre-load file(s) have been uploaded successfully.',
+ type: "success",
+ title: 'Success',
+ buttons: [{type: ButtonType.success, size: 'large', text: 'OK', closeModal: true}]
+ })
+ },
+ onFailed: (form: FormGroup) : void=> {
+ MessageModal.showMessageModal({
+ text: 'Failed to upload one or more of the files, please retry.',
+ type: "error",
+ title: 'Failure',
+ buttons: [{type: ButtonType.error, size: 'large', text: 'OK', closeModal: true}]
+ })
}
- };
+ } : null
+ ]);
+ }
+
+
+ getInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): FormControlModel {
+ let formControlModel: FormControlModel = this._sharedControllersService.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, isEcompGeneratedNaming: boolean): string {
- if ((!_.isNil(instance) && instance.volumeGroupName)) {
+ if ((!_.isNil(instance) && instance.volumeGroupName)) {
return instance.volumeGroupName;
}
if (isEcompGeneratedNaming) {
@@ -157,12 +209,12 @@ export class VfModuleControlGenerator {
displayName: 'Volume Group Name',
dataTestId: 'volumeGroupName',
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: this.shouldVGNameBeVisible(isEcompGeneratedNaming,isALaCarte),
+ 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: this.shouldVGNameBeVisible(isEcompGeneratedNaming, isALaCarte),
value: this.getDefaultVolumeGroupName(instance, isEcompGeneratedNaming),
onKeypress: (event) => {
- const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
+ const pattern: RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
if (pattern) {
if (!pattern.test(event['key'])) {
event.preventDefault();
@@ -174,7 +226,7 @@ export class VfModuleControlGenerator {
}
private shouldVGNameBeVisible(isEcompGeneratedNaming: boolean, isALaCarte: boolean) {
- if((!isALaCarte && !isEcompGeneratedNaming) || isALaCarte){
+ if ((!isALaCarte && !isEcompGeneratedNaming) || isALaCarte) {
return true;
}
return false;
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
index 018130eec..4572fa443 100644
--- 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
@@ -957,7 +957,8 @@ describe('VNF Control Generator', () => {
FormControlNames.INSTANCE_NAME,
FormControlNames.LCPCLOUD_REGION_ID,
FormControlNames.TENANT_ID,
- 'platformName'
+ 'platformName',
+ FormControlNames.PRODUCT_FAMILY_ID
];
for(let i = 0 ; i < mandatoryControls.length ; i++){
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
index 14b31b4b7..169780b29 100644
--- 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
@@ -50,7 +50,7 @@ export class VnfControlGenerator {
if (!_.isNil(vnfModel)) {
result.push(this.getInstanceName(vnfInstance, serviceId, vnfName, vnfModel.isEcompGeneratedNaming));
- result.push(this._sharedControllersService.getProductFamilyControl(vnfInstance, result, false));
+ result.push(this._sharedControllersService.getProductFamilyControl(vnfInstance, result, true));
result.push(this._sharedControllersService.getLcpRegionControl(serviceId, vnfInstance, result));
result.push(this._sharedControllersService.getLegacyRegion(vnfInstance));
result.push(this._sharedControllersService.getTenantControl(serviceId, vnfInstance));
@@ -74,7 +74,7 @@ export class VnfControlGenerator {
if (!_.isNil(vnfModel)) {
const flags = this.store.getState().global.flags;
result.push(this.getInstanceName(vnfInstance, serviceId, vnfName, vnfModel.isEcompGeneratedNaming));
- result.push(this._sharedControllersService.getProductFamilyControl(vnfInstance, result, false));
+ result.push(this._sharedControllersService.getProductFamilyControl(vnfInstance, result, true));
result.push(this._sharedControllersService.getLcpRegionControl(serviceId, vnfInstance, result));
result.push(this._sharedControllersService.getLegacyRegion(vnfInstance));
result.push(this._sharedControllersService.getTenantControl(serviceId, vnfInstance));
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
index edf86823c..627f6426a 100644
--- 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
@@ -3,7 +3,7 @@
<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>
+ <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>
<multiselect-form-control *ngSwitchCase="'MULTI_SELECT'"
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.html b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.html
new file mode 100644
index 000000000..6f59c0ce2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.html
@@ -0,0 +1,15 @@
+<div>
+ <a [attr.data-tests-id]="uploadFilesModel.dataTestId"
+ (click)="uploadFilesTrigger()"
+ href="javascript:void(0)"
+ class="upload-text"
+ [class.disabled]="uploadFilesModel.isDisabled && uploadFilesModel.isDisabled(form)">{{uploadFilesModel.uploadText || 'Upload'}}</a>
+ <span class="hide-span">
+ <input
+ type="file"
+ #fileInput
+ ng2FileSelect
+ [uploader]="uploader"
+ [attr.data-tests-id]="uploadFilesModel.dataTestId + '-input'"/>
+ </span>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.scss b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.scss
new file mode 100644
index 000000000..ce9e14fbe
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.scss
@@ -0,0 +1,23 @@
+.upload-text {
+ margin-left: 30px;
+ font-family: OpenSans-Semibold;
+ font-size: 14px;
+ line-height: 23px;
+}
+
+a.disabled {
+ color: gray;
+ cursor: not-allowed;
+ text-decoration: underline;
+}
+
+.hide-span {
+ visibility: hidden;
+ position: absolute;
+ overflow: hidden;
+ width: 0px;
+ height: 0px;
+ border: none;
+ margin: 0;
+ padding: 0
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.ts b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.ts
new file mode 100644
index 000000000..803d5d053
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component.ts
@@ -0,0 +1,41 @@
+import {Component, ElementRef, Input, OnInit, ViewChild} from "@angular/core";
+import {FileItem, FileUploader} from "ng2-file-upload";
+import {UploadFilesLinkModel} from "./upload-files-link.model";
+import {FormGroup} from "@angular/forms";
+
+@Component({
+ selector: 'upload-files',
+ templateUrl: './upload-files-link.component.html',
+ styleUrls: ['./upload-files-link.component.scss']
+})
+export class UploadFilesLinkComponent implements OnInit {
+ uploader: FileUploader;
+ @Input() uploadFilesModel: UploadFilesLinkModel;
+ @Input() form: FormGroup;
+ @ViewChild('fileInput', {static: false}) fileInput: ElementRef;
+
+ ngOnInit(): void {
+ this.uploader = new FileUploader({});
+
+ this.uploader.onAfterAddingAll = async (files: FileItem[]) => {
+ const result = await this.uploadFilesModel.uploadMethod.call(files, this.form);
+ if (result && this.uploadFilesModel.onSuccess) {
+ this.uploadFilesModel.onSuccess.call(this.form);
+ } else if (!result && this.uploadFilesModel.onFailed) {
+ this.uploadFilesModel.onFailed.call(this.form);
+ }
+ this.uploadFilesModel.uploadText = result ? 'Upload another' : 'Upload'
+ };
+ this.resetUpload();
+ }
+
+ resetUpload(): void {
+ this.fileInput.nativeElement.value = '';
+ }
+
+ uploadFilesTrigger() {
+ if (this.uploadFilesModel.isDisabled && !this.uploadFilesModel.isDisabled(this.form)) {
+ this.fileInput.nativeElement.click();
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.model.ts b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.model.ts
new file mode 100644
index 000000000..beb54f43a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.model.ts
@@ -0,0 +1,30 @@
+import {FileItem} from "ng2-file-upload";
+
+export class UploadFilesLinkModel {
+ uploadText?: string;
+
+ /*********************************************************************
+ Implement success method - run after uploadMethod return true result
+ **********************************************************************/
+ onSuccess?: (...args) => void;
+
+ /*********************************************************************
+ Implement failed method - run after uploadMethod return false result
+ **********************************************************************/
+ onFailed?: (...args) => void;
+
+ /*********************************************************************************
+ Implement upload method and return the upload result status (false/true)
+ *********************************************************************************/
+ uploadMethod: (file: FileItem[], ...args) => Promise<boolean>;
+
+ /********************************
+ Should upload file be disabled
+ ********************************/
+ isDisabled?: (...args) => boolean;
+
+ /********************************
+ a tag data test id
+ ********************************/
+ dataTestId : string;
+}
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
index 6bb1ff156..031357403 100644
--- 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
@@ -61,12 +61,6 @@
(click)="openTemplateModal()"
><span>Template</span></button>
<button
- *ngIf="isShowPreviousInstantiationBtn"
- [attr.data-tests-id]="'ShowPreviousInstancesButton'"
- type="button" class="btn btn-success submit"
- (click)="formPopupDetails.onOtherAction(formPopupDetails.that, dynamicForm)"
- ><span>Previous Instantiation</span></button>
- <button
[attr.data-tests-id]="'cancelButton'"
type="button" class="btn btn-default cancel"
(click)="formPopupDetails.onCancel(formPopupDetails.that, dynamicForm); clearModalIsUpdateMode()"
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
index 9063e6723..7368dd698 100644
--- 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
@@ -47,7 +47,6 @@ export class GenericFormPopupComponent extends DialogComponent<PopupModel, boole
type: PopupType;
uuidData: UUIDData;
showTemplateBtn: boolean = false;
- isShowPreviousInstantiationBtn: boolean = false;
isUpdateMode: boolean;
node: ITreeNode = null;
hasGeneralApiError: boolean = false;
@@ -89,7 +88,7 @@ export class GenericFormPopupComponent extends DialogComponent<PopupModel, boole
.subscribe(params => {
this.serviceModelId = params['serviceModelId'];
if (this.serviceModelId && params['isCreate'] == "true") {
- this.onInitForCreateNewServicePopup(params['hasTemplate']);
+ this.onInitForCreateNewServicePopup(params['isInstantiationTemplateExists']);
}
});
@@ -107,7 +106,7 @@ export class GenericFormPopupComponent extends DialogComponent<PopupModel, boole
}
}
- private onInitForCreateNewServicePopup(hasTemplate : boolean) {
+ private onInitForCreateNewServicePopup(isInstantiationTemplateExists : boolean) {
this._genericFormPopupService.initReduxOnCreateNewService().then((serviceModelId: string) => {
this.uuidData = <any>{
bulkSize: 1,
@@ -117,8 +116,7 @@ export class GenericFormPopupComponent extends DialogComponent<PopupModel, boole
popupService: this._servicePopupService,
};
- this.showTemplateBtn = this._genericFormPopupService.shouldShowTemplateBtn(hasTemplate);
- this.isShowPreviousInstantiationBtn = !!this._store.getState().global.flags["FLAG_2004_TEMP_BUTTON_TO_INSTANTIATION_STATUS_FILTER"];
+ this.showTemplateBtn = this._genericFormPopupService.shouldShowTemplateBtn(isInstantiationTemplateExists);
this.uuidData.popupService.closeDialogEvent.subscribe((that) => {
this.closeDialog(that);
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
index 53f345af0..e69cd5692 100644
--- 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
@@ -24,6 +24,7 @@ import {VfModuleUpgradePopupService} from "./genericFormServices/vfModuleUpgrade
import {SharedControllersService} from "../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
import {AppState} from "../../store/reducers";
import each from 'jest-each';
+import {SharedTreeService} from "../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
class MockAppStore<T>{
getState() {
@@ -977,6 +978,7 @@ describe('Generic Form popup Service', () => {
VfModuleUpgradePopupService,
VfModuleControlGenerator,
FeatureFlagsService,
+ SharedTreeService,
{provide: ActivatedRoute, useClass: ActivatedRouteMock},
{provide: NgRedux, useClass: MockAppStore}]
});
@@ -1074,14 +1076,14 @@ describe('Generic Form popup Service', () => {
const shouldShowTemplateBtnDataProvider = [
- ['shouldShowTemplateBtn : should return true if flag is true and has template', true , true, true],
- ['shouldShowTemplateBtn : should return false if flag is false and has template',false , true, false],
- ['shouldShowTemplateBtn : should return false if flag is true and has no template',true , false, false],
- ['shouldShowTemplateBtn : should return false if flag is false and has no template',false , false, false]];
- each(shouldShowTemplateBtnDataProvider).test('%s', (desc : string, flag : boolean, hasTemplate : boolean, expected : boolean ) => {
+ ['shouldShowTemplateBtn : should return true if flag is true and has instantiation template', true , true, true],
+ ['shouldShowTemplateBtn : should return false if flag is false and has instantiation template',false , true, false],
+ ['shouldShowTemplateBtn : should return false if flag is true and has no instantiation template',true , false, false],
+ ['shouldShowTemplateBtn : should return false if flag is false and has no instantiation template',false , false, false]];
+ each(shouldShowTemplateBtnDataProvider).test('%s', (desc : string, flag : boolean, isInstantiationTemplateExists : boolean, expected : boolean ) => {
spyOn(_featureFlagsService, 'getFlagState').and.returnValue(flag)
- const result: boolean = service.shouldShowTemplateBtn(hasTemplate);
+ const result: boolean = service.shouldShowTemplateBtn(isInstantiationTemplateExists);
expect(result).toEqual(expected);
});
});
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
index 2998ba92b..e3cdaef85 100644
--- 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
@@ -95,10 +95,10 @@ export class GenericFormPopupService {
- shouldShowTemplateBtn = (hasTemplate: boolean) : boolean => {
+ shouldShowTemplateBtn = (isInstantiationTemplateExists: boolean) : boolean => {
const instantiationTemplateFlag = this._featureFlagsService.getFlagState(Features.FLAG_2004_INSTANTIATION_TEMPLATES_POPUP);
if(instantiationTemplateFlag){
- return hasTemplate;
+ return isInstantiationTemplateExists;
}
return false;
}
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
index 9bcc02d73..13438929b 100644
--- 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
@@ -11,9 +11,9 @@ 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";
+import {ModalService} from "../../customModal/services/modal.service";
class MockAppStore<T> {}
@@ -1996,7 +1996,7 @@ describe('Basic popup service', () => {
{provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
{provide: NgRedux, useClass: MockReduxStore},
{provide: HttpClient, useClass: MockAppStore},
- {provide: SdcUiServices.ModalService, useClass: MockModalService}
+ {provide: ModalService, useClass: MockModalService}
]
});
await TestBed.compileComponents();
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
index 34d6850eb..a32320ea4 100644
--- 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
@@ -14,6 +14,7 @@ import {BasicPopupService} from "../basic.popup.service";
import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
import {getTestBed, TestBed} from "@angular/core/testing";
import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {ModalService} from "../../../customModal/services/modal.service";
class MockAppStore<T> {}
@@ -2001,7 +2002,7 @@ describe('Network popup service', () => {
{provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
{provide: NgRedux, useClass: MockReduxStore},
{provide: HttpClient, useClass: MockAppStore},
- {provide: SdcUiServices.ModalService, useClass: MockModalService}
+ {provide: ModalService, useClass: MockModalService}
]
});
await TestBed.compileComponents();
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
index 3a106ec93..13b72f080 100644
--- 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
@@ -11,10 +11,10 @@ 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";
import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {ModalService} from "../../../customModal/services/modal.service";
class MockModalService<T> {}
@@ -2067,7 +2067,7 @@ describe('Service popup service', () => {
{provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
{provide: NgRedux, useClass: MockReduxStore},
{provide: HttpClient, useClass: MockAppStore},
- {provide: SdcUiServices.ModalService, useClass: MockModalService}
+ {provide: ModalService, useClass: MockModalService}
]
});
await TestBed.compileComponents();
@@ -2142,33 +2142,6 @@ describe('Service popup service', () => {
expect(service.closeDialogEvent.next).toHaveBeenCalledWith(that);
});
- test('showPreviousInstantiations should trigger postMessage', () => {
- let that = <any>{
- parentElementClassName: 'content',
- _iframeService: iframeService,
- resetPopupData : () =>{ },
- serviceModel:{
- uuid:'1111'
- }
-
- };
-
- let expectedMessage= {
- eventId: 'showPreviousInstantiations',
- data: {
- serviceModelId: that.serviceModel.uuid
- }
- };
-
- jest.spyOn(window.parent, 'postMessage');
-
- service.showPreviousInstantiations(that, fb.group({}));
-
- expect( window.parent.postMessage).toHaveBeenCalledWith(expectedMessage,"*")
-
- });
-
-
test('getDynamicInputs should return list of controls' ,() => {
const result: FormControlModel[] = service.getDynamicInputs('6b528779-44a3-4472-bdff-9cd15ec93450');
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
index d25ab2c7f..588d2345b 100644
--- 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
@@ -61,9 +61,6 @@ export class ServicePopupService implements GenericPopupInterface {
(that, form: FormGroup) => {that.onSubmit(that, form);},
(that: any, form: FormGroup) => {
that.onCancel(that, form);
- },
- (that: any, form: FormGroup) => {
- that.showPreviousInstantiations(that, form);
}
);
}
@@ -133,12 +130,6 @@ export class ServicePopupService implements GenericPopupInterface {
this.onCancel(that, form);
}
- showPreviousInstantiations(that, form: FormGroup,): void {
- const eventId = 'showPreviousInstantiations';
- this.postMessageToWindowParent(eventId, that.serviceModel.uuid);
- this.onCancel(that, form);
- }
-
private postMessageToWindowParent(eventId: string, serviceModelId:string) {
window.parent.postMessage({
eventId: eventId,
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popup.service.spec.ts
index b16c5bdc0..b8a592247 100644
--- a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popup.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popup.service.spec.ts
@@ -10,10 +10,11 @@ import {DefaultDataGeneratorService} from "../../../../services/defaultDataServi
import {BasicPopupService} from "../basic.popup.service";
import {VfModulePopupService} from "./vfModule.popup.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";
import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {ModalService} from "../../../customModal/services/modal.service";
+import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
class MockModalService<T> {}
@@ -1993,10 +1994,11 @@ describe('VFModule popup service', () => {
AaiService,
LogService,
BasicPopupService,
+ SharedTreeService,
{provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
{provide: NgRedux, useClass: MockReduxStore},
{provide: HttpClient, useClass: MockAppStore},
- {provide: SdcUiServices.ModalService, useClass: MockModalService}
+ {provide: ModalService, useClass: MockModalService}
]
});
await TestBed.compileComponents();
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popup.service.spec.ts
index 2ca992f08..578c37ef0 100644
--- a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popup.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popup.service.spec.ts
@@ -1,10 +1,6 @@
import {LogService} from "../../../../utils/log/log.service";
import {NgRedux} from "@angular-redux/store";
-import {
- ControlGeneratorUtil,
- SDN_C_PRE_LOAD,
- SUPPLEMENTARY_FILE
-} from "../../../genericForm/formControlsServices/control.generator.util.service";
+import {ControlGeneratorUtil, SDN_C_PRE_LOAD, SUPPLEMENTARY_FILE} from "../../../genericForm/formControlsServices/control.generator.util.service";
import {AaiService} from "../../../../services/aaiService/aai.service";
import {HttpClient} from "@angular/common/http";
import {GenericFormService} from "../../../genericForm/generic-form.service";
@@ -26,6 +22,7 @@ import {ServiceActions} from "../../../../storeUtil/utils/service/service.action
import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
import * as _ from "lodash";
import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {ModalService} from "../../../customModal/services/modal.service";
class MockModalService<T> {}
@@ -87,7 +84,7 @@ describe('VFModule popup service', () => {
{provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
{provide: NgRedux, useClass: MockReduxStore},
{provide: HttpClient, useClass: MockAppStore},
- {provide: SdcUiServices.ModalService, useClass: MockModalService}
+ {provide: ModalService, useClass: MockModalService}
]
});
await TestBed.compileComponents();
@@ -191,7 +188,7 @@ describe('VFModule popup service', () => {
};
form.controls = {
supplementaryFile_hidden_content : {
- value: '{"c": "c", "d": 1}'
+ value: '[{"name": "c", "value": "c"}, {"name": "d", "value": "1"}]'
},
supplementaryFile_hidden : {
value: {
@@ -203,7 +200,7 @@ describe('VFModule popup service', () => {
let expectedMergePayload = {
a: "value",
b: "another",
- supplementaryFileContent: {c: "c", d: 1},
+ supplementaryFileContent: [{"name": "c", "value": "c"}, {"name": "d", "value": "1"}],
supplementaryFileName: "name"
};
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html
index 84783c273..39c6da4f4 100644
--- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html
@@ -56,7 +56,6 @@
<th class="header-title" id="header-summary">Summary</th>
<th class="header-title" id="header-region">Region</th>
<th class="header-title" id="header-tenant">Tenant</th>
- <th class="header-title" id="header-aicZone">AIC Zone</th>
</tr>
</thead>
<tbody>
@@ -139,16 +138,6 @@
</custom-ellipsis>
</div>
</td>
- <td>
- <div>
- <custom-ellipsis
- [dataTestId]="'aicZone-' + item.jobId"
- [id]="item.aicZone"
- [value]="item.aicZone"
- [breakWord]="true">
- </custom-ellipsis>
- </div>
- </td>
</tr>
</tbody>
</table>
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts
index 61f75e84b..a479e0cbf 100644
--- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts
@@ -17,9 +17,6 @@ class ActivatedRouteMock<T> {
}
}
-//
-
-
class MockAppStore {}
describe('instantiation templates modal service', () => {
@@ -123,7 +120,6 @@ describe('instantiation templates modal service', () => {
expect(tableRows[0].instantiationStatus).toEqual('FAILED');
expect(tableRows[0].region).toEqual('hvf6 (AAA1)');
expect(tableRows[0].tenant).toEqual('AIN Web Tool-15-D-SSPtestcustome');
- expect(tableRows[0].aicZone).toEqual('VSDKYUTP-BAN1');
expect(tableRows[0].jobId).toEqual('9f88fdb5-bb47-4bf3-8c5f-98f1ad0ec87c');
});
@@ -136,6 +132,14 @@ describe('instantiation templates modal service', () => {
expect(result.region).toEqual('regionId (OWNER)');
});
+ test('getRegion if null should return empty string', () => {
+ let result: InstantiationTemplatesRowModel = new InstantiationTemplatesRowModel({
+ owningEntityName: 'att-owner',
+ regionId: null
+ });
+ expect(result.region).toEqual('(OWNER)');
+ });
+
test('getCloudOwner should not return owningEntityName if not exist', () => {
let result: InstantiationTemplatesRowModel = new InstantiationTemplatesRowModel({owningEntityName: null, regionId: 'regionId'});
expect(result.region).toEqual('regionId');
@@ -173,7 +177,7 @@ describe('instantiation templates modal service', () => {
service.navigateToNewServiceModal(serviceModelId);
- expect(_router.navigate).toBeCalledWith(["/servicePopup"], {"queryParams": {"isCreate": true, "serviceModelId": serviceModelId, hasTemplate : true}, "queryParamsHandling": "merge"});
+ expect(_router.navigate).toBeCalledWith(["/servicePopup"], {"queryParams": {"isCreate": true, "serviceModelId": serviceModelId, isInstantiationTemplateExists : true}, "queryParamsHandling": "merge"});
})
});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.ts
index c7c198fcb..5c092e9af 100644
--- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.ts
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.ts
@@ -30,7 +30,7 @@ export class InstantiationTemplatesModalService {
navigateToNewServiceModal(serviceModelId: string) {
- this._router.navigate(['/servicePopup'], { queryParams: { serviceModelId: serviceModelId, isCreate:true, hasTemplate : true}, queryParamsHandling: 'merge' });
+ this._router.navigate(['/servicePopup'], { queryParams: { serviceModelId: serviceModelId, isCreate:true, isInstantiationTemplateExists : true}, queryParamsHandling: 'merge' });
}
}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts
index f2eda9df3..56f76b32f 100644
--- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts
@@ -10,7 +10,6 @@ export class InstantiationTemplatesRowModel extends InstantiationBase{
readonly summary?: string;
readonly region?: string;
readonly tenant?: string;
- readonly aicZone?: string;
constructor(data) {
super(data);
@@ -21,7 +20,6 @@ export class InstantiationTemplatesRowModel extends InstantiationBase{
this.summary = this.convertRequestSummaryFromMapToString(data.requestSummary);
this.region = this.getRegion(data.regionId, data.owningEntityName);
this.tenant = !_.isNil(data.tenantName) ? data.tenantName : null;
- this.aicZone = !_.isNil(data.aicZoneName) ? data.aicZoneName : null;
}
@@ -36,7 +34,8 @@ export class InstantiationTemplatesRowModel extends InstantiationBase{
getRegion = (regionId: string, owningEntityName: string): string => {
const convertOwning = !_.isNil(owningEntityName) ? `(${this.getCloudOwner(owningEntityName)})` : '';
- return `${regionId} ${convertOwning}`.trim();
+ const region = !_.isNil(regionId) ? regionId : '';
+ return `${region} ${convertOwning}`.trim();
};
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 c610110fd..5251a0aae 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 { SdcUiServices} from "onap-ui-angular";
+import {ModalService} from "../customModal/services/modal.service";
@Component({
selector: 'message-box',
@@ -38,9 +38,9 @@ import { SdcUiServices} from "onap-ui-angular";
})
export class MessageBoxComponent {
- modalService: SdcUiServices.ModalService;
+ modalService: ModalService;
isOpened : boolean = false;
- constructor(modalService: SdcUiServices.ModalService, private _messageBoxService : MessageBoxService) {
+ constructor(modalService: ModalService, private _messageBoxService : MessageBoxService) {
this.modalService = modalService;
MessageBoxService.openModal.subscribe((messageBoxData: MessageBoxData) => {
diff --git a/vid-webpack-master/src/app/shared/components/messageModal/message-modal.model.ts b/vid-webpack-master/src/app/shared/components/messageModal/message-modal.model.ts
new file mode 100644
index 000000000..d29144095
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/messageModal/message-modal.model.ts
@@ -0,0 +1,15 @@
+import {ButtonType} from "../customModal/models/button.type";
+
+export class MessageModalModel {
+ title : string;
+ text : string;
+ type : 'error' | 'info' | 'success';
+ buttons : {text: string, size: string, type : ButtonType, closeModal: boolean}[];
+
+ constructor( title : string, text : string, type , buttons : {text: string, size: string, type : ButtonType, closeModal: boolean}[]){
+ this.title = title;
+ this.text = text;
+ this.type = type;
+ this.buttons = buttons;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.spec.ts b/vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.spec.ts
new file mode 100644
index 000000000..ffaccb198
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.spec.ts
@@ -0,0 +1,56 @@
+import {MessageModal} from "./message-modal.service";
+import {getTestBed, TestBed} from "@angular/core/testing";
+import {SdcUiCommon} from "onap-ui-angular";
+import each from "jest-each";
+import {MessageBoxService} from "../messageBox/messageBox.service";
+import {MessageModalModel} from "./message-modal.model";
+import {MessageBoxData} from "../messageBox/messageBox.data";
+
+
+describe('Message Modal Service', () => {
+ let injector;
+ let service: MessageModal;
+
+ beforeAll(done => (async () => {
+ TestBed.configureTestingModule({
+ imports: [],
+ providers: [MessageModal]
+ });
+ await TestBed.compileComponents();
+
+ injector = getTestBed();
+ service = injector.get(MessageModal);
+ })().then(done).catch(done.fail));
+
+
+ each([
+ ["error", SdcUiCommon.ModalType.error],
+ ["info", SdcUiCommon.ModalType.info],
+ ["success", SdcUiCommon.ModalType.success]
+ ]).test('getModalType with type %s should return %s', (inputMessageType, expectedResult) => {
+
+ let message = {
+ type: inputMessageType
+ };
+
+ const type = MessageModal.getModalType(<any>message)
+ expect(type).toEqual(expectedResult);
+ });
+
+ test('showMessageModal should call open modal with all data' , async (done)=>{
+ spyOn(MessageBoxService.openModal, 'next');
+ let message : MessageModalModel = new MessageModalModel('title', 'text', "success", []);
+
+ MessageModal.showMessageModal(message);
+ setTimeout(()=>{
+ const messageBoxData = new MessageBoxData( message.title,
+ message.text,
+ SdcUiCommon.ModalType.success,
+ SdcUiCommon.ModalSize.medium,
+ message.buttons)
+ expect(MessageBoxService.openModal.next).toHaveBeenCalledWith(messageBoxData);
+ done();
+ }, 500)
+ });
+
+});
diff --git a/vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.ts b/vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.ts
new file mode 100644
index 000000000..e1f85bdb0
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/messageModal/message-modal.service.ts
@@ -0,0 +1,39 @@
+import {Injectable} from "@angular/core";
+import {MessageBoxService} from '../messageBox/messageBox.service';
+import {MessageBoxData} from '../messageBox/messageBox.data';
+import {SdcUiCommon} from "onap-ui-angular";
+import {MessageModalModel} from "./message-modal.model";
+
+@Injectable()
+export class MessageModal {
+ static showMessageModal(message: MessageModalModel): void {
+ setTimeout(() => {
+ let messageBoxData: MessageBoxData = new MessageBoxData(
+ message.title,
+ message.text,
+ this.getModalType(message),
+ SdcUiCommon.ModalSize.medium,
+ message.buttons);
+ MessageBoxService.openModal.next(messageBoxData);
+ }
+ , 500);
+ };
+
+
+ static getModalType = (message: MessageModalModel): string => {
+ switch (message.type) {
+ case "error": {
+ return SdcUiCommon.ModalType.error
+ }
+ case "info": {
+ return SdcUiCommon.ModalType.info;
+ }
+ case "success": {
+ return SdcUiCommon.ModalType.success;
+ }
+ }
+ };
+}
+
+
+
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts
index 47f849059..7d9561c9a 100644
--- a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts
@@ -44,7 +44,7 @@ export class SearchElementsModalComponent extends DialogComponent<{ modalInforma
})
}
- @ViewChild('ElementsTableComponent') membersTable;
+ @ViewChild('ElementsTableComponent', {static: false}) membersTable;
ngOnInit(selectedRowsIds?: string[]): void {
const genericModalHelper = this._store.getState().global.genericModalHelper;
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 238f7693d..f0a4da99f 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,6 +1,6 @@
-<sdc-loader name= "global"
+<custom-loader name= "global"
#globalLoader
[global] = "global"
[size]="size"
- [(active)] = "show"></sdc-loader>
+ [(active)] = "show"></custom-loader>
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
index 2e4642432..2b5727bb3 100644
--- a/vid-webpack-master/src/app/shared/components/svg/svg-component.ts
+++ b/vid-webpack-master/src/app/shared/components/svg/svg-component.ts
@@ -10,14 +10,14 @@ import * as _ from 'lodash';
@Component({
selector : 'vid-svg-icon',
- template: `
- <svg-icon
+ template: `
+ <custom-icon
[mode]="mode"
[size]="size"
[name]="name"
[testId]="testId"
[clickable]="clickable">
- </svg-icon>
+ </custom-icon>
`,
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts
index f505b5667..1675917d2 100644
--- a/vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts
@@ -1,11 +1,13 @@
import {FormControlModel} from "./formControl.model";
import {FormControlType} from "./formControlTypes.enum";
+import * as _ from "lodash";
export class CheckboxFormControl extends FormControlModel{
-
+ extraContents : object[];
constructor(data) {
super(data);
this.type = FormControlType.CHECKBOX;
this.validations = [];
+ this.extraContents = !_.isNil(data.extraContents) ? data.extraContents : null;
}
}
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts
index 24116549e..b3a53d9f2 100644
--- a/vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts
@@ -43,6 +43,7 @@ export class FormControlModel {
this.preventionsAttribute = data.preventionsAttribute || [];
this.onBlur = function(){};
this.onChange = data.onChange ? data.onChange: function () {}
+
}
isRequired() : boolean {
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts
index 40d74d63f..36704e28e 100644
--- a/vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts
@@ -14,8 +14,6 @@ export class FormPopupDetails {
modelInformationItems: ModelInformationItem[];
onSubmit : (that : any, form: FormGroup , ...args) => void;
onCancel : (that : any, form: FormGroup) => void;
- onOtherAction: (that: any, form: FormGroup) => void;
-
constructor(that : any,
popupTypeName : PopupType ,
@@ -27,8 +25,7 @@ export class FormPopupDetails {
dynamicInputsControlList : FormControlModel[],
modelInformationItems : ModelInformationItem[],
onSubmit : (that : any, form : FormGroup, ...args) => void,
- onCancel: (that: any, form: FormGroup) => void,
- onOtherAction?: (that: any, form: FormGroup) => void) {
+ onCancel: (that: any, form: FormGroup) => void) {
this.title = title;
this.leftSubTitle = leftSubTitle;
this.rightSubTitle = rightSubTitle;
@@ -37,7 +34,6 @@ export class FormPopupDetails {
this.modelInformationItems = modelInformationItems;
this.onSubmit = onSubmit;
this.onCancel = onCancel;
- this.onOtherAction = onOtherAction;
this.popupTypeName = popupTypeName;
this.UUIDData = UUIDData;
this.that = that;
diff --git a/vid-webpack-master/src/app/shared/models/treeNodeModel.ts b/vid-webpack-master/src/app/shared/models/treeNodeModel.ts
index 9242add85..39f56228e 100644
--- a/vid-webpack-master/src/app/shared/models/treeNodeModel.ts
+++ b/vid-webpack-master/src/app/shared/models/treeNodeModel.ts
@@ -3,6 +3,7 @@ import {NodeModel} from "./nodeModel";
import {ServiceNodeTypes} from "./ServiceNodeTypes";
import * as _ from 'lodash';
import {ServiceInstanceActions} from "./serviceInstanceActions";
+
export enum TreeLevel {
Level_0 , Level_1, Level_2
@@ -16,6 +17,7 @@ interface TreeNodeInstanceInterface {
export class TreeNodeModel {
type: String;
modelId: string;
+ modelInvariantId?: string;
modelCustomizationId?: string;
modelUniqueId?: string;
id: string;
@@ -32,6 +34,7 @@ export class TreeNodeModel {
instanceName?: string;
constructor(instance: ChildNodeInstance, nodeModel: NodeModel){
+ this.modelInvariantId = nodeModel.invariantUuid;
this.modelCustomizationId = nodeModel.customizationUuid;
this.modelId = nodeModel.uuid;
this.modelUniqueId = this.modelCustomizationId || this.modelId;
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts
index a850d55da..3a05157ae 100644..100755
--- a/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts
@@ -22,7 +22,6 @@ import {
updateProductFamilies, updateUserId
} from "../../storeUtil/utils/general/general.actions";
import {createServiceInstance} from "../../storeUtil/utils/service/service.actions";
-import {delay, mapTo} from "rxjs/operators";
const notFetchedAlready = (state: AppState): boolean => state.service.productFamilies !== null;
@@ -30,7 +29,6 @@ const notFetchedAlready = (state: AppState): boolean => state.service.productFam
export class AAIEpics {
constructor(private aaiService: AaiService) {
}
-
public createEpic() {
return combineEpics(
this.loadProductFamiliesEpic
@@ -49,7 +47,11 @@ export class AAIEpics {
private loadProductFamiliesEpic = (action$, store) => action$
.ofType(LOAD_PRODUCT_FAMILIES)
- .switchMap(() => this.aaiService.getProductFamilies().map(data => updateProductFamilies(data)));
+ .switchMap(() =>
+ this.aaiService.getProductFamilies()
+ .map(data =>
+ updateProductFamilies(data)
+ ));
private loadCategoryParameters = (action$, store) => action$
.ofType(LOAD_CATEGORY_PARAMETERS)
@@ -64,7 +66,9 @@ export class AAIEpics {
private loadServiceAccordingToUuid = (action$, store) => action$
.ofType(LOAD_SERVICE_MDOEL_BY_UUID)
.switchMap((action) => this.aaiService.getServiceModelById(action.modelId)
- .map(data => createServiceInstance(action.uuid, data)));
+ .map(data =>
+ createServiceInstance(action.uuid, data))
+ );
private loadUserId = (action$, store) => action$
.ofType(LOAD_USER_ID)
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
index 1cc5593f7..9026a5648 100644
--- a/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
@@ -44,6 +44,11 @@ export class AaiService {
}
+ sdncPreload(): Observable<boolean> {
+ let pathQuery: string = Constants.Path.PRE_LOAD;
+ return this.http.post<boolean>(pathQuery, {})
+ }
+
getServiceModelById = (serviceModelId: string): Observable<any> => {
if (_.has(this.store.getState().service.serviceHierarchy, serviceModelId)) {
return of(<any> JSON.parse(JSON.stringify(this.store.getState().service.serviceHierarchy[serviceModelId])));
diff --git a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
index cccade887..5842662fb 100644
--- a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
+++ b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
@@ -15,8 +15,11 @@ export enum Features {
FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS ='FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS',
FLAG_2004_INSTANTIATION_STATUS_FILTER ='FLAG_2004_INSTANTIATION_STATUS_FILTER',
FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE = 'FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE',
- FLAG_2004_TEMP_BUTTON_TO_INSTANTIATION_STATUS_FILTER ='FLAG_2004_TEMP_BUTTON_TO_INSTANTIATION_STATUS_FILTER',
- FLAG_2004_INSTANTIATION_TEMPLATES_POPUP = 'FLAG_2004_INSTANTIATION_TEMPLATES_POPUP'
+ FLAG_2006_VFM_SDNC_PRELOAD_FILES = 'FLAG_2006_VFM_SDNC_PRELOAD_FILES',
+ FLAG_MORE_AUDIT_INFO_LINK_ON_AUDIT_INFO = 'FLAG_MORE_AUDIT_INFO_LINK_ON_AUDIT_INFO',
+ FLAG_2004_INSTANTIATION_TEMPLATES_POPUP = 'FLAG_2004_INSTANTIATION_TEMPLATES_POPUP',
+ FLAG_2006_USER_PERMISSIONS_BY_OWNING_ENTITY= 'FLAG_2006_USER_PERMISSIONS_BY_OWNING_ENTITY',
+ FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF = 'FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF',
}
@Injectable()
diff --git a/vid-webpack-master/src/app/shared/shared.module.ts b/vid-webpack-master/src/app/shared/shared.module.ts
index f95f86149..bae7c11f9 100644
--- a/vid-webpack-master/src/app/shared/shared.module.ts
+++ b/vid-webpack-master/src/app/shared/shared.module.ts
@@ -49,7 +49,6 @@ import {ServicePopupService} from "./components/genericFormPopup/genericFormServ
import {GenericFormPopupService} from "./components/genericFormPopup/generic-form-popup.service";
import {FormGeneralErrorsService} from "./components/formGeneralErrors/formGeneralErrors.service";
import {VnfPopupService} from "./components/genericFormPopup/genericFormServices/vnf/vnf.popup.service";
-import {SdcUiComponentsModule, SdcUiServices} from "onap-ui-angular";
import {SafePipe} from "./pipes/safe/safe.pipe";
import {ViewEditResolver} from "./resolvers/viewEdit/viewEdit.resolver";
import {FlagsResolve} from "./resolvers/flag/flag.resolver";
@@ -80,6 +79,24 @@ import {SearchFilterPipe} from "./pipes/searchFilter/search-filter.pipe";
import {RecreateResolver} from "./resolvers/recreate/recreate.resolver";
import {InstantiationTemplatesService} from "./services/templateService/instantiationTemplates.service";
import {SharedControllersService} from "./components/genericForm/formControlsServices/sharedControlles/shared.controllers.service";
+import {DuplicateVnfComponent} from "../drawingBoard/service-planning/duplicate/duplicate-vnf.component";
+import {ModalService} from "./components/customModal/services/modal.service";
+import {CreateDynamicComponentService} from "./components/customModal/services/create-dynamic-component.service";
+import {ModalComponent} from "./components/customModal/modal.component";
+import {ModalCloseButtonComponent} from './components/customModal/components/modalCloseButton/modal-close-button.component';
+import {CustomButtonComponent} from "./components/customButton/custom-button.component";
+import {CustomModalButtonComponent} from "./components/customModal/components/modalButton/modal-button.component";
+import {CustomRippleClickAnimationDirective} from "./components/customModal/directives/ripple-click.animation.directive";
+import {LoaderComponent} from "./components/customLoader/custom-loader.component";
+import {LoaderService} from "./components/customLoader/custom-loader.service";
+import {SvgIconComponent} from "./components/customIcon/custom-icon.component";
+import {TooltipTemplateComponent} from "./components/customTooltip/custom-tooltip.component";
+import {TooltipDirective} from "./components/customTooltip/tooltip.directive";
+import {SdcUiComponentsModule} from "onap-ui-angular";
+import {UploadFilesLinkComponent} from "./components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component";
+import { FileUploadModule } from 'ng2-file-upload';
+import {MessageModal} from "./components/messageModal/message-modal.service";
+
@NgModule({
@@ -92,12 +109,13 @@ import {SharedControllersService} from "./components/genericForm/formControlsSer
FeatureFlagModule.forRoot(),
FormsModule,
ReactiveFormsModule,
- TooltipModule,
SdcUiComponentsModule,
+ TooltipModule,
AngularMultiSelectModule,
BootstrapModalModule,
DataTableModule,
- ModalModule.forRoot()
+ ModalModule.forRoot(),
+ FileUploadModule
],
declarations: [
PopoverComponent,
@@ -110,6 +128,8 @@ import {SharedControllersService} from "./components/genericForm/formControlsSer
NumberFormControlComponent,
InputPreventionPatternDirective,
ClickOutsideDirective,
+ TooltipDirective,
+ CustomRippleClickAnimationDirective,
FormGeneralErrorsComponent,
SpinnerComponent,
NoContentMessageAndIconComponent,
@@ -133,7 +153,15 @@ import {SharedControllersService} from "./components/genericForm/formControlsSer
ErrorMsgComponent,
DynamicInputsComponent,
DynamicInputLabelPipe,
- InstantiationTemplatesModalComponent
+ InstantiationTemplatesModalComponent,
+ ModalComponent,
+ ModalCloseButtonComponent,
+ CustomButtonComponent,
+ CustomModalButtonComponent,
+ LoaderComponent,
+ SvgIconComponent,
+ TooltipTemplateComponent,
+ UploadFilesLinkComponent
],
exports: [
PopoverComponent,
@@ -142,7 +170,9 @@ import {SharedControllersService} from "./components/genericForm/formControlsSer
FormControlErrorComponent,
DropdownFormControlComponent,
InputPreventionPatternDirective,
+ CustomRippleClickAnimationDirective,
ClickOutsideDirective,
+ TooltipDirective,
FormGeneralErrorsComponent,
SpinnerComponent,
NoContentMessageAndIconComponent,
@@ -165,18 +195,29 @@ import {SharedControllersService} from "./components/genericForm/formControlsSer
ErrorMsgComponent,
SvgComponent,
DynamicInputsComponent,
- DynamicInputLabelPipe
+ DynamicInputLabelPipe,
+ ModalComponent,
+ ModalCloseButtonComponent,
+ CustomButtonComponent,
+ CustomModalButtonComponent,
+ LoaderComponent,
+ SvgIconComponent,
+ TooltipTemplateComponent,
+ UploadFilesLinkComponent
],
entryComponents : [
GenericFormPopupComponent,
SearchElementsModalComponent,
- InstantiationTemplatesModalComponent
+ InstantiationTemplatesModalComponent,
+ DuplicateVnfComponent,
+ ModalComponent
],
providers: [
ServiceInfoService,
MessageBoxService,
- SdcUiServices.ModalService,
- SdcUiServices.LoaderService,
+ CreateDynamicComponentService,
+ ModalService,
+ LoaderService,
HttpInterceptorService,
IframeService,
DefaultDataGeneratorService,
@@ -212,7 +253,9 @@ import {SharedControllersService} from "./components/genericForm/formControlsSer
SearchFilterPipe,
ModelInformationService,
MultiselectFormControlService,
- InstantiationTemplatesModalService
+ InstantiationTemplatesModalService,
+ LoaderService,
+ MessageModal
]
})
export class SharedModule {
diff --git a/vid-webpack-master/src/app/shared/store/module.ts b/vid-webpack-master/src/app/shared/store/module.ts
index 5a81f36ec..5a81f36ec 100644..100755
--- a/vid-webpack-master/src/app/shared/store/module.ts
+++ b/vid-webpack-master/src/app/shared/store/module.ts
diff --git a/vid-webpack-master/src/app/shared/utils/constants.ts b/vid-webpack-master/src/app/shared/utils/constants.ts
index da717c8f4..01466f113 100644
--- a/vid-webpack-master/src/app/shared/utils/constants.ts
+++ b/vid-webpack-master/src/app/shared/utils/constants.ts
@@ -97,6 +97,7 @@ export module Constants {
public static SERVICE_MODEL_ID = 'serviceModelId';
public static SERVICES_RETRY_TOPOLOGY = '../../asyncInstantiation/bulkForRetry';
public static INSTANTIATION_TEMPLATE_TOPOLOGY = '../../instantiationTemplates/templateTopology';
+ public static PRE_LOAD = '../../preload';
public static CONFIGURATION_PATH = '../../get_property/{name}/defaultvalue';
public static SERVICES_JOB_AUDIT_PATH = '/auditStatus';
public static SERVICES_PROBE_PATH = "../../probe";
diff --git a/vid-webpack-master/src/app/vlanTagging/form-async/form-async.component.ts b/vid-webpack-master/src/app/vlanTagging/form-async/form-async.component.ts
index 623a4f42f..aa381684c 100644
--- a/vid-webpack-master/src/app/vlanTagging/form-async/form-async.component.ts
+++ b/vid-webpack-master/src/app/vlanTagging/form-async/form-async.component.ts
@@ -27,7 +27,7 @@ export class Formasync implements OnInit {
constructor(private store: NgRedux<AppState>, private _formAsyncService: FormAsyncService) { }
- @ViewChild('form') form: NgForm;
+ @ViewChild('form', {static: false}) form: NgForm;
@Input()
set params(params: any) {
if (params) {
diff --git a/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts
index c0aeb0b51..b7961ea38 100644
--- a/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts
+++ b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts
@@ -21,7 +21,7 @@ export class NetworkSelectorComponent implements OnInit {
@select(['service', 'networkFunctions'])
readonly networkFunctions: Observable<any>;
- @ViewChild('form') form: NgForm;
+ @ViewChild('form', {static: false}) form: NgForm;
constructor(store: NgRedux<AppState>) {
this.localStore = store;
diff --git a/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts
index 87f117202..43e14e922 100644
--- a/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts
+++ b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts
@@ -71,11 +71,8 @@ export class VlanTaggingComponent implements OnInit {
readonly userIdObs: Observable<any>;
- @ViewChild(NetworkSelectorComponent)
- public networkSelectorComponent: NetworkSelectorComponent;
- @ViewChild(Formasync)
- public formAsync: Formasync;
-
+ @ViewChild(NetworkSelectorComponent, {static: false}) networkSelectorComponent: NetworkSelectorComponent;
+ @ViewChild(Formasync, {static: false}) formAsync: Formasync;
deploySubInterface() {
@@ -186,9 +183,9 @@ export class VlanTaggingComponent implements OnInit {
isNextButtonDisabled() {
switch (this.currentStep) {
case WizardSteps.one:
- return !this.formAsync.form.valid;
+ return this.formAsync ? !this.formAsync.form.valid : false;
case WizardSteps.two:
- return !this.networkSelectorComponent.form.valid;
+ return this.networkSelectorComponent ? !this.networkSelectorComponent.form.valid : false;
}
}
diff --git a/vid-webpack-master/src/styles.scss b/vid-webpack-master/src/styles.scss
index f170f35f5..1d332ed63 100644
--- a/vid-webpack-master/src/styles.scss
+++ b/vid-webpack-master/src/styles.scss
@@ -239,4 +239,6 @@ sdc-checkbox {
display: none !important;
}
-
+sdc-modal {
+ z-index: 10000 !important;
+}