You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by on...@apache.org on 2013/10/17 16:33:14 UTC

git commit: AMBARI-3535. skip "Customize Services" step for services that can't be customized. (onechiporenko)

Updated Branches:
  refs/heads/trunk 02ecc4d18 -> cd0517afb


AMBARI-3535. skip "Customize Services" step for services that can't be customized. (onechiporenko)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/cd0517af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/cd0517af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/cd0517af

Branch: refs/heads/trunk
Commit: cd0517afb0715fd1fd577a48c0a7fd3096ab2add
Parents: 02ecc4d
Author: Oleg Nechiporenko <cv...@yahoo.com>
Authored: Thu Oct 17 17:28:12 2013 +0300
Committer: Oleg Nechiporenko <cv...@yahoo.com>
Committed: Thu Oct 17 17:33:07 2013 +0300

----------------------------------------------------------------------
 ambari-web/app/assets/test/tests.js             |   1 +
 .../controllers/main/service/add_controller.js  |  49 +++++++-
 ambari-web/app/controllers/wizard.js            |   7 +-
 .../app/controllers/wizard/step7_controller.js  |   4 +
 ambari-web/app/routes/add_service_routes.js     |  20 ++-
 .../main/service/add_controller_test.js         | 122 +++++++++++++++++++
 6 files changed, 196 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/cd0517af/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js
