Add support for network_interface attribute

For the nework_interface attribute the user can:
- select a value for network_interface as part of enrolling a node
- update its value as part of editing a node,
- see its value in the node-details/overview page

Change-Id: I6bdbd9e6596de3f7da3bbcf75b511e5bc54b781a
Closes-Bug: #1648566
This commit is contained in:
Peter Piela 2017-02-11 09:24:54 -05:00 committed by Julia Kreger
parent d6e5ab2ecb
commit d97d4b4fa2
5 changed files with 50 additions and 26 deletions

View File

@ -24,7 +24,7 @@ from horizon.utils.memoized import memoized # noqa
from openstack_dashboard.api import base from openstack_dashboard.api import base
DEFAULT_IRONIC_API_VERSION = '1.19' DEFAULT_IRONIC_API_VERSION = '1.20'
DEFAULT_INSECURE = False DEFAULT_INSECURE = False
DEFAULT_CACERT = None DEFAULT_CACERT = None
@ -141,14 +141,8 @@ def node_create(request, params):
""" """
node_manager = ironicclient(request).node node_manager = ironicclient(request).node
node = node_manager.create(**params) node = node_manager.create(**params)
field_list = ['chassis_uuid', return dict([(f, getattr(node, f, ''))
'driver', for f in res_fields.NODE_DETAILED_RESOURCE.fields])
'driver_info',
'properties',
'extra',
'uuid',
'name']
return dict([(f, getattr(node, f, '')) for f in field_list])
def node_delete(request, node_id): def node_delete(request, node_id):
@ -173,7 +167,9 @@ def node_update(request, node_id, patch):
http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.update http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.update
""" """
ironicclient(request).node.update(node_id, patch) node = ironicclient(request).node.update(node_id, patch)
return dict([(f, getattr(node, f, ''))
for f in res_fields.NODE_DETAILED_RESOURCE.fields])
def node_validate(request, node_id): def node_validate(request, node_id):

View File

@ -76,7 +76,8 @@
driver: null, driver: null,
driver_info: {}, driver_info: {},
properties: {}, properties: {},
extra: {} extra: {},
network_interface: null
}; };
/** /**

View File

@ -53,6 +53,29 @@
placeholder="{$ ::'A unique node name. Optional.' | translate $}"/> placeholder="{$ ::'A unique node name. Optional.' | translate $}"/>
</div> </div>
</div> </div>
<!--network interface-->
<div class="form-group">
<label for="network_interface"
class="control-label"
translate>
Network Interface
<span class="help-icon"
data-container="body"
title=""
data-toggle="tooltip"
data-original-title="{$ ::'Network interface used for switching between provisioning, tenant, and cleaning networks.' | translate $}">
<span class="fa fa-question-circle"></span>
</span>
</label>
<div>
<div class="btn-group">
<label class="btn btn-default"
ng-repeat="opt in ['noop', 'flat', 'neutron']"
ng-model="ctrl.node.network_interface"
uib-btn-radio="opt">{$ opt $}</label>
</div>
</div>
</div>
<!--node driver--> <!--node driver-->
<div class="form-group required"> <div class="form-group required">
<label for="driver" <label for="driver"

View File

@ -78,6 +78,7 @@
ctrl.baseNode = node; ctrl.baseNode = node;
ctrl.node.name = node.name; ctrl.node.name = node.name;
ctrl.node.network_interface = node.network_interface;
for (var i = 0; i < ctrl.drivers.length; i++) { for (var i = 0; i < ctrl.drivers.length; i++) {
if (ctrl.drivers[i].name === node.driver) { if (ctrl.drivers[i].name === node.driver) {
ctrl.selectedDriver = ctrl.drivers[i]; ctrl.selectedDriver = ctrl.drivers[i];
@ -110,21 +111,22 @@
*/ */
function buildPatch(sourceNode, targetNode) { function buildPatch(sourceNode, targetNode) {
var patcher = new updatePatchService.UpdatePatch(); var patcher = new updatePatchService.UpdatePatch();
var PatchItem = function PatchItem(id, path) {
patcher.buildPatch(sourceNode.name, targetNode.name, "/name"); this.id = id;
patcher.buildPatch(sourceNode.driver, targetNode.driver, "/driver"); this.path = path;
patcher.buildPatch(sourceNode.properties, };
targetNode.properties, angular.forEach([new PatchItem("name", "/name"),
"/properties"); new PatchItem("network_interface", "/network_interface"),
patcher.buildPatch(sourceNode.extra, new PatchItem("driver", "/driver"),
targetNode.extra, new PatchItem("properties", "/properties"),
"/extra"); new PatchItem("extra", "/extra"),
patcher.buildPatch(sourceNode.driver_info, new PatchItem("driver_info", "/driver_info"),
targetNode.driver_info, new PatchItem("instance_info", "/instance_info")],
"/driver_info"); function(item) {
patcher.buildPatch(sourceNode.instance_info, patcher.buildPatch(sourceNode[item.id],
targetNode.instance_info, targetNode[item.id],
"/instance_info"); item.path);
});
return patcher.getPatch(); return patcher.getPatch();
} }

View File

@ -7,6 +7,8 @@
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt translate>Name</dt> <dt translate>Name</dt>
<dd>{$ ctrl.node.name | noValue $}</dd> <dd>{$ ctrl.node.name | noValue $}</dd>
<dt translate>Network Interface</dt>
<dd>{$ ctrl.node.network_interface $}</dd>
<dt translate>Maintenance</dt> <dt translate>Maintenance</dt>
<dd>{$ ctrl.node.maintenance | yesno $}</dd> <dd>{$ ctrl.node.maintenance | yesno $}</dd>
<dt translate>Maintenance Reason</dt> <dt translate>Maintenance Reason</dt>