1
<div data-ng-hide="loaded">
2
<header class="page-header" sticky media-query="min-width: 769px">
3
<div class="wrapper--inner">
4
<h1 class="page-header__title">Device discovery</h1>
5
<p class="page-header__status">
6
<span class="u-text--loading"><i class="icon u-margin--right-tiny icon--loading u-animation--spin"></i>Searching network for devices…</span>
1
<header class="page-header" sticky media-query="min-width: 769px">
2
<div class="wrapper--inner">
3
<h1 class="page-header__title">Device discovery</h1>
4
<p class="page-header__status">{$ discoveredDevices.length $} items discovered <span class="u-text--loading" data-ng-if="!loaded"><i class="icon icon--loading u-animation--spin"></i> Loading...</span></p>
5
<div class="page-header__controls" data-ng-if="networkDiscovery">
6
<maas-obj-form obj="networkDiscovery" manager="configManager" inline="true">
7
<maas-obj-field type="onoffswitch" key="value" label="Discovery enabled"
8
on-value="enabled" off-value="disabled" subtle="true" label-left="true"
9
label-info="When enabled, MAAS will use passive techniques, such as listening to
 ARP requests and DNS advertisements, to observe networks attached
 to rack controllers. Active subnet mapping can also be enabled in the
 Device Discovery section of the Settings page."></maas-obj-field>
11
<div class="wrapper--inner">
12
<div class="twelve-col">
16
<th class="table-col--37">Name</th>
17
<th class="table-col--15">Mac address</th>
18
<th class="table-col--13">IP</th>
19
<th class="table-col--15">Rack</th>
20
<th class="table-col--20">Last seen</th>
14
<div class="wrapper--inner">
15
<maas-notifications></maas-notifications>
36
<maas-notifications />
38
<div class="ng-hide" data-ng-show="loaded">
39
<header class="page-header" sticky media-query="min-width: 769px">
40
<div class="wrapper--inner">
41
<h1 class="page-header__title">Device discovery</h1>
42
<p class="page-header__status" >{$ discoveredDevices.length $} items discovered</p>
43
<div class="page-header__controls" data-ng-if="networkDiscovery">
44
<maas-obj-form obj="networkDiscovery" manager="configManager" inline="true">
45
<maas-obj-field type="onoffswitch" key="value" label="Discovery enabled"
46
on-value="enabled" off-value="disabled" subtle="true" label-left="true"
47
label-info="When enabled, MAAS will use passive techniques, such as listening to
 ARP requests and DNS advertisements, to observe networks attached
 to rack controllers. Active subnet mapping can also be enabled in the
 Device Discovery section of the Settings page."></maas-obj-field>
