ironic-ui/ironic_ui/static/dashboard/admin/ironic/node-details/sections/configuration.html
Peter Piela 0c4c948324 Add support for editing Ironic network ports
The port table in node-detais/configuration tab has been updated to
include an "Edit port" action for each port.

Closes-Bug: #1648563
Change-Id: I04ec8904dc67f98ff9f0d94a7fa46618cfba956c
2017-02-06 09:28:51 -05:00

284 lines
10 KiB
HTML

<div class="row">
<!-- General -->
<div class="col-md-6 status detail">
<h4 translate>General</h4>
<hr class="header_rule">
<dl class="dl-horizontal">
<dt translate>Node ID</dt>
<dd>{$ ctrl.node.uuid | noValue $}</dd>
<dt translate>Chassis ID</dt>
<dd>{$ ctrl.node.chassis_uuid | noValue $}</dd>
<dt translate>Created At</dt>
<dd>{$ ctrl.node.created_at | date:'medium' | noValue $}</dd>
</dl>
</div>
<!-- Ports -->
<div class="col-md-6 status detail">
<h4 translate>Ports</h4>
<hr class="header_rule">
<table hz-table ng-cloak
st-table="ctrl.ports"
st-safe-src="ctrl.portsSrc"
class="table table-striped table-rsp table-detail">
<thead>
<tr>
<th colspan="4" class="action-col">
<action-list uib-dropdown class="pull-right">
<action button-type="split-button"
action-classes="'btn btn-default btn-sm'"
callback="ctrl.createPort">
{$ 'Create port' | translate $}
</action>
<menu>
<action button-type="menu-item"
callback="ctrl.deletePort"
item="tCtrl.selected"
disabled="tCtrl.selected.length === 0">
<span class="fa fa-trash"></span>
{$ 'Delete ports' | translate $}
</action>
</menu>
</action-list>
</th>
</tr>
<tr>
<th class="multi_select_column">
<input type="checkbox"
hz-select-all="ctrl.ports"/>
</th>
<th translate class="rsp-p1" style="white-space:nowrap">
MAC Address
</th>
<th translate class="rsp-p2" style="width:100%;">
Properties
</th>
<th translate class="actions_column">
Actions
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="port in ctrl.ports">
<td class="multi_select_column">
<input type="checkbox"
hz-select="port"
ng-model="tCtrl.selections[port.id].checked"/>
<td class="rsp-p1">
{$ port.address $}
</td>
<td>
<ul style="list-style:none;padding-left:0;">
<li><strong>pxe_enabled</strong>: {$ port.pxe_enabled $}</li>
<li ng-repeat="propertyObject in
['local_link_connection',
'extra']"
ng-if="!emptyObject(port[propertyObject])">
<strong>{$ propertyObject $}</strong>:
<ul style="list-style:none;padding-left:10px;">
<li ng-repeat="(id, value) in port[propertyObject]">
<strong>{$ id $}</strong>:
<span ng-switch="id">
<a ng-switch-when="vif_port_id"
href="/dashboard/admin/networks/ports/{$ value $}/detail">{$ value $}</a>
<span ng-switch-default>{$ value $}</span>
</span>
</li>
</ul>
</li>
</ul>
</td>
<td class="actions_column">
<action-list uib-dropdown class="pull-right">
<action button-type="split-button"
action-classes="'btn btn-default btn-sm'"
callback="ctrl.editPort"
item="port">
{$ ::'Edit port' | translate $}
</action>
<menu>
<action button-type="menu-item"
callback="ctrl.deletePort"
item="[port]">
<span class="fa fa-trash"></span>
{$ ::'Delete port' | translate $}
</action>
</menu>
</action-list>
</td>
</tr>
<tr hz-no-items
items="ctrl.ports"
message="ctrl.noPortsText">
</tr>
</tbody>
</table>
</div>
</div>
<div class="row">
<!-- Driver Info -->
<div class="col-md-6 status detail">
<h4 translate>Driver Info</h4>
<hr class="header_rule">
<div ng-switch="ctrl.node.driver">
<dl ng-switch-when="pxe_ssh" class="dl-horizontal">
<dt translate>Driver</dt>
<dd>{$ ctrl.node.driver | noValue $}</dd>
<dt translate>SSH Address</dt>
<dd>{$ ctrl.node.driver_info.ssh_address | noValue $}</dd>
<dt translate>SSH Port</dt>
<dd>{$ ctrl.node.driver_info.ssh_port | noValue $}</dd>
<dt translate>SSH Username</dt>
<dd>{$ ctrl.node.driver_info.ssh_username | noValue $}</dd>
<dt ng-if="ssh_key_filename = ctrl.node.driver_info.ssh_key_filename"
translate>SSH Key File</dt>
<dd ng-if="ssh_key_filename">
{$ ssh_key_filename | noValue $}
</dd>
<dt ng-if="ssh_password = ctrl.node.driver_info.ssh_password"
translate>SSH Password</dt>
<dd ng-if="ssh_password">
{$ ssh_password | noValue $}
</dd>
<dt ng-if="ssh_key_contents = ctrl.node.driver_info.ssh_key_contents"
translate>SSH Key Contents</dt>
<dd ng-if="ssh_key_contents">
{$ ssh_key_contents | noValue $}
</dd>
<dt translate>SSH terminal port</dt>
<dd>{$ ctrl.node.driver_info.ssh_terminal_port | noValue $}</dd>
<dt translate>Virtualization Software</dt>
<dd>{$ ctrl.node.driver_info.ssh_virt_type | noValue $}</dd>
<dt translate>Deploy Kernel</dt>
<dd>
<a ng-if="deploy_kernel_is_uuid = angular.isDefined(ctrl.node.driver_info.deploy_kernel) ? ctrl.isUuid(ctrl.node.driver_info.deploy_kernel) : false"
href="/dashboard/admin/images/{$ ctrl.node.driver_info.deploy_kernel $}/detail">
{$ ctrl.node.driver_info.deploy_kernel | noValue $}
</a>
<span ng-if="!deploy_kernel_is_uuid">
{$ ctrl.node.driver_info.deploy_kernel | noValue $}
</span>
</dd>
<dt translate>Deploy Ramdisk</dt>
<dd>
<a ng-if="deploy_ramdisk_is_uuid = angular.isDefined(ctrl.node.driver_info.deploy_ramdisk) ? ctrl.isUuid(ctrl.node.driver_info.deploy_ramdisk) : false"
href="/dashboard/admin/images/{$ ctrl.node.driver_info.deploy_ramdisk $}/detail">
{$ ctrl.node.driver_info.deploy_ramdisk | noValue $}
</a>
<span ng-if="!deploy_ramdisk_is_uuid">
{$ ctrl.node.driver_info.deploy_ramdisk | noValue $}
</span>
</dd>
</dl>
<dl ng-switch-default class="dl-horizontal">
<dt ng-repeat-start="(id, value) in ctrl.node.driver_info">{$ id $}</dt>
<dd ng-repeat-end>{$ value $}</dd>
</dl>
</div>
</div>
<!-- Validation -->
<div class="col-md-6 status detail">
<h4 translate>Driver Validation</h4>
<hr class="header_rule">
<table hz-table ng-cloak
st-table="nodeValidation"
st-safe-src="ctrl.nodeValidation"
class="table table-striped table-rsp table-detail">
<thead>
<tr>
<th translate class="rsp-p1" style="white-space:nowrap">
Interface
</th>
<th translate class="rsp-p1">
Valid
</th>
<th translate class="rsp-p2" style="width:100%;">
Reason
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in nodeValidation">
<td class="rsp-p1">
{$ item.id $}
</td>
<td class="rsp-p1" ng-switch="item.result">
<span ng-switch-when="true" class="fa fa-check text-success"></span>
<span ng-switch-when="false" class="fa fa-close text-danger"></span>
<span ng-switch-default class="fa fa-minus"></span>
</td>
<td class="rsp-p2">
{$ item.reason $}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row">
<!-- Properties -->
<div class="col-md-6 status detail">
<h4 translate>Properties</h4>
<hr class="header_rule">
<dl class="dl-horizontal">
<dt ng-repeat-start="(propertyName, propertyValue) in ctrl.node.properties">
{$ propertyName $}</dt>
<dd ng-repeat-end>{$ propertyValue | noValue $}</dd>
</dl>
</div>
<!-- Instance Info -->
<div class="col-md-6 status detail">
<h4 translate>Instance Info</h4>
<hr class="header_rule"/>
<div ng-switch="ctrl.node.driver">
<dl ng-switch-when="pxe_ssh" class="dl-horizontal">
<dt translate>Instance Name</dt>
<dd>{$ ctrl.node.instance_info.display_name | noValue $}</dd>
<dt translate>Ramdisk</dt>
<dd>
<a href="/dashboard/admin/images/{$ ctrl.node.instance_info.ramdisk $}/detail">
{$ ctrl.node.instance_info.ramdisk | noValue $}
</a>
</dd>
<dt translate>Kernel</dt>
<dd>
<a href="/dashboard/admin/images/{$ ctrl.node.instance_info.kernel $}/detail">
{$ ctrl.node.instance_info.kernel | noValue $}
</a>
</dd>
<dt translate>Image Source</dt>
<dd>
<a href="/dashboard/admin/images/{$ ctrl.node.instance_info.image_source $}/detail">
{$ ctrl.node.instance_info.image_source | noValue $}
</a>
</dd>
<dt translate>Root GB</dt>
<dd>{$ ctrl.node.instance_info.root_gb | noValue $}</dd>
</dl>
<dl ng-switch-default class="dl-horizontal">
<dt ng-repeat-start="(id, value) in ctrl.node.instance_info">{$ id $}</dt>
<dd ng-repeat-end>{$ value | noValue $}</dd>
</dl>
</div>
</div>
</div>
<div class="row">
<!-- Extra -->
<div class="col-md-6 status detail">
<h4 translate>Extra</h4>
<hr class="header_rule">
<dl class="dl-horizontal">
<dt ng-repeat-start="(propertyName, propertyValue) in ctrl.node.extra">
{$ propertyName $}</dt>
<dd ng-repeat-end>{$ propertyValue | noValue $}</dd>
</dl>
</div>
</div>