You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by am...@apache.org on 2018/01/05 07:56:41 UTC
[45/45] ambari git commit: AMBARI-22507. Ambari UI changes to support
Isilon OneFS (amagyar)
AMBARI-22507. Ambari UI changes to support Isilon OneFS (amagyar)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b051a00c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b051a00c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b051a00c
Branch: refs/heads/branch-feature-AMBARI-22008-isilon
Commit: b051a00cb0149b2aba5ccd1ff52a81ce1fac346e
Parents: 7b3207e
Author: Attila Magyar <am...@hortonworks.com>
Authored: Tue Nov 28 22:05:49 2017 +0100
Committer: Attila Magyar <am...@hortonworks.com>
Committed: Fri Jan 5 08:54:46 2018 +0100
----------------------------------------------------------------------
.../app/controllers/wizard/step4_controller.js | 13 ++++-
ambari-web/app/mappers/stack_service_mapper.js | 3 +
ambari-web/app/messages.js | 2 +
ambari-web/app/models/stack_service.js | 17 ++++++
ambari-web/app/templates/wizard/step4.hbs | 58 ++++++++++++++++----
.../test/controllers/wizard/step4_test.js | 29 +++++++++-
6 files changed, 107 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/b051a00c/ambari-web/app/controllers/wizard/step4_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step4_controller.js b/ambari-web/app/controllers/wizard/step4_controller.js
index 8a62f3b..9defa12 100644
--- a/ambari-web/app/controllers/wizard/step4_controller.js
+++ b/ambari-web/app/controllers/wizard/step4_controller.js
@@ -34,11 +34,12 @@ App.WizardStep4Controller = Em.ArrayController.extend({
*/
isAllChecked: function(key, value) {
if (arguments.length > 1) {
- this.filterProperty('isDisabled', false).setEach('isSelected', value);
+ this.filterProperty('isDisabled', false).filterProperty('isDFS', false).setEach('isSelected', value);
return value;
}
return this.filterProperty('isInstalled', false).
filterProperty('isHiddenOnSelectServicePage', false).
+ filterProperty('isDFS', false).
everyProperty('isSelected', true);
}.property('@each.isSelected'),
@@ -59,6 +60,16 @@ App.WizardStep4Controller = Em.ArrayController.extend({
errorStack: [],
/**
+ * Services which are HDFS compatible
+ */
+ fileSystems: function() {
+ var fileSystems = this.filterProperty('isDFS', true);;
+ return fileSystems.map(function(fs) {
+ return App.FileSystem.create({content: fs, services: fileSystems});
+ });
+ }.property('@each.isDFS'),
+
+ /**
* Drop errorStack content on selected state changes.
*/
clearErrors: function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/b051a00c/ambari-web/app/mappers/stack_service_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_service_mapper.js b/ambari-web/app/mappers/stack_service_mapper.js
index f49b4d0..368a182 100644
--- a/ambari-web/app/mappers/stack_service_mapper.js
+++ b/ambari-web/app/mappers/stack_service_mapper.js
@@ -119,6 +119,9 @@ App.stackServiceMapper = App.QuickDataMapper.create({
stackService.is_installable = false;
stackService.is_selected = false;
}
+ if (stackService.service_type === 'HCFS' && stackService.service_name !== 'HDFS') {
+ stackService.is_selected = false;
+ }
if(stackService.selection === "MANDATORY") {
stackService.is_mandatory = true;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b051a00c/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index e59f5fd..4aec83e 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -879,6 +879,8 @@ Em.I18n.translations = {
'installer.step4.header':'Choose Services',
'installer.step4.body':'Choose which services you want to install on your cluster.',
+ 'installer.step4.headerFS':'Choose File System',
+ 'installer.step4.bodyFS':'Choose which file system you want to install on your cluster.',
'installer.step4.fsCheck.popup.header':'File System Required',
'installer.step4.fsCheck.popup.body':'You did not select a File System but one is required. We will automatically add {0}. Is this OK?',
'installer.step4.multipleDFS.popup.header':'Multiple File Systems Selected',
http://git-wip-us.apache.org/repos/asf/ambari/blob/b051a00c/ambari-web/app/models/stack_service.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_service.js b/ambari-web/app/models/stack_service.js
index a84816e..1b583c1 100644
--- a/ambari-web/app/models/stack_service.js
+++ b/ambari-web/app/models/stack_service.js
@@ -71,6 +71,23 @@ var MissingDependency = Ember.Object.extend({
})
});
+App.FileSystem = Ember.ObjectProxy.extend({
+ content: null,
+ services: [],
+
+ isSelected: function(key, aBoolean) {
+ if (arguments.length > 1) {
+ this.clearAllSelection();
+ this.get('content').set('isSelected', aBoolean);
+ }
+ return this.get('content.isSelected');
+ }.property('content.isSelected', 'services.@each.isSelected'),
+
+ clearAllSelection: function() {
+ this.get('services').setEach('isSelected', false);
+ }
+});
+
/**
* This model loads all services supported by the stack
* The model maps to the http://hostname:8080/api/v1/stacks/HDP/versions/${versionNumber}/services?fields=StackServices/*,serviceComponents/*
http://git-wip-us.apache.org/repos/asf/ambari/blob/b051a00c/ambari-web/app/templates/wizard/step4.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step4.hbs b/ambari-web/app/templates/wizard/step4.hbs
index 5a08250..b738f69 100644
--- a/ambari-web/app/templates/wizard/step4.hbs
+++ b/ambari-web/app/templates/wizard/step4.hbs
@@ -17,9 +17,8 @@
}}
<div id="step4" class="wizard-content col-md-9">
- <h4 class="step-title">{{t installer.step4.header}}</h4>
- <p class="step-description">{{t installer.step4.body}}</p>
-
+ <h4 class="step-title">{{t installer.step4.headerFS}}</h4>
+ <p class="step-description">{{t installer.step4.bodyFS}}</p>
<div class="panel panel-default">
<div class="panel-body">
<table class="table table-hover">
@@ -28,23 +27,20 @@
<th {{QAAttr "service-name-header"}} class="col-md-3">{{t common.service}}</th>
<th {{QAAttr "service-version-header"}} id="service-version">{{t common.version}}</th>
<th {{QAAttr "service-description-header"}} id="service-description">{{t common.description}}</th>
- <th>
- {{view App.CheckboxView data-qa="toggle-all" disabledBinding="isInstalled" checkedBinding="isAllChecked"}}
- </th>
</tr>
</thead>
<tbody>
- {{#each service in controller}}
- {{#unless isHiddenOnSelectServicePage}}
- <tr {{QAAttr "service-row"}} {{bindAttr class="service.isSelected:active service.isSelected:service-selected"}} {{action toggleCheckBox service target="view"}}>
+ {{#each service in controller.fileSystems}}
+ {{#unless service.isHiddenOnSelectServicePage}}
+ <tr {{QAAttr "service-row"}} {{bindAttr class="service.isSelected:active service.isSelected:service-selected"}} {{action toggleCheckBox service target="view"}} >
<td {{QAAttr "service-name"}}>{{service.displayNameOnSelectServicePage}}</td>
<td {{QAAttr "service-version"}}>{{service.serviceVersionDisplay}}</td>
<td {{QAAttr "service-description"}}>{{{service.comments}}}</td>
<td>
<div class="checkbox">
{{view App.CheckboxView checkboxClassNamesBinding="service.serviceName" data-qa="toggle-service"
- disabledBinding="service.isDisabled"
- checkedBinding="service.isSelected"
+ disabledBinding="service.isDisabled"
+ checkedBinding="service.isSelected"
}}
</div>
</td>
@@ -55,6 +51,46 @@
</table>
</div>
</div>
+
+ <h4 class="step-title">{{t installer.step4.header}}</h4>
+ <p class="step-description">{{t installer.step4.body}}</p>
+
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <table class="table table-hover">
+ <thead>
+ <tr>
+ <th {{QAAttr "service-name-header"}} class="col-md-3">{{t common.service}}</th>
+ <th {{QAAttr "service-version-header"}} id="service-version">{{t common.version}}</th>
+ <th {{QAAttr "service-description-header"}} id="service-description">{{t common.description}}</th>
+ <th>
+ {{view App.CheckboxView data-qa="toggle-all" disabledBinding="isInstalled" checkedBinding="isAllChecked"}}
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#each service in controller}}
+ {{#unless service.isHiddenOnSelectServicePage}}
+ {{#unless service.isDFS}}
+ <tr {{QAAttr "service-row"}} {{bindAttr class="service.isSelected:active service.isSelected:service-selected"}} {{action toggleCheckBox service target="view"}}>
+ <td {{QAAttr "service-name"}}>{{service.displayNameOnSelectServicePage}}</td>
+ <td {{QAAttr "service-version"}}>{{service.serviceVersionDisplay}}</td>
+ <td {{QAAttr "service-description"}}>{{{service.comments}}}</td>
+ <td>
+ <div class="checkbox">
+ {{view App.CheckboxView checkboxClassNamesBinding="service.serviceName" data-qa="toggle-service"
+ disabledBinding="service.isDisabled"
+ checkedBinding="service.isSelected" }}
+ </div>
+ </td>
+ </tr>
+ {{/unless}}
+ {{/unless}}
+ {{/each}}
+ </tbody>
+ </table>
+ </div>
+ </div>
</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/b051a00c/ambari-web/test/controllers/wizard/step4_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step4_test.js b/ambari-web/test/controllers/wizard/step4_test.js
index 1cd4863..e9942e0 100644
--- a/ambari-web/test/controllers/wizard/step4_test.js
+++ b/ambari-web/test/controllers/wizard/step4_test.js
@@ -78,18 +78,41 @@ describe('App.WizardStep4Controller', function () {
});
describe('#isAllChecked', function () {
- it('should return true if all services are selected', function () {
+ it('should return true if all non DFS services are selected', function () {
controller.setEach('isInstalled', false);
- controller.findProperty('serviceName', 'HDFS').set('isSelected', true);
+ controller.findProperty('serviceName', 'YARN').set('isSelected', true);
+ controller.findProperty('serviceName', 'HDFS').set('isSelected', false);
expect(controller.get('isAllChecked')).to.equal(true);
});
it('should return false if at least one service is not selected', function () {
- controller.findProperty('serviceName', 'HDFS').set('isSelected', false);
+ controller.findProperty('serviceName', 'YARN').set('isSelected', false);
expect(controller.get('isAllChecked')).to.equal(false);
});
});
+ describe('#fileSystems', function () {
+ beforeEach(function () {
+ controller.clear();
+ controller.set('content', generateSelectedServicesContent(['HDFS', 'GLUSTERFS', 'YARN']));
+ });
+
+ it('returns only DFS services', function () {
+ expect(controller.get('fileSystems')).to.have.length(2);
+ expect(controller.get('fileSystems').mapProperty('serviceName')).to.contain('GLUSTERFS');
+ expect(controller.get('fileSystems').mapProperty('serviceName')).to.contain('HDFS');
+ });
+
+ it('allows selecting only one DFS at a time', function () {
+ var fileSystems = controller.get('fileSystems');
+ fileSystems[0].set('isSelected', true);
+ expect(fileSystems[0].get('isSelected')).to.equal(true);
+ expect(fileSystems[1].get('isSelected')).to.equal(false);
+ fileSystems[1].set('isSelected', true);
+ expect(fileSystems[0].get('isSelected')).to.equal(false);
+ expect(fileSystems[1].get('isSelected')).to.equal(true);
+ });
+ });
describe('#multipleDFSs()', function () {
it('should return true if HDFS is selected and GLUSTERFS is selected', function () {
controller.set('content', generateSelectedServicesContent(['HDFS', 'GLUSTERFS']));