53
<div class="wrapper--inner">
54
<div class="p-notification--warning" data-ng-if="networkDiscovery.value === 'disabled'">
55
<p class="p-notification__response">
56
<span class="p-notification__status">Warning:</span>List of devices will not update as discovery is turned off</p>
58
<div class="twelve-col">
60
<header class="table__head u-display--desktop" sticky sticky-class="table__head--sticky" offset="116" media-query="min-width: 768px">
61
<div class="table__row">
62
<div class="table__header table-col--37">Name</div>
63
<div class="table__header table-col--15">Mac address</div>
64
<div class="table__header table-col--13">IP</div>
65
<div class="table__header table-col--15">Rack</div>
66
<div class="table__header table-col--20">Last seen</div>
69
<div class="table__body">
70
<div class="table__row table--success" data-ng-if="convertTo.saved">
71
<div class="table__data table-col--97">
72
<i class="icon icon--success"></i> {$ convertTo.hostname $} has been add to {$ site $}.
73
<a href="#/node/{$ convertTo.parent $}" data-ng-if="convertTo.parent">Go to the machine devices page.</a>
74
<a href="#/nodes/?tab=devices" data-ng-if="!convertTo.parent">Go to the device listing.</a>
18
<div class="wrapper--inner">
19
<div class="p-notification--warning" data-ng-if="networkDiscovery.value === 'disabled'">
20
<p class="p-notification__response">
21
<span class="p-notification__status">Warning:</span>List of devices will not update as discovery is turned off</p>
23
<div class="twelve-col">
25
<header class="table__head u-display--desktop" sticky sticky-class="table__head--sticky" offset="116" media-query="min-width: 768px">
26
<div class="table__row">
27
<div class="table__header table-col--37">Name</div>
28
<div class="table__header table-col--15">Mac address</div>
29
<div class="table__header table-col--13">IP</div>
30
<div class="table__header table-col--15">Rack</div>
31
<div class="table__header table-col--20">Last seen</div>
34
<div class="table__body">
35
<div class="table__row table--success" data-ng-if="convertTo.saved">
36
<div class="table__data table-col--97">
37
<i class="icon icon--success"></i> {$ convertTo.hostname $} has been add to {$ site $}.
38
<a href="#/node/{$ convertTo.parent $}" data-ng-if="convertTo.parent">Go to the machine devices page.</a>
39
<a href="#/nodes/?tab=devices" data-ng-if="!convertTo.parent">Go to the device listing.</a>
41
<div class="table__data table-col--3">
42
<i class="icon icon--cross tooltip" aria-label="Clear"
43
data-ng-click="convertTo.saved = false">Clear</i>
46
<div class="table__row" data-ng-if="!discoveredDevices.length">
47
<div class="table__data table-col--100">
51
<div class="table__row"
52
data-ng-repeat="discovery in discoveredDevices | orderBy:'-last_seen' track by discovery.first_seen"
53
data-ng-class="{'is-active' : discovery.first_seen === selectedDevice}">
54
<div data-ng-if="discovery.first_seen !== selectedDevice"
55
data-ng-dblclick="toggleSelected(discovery.first_seen)">
56
<div class="table__data table-col--37" aria-label="Name">
57
{$ getDiscoveryName(discovery) $}
58
<i data-ng-show="discovery.is_external_dhcp === true" class="icon icon--info tooltip u-margin--left-tiny ng-hide" aria-label="This device is providing DHCP."></i>
60
<div class="table__data table-col--15" aria-label="MAC">
61
{$ discovery.mac_address $}<br/>
62
<small class="u-text--subtle u-display--desktop">{$ discovery.mac_organization || 'Unknown' $}</small>
64
<div class="table__data table-col--13 u-text--truncate" aria-label="IP Address">
67
<div class="table__data table-col--15" aria-label="Rack">
68
{$ discovery.observer_hostname $}
70
<div class="table__data table-col--17" aria-label="Last seen">
71
<time>{$ discovery.last_seen $}</time>
73
<div class="table__data table--mobile-controls table-col--3">
74
<div class="table__controls u-align--right">
75
<i class="icon icon--open tooltip u-display--desktop" aria-label="Open"
76
data-ng-click="toggleSelected(discovery.first_seen)">Open</i>
77
<a class="button--secondary u-display--mobile"
78
data-ng-click="toggleSelected(discovery.first_seen)">Add device</a>
82
<maas-obj-form data-ng-if="discovery.first_seen === selectedDevice"
83
obj="convertTo" manager="proxyManager" pre-process="preProcess"
84
after-save="afterSave" table-form="true" save-on-blur="false">
85
<div class="table__data table-col--20">
86
<maas-obj-field class="u-margin--bottom-none" type="text" key="hostname"
87
disable-label="true" placeholder="Hostname (optional)"></maas-obj-field>
89
<div class="table__data table-col--77"></div>
76
90
<div class="table__data table-col--3">
77
<i class="icon icon--cross tooltip" aria-label="Clear"
78
data-ng-click="convertTo.saved = false">Clear</i>
81
<div class="table__row" data-ng-if="!discoveredDevices.length">
82
<div class="table__data table-col--100">
86
<div class="table__row"
87
data-ng-repeat="discovery in discoveredDevices | orderBy:'-last_seen' track by discovery.first_seen"
88
data-ng-class="{'is-active' : discovery.first_seen === selectedDevice}">
89
<div data-ng-if="discovery.first_seen !== selectedDevice"
90
data-ng-dblclick="toggleSelected(discovery.first_seen)">
91
<div class="table__data table-col--37" aria-label="Name">
92
{$ getDiscoveryName(discovery) $}
93
<i data-ng-show="discovery.is_external_dhcp === true" class="icon icon--info tooltip u-margin--left-tiny ng-hide" aria-label="This device is providing DHCP."></i>
95
<div class="table__data table-col--15" aria-label="MAC">
96
{$ discovery.mac_address $}<br/>
97
<small class="u-text--subtle u-display--desktop">{$ discovery.mac_organization || 'Unknown' $}</small>
99
<div class="table__data table-col--13 u-text--truncate" aria-label="IP Address">
102
<div class="table__data table-col--15" aria-label="Rack">
103
{$ discovery.observer_hostname $}
105
<div class="table__data table-col--17" aria-label="Last seen">
106
<time>{$ discovery.last_seen $}</time>
108
<div class="table__data table--mobile-controls table-col--3">
109
<div class="table__controls u-align--right">
110
<i class="icon icon--open tooltip u-display--desktop" aria-label="Open"
111
data-ng-click="toggleSelected(discovery.first_seen)">Open</i>
112
<a class="button--secondary u-display--mobile"
113
data-ng-click="toggleSelected(discovery.first_seen)">Add device</a>
117
<maas-obj-form data-ng-if="discovery.first_seen === selectedDevice"
118
obj="convertTo" manager="proxyManager" pre-process="preProcess"
119
after-save="afterSave" table-form="true" save-on-blur="false">
120
<div class="table__data table-col--20">
121
<maas-obj-field class="u-margin--bottom-none" type="text" key="hostname"
122
disable-label="true" placeholder="Hostname (optional)"></maas-obj-field>
124
<div class="table__data table-col--77"></div>
125
<div class="table__data table-col--3">
126
<i class="icon icon--close tooltip u-display--desktop" aria-label="Close"
127
data-ng-click="toggleSelected(discovery.first_seen)">Close</i>
129
<div class="table__dropdown">
130
<div class="table__dropdown-title">
131
<h2 data-ng-click="toggleSelected(selectedDevice)" class="u-float--left">Adding {$ getDiscoveryName(discovery) $}</h2>
132
<i data-ng-click="toggleSelected(selectedDevice)" class="icon icon--remove u-float--right u-margin--top-small u-margin--right-small"></i>
134
<div class="table__row is-active">
135
<div class="table__data table-col--100">
136
<div class="six-col">
138
<dt class="two-col">Mac</dt>
139
<dd class="four-col last-col">{$ discovery.mac_address $}</dd>
140
<dt class="two-col">IP</dt>
141
<dd class="four-col last-col">{$ discovery.ip $}</dd>
142
<dt class="two-col">Rack</dt>
143
<dd class="four-col last-col">{$ discovery.observer_hostname $}</dd>
144
<dt class="two-col">Last seen</dt>
145
<dd class="four-col last-col"><time>{$ discovery.last_seen $}</time></dd>
148
<div class="six-col last-col">
150
<dt class="two-col">Fabric</dt>
151
<dd class="four-col last-col">{$ discovery.fabric_name $}</dd>
152
<dt class="two-col">VLAN</dt>
153
<dd class="four-col last-col">{$ getVLANName(discovery.vlan) $}</dd>
154
<dt class="two-col">Subnet</dt>
155
<dd class="four-col last-col">{$ getSubnetName(discovery.subnet) $}</dd>
160
<div class="table__row is-active u-padding--top-small">
161
<div class="table__data table-col--100">
162
<fieldset class="form__fieldset six-col">
163
<div class="form__group u-display--mobile">
164
<label for="Name" class="form__group-label two-col">Name</label>
165
<div class="form__group-input three-col">
166
<maas-obj-field type="text" key="hostname"
167
disable-label="true" placeholder="Hostname (optional)"></maas-obj-field>
170
<div class="form__group">
171
<label class="form__group-label two-col u-margin--bottom-small">Type</label>
172
<div class="form__group-input three-col">
173
<select name="type" ng-model="convertTo.type">
174
<option value="" disabled>Choose type</option>
175
<option value="device">Device</option>
176
<option value="interface">Interface</option>
180
<maas-obj-field type="options" key="domain" label="Domain" placeholder="Choose domain"
181
label-width="two" input-width="three" subtle="false"
182
options="domain as domain.name for domain in domains"
183
data-ng-if="convertTo.type === 'device'"></maas-obj-field>
184
<maas-obj-field type="options" subtle="false" key="system_id" label="Device name" placeholder="Select device name"
185
options="device.system_id as device.fqdn for device in devices | orderBy:'fqdn'"
186
label-width="two" label-info="Create as an interface on the selected device." input-width="three"
187
data-ng-if="convertTo.type === 'interface'"></maas-obj-field>
189
<fieldset class="form__fieldset six-col last-col">
190
<maas-obj-field type="options" subtle="false" key="parent" label="Parent" placeholder="Select parent (optional)" placeholder-enabled="true"
191
options="machine.system_id as machine.fqdn for machine in machines | filter:{status_code: 6} | orderBy:'fqdn'"
192
label-width="two" label-info="Assign this device as a child of the parent machine." input-width="three"
193
data-ng-if="convertTo.type === 'device'"></maas-obj-field>
194
<maas-obj-field type="options" subtle="false" key="ip_assignment" label="IP assignment" placeholder="Select IP assignment"
195
options="option[0] as option[1] for option in convertTo.deviceIPOptions" label-width="two" input-width="three"></maas-obj-field>
199
<div class="table__row is-active">
200
<div class="table__data u-float--left">
201
<maas-obj-errors></maas-obj-errors>
203
<div class="table__data u-float--right">
204
<a class="button--base button--inline u-display--desktop" data-ng-click="toggleSelected(selectedDevice)">Cancel</a>
205
<button class="button--secondary button--inline"
206
data-ng-click="convertTo.goTo = true"
207
data-ng-if="!convertTo.$maasForm.getValue('parent')"
208
maas-obj-save>Save and go to device listing</button>
209
<button class="button--secondary button--inline"
210
data-ng-click="convertTo.goTo = true"
211
data-ng-if="convertTo.$maasForm.getValue('parent')"
212
maas-obj-save>Save and go to machine details</button>
213
<button class="button--positive button--inline" maas-obj-save>Save</button>
91
<i class="icon icon--close tooltip u-display--desktop" aria-label="Close"
92
data-ng-click="toggleSelected(discovery.first_seen)">Close</i>
94
<div class="table__dropdown">
95
<div class="table__dropdown-title">
96
<h2 data-ng-click="toggleSelected(selectedDevice)" class="u-float--left">Adding {$ getDiscoveryName(discovery) $}</h2>
97
<i data-ng-click="toggleSelected(selectedDevice)" class="icon icon--remove u-float--right u-margin--top-small u-margin--right-small"></i>
99
<div class="table__row is-active">
100
<div class="table__data table-col--100">
101
<div class="six-col">
103
<dt class="two-col">Mac</dt>
104
<dd class="four-col last-col">{$ discovery.mac_address $}</dd>
105
<dt class="two-col">IP</dt>
106
<dd class="four-col last-col">{$ discovery.ip $}</dd>
107
<dt class="two-col">Rack</dt>
108
<dd class="four-col last-col">{$ discovery.observer_hostname $}</dd>
109
<dt class="two-col">Last seen</dt>
110
<dd class="four-col last-col"><time>{$ discovery.last_seen $}</time></dd>
113
<div class="six-col last-col">
115
<dt class="two-col">Fabric</dt>
116
<dd class="four-col last-col">{$ discovery.fabric_name $}</dd>
117
<dt class="two-col">VLAN</dt>
118
<dd class="four-col last-col">{$ getVLANName(discovery.vlan) $}</dd>
119
<dt class="two-col">Subnet</dt>
120
<dd class="four-col last-col">{$ getSubnetName(discovery.subnet) $}</dd>
125
<div class="table__row is-active u-padding--top-small">
126
<div class="table__data table-col--100">
127
<fieldset class="form__fieldset six-col">
128
<div class="form__group u-display--mobile">
129
<label for="Name" class="form__group-label two-col">Name</label>
130
<div class="form__group-input three-col">
131
<maas-obj-field type="text" key="hostname"
132
disable-label="true" placeholder="Hostname (optional)"></maas-obj-field>
135
<div class="form__group">
136
<label class="form__group-label two-col u-margin--bottom-small">Type</label>
137
<div class="form__group-input three-col">
138
<select name="type" ng-model="convertTo.type">
139
<option value="" disabled>Choose type</option>
140
<option value="device">Device</option>
141
<option value="interface">Interface</option>
145
<maas-obj-field type="options" key="domain" label="Domain" placeholder="Choose domain"
146
label-width="two" input-width="three" subtle="false"
147
options="domain as domain.name for domain in domains"
148
data-ng-if="convertTo.type === 'device'"></maas-obj-field>
149
<maas-obj-field type="options" subtle="false" key="system_id" label="Device name" placeholder="Select device name"
150
options="device.system_id as device.fqdn for device in devices | orderBy:'fqdn'"
151
label-width="two" label-info="Create as an interface on the selected device." input-width="three"
152
data-ng-if="convertTo.type === 'interface'"></maas-obj-field>
154
<fieldset class="form__fieldset six-col last-col">
155
<maas-obj-field type="options" subtle="false" key="parent" label="Parent" placeholder="Select parent (optional)" placeholder-enabled="true"
156
options="machine.system_id as machine.fqdn for machine in machines | filter:{status_code: 6} | orderBy:'fqdn'"
157
label-width="two" label-info="Assign this device as a child of the parent machine." input-width="three"
158
data-ng-if="convertTo.type === 'device'"></maas-obj-field>
159
<maas-obj-field type="options" subtle="false" key="ip_assignment" label="IP assignment" placeholder="Select IP assignment"
160
options="option[0] as option[1] for option in convertTo.deviceIPOptions" label-width="two" input-width="three"></maas-obj-field>
164
<div class="table__row is-active">
165
<div class="table__data u-float--left">
166
<maas-obj-errors></maas-obj-errors>
168
<div class="table__data u-float--right">
169
<a class="button--base button--inline u-display--desktop" data-ng-click="toggleSelected(selectedDevice)">Cancel</a>
170
<button class="button--secondary button--inline"
171
data-ng-click="convertTo.goTo = true"
172
data-ng-if="!convertTo.$maasForm.getValue('parent')"
173
maas-obj-save>Save and go to device listing</button>
174
<button class="button--secondary button--inline"
175
data-ng-click="convertTo.goTo = true"
176
data-ng-if="convertTo.$maasForm.getValue('parent')"
177
maas-obj-save>Save and go to machine details</button>
178
<button class="button--positive button--inline" maas-obj-save>Save</button>