Skip to content

Commit

Permalink
Merge pull request fusor#950 from cfchase/osp-flow
Browse files Browse the repository at this point in the history
OSP Register Nodes flow changes
  • Loading branch information
cfchase committed Jun 17, 2016
2 parents 106f6d7 + 813980d commit f132c83
Show file tree
Hide file tree
Showing 31 changed files with 616 additions and 416 deletions.
7 changes: 3 additions & 4 deletions fusor-ember-cli/app/components/add-node-registration.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Ember from 'ember';
import OspNodeForm from '../mixins/osp-node-form-mixin';

export default Ember.Component.extend(OspNodeForm, {
registerNodesMethod: 'manual',
isNewNodeMethodManual: true,
resetErrorsMessageKey: 'add-node-registration.text-f:resetErrors',

addNodeTitle: Ember.computed('nodeInfo.address', function() {
Expand All @@ -25,19 +25,18 @@ export default Ember.Component.extend(OspNodeForm, {
}),

actions: {
addMacAddress() {
this.get('nodeInfo.macAddresses').pushObject(Ember.Object.create({value: ''}));
},
cancelAddNodes() {
this.set('openModal', false);
},
submitAddNodes() {
this.prepManualNodeInfo();
this.sendAction('submitAddNodes', this.get('nodeInfo'));
this.set('openModal', false);
}
},

initInfo() {
this.eventBus.trigger(this.get('resetErrorsMessageKey'));
this.set('manualMacAddresses', '');
}
});
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,20 @@ export default Ember.Component.extend({

deselected: Ember.computed.not('host.selected'),

deselectedTextClass: Ember.computed('deselected', function() {
return this.get('deselected') ? 'new-node-deselected-text' : '';
readyStatusClass: Ember.computed('host.selected', 'host.value', function () {
if (!this.get('host.selected')) {
return 'new-node-detect-deselected';
}

if (Ember.isPresent(this.get('host.value'))) {
return 'new-node-detect-ready';
}

return 'new-node-detect-invalid';
}),

isInvalid: Ember.computed('host.selected', 'host.value', function() {
return this.get('host.selected') && !Ember.isPresent(this.get('host.value'));
}),

selectId: Ember.computed('hostNumber', function () {
Expand Down
2 changes: 1 addition & 1 deletion fusor-ember-cli/app/components/base-f.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export default Ember.Component.extend({
return !Ember.isBlank(this.get('unitsLabel'));
}),

showHelpPopover: Ember.computed('showHelpIndicator', function() {
showHelpPopover: Ember.computed('helpText', function() {
return !Ember.isBlank(this.get('helpText'));
}),

Expand Down
130 changes: 49 additions & 81 deletions fusor-ember-cli/app/components/new-node-registration.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,20 @@ export default Ember.Component.extend(OspNodeForm, {
return this.get('step') === 2;
}),

isNewNodeMethodAuto: Ember.computed('registerNodesMethod', function () {
return this.get('registerNodesMethod') === 'auto_detect';
isNewNodeMethodSpecify: Ember.computed('registerNodesRadio', function () {
return this.get('registerNodesRadio') === 'specify';
}),

isNewNodeMethodCSV: Ember.computed('registerNodesMethod', function () {
return this.get('registerNodesMethod') === 'csv_upload';
isNewNodeMethodAuto: Ember.computed('isNewNodeMethodSpecify', 'registerNodesAuto', function () {
return this.get('isNewNodeMethodSpecify') && this.get('registerNodesAuto');
}),

isNewNodeMethodManual: Ember.computed('registerNodesMethod', function () {
return this.get('registerNodesMethod') === 'manual';
isNewNodeMethodManual: Ember.computed('isNewNodeMethodSpecify', 'registerNodesAuto', function () {
return this.get('isNewNodeMethodSpecify') && !this.get('registerNodesAuto');
}),

isNewNodeMethodCSV: Ember.computed('registerNodesRadio', function () {
return this.get('registerNodesRadio') === 'csv_upload';
}),

isPxeSsh: Ember.computed('nodeInfo.driver', function () {
Expand All @@ -60,63 +64,36 @@ export default Ember.Component.extend(OspNodeForm, {
return Ember.isPresent(this.get('csvErrors'));
}),

hasAutoDetectedNodesMultiMac: Ember.computed('autoDetectedNodesMultiMac.[]', function () {
return this.get('autoDetectedNodesMultiMac.length') > 0;
}),

hasAutoDetectedNodesSingleMac: Ember.computed('autoDetectedNodesSingleMac.[]', function () {
return this.get('autoDetectedNodesSingleMac.length') > 0;
}),

hasAutoDetectedNodes: Ember.computed('hasAutoDetectedNodesMultiMac', 'hasAutoDetectedNodesSingleMac', function () {
return this.get('hasAutoDetectedNodesMultiMac') && this.get('hasAutoDetectedNodesSingleMac');
hasAutoDetectedNodes: Ember.computed('autoDetectedNodes.[]', function () {
return this.get('autoDetectedNodes.length') > 0;
}),

noNodesDetected: Ember.computed('hasAutoDetectedNodes', 'detectNodesCanceled', function () {
return !this.get('hasAutoDetectedNodes') && !this.get('detectNodesCanceled');
}),

numAutoDetectedNodesInvalidCount: Ember.computed(
'autoDetectedNodesMultiMac.@each.value',
'autoDetectedNodesMultiMac.@each.selected',
'autoDetectedNodesSingleMac.@each.value',
'autoDetectedNodesSingleMac.@each.selected',
'autoDetectedNodes.@each.value',
'autoDetectedNodes.@each.selected',
function () {
return this.countAutoDetectedNodes(node => node.get('selected') && !Ember.isPresent(node.get('value')));
return this.countAutoDetectedNodes(node => node.get('selected') && Ember.isBlank(node.get('value')));
}
),

hasInvalidAutoDetectedNodes: Ember.computed('numAutoDetectedNodesInvalidCount', function () {
return this.get('numAutoDetectedNodesInvalidCount') > 0;
}),

numAutoDetectedNodesDeselectedCount: Ember.computed(
'autoDetectedNodesMultiMac.@each.selected',
'autoDetectedNodesSingleMac.@each.selected',
function () {
return this.countAutoDetectedNodes(node => !node.get('selected'));
}
),

hasDeselectedAutoDetectedNodes: Ember.computed('numAutoDetectedNodesDeselectedCount', function () {
return this.get('numAutoDetectedNodesDeselectedCount') > 0;
}),

numAutoDetectedNodesValidCount: Ember.computed(
'autoDetectedNodesMultiMac.@each.value',
'autoDetectedNodesMultiMac.@each.selected',
'autoDetectedNodesSingleMac.@each.value',
'autoDetectedNodesSingleMac.@each.selected',
'autoDetectedNodes.@each.value',
'autoDetectedNodes.@each.selected',
function () {
return this.countAutoDetectedNodes(node => node.get('selected') && Ember.isPresent(node.get('value')));
}
),

countAutoDetectedNodes(matchFn) {
let numMultiMacNodes = this.get('autoDetectedNodesMultiMac').reduce((prev, node) => prev + (matchFn(node) ? 1 : 0), 0);
let numSingleMacNodes = this.get('autoDetectedNodesSingleMac').reduce((prev, node) => prev + (matchFn(node) ? 1 : 0), 0);

return numMultiMacNodes + numSingleMacNodes;
return this.get('autoDetectedNodes').reduce((prev, node) => prev + (matchFn(node) ? 1 : 0), 0);
},

hasValidAutoDetectedNodes: Ember.computed('numAutoDetectedNodesValidCount', function () {
Expand All @@ -128,20 +105,13 @@ export default Ember.Component.extend(OspNodeForm, {
}),

isValidAutoDetectInfo: Ember.computed(
'registerNodesMethod',
'nodeInfo.driver',
'nodeInfo.vendor',
'nodeInfo.address',
'nodeInfo.username',
'nodeInfo.password',
'isNewNodeMethodAuto',
'isValidConnectionInfo',
'selectedVendor',
function () {
return this.get('registerNodesMethod') === 'auto_detect' &&
Ember.isPresent(this.get('nodeInfo.driver')) &&
Ember.isPresent(this.get('selectedVendor')) &&
Ember.isPresent(this.get('nodeInfo.address')) &&
Ember.isPresent(this.get('nodeInfo.username')) &&
Ember.isPresent(this.get('nodeInfo.password')) &&
this.get('hostAddressValidator').isValid(this.get('nodeInfo.address'));
return this.get('isNewNodeMethodAuto') &&
this.get('isValidConnectionInfo') &&
Ember.isPresent(this.get('selectedVendor'));
}),

isValidNewNodeAuto: Ember.computed(
Expand Down Expand Up @@ -189,15 +159,12 @@ export default Ember.Component.extend(OspNodeForm, {
},

submitRegisterNodes() {
console.log('registerNodesMethod', this.get('registerNodesMethod'));

let method = this.get('registerNodesMethod');

if (method === 'manual') {
if (this.get('isNewNodeMethodManual')) {
this.prepManualNodeInfo();
this.sendAction('submitRegisterNodes', this.get('nodeInfo'));
} else if (method === 'csv_upload') {
} else if (this.get('isNewNodeMethodCSV')) {
this.get('csvInfo').forEach(nodeInfo => this.sendAction('submitRegisterNodes', nodeInfo));
} else if (method === 'auto_detect') {
} else if (this.get('isNewNodeMethodAuto')) {
this.prepAutoDetectNodeInfo();
this.sendAction('submitRegisterNodes', this.get('nodeInfo'));
}
Expand All @@ -221,14 +188,15 @@ export default Ember.Component.extend(OspNodeForm, {
this.set('detectNodesCanceled', true);
this.set('autoDetectNodesInProgress', false);
this.set('detectNodesRequestNum', this.get('detectNodesRequestNum') + 1);
this.set('autoDetectedNodesMultiMac', []);
this.set('autoDetectedNodesSingleMac', []);
this.set('autoDetectedNodes', []);
this.set('autoDetectedNodesErrorMsg', null);
}
},

initInfo() {
this.eventBus.trigger(this.get('resetErrorsMessageKey'));
this.set('registerNodesMethod', 'auto_detect');
this.set('registerNodesRadio', 'specify');
this.set('registerNodesAuto', false);
this.set('step', 1);

this.set('nodeInfo', Ember.Object.create({
Expand All @@ -237,13 +205,14 @@ export default Ember.Component.extend(OspNodeForm, {
address: null,
username: null,
password: null,
macAddresses: [Ember.Object.create({value: ''})]
macAddresses: []
}));

this.set('csvInfo', []);
this.set('csvErrors', []);
this.set('autoDetectedNodesMultiMac', []);
this.set('autoDetectedNodesSingleMac', []);
this.set('manualMacAddresses', '');
this.set('autoDetectedNodes', []);
this.set('autoDetectedNodesErrorMsg', []);
},

detectNodes() {
Expand All @@ -254,8 +223,8 @@ export default Ember.Component.extend(OspNodeForm, {
nodeInfo.set('username', nodeInfo.get('username').trim());
nodeInfo.set('vendor', this.get('selectedVendor'));

this.set('autoDetectedNodesMultiMac', []);
this.set('autoDetectedNodesSingleMac', []);
this.set('autoDetectedNodes', []);
this.set('autoDetectedNodesErrorMsg', []);
this.set('detectNodesRequestNum', detectNodesRequestNum);

let driverParams = {
Expand All @@ -280,12 +249,12 @@ export default Ember.Component.extend(OspNodeForm, {
"X-CSRF-Token": Ember.$('meta[name="csrf-token"]').attr('content')
},
data: JSON.stringify(driverParams)
}).then((result) => {
}).then(result => {
if (detectNodesRequestNum === this.get('detectNodesRequestNum')) {
this.updateAutoDetectedNodes(result.nodes);
this.set('autoDetectNodesInProgress', false);
}
}, (error) => {
}).catch(error => {
console.log(error);
if (detectNodesRequestNum === this.get('detectNodesRequestNum')) {
this.set('detectNodesErrorMsg', `Unable to detect nodes. Failed with status code ${error.jqXHR.status}.`);
Expand All @@ -295,15 +264,20 @@ export default Ember.Component.extend(OspNodeForm, {
},

updateAutoDetectedNodes(hostArray) {
let autoDetectedNodesErrorMsg = null;
let autoDetectedNodesMultiMac = [];
let autoDetectedNodesSingleMac = [];
let usedMacs = this.getPortMacAddresses();

if (hostArray.length === 1 && Ember.isEmpty(hostArray[0].mac_addresses)) {
autoDetectedNodesErrorMsg = hostArray[0].hostname;
}

hostArray.forEach(hostHash => {
let host = Ember.Object.create({
name: hostHash.hostname,
macAddresses: hostHash.mac_addresses,
selected: true
selected: false
});

if (!this.autoDetectedNodeIsValid(host, usedMacs)) {
Expand All @@ -319,8 +293,8 @@ export default Ember.Component.extend(OspNodeForm, {
}
});

this.set('autoDetectedNodesMultiMac', autoDetectedNodesMultiMac);
this.set('autoDetectedNodesSingleMac', autoDetectedNodesSingleMac);
this.set('autoDetectedNodesErrorMsg', autoDetectedNodesErrorMsg);
this.set('autoDetectedNodes', autoDetectedNodesMultiMac.concat(autoDetectedNodesSingleMac));
},

autoDetectedNodeIsValid(host, usedMacs) {
Expand All @@ -341,13 +315,7 @@ export default Ember.Component.extend(OspNodeForm, {

prepAutoDetectNodeInfo() {
let nodeInfo = this.get('nodeInfo');
let macAddresses = this.get('autoDetectedNodesMultiMac').filter(node => node.get('selected'));

this.get('autoDetectedNodesSingleMac').forEach(node => {
if (node.get('selected')) {
macAddresses.pushObject(node);
}
});
let macAddresses = this.get('autoDetectedNodes').filter(node => node.get('selected'));

nodeInfo.set('macAddresses', macAddresses);
nodeInfo.set('vendor', this.get('selectedVendor'));
Expand Down

0 comments on commit f132c83

Please sign in to comment.