+++ /dev/null
-<div id="tenant-page">
- <h1>Tenant Administration - {{ curTenant }}</h1>
- <div class="menu">
- <ul id="TenantsTabs" class="nav nav-pills" role="tablist">
- <li ng-class="{ active: isTabSet('tenantData',0)}" ng-click="setTab('tenantData',0)" >
- <a id="inventory-tab" href="#/cpeui/tenant/{{curTenant}}/inventory"> <i class="icon-tasks"></i> Inventory</a>
- </li>
- <li ng-class="{ active: isTabSet('tenantData',1)}" ng-click="setTab('tenantData',1)" >
- <a id="evcs-configure-tab" href="#/cpeui/tenant/{{curTenant}}/L2"> <i class="icon-exchange"></i> L2 Services</a>
- </li>
- <li ng-class="{ active: isTabSet('tenantData',2)}" ng-click="setTab('tenantData',2)" >
- <a id="ipvs-configure-tab" href="#/cpeui/tenant/{{curTenant}}/L3" > <i class="icon-screenshot"></i> L3 Services</a>
- </li>
- <!-- For Future use
- <li ng-class="{ active: isTabSet('tenantData',3)}" ng-click="setTab('tenantData',3)" >
- <a href="#/cpeui/tenant/{{curTenant}}/dashboard" > <i class="icon-dashboard"></i> Dashboard</a>
- </li>
- <li ng-class="{ active: isTabSet('tenantData',4)}" ng-click="setTab('tenantData',4)" >
- <a href="#/cpeui/tenant/{{curTenant}}/cpemonitor" > <i class="icon-bar-chart"></i> CPE Monitor</a>
- </li>
- <li ng-class="{ active: isTabSet('tenantData',5)}" ng-click="setTab('tenantData',5)" >
- <a href="#/cpeui/tenant/{{curTenant}}/servicemonitor" > <i class="icon-bar-chart"></i> Service Monitor</a>
- </li>
- <li ng-class="{ active: isTabSet('tenantData',6)}" ng-click="setTab('tenantData',6)" >
- <a id="tenant-uni-tab" href="#/cpeui/tenant/{{curTenant}}/unis"> <i class="icon-tasks"></i> UNIs</a>
- </li>
- -->
- <li id="refresh_btn" class="active refresh-btn" ng-click="updateEvcView()">
- <button class="btn add-row"> <i class="icon-refresh"></i> Refresh</button>
- </li>
- </ul>
- </div>
- <div id="EVCsContent" class="tab-content">
- <div ng-show="isTabSet('tenantData',0)">
- <div class="table-header">Inventory</div>
- <table class="footable table table-striped">
- <thead>
- <tr>
- <th class="minimal-width">Device ID</th>
- <th class="minimal-width">Device Name</th>
- <th>UNIs</th>
- </tr>
- </thead>
- <tbody ng-repeat="ce in ces |orderBy: '[\'device-name\']'" ng-init="ceUnis = unis.filterByField('device',ce['dev-id'])">
- <tr>
- <td class="minimal-width" ng-bind="ce['dev-id']"></td>
- <td class="minimal-width" ng-bind="ce['device-name']"></td>
- <td>
- <table class="footable table table-striped inner-table" style="table-layout:fixed;">
- <thead>
- <tr>
- <th class="minimal-width">Port</th>
- <th class="minimal-width">VLAN</th>
- <th class="minimal-width">Service</th>
- </tr>
- </thead>
- <tbody ng-repeat="uni in ceUnis |orderBy: 'prettyID'">
- <tr ng-repeat="svcs in uni.vlanToService | orderBy: 'vlan'" ng-if="uni.hasService">
- <td rowspan="{{uni.vlanToService.length}}" ng-if="$first" ng-bind="uni.prettyID" />
- <td ng-bind="svcs.vlan ? svcs.vlan : '-'" />
- <td>
- <a class="link" href="#/cpeui/tenant/{{curTenant}}/{{svcs.svc.evc ? 'L2' : 'L3'}}?svcs.svc={{svcs.svc['svc-id']}}">{{svcs.svc.name ? svcs.svc.name : svcs.svc['svc-id']}}</a>
- </td>
- </tr>
- </tbody>
- <tbody ng-if="!doesAllUniHasService(ceUnis)">
- <tr>
- <td><b style="text-decoration: underline;">Unused:</b> <b ng-repeat="uni in ceUnis |orderBy: 'prettyID'" ng-if="!uni.hasService">{{uni.prettyID}}{{$last ? '' : ', '}}</b></td>
- <td></td>
- <td></td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div ng-show="isTabSet('tenantData',1)">
- <div class="table-header">L2 Service Config</div>
- <table class="footable table table-striped">
- <thead>
- <tr>
- <th class="minimal-width">Service ID</th>
- <th class="minimal-width">Service Name</th>
- <th class="minimal-width">Type</th>
- <th class="minimal-width">Segmentation ID</th>
- <th>UNIs</th>
- <th class="minimal-width">
- <button class="btn btn-md btn-info right" ng-click="evcDialog.show($event,{})">
- <i class="icon-plus"></i>
- <md-tooltip>Create Service</md-tooltip>
- </button>
- </th>
- </tr>
- </thead>
- <tbody id="l2_table">
- <tr ng-repeat="item in evcs | orderBy : 'name'">
- <td class="minimal-width">{{ item.evc['evc-id'] }}</td>
- <td class="minimal-width">{{ item['name'] }}</td>
- <td class="minimal-width">{{ item['svc-type'] | uppercase }}</td>
- <td class="minimal-width">{{ item.evc['segmentation-id'] }}</td>
- <td>
- <table class="footable table table-striped inner-table" ng-if="!isEmpty(item.device2unis)" ng-init="expandFlags.L2[item['svc-id']] = true">
- <thead ng-if="!expandFlags.L2[item['svc-id']]">
- <tr>
- <th class="minimal-width"><i ng-click="expandFlags.L2[item['svc-id']] = true" class="expand-btn icon-caret-right"></i> Show UNIs</th>
- </tr>
- </thead>
- <thead ng-if-start="expandFlags.L2[item['svc-id']]">
- <tr>
- <th class="minimal-width"><i ng-click="expandFlags.L2[item['svc-id']] = false" class="expand-btn icon-caret-down"></i> Device </th>
- <th class="minimal-width">Port</th>
- <th class="minimal-width">VLANs</th>
- <th class="minimal-width" ng-if="item.isTree" >Role</th>
- <th>Bandwidth Profile</th>
- <th class="minimal-width"></th>
- </tr>
- </thead>
- <tbody ng-if-end ng-repeat="ce in getKeys(item.device2unis) | orderBy: sortCeFromId">
- <tr ng-repeat="uni in item.device2unis[ce] | orderBy: sortUni">
- <td ng-if="$first" class="minimal-width" rowspan="{{unis.length}}">{{ cesDisplayNames[ce] }}</td>
- <td class="minimal-width">{{ uni.prettyID }}</td>
- <td>
- {{ uni.vlans.join(', ') }} {{item.evc['preserve-ce-vlan-id'] ? '(Preserved)' : ''}}
- </td>
- <td class="minimal-width" ng-if="item.isTree">{{ uni['role'] }}</td>
- <td >
- <md-input-container class="md-block">
- <label>Profile</label>
- <md-select name="profile" ng-change="changeProfile(item['svc-id'],'evc',uni,uni.selectedProfile)" ng-model="uni.selectedProfile" ng-init="uni.selectedProfile = uni['ingress-bw-profile']">
- <md-option ng-value="undefined" default></md-option>
- <md-option ng-repeat="profile in profiles" ng-value="profile['bw-profile']">{{profile['bw-profile']}} (CIR:{{profile.cir}}, CBS: {{profile.cbs}})</md-option>
- </md-select>
- </md-input-container>
- </td>
- <td class="minimal-width" style="white-space: nowrap;">
- <button class="btn btn-md btn-danger" ng-click="deleteEvcUni(item['svc-id'], uni['uni-id'])">
- <i class="icon-trash"></i>
- <md-tooltip>Remove UNI</md-tooltip>
- </button>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
-
- <td class="minimal-width">
- <button class="btn btn-md btn-action" ng-click="editEvc($event,item)">
- <i class="icon-edit"></i>
- <md-tooltip>Edit Service</md-tooltip>
- </button>
- <button class="btn btn-md btn-info" ng-click="linkEvcUniDialog.show($event, {svc:item, unis:unis, ces:ces, profiles:profiles})">
- <i class="icon-plus"></i>
- <md-tooltip>Add UNI</md-tooltip>
- </button>
- <button class="btn btn-md btn-danger" ng-click="deleteEvc(item['svc-id'])">
- <i class="icon-trash"></i>
- <md-tooltip>Remove Service</md-tooltip>
- </button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div ng-show="isTabSet('tenantData',2)">
- <div class="table-header">L3 Service Config</div>
- <table class="footable table table-striped">
- <thead>
- <tr>
- <th class="minimal-width">Service ID</th>
- <th class="minimal-width">Service Name</th>
- <th>Service Endpoints</th>
- <th class="minimal-width">
- <button class="btn btn-md btn-info right" ng-click="ipvcDialog.show($event,{})">
- <i class="icon-plus"></i>
- <md-tooltip>Create Service</md-tooltip>
- </button>
- </th>
- </tr>
- </thead>
- <tbody id="l2_table">
- <tr ng-repeat="ipvc in ipvcs | orderBy : 'name'">
- <td class="minimal-width">{{ ipvc.ipvc['ipvc-id'] }}</td>
- <td class="minimal-width">{{ ipvc['name'] }}</td>
- <td>
- <table class="footable table table-striped inner-table" ng-if="ipvc.ipvc.unis.uni" ng-init="expandFlags.L3[ipvc.ipvc['ipvc-id']] = true">
- <thead ng-if="!expandFlags.L3[ipvc.ipvc['ipvc-id']]">
- <tr>
- <th class="minimal-width"><i ng-click="expandFlags.L3[ipvc.ipvc['ipvc-id']] = true" class="expand-btn icon-caret-right"></i> Show Service Endpoints</th>
- </tr>
- </thead>
- <thead ng-if-start="expandFlags.L3[ipvc.ipvc['ipvc-id']]">
- <tr>
- <th class="minimal-width">
- <i ng-click="expandFlags.L3[ipvc.ipvc['ipvc-id']] = false" class="expand-btn icon-caret-down"></i>
- Device Name
- </th>
- <th class="minimal-width">Port</th>
- <th>Vlan</th>
- <th class="minimal-width">I/F Address</th>
- <th>Bandwidth Profile</th>
- <th class="minimal-width"></th>
- </tr>
- </thead>
- <tbody ng-if-end>
- <tr ng-repeat="ipuni in ipvc.ipvc.unis.uni | orderBy: ['device','prettyID']">
- <td class="minimal-width" ng-init="serviceIpuni = getMefInterfaceIpvc(ipuni['uni-id'],ipuni['ip-uni-id'])">{{ cesDisplayNames[ipuni.device] }}</td>
- <td class="minimal-width">{{ ipuni.prettyID }}</td>
- <td>{{serviceIpuni.vlan}}</td>
- <td class="minimal-width">{{serviceIpuni['ip-address']}}</td>
- <td>
- <md-input-container class="md-block">
- <label>Profile</label>
- <md-select name="profile" ng-change="changeProfile(ipvc['svc-id'],'ipvc',ipuni, ipuni.selectedProfile)" ng-model="ipuni.selectedProfile" ng-init="ipuni.selectedProfile = ipuni['ingress-bw-profile']">
- <md-option ng-value="undefined" default></md-option>
- <md-option ng-repeat="profile in profiles" ng-value="profile['bw-profile']">{{profile['bw-profile']}} (CIR:{{profile.cir}}, CBS: {{profile.cbs}})</md-option>
- </md-select>
- </md-input-container>
- </td>
- <td class="minimal-width">
- <button class="btn btn-md btn-danger" ng-click="deleteIpvcUni(ipvc['svc-id'], ipuni['uni-id'], ipuni['ip-uni-id'])">
- <i class="icon-trash"></i>
- <md-tooltip>Remove Endpoint</md-tooltip>
- </button>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- <td class="minimal-width">
- <div layout="column">
- <div layout="row">
- <button class="btn btn-md btn-danger" ng-click="deleteEvc(ipvc['svc-id'])"> <i class="icon-trash"></i>
- <md-tooltip>Remove Service</md-tooltip>
- </button>
- <button class="btn btn-md btn-info" ng-click="linkIpvcUniDialog.show($event, {svc:ipvc, unis:unis, ces:ces, profiles:profiles})">
- <i class="icon-plus"></i>
- <md-tooltip>Add Endpoint</md-tooltip>
- </button>
- </div>
- <md-menu>
- <button class="btn btn-md btn-action" ng-click="openMenu($mdOpenMenu, $event)" style="width:100%">
- More
- </button>
- <md-menu-content width="4">
- <md-menu-item>
- <md-button ng-click="openRoutingDialog(ipvc)">Routing</md-button>
- </md-menu-item>
- <md-menu-item>
- <md-button ng-click="openDhcpDialog(ipvc)">DHCP</md-button>
- </md-menu-item>
- <!--
- <md-menu-item>
- <md-button>NAT</md-button>
- </md-menu-item>
- <md-menu-item>
- <md-button>ACLs</md-button>
- </md-menu-item>
- -->
- </md-menu-content>
- </md-menu>
- </div>
- </td>
- <!--
- <button ng-show="!unisTables[ipvc.ipvc['ipvc-id']]" class="btn add-row btn-block" ng-click="unisTables[ipvc.ipvc['ipvc-id']] = true;">Show Unis</button>
- <button ng-show="unisTables[ipvc.ipvc['ipvc-id']]" class="btn add-row btn-block" ng-click="unisTables[ipvc.ipvc['ipvc-id']] = false;">Hide Unis</button>
- </td>
- <td class="minimal-width"><button class="btn btn-md btn-danger" ng-click="deleteEvc(ipvc['svc-id'])"> <i class="icon-trash"></i> </button></td>
- </tr>
- <tr ng-repeat-end ng-show="unisTables[ipvc.ipvc['ipvc-id']]">
- <td colspan="5">
- <table class="footable table table-striped inner-table">
- <thead>
- <tr>
- <th>Device</th>
- <th>UNI</th>
- <th>IP Address</th>
- <th>vlan</th>
- <th class="minimal-width"><button class="btn btn-md btn-info" ng-click="linkIpvcUniDialog.show($event, {'svc':ipvc,'unis':unis,'ces':ces})"> <i class="icon-plus"></i> </button></th>
- </tr>
- </thead>
- <tbody id="l2_table">
- <tr ng-repeat="ipuni in ipvc.ipvc.unis.uni">
- <td ng-init="serviceIpuni = getMefInterfaceIpvc(ipuni['uni-id'],ipuni['ip-uni-id'])">{{ cesDisplayNames[ipuni.device] }}</td>
- <td>{{ ipuni.prettyID }}</td>
- <td>{{serviceIpuni['ip-address']}}</td>
- <td>{{serviceIpuni.vlan}}</td>
- <td class="minimal-width"><button class="btn btn-md btn-danger" ng-click="deleteIpvcUni(ipvc['svc-id'], ipuni['uni-id'], ipuni['ip-uni-id'])"> <i class="icon-trash"></i> </button></td>
- </tr>
- </tbody>
- </table>
- </td>
- -->
- </tr>
- </tbody>
- </table>
- </div>
- <!--
- <div ng-show="isTabSet('tenantData',6)">
- <div class="table-header">Tenant UNIs</div>
- <table class="footable table table-striped">
- <thead>
- <tr>
- <th class="minimal-width">Device</th>
- <th class="minimal-width">UNI</th>
- <th>Ports</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="uni in unis | orderBy: '[\'uni-id\']'">
- <td class="minimal-width">{{ cesDisplayNames[uni.device] }}</td>
- <td class="minimal-width">{{ uni.prettyID }}</td>
- <td>
- <table class="footable table table-striped inner-table" ng-if="uni['ip-unis']['ip-uni']">
- <thead ng-if="!expandFlags.tuni[uni['uni-id']]">
- <tr>
- <th class="minimal-width"><i ng-click="expandFlags.tuni[uni['uni-id']] = true" class="expand-btn icon-caret-right"></i> Show Ports</th>
- </tr>
- </thead>
- <thead ng-if-start="expandFlags.tuni[uni['uni-id']]">
- <tr>
- <th class="minimal-width">
- <i ng-click="expandFlags.tuni[uni['uni-id']] = false" class="expand-btn icon-caret-down"></i>
- IP UNI ID
- </th>
- <th class="minimal-width">VLAN</th>
- <th class="minimal-width">Address</th>
- <th>Remote Subnets</th>
- <th></th>
- </tr>
- </thead>
- <tbody ng-if-end>
- <tr ng-repeat="ipuni in uni['ip-unis']['ip-uni'] | orderBy: '[\'ip-uni-id\']'">
- <td class="minimal-width">{{ ipuni['ip-uni-id'] }}</td>
- <td class="minimal-width">{{ ipuni.vlan }}</td>
- <td class="minimal-width">{{ ipuni['ip-address'] }}</td>
- <td>
- <table class="footable table table-striped inner-table" ng-init="expKey=uni['uni-id']+':'+ipuni['ip-uni-id']" ng-if="subnets[uni['uni-id']][ipuni['ip-uni-id']]">
- <thead ng-if="expandFlags.ipuni[expKey]">
- <tr>
- <th class="minimal-width"><i ng-click="expandFlags.ipuni[expKey] = false" class="expand-btn icon-caret-right"></i> Show Subnets</th>
- </tr>
- </thead>
- <thead ng-if-start="!expandFlags.ipuni[expKey]">
- <tr>
- <th>
- <i ng-click="expandFlags.ipuni[expKey] = true" class="expand-btn icon-caret-down"></i>
- Subnet
- </th>
- <th>Gateway</th>
- <th></th>
- </tr>
- </thead>
- <tbody ng-if-end>
- <tr ng-repeat="subnet in subnets[uni['uni-id']][ipuni['ip-uni-id']] | orderBy: subnet" ng-if="subnets[uni['uni-id']]">
- <td>{{ subnet.subnet }}</td>
- <td>{{ subnet.gateway }}</td>
- <td class="minimal-width">
- <button class="btn btn-md btn-danger" ng-click="deleteIpUniSubnet(uni['uni-id'],ipuni['ip-uni-id'],subnet.subnet)">
- <i class="icon-trash"></i>
- <md-tooltip>Delete Subnet</md-tooltip>
- </button>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- <td class="minimal-width">
- <button class="btn btn-md btn-danger" ng-click="deleteIpUni(uni['uni-id'],ipuni['ip-uni-id'])"> <i class="icon-trash"></i><md-tooltip>Delete IP-UNI</md-tooltip> </button>
- <button class="btn btn-md btn-info" ng-click="ipUniSubnetDialog.show($event,{uniid:uni['uni-id'],ipuniid:ipuni['ip-uni-id']})"> <i class="icon-plus"></i><md-tooltip>Add Subnet</md-tooltip> </button>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- <td class="minimal-width"><button class="btn btn-md btn-info" ng-click="openIpUniDialog($event,uni)"> <i class="icon-plus"></i><md-tooltip>Add IP-UNI</md-tooltip> </button></td>
- </tr>
- </tbody>
- </table>
- </div>
- -->
- </div>
- <div class="clear">
- <button class="btn btn-default pull-right" onclick="window.location='#/cpeui/admin/tenants'" > Back </button>
- </div>
-</div>