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?',