Merge ~ya-bo-ng/maas:add-note-to-machine-listing into maas:master

Proposed by Anthony Dillon
Status: Merged
Approved by: Anthony Dillon
Approved revision: ee62a4d7ce228c196b2397a8cc84cd91d7994a2e
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ya-bo-ng/maas:add-note-to-machine-listing
Merge into: maas:master
Diff against target: 111 lines (+27/-7)
5 files modified
src/maasserver/static/partials/machines-table.html (+15/-5)
src/maasserver/testing/factory.py (+4/-2)
src/maasserver/testing/sampledata.py (+6/-0)
src/maasserver/websockets/handlers/machine.py (+1/-0)
src/maasserver/websockets/handlers/node.py (+1/-0)
Reviewer Review Type Date Requested Status
Caleb Ellis (community) Approve
Blake Rouse (community) Approve
Review via email: mp+366186@code.launchpad.net

Commit message

Add note to machine listing

Description of the change

Add note to machine listing and add random with notes to the sample data to make it easier to review.

## QA
- Run `make clean+db`
- Run `make`
- Run `make syncdb`
- Run `make sampledata`
- Run `make start`
- Then load the machine listing
- See you get some notes on machines in the Pool column
- Hover should reveal the rest of the note

## Screenshot
https://screenshots.firefox.com/gCdTZr4jhCpW4Eyd/10.54.72.65

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Looks good.

review: Approve
Revision history for this message
Caleb Ellis (caleb-ellis) wrote :

LGTM! You'll probably get an error in the machine websocket test though because you've added another field

review: Approve
Revision history for this message
Anthony Dillon (ya-bo-ng) wrote :
Revision history for this message
MAAS Lander (maas-lander) wrote :
Revision history for this message
MAAS Lander (maas-lander) wrote :
ee62a4d... by Anthony Dillon

