AMBARI-7426. Slider View: Parameter validation page should account for security 
parameters being set. (onechiporenko)


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

Branch: refs/heads/branch-alerts-dev
Commit: 3590d7d41b926cc5dfdc8b58322ebe97a80c80a4
Parents: d46bbdf
Author: Oleg Nechiporenko <onechipore...@apache.org>
Authored: Mon Sep 22 13:29:15 2014 +0300
Committer: Oleg Nechiporenko <onechipore...@apache.org>
Committed: Mon Sep 22 13:29:15 2014 +0300

----------------------------------------------------------------------
 .../assets/data/resource/slider-properties.json |  7 ++++++-
 .../ui/app/controllers/slider_controller.js     | 20 ++++++++++++++++++--
 .../resources/ui/app/models/slider_config.js    |  8 +++++++-
 .../src/main/resources/ui/app/routes/main.js    |  7 ++++++-
 .../src/main/resources/ui/app/translations.js   |  1 +
 5 files changed, 38 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3590d7d4/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
 
b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
index c9b0781..3b69893 100644
--- 
a/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
+++ 
b/contrib/views/slider/src/main/resources/ui/app/assets/data/resource/slider-properties.json
@@ -19,7 +19,12 @@
       "zookeeper.quorum" : 
"slider-1.c.pramod-thangali.internal:2181,slider-2.c.pramod-thangali.internal:2181,slider-3.c.pramod-thangali.internal:2181",
       "ganglia.server.hostname" : "bvc",
       "ganglia.custom.clusters" : 
"'HBaseCluster1','7000','AccumuloCluster1','7001','HBaseCluster2','7002'",
-      "slider.user" : "John Dow"
+      "slider.user" : "John Dow",
+      "slider.security.enabled" : "false",
+      "dfs.namenode.kerberos.principal" : null,
+      "view.kerberos.principal" : null,
+      "view.kerberos.principal.keytab" : null,
+      "yarn.resourcemanager.principal" : null
     }
   },
   "resources" : [

http://git-wip-us.apache.org/repos/asf/ambari/blob/3590d7d4/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
 
b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
index 401c86d..a81854e 100644
--- 
a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
+++ 
b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_controller.js
@@ -67,14 +67,30 @@ App.SliderController = Ember.Controller.extend({
 
   /**
    * After all Slider-configs are loaded, application should check self status
+   * If config <code>required</code>-property is true, its value shouldn't be 
empty
+   * If config depends on some other config (see 
<code>requireDependsOn</code>-property)
+   * and referenced config-value is not-false, current config should have 
not-empty value
    * @method finishSliderConfiguration
    */
   finishSliderConfiguration: function () {
     //check if all services exist
     var errors = [];
     App.SliderApp.store.all('sliderConfig').forEach(function (model) {
-      if (Em.isEmpty(model.get('value')) && model.get('required')) {
-        
errors.push(Em.I18n.t('error.config_is_empty').format(model.get('viewConfigName')));
+      if (model.get('required')) {
+        if (Em.isEmpty(model.get('value'))) {
+          
errors.push(Em.I18n.t('error.config_is_empty').format(model.get('viewConfigName')));
+        }
+      }
+      else {
+        var dependenceConfig = model.get('requireDependsOn');
+        if (!Em.isNone(dependenceConfig)) {
+          var depValue = dependenceConfig.get('value').toLowerCase();
+          if (depValue == "true") {
+            if (Em.isEmpty(model.get('value'))) {
+              
errors.push(Em.I18n.t('error.config_is_empty_2').format(model.get('viewConfigName'),
 dependenceConfig.get('viewConfigName')));
+            }
+          }
+        }
       }
     });
     errors.uniq();

http://git-wip-us.apache.org/repos/asf/ambari/blob/3590d7d4/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js 
b/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js
index a079faf..d8b2be6 100644
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js
+++ b/contrib/views/slider/src/main/resources/ui/app/models/slider_config.js
@@ -44,7 +44,13 @@ App.SliderConfig = DS.Model.extend({
    * Is property required
    * @type {bool}
    */
-  required: DS.attr('bool')
+  required: DS.attr('bool'),
+
+  /**
+   * If provided config has not-false value current config shouldn't be empty
+   * @type {App.SliderConfig}
+   */
+  requireDependsOn: DS.belongsTo('sliderConfig')
 
 });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3590d7d4/contrib/views/slider/src/main/resources/ui/app/routes/main.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/routes/main.js 
b/contrib/views/slider/src/main/resources/ui/app/routes/main.js
index d1e0bb7..7afc85a 100644
--- a/contrib/views/slider/src/main/resources/ui/app/routes/main.js
+++ b/contrib/views/slider/src/main/resources/ui/app/routes/main.js
@@ -58,7 +58,12 @@ App.SliderAppsRoute = Ember.Route.extend({
       Em.Object.create({id: 4, required: true, viewConfigName: 
'zookeeper.quorum', displayName: 'zookeeperQuorum', linkedService: 
'ZOOKEEPER'}),
       Em.Object.create({id: 5, required: false, viewConfigName: 
'ganglia.server.hostname', displayName: 'gangliaServer'}),
       Em.Object.create({id: 6, required: false, viewConfigName: 
'ganglia.custom.clusters', displayName: 'gangliaClusters'}),
-      Em.Object.create({id: 7, required: false, viewConfigName: 'slider.user', 
displayName: 'sliderUser'})
+      Em.Object.create({id: 7, required: false, viewConfigName: 'slider.user', 
displayName: 'sliderUser'}),
+      Em.Object.create({id: 8, required: false, viewConfigName: 
'slider.security.enabled', displayName: 'sliderSecurityEnabled'}),
+      Em.Object.create({id: 9, required: false, requireDependsOn: 8, 
viewConfigName: 'yarn.resourcemanager.principal', displayName: 
'yarnResourceManagerPrincipal'}),
+      Em.Object.create({id: 10, required: false, requireDependsOn: 8, 
viewConfigName: 'dfs.namenode.kerberos.principal', displayName: 
'dfsNamenodeKerberosPrincipal'}),
+      Em.Object.create({id: 11, required: false, requireDependsOn: 8, 
viewConfigName: 'view.kerberos.principal', displayName: 
'viewKerberosPrincipal'}),
+      Em.Object.create({id: 12, required: false, requireDependsOn: 8, 
viewConfigName: 'view.kerberos.principal.keytab', displayName: 
'ViewKerberosPrincipalKeytab'})
     ]));
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3590d7d4/contrib/views/slider/src/main/resources/ui/app/translations.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/translations.js 
b/contrib/views/slider/src/main/resources/ui/app/translations.js
index 6c22176..83be669 100644
--- a/contrib/views/slider/src/main/resources/ui/app/translations.js
+++ b/contrib/views/slider/src/main/resources/ui/app/translations.js
@@ -55,6 +55,7 @@ Em.I18n.translations = {
   },
 
   'error.config_is_empty': 'Config <strong>{0}</strong> should not be empty',
+  'error.config_is_empty_2': 'Config <strong>{0}</strong> should not be empty, 
because <strong>{1}</strong> is set to "true"',
 
   'popup.confirmation.commonHeader': 'Confirmation',
   'question.sure':'Are you sure?',

Reply via email to