index b69b77b..014bf9f 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -35,6 +35,7 @@ require('test/controllers/main/charts/heatmap_metrics/heatmap_metric_cpuWaitIO_t
 require('test/controllers/main/charts/heatmap_metrics/heatmap_metric_diskspaceused_test');
 require('test/controllers/main/charts/heatmap_metrics/heatmap_metric_memoryused_test');
 require('test/controllers/main/charts/heatmap_metrics/heatmap_metric_yarn_ResourceUsed_test');
+require('test/controllers/main/service/add_controller_test');
 require('test/controllers/main/service/reassign_controller_test');
 require('test/controllers/main/dashboard_test');
 require('test/controllers/main/host_test');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/cd0517af/ambari-web/app/controllers/main/service/add_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/add_controller.js b/ambari-web/app/controllers/main/service/add_controller.js
index 92f0f05..04f34cb 100644
--- a/ambari-web/app/controllers/main/service/add_controller.js
+++ b/ambari-web/app/controllers/main/service/add_controller.js
@@ -18,11 +18,12 @@
 
 
 var App = require('app');
-
 App.AddServiceController = App.WizardController.extend({
 
   name: 'addServiceController',
 
+  serviceConfigs:require('data/service_configs'),
+
   totalSteps: 7,
 
   /**
@@ -122,6 +123,9 @@ App.AddServiceController = App.WizardController.extend({
     console.log('selected services ', serviceNames);
 
     this.set('content.skipSlavesStep', !serviceNames.contains('MAPREDUCE') && !serviceNames.contains('HBASE'));
+    if (this.get('content.skipSlavesStep')) {
+      this.get('isStepDisabled').findProperty('step', 3).set('value', this.get('content.skipSlavesStep'));
+    }
   },
 
   /**
@@ -139,6 +143,9 @@ App.AddServiceController = App.WizardController.extend({
     console.log('AddServiceController.selectedServiceNames:', serviceNames);
 
     this.set('content.skipSlavesStep', !serviceNames.contains('MAPREDUCE') && !serviceNames.contains('HBASE'));
+    if (this.get('content.skipSlavesStep')) {
+      this.get('isStepDisabled').findProperty('step', 3).set('value', this.get('content.skipSlavesStep'));
+    }
   },
 
   /**
@@ -165,6 +172,7 @@ App.AddServiceController = App.WizardController.extend({
     this.set('content.masterComponentHosts', masterComponentHosts);
 
     this.set('content.skipMasterStep', this.get('content.masterComponentHosts').everyProperty('isInstalled', true));
+    this.get('isStepDisabled').findProperty('step', 2).set('value', this.get('content.skipMasterStep'));
   },
 
   /**
@@ -187,6 +195,45 @@ App.AddServiceController = App.WizardController.extend({
     console.log("AddServiceController.loadMasterComponentHosts: loaded hosts ", masterComponentHosts);
 
     this.set('content.skipMasterStep', this.get('content.masterComponentHosts').everyProperty('isInstalled', true));
+    this.get('isStepDisabled').findProperty('step', 2).set('value', this.get('content.skipMasterStep'));
+  },
+
+  /**
+   * Does service have any configs
+   * @param {string} serviceName
+   * @returns {boolean}
+   */
+  isServiceConfigurable: function(serviceName) {
+    return this.get('serviceConfigs').mapProperty('serviceName').contains(serviceName);
+  },
+
+  /**
+   * Should Config Step be skipped (based on selected services list)
+   * @returns {boolean}
+   */
+  skipConfigStep: function() {
+    var skipConfigStep = true;
+    var selectedServices = this.get('content.services').filterProperty('isSelected', true).filterProperty('isInstalled', false).mapProperty('serviceName');
+    selectedServices.map(function(serviceName) {
+      skipConfigStep = skipConfigStep && !this.isServiceConfigurable(serviceName);
+    }, this);
+    return skipConfigStep;
+  },
+
+  loadServiceConfigProperties: function() {
+    this._super();
+    if (this.get('currentStep') > 1) {
+      this.set('content.skipConfigStep', this.skipConfigStep());
+      this.get('isStepDisabled').findProperty('step', 4).set('value', this.get('content.skipConfigStep'));
+    }
+  },
+
+  saveServiceConfigProperties: function(stepController) {
+    this._super(stepController);
+    if (this.get('currentStep') > 1) {
+      this.set('content.skipConfigStep', this.skipConfigStep());
+      this.get('isStepDisabled').findProperty('step', 4).set('value', this.get('content.skipConfigStep'));
+    }
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/cd0517af/ambari-web/app/controllers/wizard.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js
index 45ec81f..2488c4c 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -26,19 +26,16 @@ App.WizardController = Em.Controller.extend({
   init: function () {
     this.set('isStepDisabled', []);
     this.clusters = App.Cluster.find();
-    this.isStepDisabled.pushObject(Ember.Object.create({
+    this.get('isStepDisabled').pushObject(Ember.Object.create({
       step: 1,
       value: false
     }));
     for (var i = 2; i <= this.get('totalSteps'); i++) {
-      this.isStepDisabled.pushObject(Ember.Object.create({
+      this.get('isStepDisabled').pushObject(Ember.Object.create({
         step: i,
         value: true
       }));
     }
-    // window.onbeforeunload = function () {
-    // return "You have not saved your document yet.  If you continue, your work will not be saved."
-    //}
   },
 
   setStepsEnable: function () {

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/cd0517af/ambari-web/app/controllers/wizard/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index b46e6eb..ce4a4bc 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -97,6 +97,10 @@ App.WizardStep7Controller = Em.Controller.extend({
     this.set('stepConfigs', serviceConfigs);
     this.activateSpecialConfigs();
     this.set('selectedService', this.get('stepConfigs').filterProperty('showConfig', true).objectAt(0));
+
+    if (this.get('content.skipConfigStep')) {
+      App.router.send('next');
+    }
   },
 
    /**

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/cd0517af/ambari-web/app/routes/add_service_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js
index 95242b9..df71498 100644
--- a/ambari-web/app/routes/add_service_routes.js
+++ b/ambari-web/app/routes/add_service_routes.js
@@ -217,7 +217,25 @@ module.exports = Em.Route.extend({
         controller.connectOutlet('wizardStep8', controller.get('content'));
       })
     },
-    back: Em.Router.transitionTo('step4'),
+    back: function(router){
+      var controller = router.get('addServiceController');
+      if(!controller.get('content.skipConfigStep')) {
+        router.transitionTo('step4');
+      }
+      else {
+        if(!controller.get('content.skipSlavesStep')) {
+          router.transitionTo('step3');
+        }
+        else {
+          if(!controller.get('content.skipMasterStep')) {
+            router.transitionTo('step2');
+          }
+          else {
+            router.transitionTo('step1');
+          }
+        }
+      }
+    },
     next: function (router) {
       var addServiceController = router.get('addServiceController');
       var wizardStep8Controller = router.get('wizardStep8Controller');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/cd0517af/ambari-web/test/controllers/main/service/add_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/add_controller_test.js b/ambari-web/test/controllers/main/service/add_controller_test.js
new file mode 100644
index 0000000..2a2caaa
--- /dev/null
+++ b/ambari-web/test/controllers/main/service/add_controller_test.js
@@ -0,0 +1,122 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+require('controllers/wizard');
+require('controllers/main/service/add_controller');
+
+describe('App.AddServiceController', function() {
+
+  describe('#isServiceConfigurable', function() {
+    var tests = [
+      {
+        services: [
+          {serviceName: 'HDFS'},
+          {serviceName: 'MAPREDUCE'},
+          {serviceName: 'NAGIOS'}
+        ],
+        service: 'HDFS',
+        m: 'Service is configurable',
+        e: true
+      },
+      {
+        services: [
+          {serviceName: 'HDFS'},
+          {serviceName: 'MAPREDUCE'},
+          {serviceName: 'NAGIOS'}
+        ],
+        service: 'PIG',
+        m: 'Service is not configurable',
+        e: false
+      },
+      {
+        services: [],
+        service: 'HDFS',
+        m: 'No services',
+        e: false
+      }
+    ];
+    tests.forEach(function(test) {
+      var controller = App.AddServiceController.create({serviceConfigs: test.services});
+      it('', function() {
+        expect(controller.isServiceConfigurable(test.service)).to.equal(test.e);
+      });
+    });
+  });
+
+  describe('#skipConfigStep', function() {
+    var tests = [
+      {
+        content: {
+          services:[
+            {serviceName: 'HDFS', isInstalled: true, isSelected: true},
+            {serviceName: 'PIG', isInstalled: false, isSelected: true},
+            {serviceName: 'MAPREDUCE', isInstalled: true, isSelected: true}
+          ]
+        },
+        serviceConfigs: [
+          {serviceName: 'HDFS'},
+          {serviceName: 'MAPREDUCE'},
+          {serviceName: 'NAGIOS'}
+        ],
+        m: '2 installed services and 1 new that can\'t be configured',
+        e: true
+      },
+      {
+        content: {
+          services:[
+            {serviceName: 'HDFS', isInstalled: true, isSelected: true},
+            {serviceName: 'NAGIOS', isInstalled: false, isSelected: true},
+            {serviceName: 'MAPREDUCE', isInstalled: true, isSelected: true}
+          ]
+        },
+        serviceConfigs: [
+          {serviceName: 'HDFS'},
+          {serviceName: 'MAPREDUCE'},
+          {serviceName: 'NAGIOS'}
+        ],
+        m: '2 installed services and 1 new that can be configured',
+        e: false
+      },
+      {
+        content: {
+          services:[
+            {serviceName: 'HDFS', isInstalled: true, isSelected: true},
+            {serviceName: 'PIG', isInstalled: false, isSelected: true},
+            {serviceName: 'SQOOP', isInstalled: false, isSelected: true},
+            {serviceName: 'MAPREDUCE', isInstalled: true, isSelected: true}
+          ]
+        },
+        serviceConfigs: [
+          {serviceName: 'HDFS'},
+          {serviceName: 'MAPREDUCE'},
+          {serviceName: 'NAGIOS'}
+        ],
+        m: '2 installed services and 2 new that can\'t be configured',
+        e: true
+      }
+    ];
+    tests.forEach(function(test) {
+      var controller = App.AddServiceController.create({content:{services: test.content.services}, serviceConfigs: test.serviceConfigs});
+      it(test.m, function() {
+        expect(controller.skipConfigStep()).to.equal(test.e);
+      })
+    });
+  });
+
+});