2 ============LICENSE_START=======================================================
\r
4 ================================================================================
\r
5 Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r
6 ================================================================================
\r
7 Licensed under the Apache License, Version 2.0 (the "License");
\r
8 you may not use this file except in compliance with the License.
\r
9 You may obtain a copy of the License at
\r
11 http://www.apache.org/licenses/LICENSE-2.0
\r
13 Unless required by applicable law or agreed to in writing, software
\r
14 distributed under the License is distributed on an "AS IS" BASIS,
\r
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 See the License for the specific language governing permissions and
\r
17 limitations under the License.
\r
18 ============LICENSE_END=========================================================
\r
21 <div ng-controller="InstantiationController">
\r
23 <div popup-window class="popupContents" ngx-show="{{popup.isVisible}}"
\r
25 <div ng-include="'app/vid/scripts/view-models/creationDialog.htm'"></div>
\r
26 <div ng-include="'app/vid/scripts/view-models/deleteResumeDialog.htm'"></div>
\r
27 <div ng-include="'app/vid/scripts/view-models/detailsDialog.htm'"></div>
\r
28 <div ng-include="'app/vid/scripts/view-models/statusDialog.htm'"></div>
\r
30 <div ng-controller="aaiSubscriberController" ng-init="getComponentList() ">
\r
31 <div class="statusLine" ng-class="{true:'aaiVisible', false:'aaiHidden'}[isSpinnerVisible]">
\r
32 <img src="app/vid/images/spinner.gif"></img>
\r
33 <label>Status:</label><span class="status">{{status}}</span>
\r
36 <div ng-if="errorMsg != null"><font color='red'>{{errorMsg}}<pre>{{errorDetails | json}}</pre></font></div>
\r
38 <h1 class="heading1" style="margin-top: 20px;">{{isPermitted ? "View/Edit" : "View"}} Service Instance</h1>
\r
39 <a class="btn btn-primary btn-xs pull-right" ng-click="reloadRoute();" ><span class="glyphicon glyphicon-refresh"></span></a>
\r
44 <table att-table border="1" ng-model="service">
\r
46 <th style="text-align: center" width="33%">SUBSCRIBER:
\r
47 {{service.instance.subscriberName}}</th>
\r
48 <th style="text-align: center" width="34%">SERVICE TYPE:
\r
49 {{service.instance.serviceType}}</th>
\r
50 <th data-tests-id="service-instanceId-th-id" style="text-align: center" width="33%">SERVICE INSTANCE
\r
51 ID: {{service.instance.serviceInstanceId}}</th>
\r
54 <td colspan='3' style="text-align: center">Service Instance
\r
55 Name: {{service.instance.name || "Not defined"}}
\r
62 <div ui-tree data-drag-enabled="false" data-nodrop-enabled="true" style="margin: 30px">
\r
64 <ol ui-tree-nodes="" ng-model="service" >
\r
65 <li ng-repeat="aService in [service]" ui-tree-node>
\r
66 <div ui-tree-handle class="tree-node tree-node-content">
\r
67 <a class="btn btn-success btn-xs" ng-if="(aService.instance.vnfs && aService.instance.vnfs.length > 0) ||(aService.instance.pnfs && aService.instance.pnfs.length > 0) || (aService.instance.networks && aService.instance.networks.length > 0)" data-nodrag ng-click="this.toggle()">
\r
68 <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
\r
70 SERVICE INSTANCE: {{aService.instance.name}} | ORCH STATUS: {{serviceOrchestrationStatus}}
\r
71 <a ng-if="((isMacro()) || (isObjectEmpty(aService.instance.vnfs) && isObjectEmpty(aService.instance.networks) && isObjectEmpty(aService.instance.pnfs))) && isPermitted" data-tests-id="deleteServiceButton" class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteService(aService.instance);">
\r
72 <span class="glyphicon glyphicon-remove"></span>
\r
74 <div class="pull-right btn-group" ng-if="(aService.convertedModel.vnfs||aService.convertedModel.vnfs) &&(!isObjectEmpty(aService.convertedModel.pnfs)||!isObjectEmpty(aService.convertedModel.pnfs)) && !aService.convertedModel.isNewFlow && isPermitted">
\r
75 <button type="button" data-tests-id="addVNFButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
76 Add node instance<span class="caret"></span>
\r
78 <ul class="dropdown-menu" ng-model="aService.convertedModel.vnfs">
\r
79 <a role="menuitem" ng-repeat="(vnfUuid, vnf) in aService.convertedModel.vnfs" data-tests-id="addVNFOption-{{vnf.modelCustomizationName}}" ng-click="addVnfInstance(vnf, aService.instance.vnfs)">{{vnf.modelCustomizationName}}</a>
\r
83 <div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs && !isObjectEmpty(aService.convertedModel.vnfs) && aService.convertedModel.isNewFlow && isPermitted">
\r
84 <button type="button" data-tests-id="addVNFButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
85 Add node instance<span class="caret"></span>
\r
87 <ul class="dropdown-menu" ng-model="aService.convertedModel.vnfs" data-tests-id="addVnfsDropdown">
\r
88 <li role="menuitem" ng-repeat="(vnfUuid, vnf) in aService.convertedModel.vnfs">
\r
89 <a data-tests-id="addVNFOption-{{vnf.modelCustomizationName}}" ng-click="addVnfInstance(vnf, aService.instance.vnfs)">{{vnf.modelCustomizationName}} {{vnf.nfType}} {{vnf.nfRole}} {{vnf.nfFunction}} {{vnf.nfCode}}</a>
\r
93 <!-- <div class="pull-right btn-group" ng-if="aService.model.networks && !equals(aService.model.networks, {})">-->
\r
94 <div class="pull-right btn-group" ng-if="aService.convertedModel.networks && (!(isObjectEmpty(aService.convertedModel.networks))) && isPermitted">
\r
95 <!--<div class="pull-right btn-group" ng-if="aService.model.networks">-->
\r
96 <button type="button" data-tests-id="addNetworkButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
97 Add Network<span class="caret"></span>
\r
99 <ul class="dropdown-menu" ng-model="aService.convertedModel.networks">
\r
100 <li ng-repeat="(networkUuid, network) in aService.convertedModel.networks">
\r
101 <a data-tests-id="addNetworkOption-{{network.modelCustomizationName}}" ng-click="addNetworkInstance(network, aService.instance.vnfs)">{{network.modelCustomizationName}}</a>
\r
105 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeService(aService.instance)" style="margin-right: 8px;">
\r
106 <span class="glyphicon glyphicon-info-sign"></span>
\r
108 <a data-tests-id="deactivateButton" ng-disabled="!isActivateDeactivateEnabled('deactivate')" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="deactivateMSOInstance()" style="margin-right: 8px;">
\r
111 <a data-tests-id="activateButton" ng-disabled="!isActivateDeactivateEnabled('activate')" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="activateMSOInstance()" style="margin-right: 8px;">
\r
115 <ol ui-tree-nodes="" ng-model="aService.instance.vnfs" ng-class="{hidden: collapsed}">
\r
116 <li ng-repeat="vnf in aService.instance.vnfs" ui-tree-node>
\r
117 <div ui-tree-handle class="tree-node tree-node-content">
\r
118 <a class="btn btn-success btn-xs" ng-if="(vnf.vfModules && vnf.vfModules.length > 0) || (vnf.volumeGroups && vnf.volumeGroups.length > 0)" data-nodrag ng-click="this.toggle()">
\r
119 <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
\r
121 VNF: {{vnf.name}} | TYPE: {{vnf.nodeType}} | ORCH STATUS: {{vnf.nodeStatus}}
\r
123 <a ng-if="(vnf.vfModules.length == 0) && (vnf.volumeGroups.length == 0) && isPermitted" data-tests-id="deleteVNFButton" class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteVnf(aService.instance, vnf)">
\r
124 <span class="glyphicon glyphicon-remove"></span>
\r
126 <!-- <div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs[vnf.object['model-invariant-id']][vnf.object['model-version-id']].vfModules">-->
\r
127 <div class="pull-right btn-group" ng-if="(hasVfModules(vnf.object) && (aService.convertedModel.isNewFlow)) && isPermitted">
\r
129 <button type="button" data-tests-id="addVFModuleButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
130 Add VF-Module<span class="caret"></span>
\r
132 <ul class="dropdown-menu" ng-model="vfModule" >
\r
133 <a ng-repeat="(vfModuleCustomizationUuid, vfModule) in aService.convertedModel.vnfs[vnf.object['model-customization-id']].vfModules" data-tests-id="addVFModuleOption-{{vfModule.modelCustomizationName}}" ng-click="addVfModuleInstance(vnf, vfModule)">{{vfModule.modelCustomizationName}} </a>
\r
138 <div class="pull-right btn-group" ng-if="(hasVfModules(vnf.object) && (!(aService.convertedModel.isNewFlow))) && isPermitted">
\r
140 <button type="button" data-tests-id="addVFModuleButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
141 Add VF-Module<span class="caret"></span>
\r
143 <ul class="dropdown-menu" ng-model="vnf">
\r
144 <a ng-repeat="(vfModuleUuid, vfModule) in aService.convertedModel.vnfs[vnf.object['model-version-id']].vfModules" data-tests-id="addVFModuleOption-{{vfModule.modelCustomizationName}}" ng-click="addVfModuleInstance(vnf, vfModule)">{{vfModule.modelCustomizationName}}</a>
\r
150 <div class="pull-right btn-group" ng-if="(hasVolumeGroups(vnf.object) && (aService.convertedModel.isNewFlow)) && isPermitted">
\r
151 <button type="button" data-tests-id="addVolumeGroupButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
152 Add Volume Group<span class="caret"></span>
\r
154 <ul class="dropdown-menu" ng-model="volumeGroup" >
\r
155 <a ng-repeat="(volumeGroupCustomizationUuid, volumeGroup) in aService.convertedModel.vnfs[vnf.object['model-customization-id']].volumeGroups" data-tests-id="addVolumeGroupOption-{{volumeGroup.modelCustomizationName}}" ng-click="addVolumeGroupInstance(vnf, volumeGroup)">{{volumeGroup.modelCustomizationName}}</a>
\r
159 <div class="pull-right btn-group" ng-if="(hasVolumeGroups(vnf.object) && (!(aService.convertedModel.isNewFlow))) && isPermitted">
\r
161 <button type="button" data-tests-id="addVolumeGroupButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
162 Add Volume Group<span class="caret"></span>
\r
164 <ul class="dropdown-menu" ng-model="vnf">
\r
165 <a ng-repeat="(volumeGroupUuid, volumeGroup) in aService.convertedModel.vnfs[vnf.object['model-version-id']].volumeGroups" data-tests-id="addVolumeGroupOption-{{volumeGroup.modelCustomizationName}}" ng-click="addVolumeGroupInstance(vnf, volumeGroup)">{{volumeGroup.modelCustomizationName}}</a>
\r
171 <!-- VID-374/378 - switching-off feature <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="getStatusOfVnf(aService.instance, vnf)" style="margin-right: 8px;">
\r
172 <span class="glyphicon glyphicon-exclamation-sign"></span>
\r
174 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVnf(aService.instance, vnf)" style="margin-right: 8px;">
\r
175 <span class="glyphicon glyphicon-info-sign"></span>
\r
178 <ol ui-tree-nodes="" ng-model="vnf.vfModules" ng-class="{hidden: collapsed}">
\r
179 <li ng-repeat="vfModule in vnf.vfModules" ui-tree-node>
\r
180 <div ui-tree-handle class="tree-node tree-node-content">
\r
181 <a class="btn btn-success btn-xs" ng-if="(vfModule.volumeGroups && vfModule.volumeGroups.length > 0)" data-nodrag ng-click="this.toggle()">
\r
182 <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
\r
184 VFMODULE: {{vfModule.name}} | TYPE: {{vfModule.nodeType}} | ORCH STATUS: {{vfModule.nodeStatus}}
\r
186 <a class="pull-right btn btn-danger btn-xs" ng-if="isPermitted" data-tests-id="deleteVFModuleButton-{{vfModule.name}}" data-nodrag ng-click="deleteVfModule(aService.instance, vfModule, vnf)">
\r
187 <span class="glyphicon glyphicon-remove"></span>
\r
189 <div class="pull-right btn-group">
\r
190 <!-- <button type="button" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
\r
191 Attach Volume Group<span class="caret"></span>
\r
193 <ul class="dropdown-menu" ng-model="vnf.volumeGroups">
\r
194 <li ng-repeat="volumeGroup in vnf.availableVolumeGroups">
\r
195 <a ng-click="attachVolumeGroupInstance(vfModule, volumeGroup)">{{volumeGroup.name}}</a>
\r
199 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVfModule(aService.instance, vfModule, vnf)" style="margin-right: 8px;">
\r
200 <span class="glyphicon glyphicon-info-sign"></span>
\r
202 <div class="resume" ng-if="isPermitted&&(vfModule.nodeStatus==resumeStatus)">
\r
203 <a data-tests-id="resumeVFModuleButton-{{vfModule.name}}" class="pull-right btn btn-success btn-xs button-margin" ng-click="resume(aService.instance, vfModule, vnf)" >
\r
209 <ol ui-tree-nodes="" ng-model="vfModule.volumeGroups" ng-class="{hidden: collapsed}">
\r
210 <li ng-repeat="volumeGroup in vfModule.volumeGroups" ui-tree-node>
\r
211 <div ui-tree-handle class="tree-node tree-node-content">
\r
212 VOLUME GROUP: {{volumeGroup.name}} | TYPE: {{volumeGroup.nodeType}} | ORCH STATUS: {{volumeGroup.nodeStatus}}
\r
213 <!-- <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteVolumeGroup(aService.instance, vnf, vfModule, volumeGroup)">
\r
214 <span class="glyphicon glyphicon-remove"></span>
\r
216 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVolumeGroup(aService.instance, vnf, volumeGroup)" style="margin-right: 8px;">
\r
217 <span class="glyphicon glyphicon-info-sign"></span>
\r
224 <ol ui-tree-nodes="" ng-model="vnf.availableVolumeGroups" ng-class="{hidden: collapsed}">
\r
225 <li ng-repeat="volumeGroup in vnf.availableVolumeGroups" ui-tree-node>
\r
226 <div ui-tree-handle class="tree-node tree-node-content">
\r
227 VOLUME GROUP: {{volumeGroup.name}} | TYPE: {{volumeGroup.nodeType}} | ORCH STATUS: {{volumeGroup.nodeStatus}}
\r
228 <a class="pull-right btn btn-danger btn-xs" ng-if="isPermitted" data-tests-id="deleteVNFVolumeGroupButton" data-nodrag ng-click="deleteVnfVolumeGroup(aService.instance, vnf, volumeGroup)">
\r
229 <span class="glyphicon glyphicon-remove"></span>
\r
231 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVolumeGroup(aService.instance, vnf, volumeGroup)" style="margin-right: 8px;">
\r
232 <span class="glyphicon glyphicon-info-sign"></span>
\r
240 <ol ui-tree-nodes="" ng-model="aService.instance.networks" ng-class="{hidden: collapsed}">
\r
241 <li ng-repeat="network in aService.instance.networks" ui-tree-node>
\r
242 <div ui-tree-handle class="tree-node tree-node-content">
\r
243 NETWORK: {{network.name}} | TYPE: {{network.nodeType}} | ORCH STATUS: {{network.nodeStatus}}
\r
245 <a class="pull-right btn btn-danger btn-xs" ng-if="!isMacro() && isPermitted" data-tests-id="deleteNetworkButton" data-nodrag ng-click="deleteNetwork(aService.instance, network)">
\r
246 <span class="glyphicon glyphicon-remove"></span>
\r
248 <!-- <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteNetwork(aService.instance, network)">
\r
249 <span class="glyphicon glyphicon-remove"></span>
\r
251 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeNetwork(aService.instance, network)" style="margin-right: 8px;">
\r
252 <span class="glyphicon glyphicon-info-sign"></span>
\r
259 <ol ui-tree-nodes="" ng-model="aService.instance.configurations" ng-class="{hidden: collapsed}">
\r
260 <li ng-repeat="configuration in aService.instance.configurations" ui-tree-node>
\r
261 <div ui-tree-handle class="tree-node tree-node-content">
\r
262 <a class="btn btn-success btn-xs" ng-if="(configuration.ports && configuration.ports.length > 0)" data-nodrag ng-click="this.toggle()">
\r
263 <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
\r
265 CONFIGURATION: {{configuration.name}} | TYPE: {{configuration.nodeType}} | ORCH STATUS: {{configuration.nodeStatus}}
\r
267 <a class="pull-right btn btn-danger btn-xs" ng-if="!isMacro() && isPermitted && configuration.nodeStatus === STATUS_CONSTANTS.AAI_INACTIVE" data-tests-id="deleteConfigurationButton" data-nodrag ng-click="deleteConfiguration(aService.instance, configuration)">
\r
268 <span class="glyphicon glyphicon-remove"></span>
\r
271 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="toggleConfigurationStatus(aService, configuration)" ng-if="isPermitted && allowConfigurationActions">
\r
272 {{configuration.nodeStatus === STATUS_CONSTANTS.AAI_ACTIVE ? "Deactivate" : "Activate"}}
\r
275 <ol ui-tree-nodes="" ng-model="configuration.ports" ng-class="{hidden: collapsed}">
\r
276 <li ng-repeat="port in configuration.ports" ui-tree-node>
\r
277 <div ui-tree-handle class="tree-node tree-node-content">
\r
278 PORT: {{port.portName}} | ORCH STATUS: {{port.portStatus}}
\r
280 <button type="button" class="pull-right btn btn-primary btn-xs" ng-if="configuration.nodeStatus == STATUS_CONSTANTS.AAI_ACTIVE" ng-click="togglePortStatus(aService, configuration, port)">
\r
281 {{port.portStatus === STATUS_CONSTANTS.AAI_ENABLED ? "Disable" : "Enable"}}
\r
289 <ol id="pnfs-tree" ui-tree-nodes="" ng-model="pnfs" ng-class="{hidden: collapsed || pnf.length === 0}">
\r
290 <li ng-repeat="pnf in pnfs" ui-tree-node>
\r
291 <div ui-tree-handle class="tree-node tree-node-content">
\r
294 <a class="dissociate-pnf pull-right btn btn-primary btn-xs" data-nodrag ng-click="dissociatePnf(pnf)" style="margin-right: 8px;">
\r
295 <span>Dissociate</span>
\r