Fix tests

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/static/partials/machines-table.html b/src/maasserver/static/partials/machines-table.html
2index 64de02f..6317850 100644
3--- a/src/maasserver/static/partials/machines-table.html
4+++ b/src/maasserver/static/partials/machines-table.html
5@@ -32,7 +32,10 @@
6 <span role="columnheader" data-ng-click="sortTable('owner')" data-ng-class="{'is-sorted': table.predicate === 'owner', 'sort-asc': table.reverse === false, 'sort-desc': table.reverse === true}">Owner,</span>
7 <div>Tags</div>
8 </th>
9- <th class="p-table__col--pool" title="Pool" role="columnheader" data-ng-click="sortTable('pool.name')" data-ng-class="{'is-sorted': table.predicate === 'pool.name', 'sort-asc': table.reverse === false, 'sort-desc': table.reverse === true}">Pool</th>
10+ <th class="p-table__col--pool p-double-row" title="Pool, Note">
11+ <span role="columnheader" data-ng-click="sortTable('pool.name')" data-ng-class="{'is-sorted': table.predicate === 'pool.name', 'sort-asc': table.reverse === false, 'sort-desc': table.reverse === true}">Pool,</span>
12+ <div>Note</div>
13+ </th>
14 <th class="p-table__col--zone p-double-row" title="Zone">
15 <span role="columnheader" data-ng-click="sortTable('zone.name')" data-ng-class="{'is-sorted': table.predicate === 'zone.name', 'sort-asc': table.reverse === false, 'sort-desc': table.reverse === true}">Zone</span>
16 </th>
17@@ -245,11 +248,18 @@
18 </span>
19 </div>
20 </td>
21- <td class="p-table__col--pool" aria-label="{$ node.pool.name $}">
22+ <td class="p-table__col--pool p-double-row" aria-label="Pool, Note">
23 <div class="p-table-menu">
24- <i class="p-icon--spinner u-animation--spin" data-ng-if="node['set-pool-transition']">Setting pool</i>
25- <span data-ng-if="node.pool.name"><a class="p-link--soft" href="#/pools" title="{$ node.pool.name $}"> {$ node.pool.name $}</a></span>
26- <span data-ng-if="!node.pool.name">-</span>
27+ <div class="p-double-row__rows-container">
28+ <div class="p-double-row__main-row" aria-label="Pool">
29+ <i class="p-icon--spinner u-animation--spin" data-ng-if="node['set-pool-transition']">Setting pool</i>
30+ <span data-ng-if="node.pool.name"><a class="p-link--soft" href="#/pools" title="{$ node.pool.name $}"> {$ node.pool.name $}</a></span>
31+ <span data-ng-if="!node.pool.name">-</span>
32+ </div>
33+ <div data-ng-if="node.description" class="p-double-row__muted-row" aria-label="Note" title="{$ node.description $}">
34+ <span>{$ node.description $}</span>
35+ </div>
36+ </div>
37 <button
38 data-ng-if="node.actions.indexOf('set-pool') !== -1"
39 data-ng-click="toggleMenu(node.system_id + '-pool')"
40diff --git a/src/maasserver/testing/factory.py b/src/maasserver/testing/factory.py
41index 365ab2a..ec327a4 100644
42--- a/src/maasserver/testing/factory.py
43+++ b/src/maasserver/testing/factory.py
44@@ -394,7 +394,7 @@ class Factory(maastesting.factory.Factory):
45
46 def make_Node(
47 self, interface=False, hostname=None, domain=None, status=None,
48- architecture="i386/generic", min_hwe_kernel=None,
49+ architecture="i386/generic", description=None, min_hwe_kernel=None,
50 hwe_kernel=None, node_type=NODE_TYPE.MACHINE, updated=None,
51 created=None, zone=None, networks=None, sortable_name=False,
52 power_type=None, power_parameters=None, power_state=None,
53@@ -418,6 +418,8 @@ class Factory(maastesting.factory.Factory):
54 hostname = self.make_string(20)
55 if domain is None:
56 domain = Domain.objects.get_default_domain()
57+ if description is None:
58+ description = ''
59 if sortable_name:
60 hostname = hostname.lower()
61 if status is None:
62@@ -436,7 +438,7 @@ class Factory(maastesting.factory.Factory):
63 node = Node(
64 hostname=hostname, status=status, architecture=architecture,
65 min_hwe_kernel=min_hwe_kernel, hwe_kernel=hwe_kernel,
66- node_type=node_type, zone=zone,
67+ node_type=node_type, zone=zone, description=description,
68 power_state=power_state, power_state_updated=power_state_updated,
69 domain=domain, bmc=bmc, hardware_uuid=hardware_uuid,
70 ephemeral_deploy=ephemeral_deploy, **kwargs)
71diff --git a/src/maasserver/testing/sampledata.py b/src/maasserver/testing/sampledata.py
72index c34e42f..42454f8 100644
73--- a/src/maasserver/testing/sampledata.py
74+++ b/src/maasserver/testing/sampledata.py
75@@ -429,6 +429,12 @@ def populate_main():
76 interface=False, with_boot_disk=False, power_type='manual',
77 domain=random.choice(domains),
78 memory=random.choice([1024, 4096, 8192]),
79+ description=random.choice([
80+ '',
81+ 'Scheduled for removeal',
82+ 'Firmware old',
83+ 'Earmarked for Project Fuse in April'
84+ ]),
85 cpu_count=random.randint(2, 8))
86 machine.set_random_hostname()
87 machines.append(machine)
88diff --git a/src/maasserver/websockets/handlers/machine.py b/src/maasserver/websockets/handlers/machine.py
89index 8be7f10..2bb40e6 100644
90--- a/src/maasserver/websockets/handlers/machine.py
91+++ b/src/maasserver/websockets/handlers/machine.py
92@@ -235,6 +235,7 @@ class MachineHandler(NodeHandler):
93 "owner",
94 "cpu_count",
95 "cpu_speed",
96+ "description",
97 "memory",
98 "power_state",
99 "domain",
100diff --git a/src/maasserver/websockets/handlers/node.py b/src/maasserver/websockets/handlers/node.py
101index 1a25fa7..76a27f3 100644
102--- a/src/maasserver/websockets/handlers/node.py
103+++ b/src/maasserver/websockets/handlers/node.py
104@@ -260,6 +260,7 @@ class NodeHandler(TimestampedModelHandler):
105 data["distro_series"] = obj.distro_series
106 data["memory"] = obj.display_memory()
107 data["status"] = obj.display_status()
108+ data["description"] = obj.description
109 data["status_code"] = obj.status
110
111 # Filters are only available on machines and devices.

Subscribers

People subscribed via source and target branches