Merge lp:~blake-rouse/maas/fix-1509473 into lp:~maas-committers/maas/trunk

Proposed by Blake Rouse
Status: Merged
Approved by: Blake Rouse
Approved revision: no longer in the source branch.
Merged at revision: 4428
Proposed branch: lp:~blake-rouse/maas/fix-1509473
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 237 lines (+138/-5)
3 files modified
src/maasserver/static/js/angular/controllers/node_details_networking.js (+35/-0)
src/maasserver/static/js/angular/controllers/tests/test_node_details_networking.js (+87/-0)
src/maasserver/static/partials/node-details.html (+16/-5)
To merge this branch: bzr merge lp:~blake-rouse/maas/fix-1509473
Reviewer Review Type Date Requested Status
Andres Rodriguez (community) Approve
Review via email: mp+275944@code.launchpad.net

Commit message

Show radio button for the PXE interface.

To post a comment you must log in.
Revision history for this message
Andres Rodriguez (andreserl) wrote :

lgtm!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/static/js/angular/controllers/node_details_networking.js'
2--- src/maasserver/static/js/angular/controllers/node_details_networking.js 2015-10-27 15:29:25 +0000
3+++ src/maasserver/static/js/angular/controllers/node_details_networking.js 2015-10-28 18:27:31 +0000
4@@ -489,6 +489,26 @@
5 }
6 };
7
8+ // Return true if the interface is the boot interface or has a parent
9+ // that is the boot interface.
10+ $scope.isBootInterface = function(nic) {
11+ if(!angular.isObject(nic)) {
12+ return false;
13+ }
14+
15+ if(nic.is_boot) {
16+ return true;
17+ } else if(nic.type === INTERFACE_TYPE.BOND) {
18+ var i;
19+ for(i = 0; i < nic.members.length; i++) {
20+ if(nic.members[i].is_boot) {
21+ return true;
22+ }
23+ }
24+ }
25+ return false;
26+ };
27+
28 // Get the text for the type of the interface.
29 $scope.getInterfaceTypeText = function(nic) {
30 var text = INTERFACE_TYPE_TEXTS[nic.type];
31@@ -1046,6 +1066,21 @@
32 }
33 };
34
35+ // Return true if the new bond interface has a parent that is a boot
36+ // interface.
37+ $scope.getBondIsBootInterface = function() {
38+ if(!angular.isArray($scope.newBondInterface.parents)) {
39+ return false;
40+ }
41+ var i;
42+ for(i = 0; i < $scope.newBondInterface.parents.length; i++) {
43+ if($scope.newBondInterface.parents[i].is_boot) {
44+ return true;
45+ }
46+ }
47+ return false;
48+ };
49+
50 // Return the MAC address that should be shown as a placeholder. This
51 // this is the MAC address of the primary interface.
52 $scope.getBondPlaceholderMACAddress = function() {
53
54=== modified file 'src/maasserver/static/js/angular/controllers/tests/test_node_details_networking.js'
55--- src/maasserver/static/js/angular/controllers/tests/test_node_details_networking.js 2015-10-27 15:29:25 +0000
56+++ src/maasserver/static/js/angular/controllers/tests/test_node_details_networking.js 2015-10-28 18:27:31 +0000
57@@ -876,6 +876,60 @@
58 });
59 });
60
61+ describe("isBootInterface", function() {
62+
63+ it("returns true if is_boot is true", function() {
64+ var controller = makeController();
65+ var nic = {
66+ is_boot: true
67+ };
68+ expect($scope.isBootInterface(nic)).toBe(true);
69+ });
70+
71+ it("returns false if is_boot is false", function() {
72+ var controller = makeController();
73+ var nic = {
74+ type: "physical",
75+ is_boot: false
76+ };
77+ expect($scope.isBootInterface(nic)).toBe(false);
78+ });
79+
80+ it("returns false if bond has no members with is_boot", function() {
81+ var controller = makeController();
82+ var nic = {
83+ type: "bond",
84+ is_boot: false,
85+ members: [
86+ {
87+ is_boot: false
88+ },
89+ {
90+ is_boot: false
91+ }
92+ ]
93+ };
94+ expect($scope.isBootInterface(nic)).toBe(false);
95+ });
96+
97+ it("returns true if bond has member with is_boot", function() {
98+ var controller = makeController();
99+ var nic = {
100+ type: "bond",
101+ is_boot: false,
102+ members: [
103+ {
104+ is_boot: false
105+ },
106+ {
107+ is_boot: true
108+ }
109+ ]
110+ };
111+ expect($scope.isBootInterface(nic)).toBe(true);
112+ });
113+ });
114+
115 describe("getInterfaceTypeText", function() {
116 var INTERFACE_TYPE_TEXTS = {
117 "physical": "Physical",
118@@ -2940,6 +2994,39 @@
119 });
120 });
121
122+ describe("getBondIsBootInterface", function() {
123+
124+ it("returns false if bond has no members with is_boot", function() {
125+ var controller = makeController();
126+ $scope.newBondInterface = {
127+ parents: [
128+ {
129+ is_boot: false
130+ },
131+ {
132+ is_boot: false
133+ }
134+ ]
135+ };
136+ expect($scope.getBondIsBootInterface()).toBe(false);
137+ });
138+
139+ it("returns true if bond has member with is_boot", function() {
140+ var controller = makeController();
141+ $scope.newBondInterface = {
142+ parents: [
143+ {
144+ is_boot: false
145+ },
146+ {
147+ is_boot: true
148+ }
149+ ]
150+ };
151+ expect($scope.getBondIsBootInterface()).toBe(true);
152+ });
153+ });
154+
155 describe("getBondPlaceholderMACAddress", function() {
156
157 it("returns empty string if primary not set", function() {
158
159=== modified file 'src/maasserver/static/partials/node-details.html'
160--- src/maasserver/static/partials/node-details.html 2015-10-28 14:46:26 +0000
161+++ src/maasserver/static/partials/node-details.html 2015-10-28 18:27:31 +0000
162@@ -327,7 +327,7 @@
163 <header class="table__head">
164 <div class="table__row">
165 <div class="table__header table__column--3"></div>
166- <div class="table__header table__column--15">
167+ <div class="table__header table__column--12">
168 <a class="active"
169 data-ng-class="{ active: column == 'name' }"
170 data-ng-click="column = 'name'">
171@@ -339,6 +339,7 @@
172 MAC
173 </a>
174 </div>
175+ <div class="table__header table__column--3">PXE</div>
176 <div class="table__header table__column--9">Type</div>
177 <div class="table__header table__column--14">Fabric</div>
178 <div class="table__header table__column--14">VLAN</div>
179@@ -359,7 +360,7 @@
180 <label class="checkbox-label" for="{$ getUniqueKey(interface) $}"></label>
181 </span>
182 </div>
183- <div class="table__data table__column--15" data-ng-show="column == 'name'">
184+ <div class="table__data table__column--12" data-ng-show="column == 'name'">
185 <span class="ng-hide" data-ng-show="interface.type == 'alias' || interface.type == 'vlan'">{$ interface.name $}</span>
186 <input type="text" class="table__input"
187 data-ng-show="interface.type != 'alias' && interface.type != 'vlan'"
188@@ -375,7 +376,7 @@
189 </a>
190 </span>
191 </div>
192- <div class="table__data table__column--15 ng-hide" data-ng-show="column == 'mac'">
193+ <div class="table__data table__column--12 ng-hide" data-ng-show="column == 'mac'">
194 {$ interface.mac_address $}
195 <span class="table__label active ng-hide" data-ng-show="interface.members">
196 <a data-ng-click="toggleMembers(interface)">
197@@ -384,6 +385,10 @@
198 </a>
199 </span>
200 </div>
201+ <div class="table__data table__column--3">
202+ <input class="align-center" type="radio" name="bootInterface" checked
203+ data-ng-if="isBootInterface(interface)">
204+ </div>
205 <div class="table__data table__column--9">{$ getInterfaceTypeText(interface) $}</div>
206 <div class="table__data table__column--14">
207 <select class="table__input" name="fabric" id="fabric"
208@@ -454,9 +459,11 @@
209 <div class="table__row table__dropdown-row" data-ng-show="isShowingAdd()">
210 <div class="table__data table__column--3">
211 </div>
212- <div class="table__data table__column--15">
213+ <div class="table__data table__column--12">
214 {$ getAddName() $}
215 </div>
216+ <div class="table__data table__column--3">
217+ </div>
218 <div class="table__data table__column--9">
219 <select class="table__input" name="type" id="type"
220 data-ng-model="newInterface.type"
221@@ -537,11 +544,15 @@
222 <div class="table__row active ng-hide" data-ng-show="isShowingCreateBond()">
223 <div class="table__data table__column--3">
224 </div>
225- <div class="table__data table__column--15">
226+ <div class="table__data table__column--12">
227 <input type="text" class="table__input editible"
228 data-ng-class="{ invalid: isInterfaceNameInvalid(newBondInterface) }"
229 data-ng-model="newBondInterface.name">
230 </div>
231+ <div class="table__data table__column--3">
232+ <input class="align-center" type="radio" name="bondBootInterface" checked
233+ data-ng-if="getBondIsBootInterface()">
234+ </div>
235 <div class="table__data table__column--15">Bond</div>
236 <div class="table__data table__column--67"></div>
237 <div class="table__dropdown">