1
<div data-ng-hide="loaded">
2
<header class="page-header">
3
<div class="inner-wrapper">
4
<h1 class="page-header__title twelve-col">Loading...</h1>
8
<div class="ng-hide" data-ng-show="loaded && !isSuperUser()">
9
<header class="page-header">
10
<div class="inner-wrapper">
11
<h1 class="page-header__title twelve-col">You must be a super user to access controller details.</h1>
15
<div class="ng-hide" data-ng-show="loaded && isSuperUser()">
16
<header class="page-header margin-bottom" data-maas-sticky-header>
17
<div class="inner-wrapper">
18
<h1 class="page-header__title eight-col">
19
<span contenteditable="true"
20
data-ng-class="{ editable: canEdit(), invalid: editNameInvalid() }"
21
data-ng-model="nameHeader.value"
22
data-ng-disabled="!canEdit()"
23
data-maas-editing="editName()"></span>
24
<a href="" class="alt ng-hide"
25
data-ng-show="nameHeader.editing"
26
data-ng-click="cancelEditName()">Cancel</a>
27
<a href="" class="link-cta-ubuntu ng-hide"
28
data-ng-show="nameHeader.editing"
29
data-ng-class="{ secondary: editNameInvalid() }"
30
data-ng-click="saveEditName()">Save</a>
32
<div class="page-header__actions four-col last-col">
33
<div class="page-header__cta two-col no-margin-bottom last-col">
34
<div class="two-col no-margin-bottom last-col">
35
<a href="#" class="link-cta-ubuntu right">Remove</a>
41
<div class="inner-wrapper">
42
<ul class="flash-messages">
43
<li class="flash-messages__item error ng-hide"
44
data-ng-repeat="(error_type, error) in errors"
45
data-ng-show="error.viewable">{$ error.message $}</li>
49
<div class="inner-wrapper">
50
<div class="twelve-col">
51
<h2 class="title">Controller Summary</h2>
55
<dt class="two-col">Type</dt>
56
<dd class="four-col last-col">
57
Rack controller ({$ node.node_type $})
59
<dt class="two-col">Last image sync</dt>
60
<dd class="four-col last-col">
61
<time datetime="2015-08-29T13:58Z">
62
August 29th, 2015 at 13:58
65
<dt class="two-col">Zone</dt>
66
<dd class="four-col last-col">
69
<dt class="two-col">Fabrics</dt>
70
<dd class="four-col last-col">
71
<a href="#" class="link--alt">Fabric 1</a>, <a href="#" class="link--alt">Fabric 2</a>, <a href="#" class="link--alt">Fabric 3</a>, <a href="#" class="link--alt">Fabric 4</a>
73
<dt class="two-col">DHCP</dt>
74
<dd class="four-col last-col">
75
<a href="#" class="link--alt">View compiled configuration</a>
79
<div class="six-col last-col">
81
<dt class="two-col">CPU</dt>
82
<dd class="four-col last-col">
83
{$ node.cpu_count $} cores
85
<dt class="two-col">RAM</dt>
86
<dd class="four-col last-col">
89
<dt class="two-col">Storage</dt>
90
<dd class="four-col last-col">
91
{$ node.storage $}GB over {$ node.physical_disk_count $} disks
93
<dt class="two-col">OS</dt>
94
<dd class="four-col last-col">
97
<dt class="two-col">MAAS version</dt>
98
<dd class="four-col last-col">
108
<div class="inner-wrapper">
109
<div class="twelve-col">
112
<div class="twelve-col">
113
<ul class="list__tree no-bullets">
114
<li class="list__item">
116
<ul class="list__tree list__tree--sub-level">
117
<li class="list__item">TFTP</li>
118
<li class="list__item">HTTP</li>
121
<li class="list__item">
122
<span class="color--error"><span class="icon error"></span> DHCP 4</span> <div class="list__item-feedback">DHCP 4 cannot be provided due to reset</div>
124
<li class="list__item">
125
<span class="color--error"><span class="icon error"></span> DHCP 6</span> <div class="list__item-feedback">DHCP 6 cannot be provided due to reset</div>
127
<li class="list__item">ISCSI</li>
133
<div class="inner-wrapper">
134
<div class="twelve-col">
135
<h2>Served VLANs</h2>
137
<div class="twelve-col">
139
<header class="table__head">
140
<div class="table__row">
141
<div class="table__header table__column--10">VLAN</div>
142
<div class="table__header table__column--10">Fabric</div>
143
<div class="table__header table__column--30">Subnet</div>
144
<div class="table__header table__column--20">Primary rack</div>
145
<div class="table__header table__column--20">Secondary rack</div>
146
<div class="table__header table__column--10">HA</div>
149
<main class="table__body">
150
<div class="table__row">
151
<div class="table__data table__column--10"><a href="#">10</a></div>
152
<div class="table__data table__column--10"><a href="#">Fabric-1</a></div>
153
<div class="table__data table__column--30"><a href="#">192.168.10.0/24</a></div>
154
<div class="table__data table__column--20">
155
<select name="rackCtrlr" id="rackCtrlr" class="table__input">
156
<option value="" disabled="disabled">Choose rack controller...</option>
157
<option value="1">rack-controller-1</option>
158
<option value="2">rack-controller-2</option>
159
<option value="3" selected="selected">rack-controller-3</option>
160
<option value="4">rack-controller-4</option>
163
<div class="table__data table__column--20">
164
<select name="rackCtrlr" id="rackCtrlr" class="table__input">
165
<option value="" disabled="disabled" selected="selected">Choose rack controller...</option>
166
<option value="1">rack-controller-1</option>
167
<option value="2">rack-controller-2</option>
168
<option value="3">rack-controller-3</option>
169
<option value="4">rack-controller-4</option>
172
<div class="table__header table__column--10"></div>
174
<div class="table__row">
175
<div class="table__data table__column--10"><a href="#">Untagged</a></div>
176
<div class="table__data table__column--10"><a href="#">Fabric-2</a></div>
177
<div class="table__data table__column--30"><a href="#">192.168.10.0/24</a></div>
178
<div class="table__data table__column--20">
179
<select name="rackCtrlr" id="rackCtrlr" class="table__input">
180
<option value="" disabled="disabled">Choose rack controller...</option>
181
<option value="1">rack-controller-1</option>
182
<option value="2">rack-controller-2</option>
183
<option value="3" selected="selected">rack-controller-3</option>
184
<option value="4">rack-controller-4</option>
187
<div class="table__data table__column--20">
188
<select name="rackCtrlr" id="rackCtrlr" class="table__input">
189
<option value="" disabled="disabled">Choose rack controller...</option>
190
<option value="1">rack-controller-1</option>
191
<option value="2">rack-controller-2</option>
192
<option value="3">rack-controller-3</option>
193
<option value="4" selected="selected">rack-controller-4</option>
196
<div class="table__header table__column--10"><span class="icon simple-tick"></span></div>
198
<div class="table__row">
199
<div class="table__data table__column--10"><a href="#">Untagged</a></div>
200
<div class="table__data table__column--10"><a href="#">Fabric-3</a></div>
201
<div class="table__data table__column--30"><a href="#">192.168.10.0/24</a></div>
202
<div class="table__data table__column--20">
203
<select name="rackCtrlr" id="rackCtrlr" class="table__input">
204
<option value="" disabled="disabled">Choose rack controller...</option>
205
<option value="1">rack-controller-1</option>
206
<option value="2" selected="selected">rack-controller-2</option>
207
<option value="3">rack-controller-3</option>
208
<option value="4">rack-controller-4</option>
211
<div class="table__data table__column--20">
212
<select name="rackCtrlr" id="rackCtrlr" class="table__input">
213
<option value="" disabled="disabled">Choose rack controller...</option>
214
<option value="1">rack-controller-1</option>
215
<option value="2">rack-controller-2</option>
216
<option value="3" selected="selected">rack-controller-3</option>
217
<option value="4">rack-controller-4</option>
220
<div class="table__header table__column--10"><span class="icon simple-tick"></span></div>
228
<div class="inner-wrapper" ng-controller="NodeNetworkingController">
229
<div class="twelve-col" data-ng-hide="loaded">
230
<h2 class="title">Network</h2>
231
<div class="twelve-col">Loading...</div>
233
<form class="ng-hide" data-ng-show="loaded">
234
<div class="twelve-col">
235
<h2 class="title">Network</h2>
236
<div class="twelve-col error ng-hide" data-ng-show="isAllNetworkingDisabled() && isSuperUser()">
237
<ul class="flash-messages">
238
<li class="flash-messages__item info">
239
Network configuration cannot be modified unless the node is Ready or Broken.
243
<div class="twelve-col error ng-hide" data-ng-show="!node.on_network">
244
<ul class="flash-messages">
245
<li class="flash-messages__item error">
246
Node must be connected to a network.
250
<div class="twelve-col error ng-hide" data-ng-show="!isUbuntuOS()">
251
<ul class="flash-messages">
252
<li class="flash-messages__item info">
253
Custom network configuration only supported on Ubuntu. Using OS default configuration.
257
<div class="table margin-bottom">
258
<header class="table__head">
259
<div class="table__row">
260
<div class="table__header table__column--3"></div>
261
<div class="table__header table__column--12">
263
data-ng-class="{ active: column == 'name' }"
264
data-ng-click="column = 'name'">
267
<span class="divide"></span>
268
<a data-ng-class="{ active: column == 'mac' }"
269
data-ng-click="column = 'mac'">
273
<div class="table__header table__column--3">PXE</div>
274
<div class="table__header table__column--9">Type</div>
275
<div class="table__header table__column--14">Fabric</div>
276
<div class="table__header table__column--14">VLAN</div>
277
<div class="table__header table__column--18">Subnet</div>
278
<div class="table__header table__column--27">IP Address</div>
281
<main class="table__body" data-selected-rows>
282
<div class="table__row"
283
data-ng-class="{ active: isInterfaceSelected(interface), disabled: isDisabled(), noEdit: cannotEditInterface(interface) }"
284
data-ng-repeat="interface in interfaces | removeBondParents:newBondInterface">
285
<div class="table__data table__column--3">
286
<span data-ng-hide="isAllNetworkingDisabled()">
287
<input class="checkbox" type="checkbox" id="{$ getUniqueKey(interface) $}"
288
data-ng-checked="isInterfaceSelected(interface)"
289
data-ng-click="toggleInterfaceSelect(interface)"
290
data-ng-disabled="isDisabled()">
291
<label class="checkbox-label" for="{$ getUniqueKey(interface) $}"></label>
294
<div class="table__data table__column--12" data-ng-show="column == 'name'">
295
<span class="ng-hide" data-ng-show="interface.type == 'alias' || interface.type == 'vlan'">{$ interface.name $}</span>
296
<input type="text" class="table__input"
297
data-ng-show="interface.type != 'alias' && interface.type != 'vlan'"
298
data-ng-model="interface.name"
300
data-ng-focus="setFocusInterface(interface)"
301
data-ng-blur="clearFocusInterface(interface)"
302
data-ng-class="{ invalid: isInterfaceNameInvalid(interface) }">
303
<span class="table__label active ng-hide" data-ng-show="interface.members">
304
<a data-ng-click="toggleMembers(interface)">
305
<span data-ng-hide="isShowingMembers(interface)">Show members</span>
306
<span class="ng-hide" data-ng-show="isShowingMembers(interface)">Hide members</span>
310
<div class="table__data table__column--12 ng-hide" data-ng-show="column == 'mac'">
311
{$ interface.mac_address $}
312
<span class="table__label active ng-hide" data-ng-show="interface.members">
313
<a data-ng-click="toggleMembers(interface)">
314
<span data-ng-hide="isShowingMembers(interface)">Show members</span>
315
<span class="ng-hide" data-ng-show="isShowingMembers(interface)">Hide members</span>
319
<div class="table__data table__column--3">
320
<input class="align-center" type="radio" name="bootInterface" checked
321
data-ng-if="isBootInterface(interface)">
323
<div class="table__data table__column--9">{$ getInterfaceTypeText(interface) $}</div>
324
<div class="table__data table__column--14">
325
<select class="table__input" name="fabric" id="fabric"
326
data-ng-model="interface.fabric"
327
data-ng-disabled="interface.type == 'alias' || interface.type == 'vlan'"
328
data-ng-change="fabricChanged(interface)"
329
data-ng-options="fabric as fabric.name for fabric in fabrics">
332
<div class="table__data table__column--14">
333
<select class="table__input" name="vlan" id="vlan"
334
data-ng-model="interface.vlan"
335
data-ng-disabled="interface.type == 'alias' || interface.vlan.vid === 0"
336
data-ng-change="saveInterface(interface)"
337
data-ng-options="vlan as getVLANText(vlan) for vlan in vlans | removeDefaultVLANIfVLAN:interface.type | filterByFabric:interface.fabric">
340
<div class="table__data table__column--18">
341
<select class="table__input" name="subnet" id="subnet"
342
data-ng-hide="isAllNetworkingDisabled() && interface.discovered[0].subnet_id"
343
data-ng-model="interface.subnet"
344
data-ng-change="subnetChanged(interface)"
345
data-ng-options="subnet as getSubnetText(subnet) for subnet in subnets | filterByVLAN:interface.vlan">
346
<option value="" data-ng-hide="interface.links.length > 1">Unconfigured</option>
348
<span class="ng-hide" data-ng-show="isAllNetworkingDisabled() && interface.discovered[0].subnet_id">
349
{$ getSubnetText(getSubnet(interface.discovered[0].subnet_id)) $}
352
<div class="table__data table__column--21">
353
<ul class="no-bullets no-margin-bottom" data-ng-hide="isAllNetworkingDisabled()">
355
<select class="table__input" name="link-mode" id="link-mode"
356
data-ng-model="interface.mode"
357
data-ng-change="saveInterfaceLink(interface)"
358
data-ng-disabled="isLinkModeDisabled(interface)"
359
data-ng-options="mode.mode as mode.text for mode in modes | filterLinkModes:interface">
362
<li class="margin-top--ten" data-ng-show="shouldShowIPAddress(interface)">
363
<input type="text" class="table__input no-margin-top"
364
data-ng-model="interface.ip_address"
365
data-ng-class="{ invalid: isIPAddressInvalid(interface) }"
367
data-ng-focus="setFocusInterface(interface)"
368
data-ng-blur="clearFocusInterface(interface)"
369
data-ng-disabled="interface.mode != 'static'">
372
<span class="ng-hide" data-ng-show="isAllNetworkingDisabled() && !interface.discovered[0].ip_address">
373
{$ interface.ip_address $} ({$ getLinkModeText(interface) $})
375
<span class="ng-hide" data-ng-show="isAllNetworkingDisabled() && interface.discovered[0].ip_address">
376
{$ interface.discovered[0].ip_address $} (DHCP)
379
<div class="table__data table__column--6">
380
<div class="table__controls align-right">
381
<a class="icon add tooltip"
383
data-ng-click="quickAdd(interface)"
384
data-ng-show="canAddAlias(interface) || canAddVLAN(interface)"></a>
385
<a class="icon delete tooltip" data-tooltip="Remove" data-ng-click="quickRemove(interface)"></a>
388
<div class="table__dropdown--info">
389
<div class="table__row table__dropdown-row--info" data-ng-class="{ active: isShowingMembers(interface) }" data-ng-repeat="member in interface.members">
390
<div data-ng-show="isShowingMembers(interface)">
391
<div class="table__data no-padding-top table__column--3"></div>
392
<div class="table__data no-padding-top table__column--15"
393
data-ng-show="column == 'name'">{$ member.name $}</div>
394
<div class="table__data no-padding-top table__column--15 ng-hide"
395
data-ng-show="column == 'mac'">{$ member.mac_address $}</div>
396
<div class="table__data no-padding-top table__column--15">{$ getInterfaceTypeText(member) $}</div>
397
<div class="table__data no-padding-top table__column--67">
402
<div class="table__dropdown">
403
<div class="table__row table__dropdown-row" data-ng-class="{ active: isShowingAdd() }">
404
<div data-ng-show="isShowingAdd()">
405
<div class="table__data table__column--3">
407
<div class="table__data table__column--12">
410
<div class="table__data table__column--3">
412
<div class="table__data table__column--9">
413
<select class="table__input" name="type" id="type"
414
data-ng-model="newInterface.type"
415
data-ng-change="addTypeChanged()">
416
<option value="alias" data-ng-show="canAddAlias(newInterface.parent)">Alias</option>
417
<option value="vlan" data-ng-show="canAddVLAN(newInterface.parent)">VLAN</option>
420
<div class="table__data table__column--14">
421
{$ newInterface.parent.fabric.name $}
423
<div class="table__data table__column--14">
424
<span data-ng-show="newInterface.type === 'alias'">{$ getVLANText(newInterface.parent.vlan) $}</span>
425
<select class="table__input" name="vlan" id="vlan"
426
data-ng-model="newInterface.vlan"
427
data-ng-disabled="newInterface.type == 'alias'"
428
data-ng-options="vlan as getVLANText(vlan) for vlan in vlans | removeDefaultVLAN | filterByFabric:newInterface.parent.fabric | filterByUnusedForInterface:newInterface.parent:originalInterfaces"
429
data-ng-show="newInterface.type === 'vlan'"
430
data-ng-change="addVLANChanged()">
433
<div class="table__data table__column--18">
434
<select class="table__input" name="subnet" id="subnet"
435
data-ng-model="newInterface.subnet"
436
data-ng-change="addSubnetChanged()"
437
data-ng-options="subnet as getSubnetText(subnet) for subnet in subnets | filterByVLAN:newInterface.vlan">
438
<option value="" data-ng-hide="newInterface.type === 'alias'">Unconfigured</option>
441
<div class="table__data table__column--21">
442
<select class="table__input" name="link-mode" id="link-mode"
443
data-ng-model="newInterface.mode"
444
data-ng-disabled="isLinkModeDisabled(newInterface)"
445
data-ng-options="mode.mode as mode.text for mode in modes | filterLinkModes:newInterface">
448
<div class="table__data table_column--6"></div>
451
<div class="table__row table__dropdown-row" data-ng-class="{ active: isShowingInterfaceOptions() || isShowingDeleteComfirm() || isShowingAdd() }">
452
<div class="ng-hide" data-ng-show="isShowingInterfaceOptions()">
453
<div class="table__data left margin-left--thirty">
454
<button class="cta-ubuntu secondary"
455
data-ng-click="add('alias', interface)"
456
data-ng-show="canAddAlias(interface)">Add alias</button>
457
<button class="cta-ubuntu secondary"
458
data-ng-click="add('vlan', interface)"
459
data-ng-show="canAddVLAN(interface)">Add VLAN</button>
460
<a class="link-cta-ubuntu text-button"
461
data-ng-click="remove()">Remove {$ getRemoveTypeText(interface) $}</a>
464
<div class="ng-hide" data-ng-show="isShowingDeleteComfirm()">
465
<div class="table__data left margin-top--five">
466
<p><span class="icon warning margin-right--ten"></span> Are you sure you want to remove this {$ getRemoveTypeText(interface) $}?</p>
468
<div class="table__data right">
469
<a class="link-cta-ubuntu text-button" data-ng-click="cancel()">Cancel</a>
470
<button class="cta-ubuntu" data-ng-click="confirmRemove(interface)">Remove</button>
473
<div data-ng-show="isShowingAdd() && !newInterface.saving">
474
<div class="table__data left margin-left--thirty">
475
<button class="cta-ubuntu secondary"
476
data-ng-click="addInterface('alias')"
477
data-ng-show="canAddAlias(interface)">Add <span data-ng-show="newInterface.type === 'alias'">another </span>alias</button>
478
<button class="cta-ubuntu secondary"
479
data-ng-click="addInterface('vlan')"
480
data-ng-show="canAddAnotherVLAN(interface)">Add <span data-ng-show="newInterface.type === 'vlan'">another </span>VLAN</button>
482
<div class="table__data right">
483
<a class="link-cta-ubuntu text-button" data-ng-click="cancel()">Cancel</a>
484
<button class="cta-ubuntu" data-ng-click="addInterface()">Save</button>
490
<div class="table__row active ng-hide" data-ng-show="isShowingCreateBond()">
491
<div class="table__data table__column--3">
492
<input class="checkbox" type="checkbox" id="bond-create" disabled="disabled" checked />
493
<label class="checkbox-label" for="bond-create"></label>
495
<div class="table__data table__column--12">
496
<input type="text" class="table__input editible"
497
data-ng-class="{ invalid: isInterfaceNameInvalid(newBondInterface) }"
498
data-ng-model="newBondInterface.name">
500
<div class="table__data table__column--3">
501
<input class="align-center" type="radio" name="bondBootInterface" checked
502
data-ng-if="getBondIsBootInterface()">
504
<div class="table__data table__column--9">Bond</div>
505
<div class="table__data table__column--73"></div>
506
<div class="table__dropdown">
507
<div class="table__row table__dropdown-row active">
508
<div class="table__data table__column--3">
510
<div class="table__data table__column--15">
511
<label for="type">Bond mode</label>
512
<select name="bond-mode" id="bond-mode"
513
data-ng-model="newBondInterface.mode"
514
data-ng-options="mode[0] as mode[1] for mode in bondOptions.modes">
517
<div class="table__data table__column--15">
518
<label for="mac">MAC address</label>
519
<input type="text" data-ng-model="newBondInterface.macAddress"
520
data-ng-class="{ invalid: isMACAddressInvalid(newBondInterface.macAddress) }"
521
data-ng-placeholder="getBondPlaceholderMACAddress()">
523
<div class="table__data table__column--15" data-ng-show="showLACPRate()">
524
<label for="rates">LACP rate</label>
525
<select name="bond-mode" id="bond-mode"
526
data-ng-model="newBondInterface.lacpRate"
527
data-ng-options="rate[0] as rate[1] for rate in bondOptions.lacp_rates">
530
<div class="table__data table__column--15" data-ng-show="showXMITHashPolicy()">
531
<label for="rates">XMIT hash policy</label>
532
<select name="xmit-hash-policy" id="xmit-hash-policy"
533
data-ng-model="newBondInterface.xmitHashPolicy"
534
data-ng-options="xmit[0] as xmit[1] for xmit in bondOptions.xmit_hash_policies">
538
<div class="table__row table__dropdown-row table__dropdown-row--head active">
539
<div class="table__header table__column--3"></div>
540
<div class="table__header table__column--15">Name</div>
541
<div class="table__header table__column--15">Type</div>
542
<div class="table__header table__column--67">Primary</div>
544
<div class="table__row table__dropdown-row no-border active"
545
data-ng-repeat="parent in newBondInterface.parents | orderBy:'name'">
546
<div class="table__data no-padding-top table__column--3"></div>
547
<div class="table__data no-padding-top table__column--15">{$ parent.name $}</div>
548
<div class="table__data no-padding-top table__column--15">{$ getInterfaceTypeText(parent) $}</div>
549
<div class="table__data no-padding-top table__column--67">
550
<input type="radio" name="bondPrimary" data-ng-model="newBondInterface.primary" data-ng-value="parent">
553
<div class="table__row table__dropdown-row active">
554
<div class="table__data right">
555
<a class="link-cta-ubuntu text-button" data-ng-click="cancel()">Cancel</a>
556
<button class="cta-ubuntu"
557
data-ng-click="addBond()"
558
data-ng-disabled="cannotAddBond()">Save</button>
563
<div class="table__row active" data-ng-show="isShowingCreatePhysical()">
564
<div class="table__data table__column--3">
565
<input class="checkbox" type="checkbox" id="interface-create" disabled="disabled" checked />
566
<label class="checkbox-label" for="interface-create"></label>
568
<div class="table__data table__column--12">
569
<input type="text" class="table__input"
570
data-ng-class="{ invalid: isInterfaceNameInvalid(newInterface) }"
571
data-ng-model="newInterface.name">
573
<div class="table__data table__column--3"></div>
574
<div class="table__data table__column--9">Physical</div>
575
<div class="table__data table__column--14">
576
<select class="table__input" name="fabric" id="fabric"
577
data-ng-model="newInterface.fabric"
578
data-ng-change="newPhysicalFabricChanged()"
579
data-ng-options="fabric as fabric.name for fabric in fabrics">
582
<div class="table__data table__column--14">
583
<select class="table__input" name="vlan" id="vlan" disabled="disabled">
584
<option value="" selected>untagged</option>
587
<div class="table__data table__column--18">
588
<select class="table__input" name="subnet" id="subnet"
589
data-ng-model="newInterface.subnet"
590
data-ng-change="newPhysicalSubnetChanged()"
591
data-ng-options="subnet as getSubnetText(subnet) for subnet in subnets | filterByVLAN:newInterface.vlan">
592
<option value="">Unconfigured</option>
595
<div class="table__data table__column--14">
596
<select class="table__input" name="link-mode" id="link-mode"
597
data-ng-model="newInterface.mode"
598
data-ng-disabled="isLinkModeDisabled(newInterface)"
599
data-ng-options="mode.mode as mode.text for mode in modes">
602
<div class="table__data table__column--13"></div>
603
<div class="table__dropdown">
604
<div class="table__row table__dropdown-row active">
605
<div class="table__data table__column--3">
607
<div class="table__data table__column--12">
608
<label>MAC address</label>
609
<input type="text" data-ng-model="newInterface.macAddress"
610
data-ng-class="{ invalid: isMACAddressInvalid(newInterface.macAddress, false) || newInterface.macError }">
612
<div class="table__data table__column--85"></div>
614
<div class="table__row table__dropdown-row active">
615
<div class="table__data left" data-ng-show="newInterface.errorMsg">
616
<span class="icon error"></span> {$ newInterface.errorMsg $}
618
<div class="table__data right">
620
<a class="link-cta-ubuntu text-button" data-ng-click="cancel()">Cancel</a>
621
<button class="cta-ubuntu"
622
data-ng-click="addPhysicalInterface()"
623
data-ng-disabled="cannotAddPhysicalInterface()">Save</button>
630
<div data-ng-hide="isAllNetworkingDisabled() || isShowingCreateBond() || isShowingCreatePhysical()">
631
<a class="link-cta-ubuntu secondary margin-right"
632
data-ng-class="{ disabled: selectedMode !== null }"
633
data-ng-click="showCreatePhysical()">Add interface</a>
634
<a class="link-cta-ubuntu secondary margin-right"
635
data-ng-class="{ disabled: !canCreateBond() }"
636
data-ng-click="showCreateBond()">Create bond</a>