update ui to work with ansible ha liberty

Change-Id: I81810c1bcdfa944772931917386c36d890660a88
This commit is contained in:
Ming He 2016-01-05 16:28:13 -08:00
parent 8a7c18c13d
commit 9797a4c4a6
20 changed files with 725 additions and 211 deletions

View File

@ -63,6 +63,14 @@
"username": "root",
"password": "root"
},
"network": {
"username": "neutron",
"password": "neutron"
},
"heat": {
"username": "heat",
"password": "heat"
},
"volume": {
"username": "cinder",
"password": "cinder"
@ -73,6 +81,10 @@
"username": "admin",
"password": "admin"
},
"demo": {
"username": "demo",
"password": "demo"
},
"compute": {
"username": "nova",
"password": "nova"
@ -85,6 +97,10 @@
"username": "glance",
"password": "glance"
},
"identity": {
"username": "keystone",
"password": "keystone"
},
"metering": {
"username": "ceilometer",
"password": "ceilometer"
@ -97,6 +113,10 @@
"username": "swift",
"password": "swift"
},
"heat": {
"username": "heat",
"password": "heat"
},
"volume": {
"username": "cinder",
"password": "cinder"

View File

@ -0,0 +1,5 @@
00:01:02:03:04:11,8,127.0.0.1
00:01:02:03:04:12,8,127.0.0.1
00:01:02:03:04:13,8,127.0.0.1
00:01:02:03:04:14,8,127.0.0.1
00:01:02:03:04:15,8,127.0.0.1

View File

@ -0,0 +1 @@
127.0.0.1,huawei,2c,community

View File

@ -23,21 +23,21 @@
}, {
"id": 4,
"name": "network",
"title": "Network",
"title": "Physical Network",
"state": "",
"template": "src/app/partials/network.tpl.html",
"description": ""
}, {
"id": 5,
"name": "network_mapping",
"title": "Network Mapping",
"title": "Virtual Network",
"state": "",
"template": "src/app/partials/network_mapping.tpl.html",
"description": ""
}, {
"id": 6,
"name": "package_config",
"title": "Target System Config",
"title": "System Credentials",
"state": "",
"template": "src/app/partials/package_config.tpl.html",
"description": ""

View File

@ -170,10 +170,10 @@ define(['./baseController'], ()->
installInterface = {}; # the physical interface to install os
$rootScope.networkMappingInterfaces = {}; # the interface name are needed to map openstack componets
for name, value of $scope.interfaces
if value.is_mgmt
installInterface[name] = value
else
$rootScope.networkMappingInterfaces[name] = value
installInterface[name] = value if value.is_mgmt
$rootScope.networkMappingInterfaces[name] = subnet for subnet in $scope.subnetworks when ('' + subnet.id) == ('' + value.subnet_id)
$rootScope.networkMappingInterfaces[name].subnet_id = value.subnet_id
$rootScope.networkMappingInterfaces[name].is_mgmt = value.is_mgmt
$scope.interfaces = installInterface # only need to store install interface
$cookieStore.put('networkMappingInterfaces', $rootScope.networkMappingInterfaces)
wizardService.networkCommit($scope, sendRequest)
@ -181,14 +181,8 @@ define(['./baseController'], ()->
# display data in the table
wizardService.getClusterHosts($scope.cluster.id).success (data) ->
$scope.servers = data
if $scope.servers[0].networks and Object.keys($scope.servers[0].networks).length != 0
$scope.interfaces = $scope.servers[0].networks
# retrive saved network mapping interfaces
savedNetworkMappingInterfaces = $cookieStore.get('networkMappingInterfaces');
for name, value of savedNetworkMappingInterfaces
$scope.interfaces[name] = value
wizardService.setInterfaces($scope.interfaces)
$scope.interfaces = $cookieStore.get('networkMappingInterfaces')
wizardService.setInterfaces($scope.interfaces)
wizardService.displayDataInTable($scope, $scope.servers)
]
.controller 'partitionCtrl', ['$scope', 'wizardService',
@ -296,51 +290,118 @@ define(['./baseController'], ()->
$scope.autoAssignRoles = ->
wizardService.autoAssignRoles($scope)
$scope.haMultipleNodeAssignRoles = ->
rolesHash = {}
rolesHash[role.name] = role for role in $scope.roles
for i in [0...3]
$scope.servers[i].roles = []
$scope.servers[i].roles.push(rolesHash['controller'])
$scope.servers[i].roles.push(rolesHash['ha'])
$scope.servers[i].roles.push(rolesHash['ceph-mon'])
if i == 0
$scope.servers[i].roles.push(rolesHash['odl'])
$scope.servers[i].roles.push(rolesHash['onos'])
$scope.servers[i].roles.push(rolesHash['ceph-adm'])
for i in [3...$scope.servers.length]
$scope.servers[i].roles = []
$scope.servers[i].roles.push(rolesHash['compute'])
$scope.servers[i].roles.push(rolesHash['ceph-osd'])
return
$scope.commit = (sendRequest)->
wizardService.roleAssignCommit($scope, sendRequest)
wizardService.displayDataInTable($scope, $scope.servers)
]
.controller 'networkMappingCtrl', ['$scope', 'wizardService',
($scope, wizardService) ->
.controller 'networkMappingCtrl', ['$scope', 'wizardService', '$cookieStore',
($scope, wizardService, $cookieStore) ->
wizardService.networkMappingInit($scope)
wizardService.watchingTriggeredStep($scope)
$scope.nics = {
external: 'eth1',
mgmt: 'eth1',
storage: 'eth1'
};
$scope.updateInternalNetwork = (network_name) ->
if ($scope.ips[network_name].cidr.split('.') < 4)
return
$scope.ips[network_name].start = $scope.ips[network_name].cidr.split('.').slice(0,3).join('.') +
'.' + $scope.ips[network_name].start.split('.')[3]
$scope.ips[network_name].end = $scope.ips[network_name].cidr.split('.').slice(0,3).join('.') +
'.' + $scope.ips[network_name].end.split('.')[3]
if network_name == 'mgmt'
$scope.ips.mgmt.internal_vip = $scope.ips[network_name].cidr.split('.').slice(0,3).join('.') +
'.' + $scope.ips.mgmt.internal_vip.split('.')[3]
return
$scope.vlanTags = {
mgmt: '101',
storage: '102'
};
$scope.updateExternalNetwork = (network_name) ->
nic = $scope.external[network_name]
$scope.ips[network_name].cidr = $scope.interfaces[nic].subnet
$scope.ips[network_name].start = $scope.ips[network_name].cidr.split('.').slice(0,3).join('.') +
'.' + $scope.ips[network_name].start.split('.')[3]
$scope.ips[network_name].end = $scope.ips[network_name].cidr.split('.').slice(0,3).join('.') +
'.' + $scope.ips[network_name].end.split('.')[3]
if network_name == 'external'
$scope.ips.external.public_vip = $scope.ips[network_name].cidr.split('.').slice(0,3).join('.') +
'.' + $scope.ips.external.public_vip.split('.')[3]
$scope.ips.external.gw_ip = $scope.ips[network_name].cidr.split('.').slice(0,3).join('.') +
'.' + $scope.ips.external.gw_ip.split('.')[3]
return
$scope.ips = {
mgmt: {
start: '172.16.1.10',
end: '172.16.1.255',
cidr: '127.16.1.0/24',
internal_vip: '172.16.1.222'
},
external: {
start: '10.145.250.10',
end: '10.145.250.255',
cidr: '10.145.250.0/24',
gw_ip: '10.145.250.1',
public_vip: '10.145.250.221'
},
storage: {
start: '172.16.2.10',
end: '172.16.2.255',
cidr: '172.16.2.0/24'
},
ha_proxy: {
vip: '10.1.0.222'
}
};
defaultCfg = ->
$scope.internal = {
mgmt: 'eth1',
storage: 'eth1'
}
$scope.external = {
external: 'eth2'
}
$scope.vlanTags = {
mgmt: '101',
storage: '102'
}
$scope.ips = {
mgmt: {
start: '172.16.1.1',
end: '172.16.1.254',
cidr: '172.16.1.0/24',
internal_vip: '172.16.1.222'
},
external: {
start: '10.145.250.210',
end: '10.145.250.220',
cidr: '10.145.250.0/24',
gw_ip: '10.145.250.1',
public_vip: '10.145.250.222'
},
storage: {
start: '172.16.2.1',
end: '172.16.2.254',
cidr: '172.16.2.0/24'
}
}
$scope.updateExternalNetwork('external')
return
saveCfg = ->
networkMapping = {
internal: $scope.internal,
external: $scope.external,
vlanTags: $scope.vlanTags,
ips: $scope.ips
}
$cookieStore.put('networkMapping', networkMapping)
return
readCfg = ->
$scope.interfaces = $cookieStore.get('networkMappingInterfaces')
networkMapping = $cookieStore.get('networkMapping')
return defaultCfg() if !networkMapping
$scope.internal = networkMapping.internal
$scope.external = networkMapping.external
$scope.vlanTags = networkMapping.vlanTags
$scope.ips = networkMapping.ips
return
configureNeutronCfg = ->
neutronCfg = {
@ -357,13 +418,13 @@ define(['./baseController'], ()->
networkCfg = {
'bond_mappings': [],
'sys_intf_mappings': [{
'interface': $scope.nics.mgmt,
'interface': $scope.internal.mgmt,
'role': ['controller', 'compute'],
'vlan_tag': $scope.vlanTags.mgmt,
'type': 'vlan',
'name': 'mgmt'
}, {
'interface': $scope.nics.storage,
'interface': $scope.internal.storage,
'role': ['controller', 'compute'],
'vlan_tag': $scope.vlanTags.storage,
'type': 'vlan',
@ -377,7 +438,7 @@ define(['./baseController'], ()->
'nic_mappings': [],
'public_net_info': {
'no_gateway': 'False',
'external_gw': $scope.ips.external.ip,
'external_gw': $scope.ips.external.gw_ip,
'enable': 'False',
'floating_ip_cidr': $scope.ips.external.cidr,
'floating_ip_start': $scope.ips.external.start,
@ -401,7 +462,7 @@ define(['./baseController'], ()->
'netmask': wizardService.getNetMaskFromCIDR($scope.ips.external.cidr)
},
'provider_net_mappings': [{
'interface': $scope.interfaces.external,
'interface': $scope.internal.mgmt,
'role': ['controller', 'compute'],
'type': 'ovs',
'name': 'br-prv',
@ -443,27 +504,30 @@ define(['./baseController'], ()->
}
return
configureHAProxyCfg = ->
haCfg = {
'vip': $scope.ips.ha_proxy.vip
}
return haCfg
# configureHAProxyCfg = ->
# haCfg = {
# 'vip': $scope.ips.external.public_vip
# }
# return haCfg
# locate the install network, it is used to setup networkMapping and HAProxy
configureNetworkMapping()
# if there is network mapping configurations stored in cookie
readCfg()
$scope.onDrop = ($event, key) ->
$scope.pendingInterface = key
# $scope.onDrop = ($event, key) ->
# $scope.pendingInterface = key
$scope.dropSuccessHandler = ($event, key, dict) ->
dict[key].mapping_interface = $scope.pendingInterface
# $scope.dropSuccessHandler = ($event, key, dict) ->
# dict[key].mapping_interface = $scope.pendingInterface
$scope.commit = (sendRequest) ->
networkCfg = configureNetworkCfg()
neutronCfg = configureNeutronCfg()
haCfg = configureHAProxyCfg()
saveCfg() # save changes to cookie
# haCfg = configureHAProxyCfg()
wizardService.networkMappingCommit($scope, networkCfg, $scope.networkMapping,
neutronCfg, haCfg, sendRequest)
neutronCfg, sendRequest)
]
.controller 'reviewCtrl', ['$scope', 'wizardService', 'ngTableParams', '$filter', '$location', '$anchorScroll'
($scope, wizardService, ngTableParams, $filter, $location, $anchorScroll) ->
@ -480,6 +544,9 @@ define(['./baseController'], ()->
wizardService.reviewCommit($scope, sendRequest)
wizardService.displayDataInTable($scope, $scope.servers)
$scope.reload = ->
wizardService.displayDataInTable($scope, $scope.servers)
]
.animation '.fade-animation', [->
return{

View File

@ -5,6 +5,7 @@
</div>
<div class="row side-padding-10 padding-top-30">
<div class="col-xs-12">
<!--
<table class="table table-striped">
<thead>
<tr>
@ -19,5 +20,164 @@
</tr>
</tbody>
</table>
-->
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white">
OS Installation Network
</h5>
</div>
<table class="table table-striped table-border-grey">
<tbody>
<tr ng-repeat="(key, value) in configuration.package_config['network_mapping'].install">
<td>{{key}}</td>
<td>{{value}}</td>
</tr>
</tbody>
</table>
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white">
IP Settings
</h5>
</div>
<table class="table table-striped table-border-grey">
<thead>
<tr>
<th>Name</th>
<th>CIDR</th>
<th>IP Range</th>
<th>Role</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="ip in configuration.package_config['network_cfg']['ip_settings']">
<td>{{ip.name}}</td>
<td>{{ip.cidr}}</td>
<td>{{ip.ip_ranges[0].join(' --- ')}}</td>
<td>{{ip.role.join(', ')}}
</tr>
</tbody>
</table>
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white">
sys_intf_mappings
</h5>
</div>
<table class="table table-striped table-border-grey">
<thead>
<tr>
<th>Name</th>
<th>Interface</th>
<th>Type</th>
<th>Role</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="ip in configuration.package_config['network_cfg']['sys_intf_mappings']">
<td>{{ip.name}}</td>
<td>{{ip.interface}}</td>
<td>{{ip.type}} {{ip.vlan_tag}}</td>
<td>{{ip.role.join(', ')}}
</tr>
</tbody>
</table>
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white">
Virtual IPs
</h5>
</div>
<table class="table table-striped table-border-grey">
<thead>
<tr>
<th>Type</th>
<th>Interface</th>
<th>IP</th>
<th>Netmask</th>
</tr>
</thead>
<tbody>
<tr>
<td>Interal</td>
<td>{{configuration.package_config['network_cfg']['internal_vip'].interface}}</td>
<td>{{configuration.package_config['network_cfg']['internal_vip'].ip}}</td>
<td>{{configuration.package_config['network_cfg']['internal_vip'].netmask}}</td>
</tr>
<tr>
<td>Public</td>
<td>{{configuration.package_config['network_cfg']['public_vip'].interface}}</td>
<td>{{configuration.package_config['network_cfg']['public_vip'].ip}}</td>
<td>{{configuration.package_config['network_cfg']['public_vip'].netmask}}</td>
</tr>
</tbody>
</table>
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white">
Network Mapping
</h5>
</div>
<table class="table table-striped table-border-grey">
<tbody>
<tr>
<td class="table-review-padding"><strong>provider_net_mappings</strong>
</td>
<td></td>
</tr>
<tr ng-repeat="(key, value) in configuration.package_config['network_cfg'].provider_net_mappings[0]">
<td class="capitalize">
<div>
{{key}}
</div>
</td>
<td>{{value}}</td>
</tr>
</tbody>
</table>
<table class="table table-striped table-border-grey">
<tbody>
<tr>
<td class="table-review-padding"><strong>public_net_info</strong>
</td>
<td></td>
</tr>
<tr ng-repeat="(key, value) in configuration.package_config['network_cfg'].public_net_info">
<td class="capitalize">
<div>
{{key}}
</div>
</td>
<td>{{value}}</td>
</tr>
</tbody>
</table>
<br>
<br>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white">
Target System Configurations - NeutronConfig
</h5>
</div>
<table class="table table-striped table-border-grey">
<tbody>
<tr>
<td>tenent_network_type</td>
<td>{{configuration.package_config.neutron_config.openvswitch.tenant_network_type}}</td>
</tr>
<tr ng-if="configuration.package_config.neutron_config.openvswitch.tenant_network_type=='vxlan'" ng-repeat="(key, value) in configuration.package_config.neutron_config.openvswitch.network_vlan_ranges">
<td>network_vlan_ranges_{{key}}</td>
<td>{{value}}</td>
</tr>
<tr ng-if="configuration.package_config.neutron_config.openvswitch.tenant_network_type=='vxlan'" ng-repeat="(key, value) in configuration.package_config.neutron_config.openvswitch.bridge_mappings">
<td>bridge_mappins_{{key}}</td>
<td>{{value}}</td>
</tr>
</tbody>
</table>
</div>
</div>

View File

@ -1,4 +1,12 @@
<div ng-controller="networkCtrl">
<div class="row">
<div class="alert alert-info">
<span>Please provide 3 subnets.</span><br/>
<span>Check one as OS install network and use Autofill to assign ips. This is used to install OS.</span><br/>
<span>The other 2 subnets are used in the next step to configure openstack network.</span>
</div>
</div>
<div class="space-10"></div>
<div class="row">
<div collapse="autoFillPanel.isCollapsed" class="dashed-panel" style="height: auto; background-color: rgba(224, 226, 227, 0.25);">
<span class="action pull-right" ng-click="autoFillPanel.isCollapsed = true;">
@ -8,8 +16,8 @@
<div class="row">
<div class="col-sm-12">
<h4>
Autofill IP Address for Each Interface
<button class="btn btn-sm btn-info pull-right" ng-click="openAddSubnetModal()" >Add Subnet</button>
Autofill IP Address for All Interfaces
<button class="btn btn-sm btn-success pull-right" ng-click="openAddSubnetModal()" >Add Subnet</button>
<button class="btn btn-sm btn-info pull-right" ng-model="autoFill" style="margin-right:15px;" ng-click="autoFillManage()">{{autoFillButtonDisplay}}</button>
</h4>
<table class="table table-hover nowrap">
@ -68,7 +76,7 @@
</label>
</td>
<td>
<select ng-model="value.subnet_id" class="max-width-200" ng-show="value.is_mgmt">
<select ng-model="value.subnet_id" class="max-width-200">
<option ng-repeat="sub in subnetworks" value="{{sub.id}}" ng-selected="sub.id == value.subnet_id">
{{sub.subnet}}
</option>

View File

@ -1,11 +1,16 @@
<div ng-controller="networkMappingCtrl">
<div class="row">
<div class="panel" style="height: auto; background-color: rgba(224, 226, 227, 0.25);">
<div class="panel" style="height: auto; padding: 10px; margin-top: -30px;">
<div class="row"><div class="col-sm-12">
<div class="alert alert-info">
<span>Bind openstack management and storage network to a physical inteface.</span><br/>
<span>Two virtual networks will be created on the NIC based on the configurations.</span><br/>
<span>Just choose network interface. Use the default values for the remaining configurations.</span>
</div>
</div></div>
<div class="row">
<div class="col-sm-12">
<h4>
Allocate IP Address for Each Network Interface
</h4>
<h4>Internal Network Interface</h4>
<table class="table table-hover nowrap">
<thead>
<tr>
@ -18,19 +23,91 @@
</tr>
</thead>
<tbody>
<tr ng-repeat="(network_key, network_value) in nics">
<tr ng-repeat="(network_key, network_value) in internal">
<td>
<span class="external-event margin-right-5 fade-animation"
ng-class="{
'label-success': network_key == 'mgmt',
'label-purple': network_key == 'external',
'label-warning': network_key == 'storage'}">
<span class="capitalize">{{network_key}}</span>
</span>
</td>
<td>
<select class="max-width-200" ng-model="nics[network_key]">
<option ng-repeat="(name, interface) in $root.networkMappingInterfaces" value="{{name}}" >
<select class="max-width-200" ng-model="internal[network_key]">
<option ng-repeat="(name, interface) in $root.networkMappingInterfaces" ng-hide="interface.is_mgmt"
value="{{name}}"
ng-selected="internal[network_key] == name">
{{name}}
</option>
</select>
</td>
<td>
<input id="{{name}}-cidr" type="text" class="input-medium" ng-model="ips[network_key].cidr"
placeholder="CIDR" ng-change="updateInternalNetwork(network_key)">
</td>
<td>
<input id="{{name}}-ipstart" type="text" class="input-medium" ng-model="ips[network_key].start"
placeholder="IP Start">
</td>
<td>
<input id="{{name}}-ipend" type="text" class="input-medium" ng-model="ips[network_key].end"
placeholder="IP End">
</td>
<td>
<span class="label-yellow" style="color: #fff;">Vlan Tag</span>
<input id="{{name}}-vlan-tag" type="text" class="input-small" ng-model="vlanTags[network_key]"
placeholder="Vlan tag">
</td>
</tr>
</tbody>
</table>
<div class="space-10"></div>
<div class="row">
<div class="col-sm-12">
<span style="margin-right: 10px;">
Management Network Virtual IP
</span>
<input id="interal_vip" type="text" class="input-medium" ng-model="ips.mgmt.internal_vip"
placeholder="Internal Virtual IP">
</div>
</div>
</div>
</div>
</div>
<div class="panel" style="height: auto; padding: 10px;">
<div class="row"><div class="col-sm-12">
<div class="alert alert-info">
<span>The external network interface need to connect to Internet.</span><br/>
<span>Set external virtual ip for HA mode</span>
</div>
</div></div>
<div class="row">
<div class="col-sm-12">
<h4>External Network Interface</h4>
<table class="table table-hover nowrap">
<thead>
<tr>
<th>Network</th>
<th>NIC</th>
<th>CIDR</th>
<th>Start IP</th>
<th>End IP</th>
<th>Gateway IP</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="(network_key, network_value) in external">
<td>
<span class="external-event margin-right-5 fade-animation"
ng-class="{
'label-purple': network_key == 'external'}">
<span class="capitalize">{{network_key}}</span>
</span>
</td>
<td>
<select class="max-width-200" ng-model="external[network_key]" ng-change="updateExternalNetwork(network_key)">
<option ng-repeat="(name, interface) in $root.networkMappingInterfaces" ng-hide="interface.is_mgmt"
value="{{name}}" ng-selected="external[network_key] == name">
{{name}}
</option>
</select>
@ -48,32 +125,24 @@
placeholder="IP End">
</td>
<td>
<span ng-show="network_key == 'external'">
<span class="label-primary" style="color: #fff;">Public Virtual IP</span>
<input id="external_gw" type="text" class="input-medium" ng-model="ips.external.public_vip"
placeholder="Public Virtual IP">
</span>
<span ng-show="network_key == 'external'">
<span class="label-info" style="color: #fff;">Gateway IP</span>
<input id="external_gw" type="text" class="input-medium" ng-model="ips.external.gw_ip"
placeholder="External Gateway IP">
</span>
<span ng-show="network_key == 'mgmt'">
<span class="label-primary" style="color: #fff;">Internal Virtual IP</span>
<input id="interal_vip" type="text" class="input-medium" ng-model="ips.mgmt.internal_vip"
placeholder="Internal Virtual IP">
</span>
<span ng-show="network_key == 'storage' || network_key == 'mgmt'">
<span class="label-yellow" style="color: #fff;">Vlan Tag</span>
<input id="{{name}}-vlan-tag" type="text" class="input-small" ng-model="vlanTags[network_key]"
placeholder="Vlan tag">
</span>
<input id="external_gw" type="text" class="input-medium" ng-model="ips.external.gw_ip"
placeholder="External Gateway IP">
</td>
</tr>
</tbody>
</table>
<div class="space-10"></div>
<div class="row">
<div class="col-sm-12">
<span style="margin-right: 10px;">
External Network Virtual IP
</span>
<input id="external_gw" type="text" class="input-medium" ng-model="ips.external.public_vip"
placeholder="External Virtual IP for HA">
</div>
</div>
</div>
<!--
<div class="col-sm-12">
<h4>
HA Proxy
@ -102,6 +171,7 @@
</tbody>
</table>
</div>
-->
</div>
</div>
</div>

View File

@ -80,7 +80,7 @@
</tr>
</thead>
<tbody>
<tr ng-repeat="(key, value) in os_global_config.partition">
<tr ng-repeat="(key, value) in partition">
<td class="table-review-padding">{{key}}</td>
<td>{{value.percentage}}</td>
<td>{{value.max_size}}</td>
@ -119,7 +119,7 @@
</th>
<th>
</th>
<th ng-repeat="(key, value) in interfaces">
<th ng-repeat="(key, value) in interfaces" ng-show="value.is_mgmt">
{{key}}
</th>
</tr>
@ -154,7 +154,7 @@
</span>
</span>
</td>
<td ng-repeat="(key, value) in interfaces">
<td ng-repeat="(key, value) in interfaces" ng-show="value.is_mgmt">
{{server.networks[key].ip}}
</td>
</tr>
@ -211,51 +211,141 @@
<div class="widget-main review-padding" collapse="isMappingCollapsed">
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white" ng-click="returnStep('network_mapping')">
Network Mapping
OS Installation Network
</h5>
</div>
<table class="table table-striped table-border-grey">
<tbody>
<tr ng-repeat="(key, value) in packageConfig['network_mapping'].install">
<td>{{key}}</td>
<td>{{value}}</td>
</tr>
</tbody>
</table>
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white" ng-click="returnStep('security')">
IP Settings
</h5>
</div>
<table class="table table-striped table-border-grey">
<thead>
<tr>
<th>Name</th>
<th>CIDR</th>
<th>IP Range</th>
<th>Role</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="ip in packageConfig['network_cfg']['ip_settings']">
<td>{{ip.name}}</td>
<td>{{ip.cidr}}</td>
<td>{{ip.ip_ranges[0].join(' --- ')}}</td>
<td>{{ip.role.join(', ')}}
</tr>
</tbody>
</table>
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white" ng-click="returnStep('security')">
sys_intf_mappings
</h5>
</div>
<table class="table table-striped table-border-grey">
<thead>
<tr>
<th>Name</th>
<th>Interface</th>
<th>Network</th>
<th>Type</th>
<th>Role</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="(key, value) in network_mapping">
<td>{{value}}</td>
<td class="capitalize">
<div class="label review-network-badge" ng-class="{'label-pink': key == 'management', 'label-success': key == 'tenant', 'label-purple': key == 'external', 'label-warning': key == 'storage', 'label-info': key == 'public_network', 'label-red': key == 'cluster_network'}">
{{key}}
</div>
</td>
</tr>
</tbody>
<tr ng-repeat="ip in packageConfig['network_cfg']['sys_intf_mappings']">
<td>{{ip.name}}</td>
<td>{{ip.interface}}</td>
<td>{{ip.type}} {{ip.vlan_tag}}</td>
<td>{{ip.role.join(', ')}}
</tr>
</tbody>
</table>
<br>
<br>
<span ng-if="currentAdapterName == 'ceph_openstack_icehouse' || currentAdapterName == 'ceph_firefly'">
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white" ng-click="returnStep('security')">
Target System Configurations - cephConfig
Virtual IPs
</h5>
</div>
<table class="table table-striped table-border-grey">
<thead>
<tr>
<th>Type</th>
<th>Interface</th>
<th>IP</th>
<th>Netmask</th>
</tr>
</thead>
<tbody>
<tr>
<td>Interal</td>
<td>{{packageConfig['network_cfg']['internal_vip'].interface}}</td>
<td>{{packageConfig['network_cfg']['internal_vip'].ip}}</td>
<td>{{packageConfig['network_cfg']['internal_vip'].netmask}}</td>
</tr>
<tr>
<td>Public</td>
<td>{{packageConfig['network_cfg']['public_vip'].interface}}</td>
<td>{{packageConfig['network_cfg']['public_vip'].ip}}</td>
<td>{{packageConfig['network_cfg']['public_vip'].netmask}}</td>
</tr>
</tbody>
</table>
<br/>
<br/>
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white" ng-click="returnStep('security')">
Network Mapping
</h5>
</div>
<table class="table table-striped table-border-grey">
<tbody>
<tr ng-repeat="(key, value) in cephConfig.global_config">
<td>{{key}}</td>
<tr>
<td class="table-review-padding"><strong>provider_net_mappings</strong>
</td>
<td></td>
</tr>
<tr ng-repeat="(key, value) in packageConfig['network_cfg'].provider_net_mappings[0]">
<td class="capitalize">
<div>
{{key}}
</div>
</td>
<td>{{value}}</td>
</tr>
<tr ng-repeat="(key, value) in cephConfig.osd_config">
<td>{{key}}</td>
</tbody>
</table>
<table class="table table-striped table-border-grey">
<tbody>
<tr>
<td class="table-review-padding"><strong>public_net_info</strong>
</td>
<td></td>
</tr>
<tr ng-repeat="(key, value) in packageConfig['network_cfg'].public_net_info">
<td class="capitalize">
<div>
{{key}}
</div>
</td>
<td>{{value}}</td>
</tr>
</tbody>
</table>
</tr>
</tbody>
</table>
<br>
<br>
</span>
<span ng-if="currentAdapterName == 'ceph_openstack_icehouse' || currentAdapterName == 'openstack_icehouse'">
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white" ng-click="returnStep('security')">
Target System Configurations - NeutronConfig
@ -265,7 +355,7 @@
<tbody>
<tr>
<td>tenent_network_type</td>
<td>{{neutronConfig.openvswitch.tenant_network_type}}</td>
<td>{{packageConfig.neutron_config.openvswitch.tenant_network_type}}</td>
</tr>
<tr ng-if="neutronConfig.openvswitch.tenant_network_type=='gre'" ng-repeat="(key, value) in neutronConfig.openvswitch.tunnel_id_ranges">
<td>tunnel_id_ranges_{{key}}</td>
@ -275,6 +365,14 @@
<td>network_vlan_ranges_{{key}}</td>
<td>{{value}}</td>
</tr>
<tr ng-if="packageConfig.neutron_config.openvswitch.tenant_network_type=='vxlan'" ng-repeat="(key, value) in packageConfig.neutron_config.openvswitch.network_vlan_ranges">
<td>network_vlan_ranges_{{key}}</td>
<td>{{value}}</td>
</tr>
<tr ng-if="packageConfig.neutron_config.openvswitch.tenant_network_type=='vxlan'" ng-repeat="(key, value) in packageConfig.neutron_config.openvswitch.bridge_mappings">
<td>bridge_mappins_{{key}}</td>
<td>{{value}}</td>
</tr>
<tr ng-if="neutronConfig.openvswitch.tenant_network_type=='vlan'" ng-repeat="(key, value) in neutronConfig.openvswitch.bridge">
<td>bridge_mappins_{{key}}</td>
<td>{{value}}</td>
@ -283,7 +381,6 @@
</table>
<br>
<br>
</span>
<span ng-if="currentFlavor == 'HA-multinodes'">
<div class="widget-header widget-header-flat review-targetconfig">
<h5 class="widget-title white" ng-click="returnStep('security')">
@ -564,7 +661,7 @@
<ul class="nav nav-tabs">
<li ng-repeat="tab in tabs" ng-class="{active:isActiveTab(tab.url)}" ng-click="onClickTab(tab)">
<a href>{{tab.title}}</a>
</li>
</li>
<a class="action margin-right-5" ng-click="isCredCollapsed = !isCredCollapsed">
<i class="ace-icon fa fa-chevron-up" ng-class="{'fa-chevron-up': !isCredCollapsed, 'fa-chevron-down': isCredCollapsed}"></i>
</a>
@ -632,4 +729,4 @@
</div>
</div>
</div>
-->
-->

View File

@ -1,5 +1,5 @@
<div ng-controller="roleAssignCtrl">
<div class="row">
<div class="row" ng-init="autoAssignRoles.isCollapsed = true;">
<div collapse="autoAssignRoles.isCollapsed" class="dashed-panel" style="background-color: rgba(224, 226, 227, 0.25);">
<span class="action pull-right" ng-click="autoAssignRoles.isCollapsed = true;">
<i class="ace-icon fa fa-times-circle bigger-120 light-grey"></i>
@ -58,12 +58,17 @@
<span style="display: none">
<input type="text" placeholder="HA VIP" ng-model="ha_vip">
</span>
<!--
<button class="btn btn-sm btn-info" ng-init="autoAssignRoles.isCollapsed = true;" ng-click="autoAssignRoles.isCollapsed = !autoAssignRoles.isCollapsed">
Auto Assign&nbsp;
<i class="ace-icon fa fa-plus" ng-class="{'fa-minus': !autoAssignRoles.isCollapsed}"></i>
</button>
-->
<button class="btn btn-sm btn-success" ng-click="haMultipleNodeAssignRoles()"
ng-show="servers.length > 4">
HA 3+N Mode Assign&nbsp;
<i class="ace-icon fa fa-plus"></i>
</button>
<div class="btn-group" dropdown>
<button type="button" style="border-bottom-width: 3px; border-top-width: 3px;" class="btn btn-sm btn-info dropdown-toggle" dropdown-toggle ng-disabled="disabled">
@ -159,4 +164,4 @@
</div>
<div class="clearfix"></div>
</div>
</div>
</div>

View File

@ -883,7 +883,7 @@ define(['./baseService'], ()->
"message": response.data
)
)
networkMappingCommit: ($scope, networkCfg, networkMapping, neutronCfg, haCfg, sendRequest) ->
networkMappingCommit: ($scope, networkCfg, networkMapping, neutronCfg, sendRequest) ->
wizardFactory = @wizardFactory
if !sendRequest
wizardFactory.setCommitState(
@ -902,13 +902,14 @@ define(['./baseService'], ()->
"network_cfg": networkCfg
"network_mapping": networkMapping
"neutron_config": neutronCfg
"ha_proxy": haCfg
#"ha_proxy": haCfg
"enable_vpnaas": "False"
"enable_fwaas": "False"
"enable_secgroup": "False"
@dataService.updateClusterConfig($scope.cluster.id, network_mapping).success (data) ->
wizardFactory.setNetworkMapping(networks)
wizardFactory.setPackageConfig(network_mapping.package_config)
wizardFactory.setCommitState(
"name": "network_mapping"
"state": "success"

View File

@ -63,6 +63,14 @@
"username": "root",
"password": "root"
},
"network": {
"username": "neutron",
"password": "neutron"
},
"heat": {
"username": "heat",
"password": "heat"
},
"volume": {
"username": "cinder",
"password": "cinder"
@ -73,6 +81,10 @@
"username": "admin",
"password": "admin"
},
"demo": {
"username": "demo",
"password": "demo"
},
"compute": {
"username": "nova",
"password": "nova"
@ -85,6 +97,10 @@
"username": "glance",
"password": "glance"
},
"identity": {
"username": "keystone",
"password": "keystone"
},
"metering": {
"username": "ceilometer",
"password": "ceilometer"
@ -97,6 +113,10 @@
"username": "swift",
"password": "swift"
},
"heat": {
"username": "heat",
"password": "heat"
},
"volume": {
"username": "cinder",
"password": "cinder"

View File

@ -23,21 +23,21 @@
}, {
"id": 4,
"name": "network",
"title": "Network",
"title": "Physical Network",
"state": "",
"template": "src/app/partials/network.tpl.html",
"description": ""
}, {
"id": 5,
"name": "network_mapping",
"title": "Network Mapping",
"title": "Virtual Network",
"state": "",
"template": "src/app/partials/network_mapping.tpl.html",
"description": ""
}, {
"id": 6,
"name": "package_config",
"title": "Target System Config",
"title": "System Credentials",
"state": "",
"template": "src/app/partials/package_config.tpl.html",
"description": ""

View File

@ -221,7 +221,7 @@
});
};
$scope.commit = function(sendRequest) {
var installInterface, name, value, _ref;
var installInterface, name, subnet, value, _i, _len, _ref, _ref1;
installInterface = {};
$rootScope.networkMappingInterfaces = {};
_ref = $scope.interfaces;
@ -229,26 +229,25 @@
value = _ref[name];
if (value.is_mgmt) {
installInterface[name] = value;
} else {
$rootScope.networkMappingInterfaces[name] = value;
}
_ref1 = $scope.subnetworks;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
subnet = _ref1[_i];
if (('' + subnet.id) === ('' + value.subnet_id)) {
$rootScope.networkMappingInterfaces[name] = subnet;
}
}
$rootScope.networkMappingInterfaces[name].subnet_id = value.subnet_id;
$rootScope.networkMappingInterfaces[name].is_mgmt = value.is_mgmt;
}
$scope.interfaces = installInterface;
$cookieStore.put('networkMappingInterfaces', $rootScope.networkMappingInterfaces);
return wizardService.networkCommit($scope, sendRequest);
};
return wizardService.getClusterHosts($scope.cluster.id).success(function(data) {
var name, savedNetworkMappingInterfaces, value;
$scope.servers = data;
if ($scope.servers[0].networks && Object.keys($scope.servers[0].networks).length !== 0) {
$scope.interfaces = $scope.servers[0].networks;
savedNetworkMappingInterfaces = $cookieStore.get('networkMappingInterfaces');
for (name in savedNetworkMappingInterfaces) {
value = savedNetworkMappingInterfaces[name];
$scope.interfaces[name] = value;
}
wizardService.setInterfaces($scope.interfaces);
}
$scope.interfaces = $cookieStore.get('networkMappingInterfaces');
wizardService.setInterfaces($scope.interfaces);
return wizardService.displayDataInTable($scope, $scope.servers);
});
}
@ -383,47 +382,117 @@
$scope.autoAssignRoles = function() {
return wizardService.autoAssignRoles($scope);
};
$scope.haMultipleNodeAssignRoles = function() {
var i, role, rolesHash, _i, _j, _k, _len, _ref, _ref1;
rolesHash = {};
_ref = $scope.roles;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
role = _ref[_i];
rolesHash[role.name] = role;
}
for (i = _j = 0; _j < 3; i = ++_j) {
$scope.servers[i].roles = [];
$scope.servers[i].roles.push(rolesHash['controller']);
$scope.servers[i].roles.push(rolesHash['ha']);
$scope.servers[i].roles.push(rolesHash['ceph-mon']);
if (i === 0) {
$scope.servers[i].roles.push(rolesHash['odl']);
$scope.servers[i].roles.push(rolesHash['onos']);
$scope.servers[i].roles.push(rolesHash['ceph-adm']);
}
}
for (i = _k = 3, _ref1 = $scope.servers.length; 3 <= _ref1 ? _k < _ref1 : _k > _ref1; i = 3 <= _ref1 ? ++_k : --_k) {
$scope.servers[i].roles = [];
$scope.servers[i].roles.push(rolesHash['compute']);
$scope.servers[i].roles.push(rolesHash['ceph-osd']);
}
};
$scope.commit = function(sendRequest) {
return wizardService.roleAssignCommit($scope, sendRequest);
};
return wizardService.displayDataInTable($scope, $scope.servers);
}
]).controller('networkMappingCtrl', [
'$scope', 'wizardService', function($scope, wizardService) {
var configureHAProxyCfg, configureNetworkCfg, configureNetworkMapping, configureNeutronCfg;
'$scope', 'wizardService', '$cookieStore', function($scope, wizardService, $cookieStore) {
var configureNetworkCfg, configureNetworkMapping, configureNeutronCfg, defaultCfg, readCfg, saveCfg;
wizardService.networkMappingInit($scope);
wizardService.watchingTriggeredStep($scope);
$scope.nics = {
external: 'eth1',
mgmt: 'eth1',
storage: 'eth1'
};
$scope.vlanTags = {
mgmt: '101',
storage: '102'
};
$scope.ips = {
mgmt: {
start: '172.16.1.10',
end: '172.16.1.255',
cidr: '127.16.1.0/24',
internal_vip: '172.16.1.222'
},
external: {
start: '10.145.250.10',
end: '10.145.250.255',
cidr: '10.145.250.0/24',
gw_ip: '10.145.250.1',
public_vip: '10.145.250.221'
},
storage: {
start: '172.16.2.10',
end: '172.16.2.255',
cidr: '172.16.2.0/24'
},
ha_proxy: {
vip: '10.1.0.222'
$scope.updateInternalNetwork = function(network_name) {
if ($scope.ips[network_name].cidr.split('.') < 4) {
return;
}
$scope.ips[network_name].start = $scope.ips[network_name].cidr.split('.').slice(0, 3).join('.') + '.' + $scope.ips[network_name].start.split('.')[3];
$scope.ips[network_name].end = $scope.ips[network_name].cidr.split('.').slice(0, 3).join('.') + '.' + $scope.ips[network_name].end.split('.')[3];
if (network_name === 'mgmt') {
$scope.ips.mgmt.internal_vip = $scope.ips[network_name].cidr.split('.').slice(0, 3).join('.') + '.' + $scope.ips.mgmt.internal_vip.split('.')[3];
}
};
$scope.updateExternalNetwork = function(network_name) {
var nic;
nic = $scope.external[network_name];
$scope.ips[network_name].cidr = $scope.interfaces[nic].subnet;
$scope.ips[network_name].start = $scope.ips[network_name].cidr.split('.').slice(0, 3).join('.') + '.' + $scope.ips[network_name].start.split('.')[3];
$scope.ips[network_name].end = $scope.ips[network_name].cidr.split('.').slice(0, 3).join('.') + '.' + $scope.ips[network_name].end.split('.')[3];
if (network_name === 'external') {
$scope.ips.external.public_vip = $scope.ips[network_name].cidr.split('.').slice(0, 3).join('.') + '.' + $scope.ips.external.public_vip.split('.')[3];
$scope.ips.external.gw_ip = $scope.ips[network_name].cidr.split('.').slice(0, 3).join('.') + '.' + $scope.ips.external.gw_ip.split('.')[3];
}
};
defaultCfg = function() {
$scope.internal = {
mgmt: 'eth1',
storage: 'eth1'
};
$scope.external = {
external: 'eth2'
};
$scope.vlanTags = {
mgmt: '101',
storage: '102'
};
$scope.ips = {
mgmt: {
start: '172.16.1.1',
end: '172.16.1.254',
cidr: '172.16.1.0/24',
internal_vip: '172.16.1.222'
},
external: {
start: '10.145.250.210',
end: '10.145.250.220',
cidr: '10.145.250.0/24',
gw_ip: '10.145.250.1',
public_vip: '10.145.250.222'
},
storage: {
start: '172.16.2.1',
end: '172.16.2.254',
cidr: '172.16.2.0/24'
}
};
$scope.updateExternalNetwork('external');
};
saveCfg = function() {
var networkMapping;
networkMapping = {
internal: $scope.internal,
external: $scope.external,
vlanTags: $scope.vlanTags,
ips: $scope.ips
};
$cookieStore.put('networkMapping', networkMapping);
};
readCfg = function() {
var networkMapping;
$scope.interfaces = $cookieStore.get('networkMappingInterfaces');
networkMapping = $cookieStore.get('networkMapping');
if (!networkMapping) {
return defaultCfg();
}
$scope.internal = networkMapping.internal;
$scope.external = networkMapping.external;
$scope.vlanTags = networkMapping.vlanTags;
$scope.ips = networkMapping.ips;
};
configureNeutronCfg = function() {
var neutronCfg;
@ -442,13 +511,13 @@
'bond_mappings': [],
'sys_intf_mappings': [
{
'interface': $scope.nics.mgmt,
'interface': $scope.internal.mgmt,
'role': ['controller', 'compute'],
'vlan_tag': $scope.vlanTags.mgmt,
'type': 'vlan',
'name': 'mgmt'
}, {
'interface': $scope.nics.storage,
'interface': $scope.internal.storage,
'role': ['controller', 'compute'],
'vlan_tag': $scope.vlanTags.storage,
'type': 'vlan',
@ -463,7 +532,7 @@
'nic_mappings': [],
'public_net_info': {
'no_gateway': 'False',
'external_gw': $scope.ips.external.ip,
'external_gw': $scope.ips.external.gw_ip,
'enable': 'False',
'floating_ip_cidr': $scope.ips.external.cidr,
'floating_ip_start': $scope.ips.external.start,
@ -488,7 +557,7 @@
},
'provider_net_mappings': [
{
'interface': $scope.interfaces.external,
'interface': $scope.internal.mgmt,
'role': ['controller', 'compute'],
'type': 'ovs',
'name': 'br-prv',
@ -538,26 +607,14 @@
}
};
};
configureHAProxyCfg = function() {
var haCfg;
haCfg = {
'vip': $scope.ips.ha_proxy.vip
};
return haCfg;
};
configureNetworkMapping();
$scope.onDrop = function($event, key) {
return $scope.pendingInterface = key;
};
$scope.dropSuccessHandler = function($event, key, dict) {
return dict[key].mapping_interface = $scope.pendingInterface;
};
readCfg();
return $scope.commit = function(sendRequest) {
var haCfg, networkCfg, neutronCfg;
var networkCfg, neutronCfg;
networkCfg = configureNetworkCfg();
neutronCfg = configureNeutronCfg();
haCfg = configureHAProxyCfg();
return wizardService.networkMappingCommit($scope, networkCfg, $scope.networkMapping, neutronCfg, haCfg, sendRequest);
saveCfg();
return wizardService.networkMappingCommit($scope, networkCfg, $scope.networkMapping, neutronCfg, sendRequest);
};
}
]).controller('reviewCtrl', [
@ -574,7 +631,10 @@
$scope.commit = function(sendRequest) {
return wizardService.reviewCommit($scope, sendRequest);
};
return wizardService.displayDataInTable($scope, $scope.servers);
wizardService.displayDataInTable($scope, $scope.servers);
return $scope.reload = function() {
return wizardService.displayDataInTable($scope, $scope.servers);
};
}
]).animation('.fade-animation', [
function() {

View File

@ -1 +1 @@
<div class="page-header"><h1>Network</h1></div><div class="row side-padding-10 padding-top-30"><div class="col-xs-12"><table class="table table-striped"><thead><tr><th>Network</th><th>Interface</th></tr></thead><tbody><tr ng-repeat="(key, value) in configuration.package_config.network_mapping"><td class="capitalize">{{key}} Network</td><td>{{value}}</td></tr></tbody></table></div></div>
<div class="page-header"><h1>Network</h1></div><div class="row side-padding-10 padding-top-30"><div class="col-xs-12"><div class="widget-header widget-header-flat review-targetconfig"><h5 class="widget-title white">OS Installation Network</h5></div><table class="table table-striped table-border-grey"><tbody><tr ng-repeat="(key, value) in configuration.package_config['network_mapping'].install"><td>{{key}}</td><td>{{value}}</td></tr></tbody></table><br><br><div class="widget-header widget-header-flat review-targetconfig"><h5 class="widget-title white">IP Settings</h5></div><table class="table table-striped table-border-grey"><thead><tr><th>Name</th><th>CIDR</th><th>IP Range</th><th>Role</th></tr></thead><tbody><tr ng-repeat="ip in configuration.package_config['network_cfg']['ip_settings']"><td>{{ip.name}}</td><td>{{ip.cidr}}</td><td>{{ip.ip_ranges[0].join(' --- ')}}</td><td>{{ip.role.join(', ')}}</td></tr></tbody></table><br><br><div class="widget-header widget-header-flat review-targetconfig"><h5 class="widget-title white">sys_intf_mappings</h5></div><table class="table table-striped table-border-grey"><thead><tr><th>Name</th><th>Interface</th><th>Type</th><th>Role</th></tr></thead><tbody><tr ng-repeat="ip in configuration.package_config['network_cfg']['sys_intf_mappings']"><td>{{ip.name}}</td><td>{{ip.interface}}</td><td>{{ip.type}} {{ip.vlan_tag}}</td><td>{{ip.role.join(', ')}}</td></tr></tbody></table><br><br><div class="widget-header widget-header-flat review-targetconfig"><h5 class="widget-title white">Virtual IPs</h5></div><table class="table table-striped table-border-grey"><thead><tr><th>Type</th><th>Interface</th><th>IP</th><th>Netmask</th></tr></thead><tbody><tr><td>Interal</td><td>{{configuration.package_config['network_cfg']['internal_vip'].interface}}</td><td>{{configuration.package_config['network_cfg']['internal_vip'].ip}}</td><td>{{configuration.package_config['network_cfg']['internal_vip'].netmask}}</td></tr><tr><td>Public</td><td>{{configuration.package_config['network_cfg']['public_vip'].interface}}</td><td>{{configuration.package_config['network_cfg']['public_vip'].ip}}</td><td>{{configuration.package_config['network_cfg']['public_vip'].netmask}}</td></tr></tbody></table><br><br><div class="widget-header widget-header-flat review-targetconfig"><h5 class="widget-title white">Network Mapping</h5></div><table class="table table-striped table-border-grey"><tbody><tr><td class="table-review-padding"><strong>provider_net_mappings</strong></td><td></td></tr><tr ng-repeat="(key, value) in configuration.package_config['network_cfg'].provider_net_mappings[0]"><td class="capitalize"><div>{{key}}</div></td><td>{{value}}</td></tr></tbody></table><table class="table table-striped table-border-grey"><tbody><tr><td class="table-review-padding"><strong>public_net_info</strong></td><td></td></tr><tr ng-repeat="(key, value) in configuration.package_config['network_cfg'].public_net_info"><td class="capitalize"><div>{{key}}</div></td><td>{{value}}</td></tr></tbody></table><br><br><div class="widget-header widget-header-flat review-targetconfig"><h5 class="widget-title white">Target System Configurations - NeutronConfig</h5></div><table class="table table-striped table-border-grey"><tbody><tr><td>tenent_network_type</td><td>{{configuration.package_config.neutron_config.openvswitch.tenant_network_type}}</td></tr><tr ng-if="configuration.package_config.neutron_config.openvswitch.tenant_network_type=='vxlan'" ng-repeat="(key, value) in configuration.package_config.neutron_config.openvswitch.network_vlan_ranges"><td>network_vlan_ranges_{{key}}</td><td>{{value}}</td></tr><tr ng-if="configuration.package_config.neutron_config.openvswitch.tenant_network_type=='vxlan'" ng-repeat="(key, value) in configuration.package_config.neutron_config.openvswitch.bridge_mappings"><td>bridge_mappins_{{key}}</td><td>{{value}}</td></tr></tbody></table></div></div>

View File

@ -1,3 +1,3 @@
<div ng-controller="networkCtrl"><div class="row"><div collapse="autoFillPanel.isCollapsed" class="dashed-panel" style="height: auto; background-color: rgba(224, 226, 227, 0.25)"><span class="action pull-right" ng-click="autoFillPanel.isCollapsed = true;"><i class="ace-icon fa fa-times-circle bigger-120 networkDeleteButton"></i></span><div class="clearfix"></div><div class="row"><div class="col-sm-12"><h4>Autofill IP Address for Each Interface <button class="btn btn-sm btn-info pull-right" ng-click="openAddSubnetModal()">Add Subnet</button> <button class="btn btn-sm btn-info pull-right" ng-model="autoFill" style="margin-right:15px" ng-click="autoFillManage()">{{autoFillButtonDisplay}}</button></h4><table class="table table-hover nowrap"><thead><tr><th>Action</th><th>Interface</th><th>Is OS Install Network</th><th>Promisc Mode</th><th>Subnet</th><th ng-if="autoFill">Autofill Rules</th></tr></thead><tbody><tr><td><span ng-click="addInterface(newInterface)" class="action"><i class="fa fa-plus-circle bigger-140 blue"></i></span></td><td><input class="input-small" type="text" ng-model="newInterface.name" placeholder="Interface" required></td><td></td><td></td></tr><tr ng-repeat="(interface_name, value) in interfaces track by $index"><td><span class="action" ng-click="deleteInterface(interface_name)"><i class="fa fa-minus-circle bigger-140 blue"></i></span></td><td>{{interface_name}}</td><td><label><input ng-model="value.is_mgmt" type="checkbox" class="ace" name="is-mgmt" ng-click="selectAsInstallInterface($event, interface_name)"> <span class="lbl"></span></label></td><td><label><input ng-model="value.is_promiscuous" type="checkbox" class="ace" name="promisc"> <span class="lbl"></span></label></td><td><select ng-model="value.subnet_id" class="max-width-200" ng-show="value.is_mgmt"><option ng-repeat="sub in subnetworks" value="{{sub.id}}" ng-selected="sub.id == value.subnet_id">{{sub.subnet}}</option></select></td><td ng-if="autoFill"><span ng-show="value.is_mgmt"><input id="{{interface_name}}-ipstart" type="text" ng-model="sub.autoInput" class="input-medium" placeholder="IP Start"><select id="{{interface_name}}-increase-num"><option value="1">Increase by 1</option><option value="2">Increase by 2</option><option value="3">Increase by 3</option><option value="4">Increase by 4</option><option value="5">Increase by 5</option></select></span></td></tr><tr style="border:none"><td></td><td></td><td></td><td></td><td></td><td ng-if="autoFill"><h4>Autofill Hostname</h4><select id="hostname-rule" class="input-large"><option value="" selected="selected">Please select a pattern</option><option value="host">Host</option><option value="switch_ip">Switch IP</option></select><button ng-click="autofill(3000)" class="btn btn-sm btn-primary">Fill Values</button></td></tr></tbody></table><div class="space-10"></div></div></div><div class="space-10"></div></div></div><div class="row"><div class="pull-left"><span class="input-icon"><input type="text" placeholder="Search" ng-model="search.$"> <i class="ace-icon fa fa-search blue"></i></span><div class="btn-group" dropdown><button type="button" class="btn btn-default dropdown-toggle" style="border-radius:7px !important" dropdown-toggle ng-disabled="disabled">Column Show / Hide <span class="ace-icon fa fa-caret-down icon-on-right"></span></button><ul class="dropdown-menu" role="menu" dropdown><li ng-repeat="column in server_columns" ng-click="column.visible=!column.visible"><a class="action"><span ng-class="{'opacity-zero': !column.visible}"><i class="ace-icon fa fa-check blue"></i></span> {{column.title}}</a></li></ul></div></div><div class="pull-right"><button class="btn btn-sm btn-info" ng-init="autoFillPanel.isCollapsed = true;" ng-click="autoFillPanel.isCollapsed = !autoFillPanel.isCollapsed">Set Subnet&nbsp;&nbsp; <span class="text-danger"><i class="ace-icon fa fa-plus" ng-class="{'fa-minus': !autoFillPanel.isCollapsed}"></i></span></button></div></div><alert ng-repeat="alert in networkAlerts" class="autofill-success fade-animation" type="success">{{alert.msg}}</alert><div class="row"><div class="space-6"></div><table ng-table="tableParams" class="table table-hover table-striped"><thead><tr><th ng-repeat="column in server_columns" ng-show="column.visible" class="sortable" ng-class="{'sort-asc': tableParams.isSortBy(column.field, 'asc'),
<div ng-controller="networkCtrl"><div class="row"><div class="alert alert-info"><span>Please provide 3 subnets.</span><br><span>Check one as OS install network and use Autofill to assign ips. This is used to install OS.</span><br><span>The other 2 subnets are used in the next step to configure openstack network.</span></div></div><div class="space-10"></div><div class="row"><div collapse="autoFillPanel.isCollapsed" class="dashed-panel" style="height: auto; background-color: rgba(224, 226, 227, 0.25)"><span class="action pull-right" ng-click="autoFillPanel.isCollapsed = true;"><i class="ace-icon fa fa-times-circle bigger-120 networkDeleteButton"></i></span><div class="clearfix"></div><div class="row"><div class="col-sm-12"><h4>Autofill IP Address for All Interfaces <button class="btn btn-sm btn-success pull-right" ng-click="openAddSubnetModal()">Add Subnet</button> <button class="btn btn-sm btn-info pull-right" ng-model="autoFill" style="margin-right:15px" ng-click="autoFillManage()">{{autoFillButtonDisplay}}</button></h4><table class="table table-hover nowrap"><thead><tr><th>Action</th><th>Interface</th><th>Is OS Install Network</th><th>Promisc Mode</th><th>Subnet</th><th ng-if="autoFill">Autofill Rules</th></tr></thead><tbody><tr><td><span ng-click="addInterface(newInterface)" class="action"><i class="fa fa-plus-circle bigger-140 blue"></i></span></td><td><input class="input-small" type="text" ng-model="newInterface.name" placeholder="Interface" required></td><td></td><td></td></tr><tr ng-repeat="(interface_name, value) in interfaces track by $index"><td><span class="action" ng-click="deleteInterface(interface_name)"><i class="fa fa-minus-circle bigger-140 blue"></i></span></td><td>{{interface_name}}</td><td><label><input ng-model="value.is_mgmt" type="checkbox" class="ace" name="is-mgmt" ng-click="selectAsInstallInterface($event, interface_name)"> <span class="lbl"></span></label></td><td><label><input ng-model="value.is_promiscuous" type="checkbox" class="ace" name="promisc"> <span class="lbl"></span></label></td><td><select ng-model="value.subnet_id" class="max-width-200"><option ng-repeat="sub in subnetworks" value="{{sub.id}}" ng-selected="sub.id == value.subnet_id">{{sub.subnet}}</option></select></td><td ng-if="autoFill"><span ng-show="value.is_mgmt"><input id="{{interface_name}}-ipstart" type="text" ng-model="sub.autoInput" class="input-medium" placeholder="IP Start"><select id="{{interface_name}}-increase-num"><option value="1">Increase by 1</option><option value="2">Increase by 2</option><option value="3">Increase by 3</option><option value="4">Increase by 4</option><option value="5">Increase by 5</option></select></span></td></tr><tr style="border:none"><td></td><td></td><td></td><td></td><td></td><td ng-if="autoFill"><h4>Autofill Hostname</h4><select id="hostname-rule" class="input-large"><option value="" selected="selected">Please select a pattern</option><option value="host">Host</option><option value="switch_ip">Switch IP</option></select><button ng-click="autofill(3000)" class="btn btn-sm btn-primary">Fill Values</button></td></tr></tbody></table><div class="space-10"></div></div></div><div class="space-10"></div></div></div><div class="row"><div class="pull-left"><span class="input-icon"><input type="text" placeholder="Search" ng-model="search.$"> <i class="ace-icon fa fa-search blue"></i></span><div class="btn-group" dropdown><button type="button" class="btn btn-default dropdown-toggle" style="border-radius:7px !important" dropdown-toggle ng-disabled="disabled">Column Show / Hide <span class="ace-icon fa fa-caret-down icon-on-right"></span></button><ul class="dropdown-menu" role="menu" dropdown><li ng-repeat="column in server_columns" ng-click="column.visible=!column.visible"><a class="action"><span ng-class="{'opacity-zero': !column.visible}"><i class="ace-icon fa fa-check blue"></i></span> {{column.title}}</a></li></ul></div></div><div class="pull-right"><button class="btn btn-sm btn-info" ng-init="autoFillPanel.isCollapsed = true;" ng-click="autoFillPanel.isCollapsed = !autoFillPanel.isCollapsed">Set Subnet&nbsp;&nbsp; <span class="text-danger"><i class="ace-icon fa fa-plus" ng-class="{'fa-minus': !autoFillPanel.isCollapsed}"></i></span></button></div></div><alert ng-repeat="alert in networkAlerts" class="autofill-success fade-animation" type="success">{{alert.msg}}</alert><div class="row"><div class="space-6"></div><table ng-table="tableParams" class="table table-hover table-striped"><thead><tr><th ng-repeat="column in server_columns" ng-show="column.visible" class="sortable" ng-class="{'sort-asc': tableParams.isSortBy(column.field, 'asc'),
'sort-desc': tableParams.isSortBy(column.field, 'desc')}" ng-click="tableParams.sorting(column.field, tableParams.isSortBy(column.field, 'asc') ? 'desc' : 'asc')"><div>{{column.title}}</div></th><th class="networkDeleteView" ng-repeat="(name, value) in interfaces" ng-show="value.is_mgmt" ng-mouseover="deleteView=true" ng-mouseleave="deleteView=false">{{name}} <span ng-click="deleteInterface(name)" class="action"><i ng-class="{'networkDeleteButton': deleteView}" class="ace-icon fa fa-times-circle bigger-120 light-grey"></i></span></th></tr></thead><tbody><tr ng-repeat="server in $data | filter: search" ng-init="total=$data.length;serverIndex = $index; server.networks = server.networks === undefinded? {} : server.networks"><td class="center-align" ng-repeat="column in server_columns" ng-show="column.visible" sortable="column.field"><span ng-switch on="column.field"><span ng-switch-when="hostname"><input ng-model="server[column.field]" placeholder="Hostname" class="form-control max-width-150 margin-bottom-0" type="text" ng-keypress data-position="position_{{serverIndex}}"></span> <span ng-switch-when="os_installed"><span ng-if="server['os']"><label><input ng-model="server.reinstallos" type="checkbox" class="ace"> <span class="lbl"></span></label></span> <span ng-if="!server['os']">-</span></span> <span ng-switch-when="clusters"><span ng-repeat="cluster in server.clusters">{{cluster.name}}&nbsp;</span></span> <span ng-switch-default>{{server[column.field]}}</span></span></td><td class="eth-width" ng-repeat="(name, value) in interfaces" ng-show="value.is_mgmt" ng-init="server.networks[name] = server.networks[name] === undefinded ? {} :
server.networks[name];interfaceIndex=$index"><input ng-model="server.networks[name].ip" placeholder="IP Address" class="form-control max-width-150 margin-bottom-0" type="text" ng-keypress data-position="position_{{total*(interfaceIndex+1)+serverIndex}}"></td></tr></tbody></table></div></div>

View File

@ -1,4 +1,4 @@
<div ng-controller="networkMappingCtrl"><div class="row"><div class="panel" style="height: auto; background-color: rgba(224, 226, 227, 0.25)"><div class="row"><div class="col-sm-12"><h4>Allocate IP Address for Each Network Interface</h4><table class="table table-hover nowrap"><thead><tr><th>Network</th><th>NIC</th><th>CIDR</th><th>Start IP</th><th>End IP</th><th>Vlan Configuration</th></tr></thead><tbody><tr ng-repeat="(network_key, network_value) in nics"><td><span class="external-event margin-right-5 fade-animation" ng-class="{
<div ng-controller="networkMappingCtrl"><div class="row"><div class="panel" style="height: auto; padding: 10px; margin-top: -30px"><div class="row"><div class="col-sm-12"><div class="alert alert-info"><span>Bind openstack management and storage network to a physical inteface.</span><br><span>Two virtual networks will be created on the NIC based on the configurations.</span><br><span>Just choose network interface. Use the default values for the remaining configurations.</span></div></div></div><div class="row"><div class="col-sm-12"><h4>Internal Network Interface</h4><table class="table table-hover nowrap"><thead><tr><th>Network</th><th>NIC</th><th>CIDR</th><th>Start IP</th><th>End IP</th><th>Vlan Configuration</th></tr></thead><tbody><tr ng-repeat="(network_key, network_value) in internal"><td><span class="external-event margin-right-5 fade-animation" ng-class="{
'label-success': network_key == 'mgmt',
'label-purple': network_key == 'external',
'label-warning': network_key == 'storage'}"><span class="capitalize">{{network_key}}</span></span></td><td><select class="max-width-200" ng-model="nics[network_key]"><option ng-repeat="(name, interface) in $root.networkMappingInterfaces" value="{{name}}">{{name}}</option></select></td><td><input id="{{name}}-cidr" type="text" class="input-medium" ng-model="ips[network_key].cidr" placeholder="CIDR"></td><td><input id="{{name}}-ipstart" type="text" class="input-medium" ng-model="ips[network_key].start" placeholder="IP Start"></td><td><input id="{{name}}-ipend" type="text" class="input-medium" ng-model="ips[network_key].end" placeholder="IP End"></td><td><span ng-show="network_key == 'external'"><span class="label-primary" style="color: #fff">Public Virtual IP</span> <input id="external_gw" type="text" class="input-medium" ng-model="ips.external.public_vip" placeholder="Public Virtual IP"></span> <span ng-show="network_key == 'external'"><span class="label-info" style="color: #fff">Gateway IP</span> <input id="external_gw" type="text" class="input-medium" ng-model="ips.external.gw_ip" placeholder="External Gateway IP"></span> <span ng-show="network_key == 'mgmt'"><span class="label-primary" style="color: #fff">Internal Virtual IP</span> <input id="interal_vip" type="text" class="input-medium" ng-model="ips.mgmt.internal_vip" placeholder="Internal Virtual IP"></span> <span ng-show="network_key == 'storage' || network_key == 'mgmt'"><span class="label-yellow" style="color: #fff">Vlan Tag</span> <input id="{{name}}-vlan-tag" type="text" class="input-small" ng-model="vlanTags[network_key]" placeholder="Vlan tag"></span></td></tr></tbody></table><div class="space-10"></div></div><div class="col-sm-12"><h4>HA Proxy</h4><table class="table table-hover nowrap"><thead><tr><td>Network</td><td>NIC</td><td>IP Address</td></tr></thead><tbody><tr><td><span class="external-event margin-right-5 fade-animation label-info"><span class="capitalize">install</span></span></td><td>{{networkMapping.install.interface}}</td><td><input id="ha_proxy_vip" type="text" class="input-medium" ng-model="ips.ha_proxy.vip" placeholder="HA Proxy IP"></td></tr></tbody></table></div></div></div></div></div>
'label-warning': network_key == 'storage'}"><span class="capitalize">{{network_key}}</span></span></td><td><select class="max-width-200" ng-model="internal[network_key]"><option ng-repeat="(name, interface) in $root.networkMappingInterfaces" ng-hide="interface.is_mgmt" value="{{name}}" ng-selected="internal[network_key] == name">{{name}}</option></select></td><td><input id="{{name}}-cidr" type="text" class="input-medium" ng-model="ips[network_key].cidr" placeholder="CIDR" ng-change="updateInternalNetwork(network_key)"></td><td><input id="{{name}}-ipstart" type="text" class="input-medium" ng-model="ips[network_key].start" placeholder="IP Start"></td><td><input id="{{name}}-ipend" type="text" class="input-medium" ng-model="ips[network_key].end" placeholder="IP End"></td><td><span class="label-yellow" style="color: #fff">Vlan Tag</span> <input id="{{name}}-vlan-tag" type="text" class="input-small" ng-model="vlanTags[network_key]" placeholder="Vlan tag"></td></tr></tbody></table><div class="space-10"></div><div class="row"><div class="col-sm-12"><span style="margin-right: 10px">Management Network Virtual IP</span> <input id="interal_vip" type="text" class="input-medium" ng-model="ips.mgmt.internal_vip" placeholder="Internal Virtual IP"></div></div></div></div></div><div class="panel" style="height: auto; padding: 10px"><div class="row"><div class="col-sm-12"><div class="alert alert-info"><span>The external network interface need to connect to Internet.</span><br><span>Set external virtual ip for HA mode</span></div></div></div><div class="row"><div class="col-sm-12"><h4>External Network Interface</h4><table class="table table-hover nowrap"><thead><tr><th>Network</th><th>NIC</th><th>CIDR</th><th>Start IP</th><th>End IP</th><th>Gateway IP</th></tr></thead><tbody><tr ng-repeat="(network_key, network_value) in external"><td><span class="external-event margin-right-5 fade-animation" ng-class="{
'label-purple': network_key == 'external'}"><span class="capitalize">{{network_key}}</span></span></td><td><select class="max-width-200" ng-model="external[network_key]" ng-change="updateExternalNetwork(network_key)"><option ng-repeat="(name, interface) in $root.networkMappingInterfaces" ng-hide="interface.is_mgmt" value="{{name}}" ng-selected="external[network_key] == name">{{name}}</option></select></td><td><input id="{{name}}-cidr" type="text" class="input-medium" ng-model="ips[network_key].cidr" placeholder="CIDR"></td><td><input id="{{name}}-ipstart" type="text" class="input-medium" ng-model="ips[network_key].start" placeholder="IP Start"></td><td><input id="{{name}}-ipend" type="text" class="input-medium" ng-model="ips[network_key].end" placeholder="IP End"></td><td><input id="external_gw" type="text" class="input-medium" ng-model="ips.external.gw_ip" placeholder="External Gateway IP"></td></tr></tbody></table><div class="space-10"></div><div class="row"><div class="col-sm-12"><span style="margin-right: 10px">External Network Virtual IP</span> <input id="external_gw" type="text" class="input-medium" ng-model="ips.external.public_vip" placeholder="External Virtual IP for HA"></div></div></div></div></div></div></div>

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
<div ng-controller="roleAssignCtrl"><div class="row"><div collapse="autoAssignRoles.isCollapsed" class="dashed-panel" style="background-color: rgba(224, 226, 227, 0.25)"><span class="action pull-right" ng-click="autoAssignRoles.isCollapsed = true;"><i class="ace-icon fa fa-times-circle bigger-120 light-grey"></i></span><div class="clearfix"></div><div class="row"><div class="col-xs-12"><form name="autoAssignForm" role="form" class="form-horizontal"><div ng-repeat="role in roles" class="form-group"><label class="col-sm-4 control-label no-padding-right capitalize">{{role.display_name}}</label><div class="col-sm-8" ng-init="role.count=1"><input type="number" min="0" class="col-xs-10 col-sm-5" ng-model="role.count" placeholder="Count"></div></div><div class="col-md-offset-4 col-md-8" style="margin-left: 33%"><span>Total Hosts: {{servers.length}} | Total Roles: {{rolesTotalCount}}</span> <button style="margin-left: 18px" type="button" class="btn btn-sm btn-info" ng-click="autoAssignRoles()" ng-disabled="autoAssignForm.$invalid">Assign</button></div></form></div></div></div></div><div class="row"><div class="pull-left table-col"><div><div class="pull-left"><span class="input-icon"><input type="text" placeholder="Search" ng-model="search.$"> <i class="ace-icon fa fa-search blue"></i></span><div class="btn-group" dropdown is-open="status.isopen"><button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle ng-disabled="disabled">Column Show / Hide <span class="ace-icon fa fa-caret-down icon-on-right"></span></button><ul class="dropdown-menu" role="menu"><li ng-repeat="column in server_columns" ng-click="column.visible=!column.visible"><a class="action"><span ng-class="{'opacity-zero': !column.visible}"><i class="ace-icon fa fa-check blue"></i></span> {{column.title}}</a></li></ul></div></div><div class="pull-right"><span style="display: none"><input type="text" placeholder="HA VIP" ng-model="ha_vip"></span> <button class="btn btn-sm btn-info" ng-init="autoAssignRoles.isCollapsed = true;" ng-click="autoAssignRoles.isCollapsed = !autoAssignRoles.isCollapsed">Auto Assign&nbsp; <i class="ace-icon fa fa-plus" ng-class="{'fa-minus': !autoAssignRoles.isCollapsed}"></i></button><div class="btn-group" dropdown><button type="button" style="border-bottom-width: 3px; border-top-width: 3px" class="btn btn-sm btn-info dropdown-toggle" dropdown-toggle ng-disabled="disabled">Manually Assign&nbsp; <span class="ace-icon fa fa-caret-down icon-on-right"></span></button><ul class="dropdown-menu dropdown-info dropdown-menu-right" role="menu"><li ng-repeat="role in roles"><a class="action" ng-click="assignRole(role)">{{role.display_name}}</a></li></ul></div></div></div><div class="clearfix"></div><div class="space-6"></div><table ng-table="tableParams" class="table table-hover table-striped"><thead><tr><th><label><input ng-model="selectall" ng-change="selectAllServers(selectall)" type="checkbox" class="ace"> <span class="lbl"></span></label></th><th ng-repeat="column in server_columns" ng-show="column.visible" class="sortable" ng-class="{'sort-asc': tableParams.isSortBy(column.field, 'asc'),
<div ng-controller="roleAssignCtrl"><div class="row" ng-init="autoAssignRoles.isCollapsed = true;"><div collapse="autoAssignRoles.isCollapsed" class="dashed-panel" style="background-color: rgba(224, 226, 227, 0.25)"><span class="action pull-right" ng-click="autoAssignRoles.isCollapsed = true;"><i class="ace-icon fa fa-times-circle bigger-120 light-grey"></i></span><div class="clearfix"></div><div class="row"><div class="col-xs-12"><form name="autoAssignForm" role="form" class="form-horizontal"><div ng-repeat="role in roles" class="form-group"><label class="col-sm-4 control-label no-padding-right capitalize">{{role.display_name}}</label><div class="col-sm-8" ng-init="role.count=1"><input type="number" min="0" class="col-xs-10 col-sm-5" ng-model="role.count" placeholder="Count"></div></div><div class="col-md-offset-4 col-md-8" style="margin-left: 33%"><span>Total Hosts: {{servers.length}} | Total Roles: {{rolesTotalCount}}</span> <button style="margin-left: 18px" type="button" class="btn btn-sm btn-info" ng-click="autoAssignRoles()" ng-disabled="autoAssignForm.$invalid">Assign</button></div></form></div></div></div></div><div class="row"><div class="pull-left table-col"><div><div class="pull-left"><span class="input-icon"><input type="text" placeholder="Search" ng-model="search.$"> <i class="ace-icon fa fa-search blue"></i></span><div class="btn-group" dropdown is-open="status.isopen"><button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle ng-disabled="disabled">Column Show / Hide <span class="ace-icon fa fa-caret-down icon-on-right"></span></button><ul class="dropdown-menu" role="menu"><li ng-repeat="column in server_columns" ng-click="column.visible=!column.visible"><a class="action"><span ng-class="{'opacity-zero': !column.visible}"><i class="ace-icon fa fa-check blue"></i></span> {{column.title}}</a></li></ul></div></div><div class="pull-right"><span style="display: none"><input type="text" placeholder="HA VIP" ng-model="ha_vip"></span> <button class="btn btn-sm btn-success" ng-click="haMultipleNodeAssignRoles()" ng-show="servers.length > 4">HA 3+N Mode Assign&nbsp; <i class="ace-icon fa fa-plus"></i></button><div class="btn-group" dropdown><button type="button" style="border-bottom-width: 3px; border-top-width: 3px" class="btn btn-sm btn-info dropdown-toggle" dropdown-toggle ng-disabled="disabled">Manually Assign&nbsp; <span class="ace-icon fa fa-caret-down icon-on-right"></span></button><ul class="dropdown-menu dropdown-info dropdown-menu-right" role="menu"><li ng-repeat="role in roles"><a class="action" ng-click="assignRole(role)">{{role.display_name}}</a></li></ul></div></div></div><div class="clearfix"></div><div class="space-6"></div><table ng-table="tableParams" class="table table-hover table-striped"><thead><tr><th><label><input ng-model="selectall" ng-change="selectAllServers(selectall)" type="checkbox" class="ace"> <span class="lbl"></span></label></th><th ng-repeat="column in server_columns" ng-show="column.visible" class="sortable" ng-class="{'sort-asc': tableParams.isSortBy(column.field, 'asc'),
'sort-desc': tableParams.isSortBy(column.field, 'desc')}" ng-click="tableParams.sorting(column.field, tableParams.isSortBy(column.field, 'asc') ? 'desc' : 'asc')"><div>{{column.title}}</div></th><th>Roles</th></tr></thead><tbody><tr ng-repeat="server in $data | filter: search" ng-init="server.roles = server.roles === undefinded? [] : server.roles" ng-class="{'hightlight': server.checked}"><td><label><input ng-model="server.checked" type="checkbox" class="ace"> <span class="lbl"></span></label></td><td ng-repeat="column in server_columns" ng-show="column.visible" sortable="column.field"><span ng-switch on="column.field"><span ng-switch-when="os_installed"><span ng-if="server['os']"><label><input ng-model="server.reinstallos" type="checkbox" class="ace"> <span class="lbl"></span></label></span> <span ng-if="!server['os']">-</span></span> <span ng-switch-when="clusters"><span ng-repeat="cluster in server.clusters">{{cluster.name}}&nbsp;</span></span> <span ng-switch-default>{{server[column.field]}}</span></span></td><td><div class="role-assign-drop" ui-on-drop="onDrop($event, server)" drag-hover-class="drag-enter-role" drop-channel="{{server.dropChannel}}"><span ng-repeat="role in server['roles']" class="role-tag border-radius-4" ng-style="{'background-color': role.color}" tooltip="{{role.display_name}}"><span class="pull-left">{{role.display_name | limitTo : 15}}</span> <span class="pull-right close" ng-click="removeRole(server, role)"><i class="ace-icon fa fa-times white"></i></span></span></div></td></tr></tbody></table></div><div class="pull-left role-col"><div id="sticky-anchor"></div><div class="row role-panel" rolepanelscroll><div class="blue"><h4>Drag to Assign</h4></div><div class="role-assign-drag"><div tooltip-placement="left" tooltip="{{role_value.display_name}}" tooltip-popup-delay="100" ui-draggable="true" on-drop-success="dropSuccessHandler($event,role_value,role_key)" class="role-tag drag-roles ui-draggable" ng-repeat="(role_key, role_value) in roles" ng-style="{'background-color': role_value.color}" drag-channel="{{role_value.dragChannel}}"><i class="ace-icon fa fa-arrows margin-left-neg4"></i> <span>{{role_value.display_name}}</span></div></div></div></div><div class="clearfix"></div></div></div>

View File

@ -1325,7 +1325,7 @@
});
};
WizardService.prototype.networkMappingCommit = function($scope, networkCfg, networkMapping, neutronCfg, haCfg, sendRequest) {
WizardService.prototype.networkMappingCommit = function($scope, networkCfg, networkMapping, neutronCfg, sendRequest) {
var key, network_mapping, networks, value, wizardFactory, _ref;
wizardFactory = this.wizardFactory;
if (!sendRequest) {
@ -1347,7 +1347,6 @@
"network_cfg": networkCfg,
"network_mapping": networkMapping,
"neutron_config": neutronCfg,
"ha_proxy": haCfg,
"enable_vpnaas": "False",
"enable_fwaas": "False",
"enable_secgroup": "False"
@ -1355,6 +1354,7 @@
};
return this.dataService.updateClusterConfig($scope.cluster.id, network_mapping).success(function(data) {
wizardFactory.setNetworkMapping(networks);
wizardFactory.setPackageConfig(network_mapping.package_config);
return wizardFactory.setCommitState({
"name": "network_mapping",
"state": "success",