You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2015/10/09 21:10:03 UTC

ambari git commit: AMBARI-13379. Ranger plugin toggles should be hidden for the services that are not installed or selected to get install. (jaimin)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.1 4191d8817 -> fb3076352


AMBARI-13379. Ranger plugin toggles should be hidden for the services that are not installed or selected to get install. (jaimin)


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

Branch: refs/heads/branch-2.1
Commit: fb3076352433f4650850e293b96d983e83a255d5
Parents: 4191d88
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Fri Oct 9 12:09:34 2015 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Fri Oct 9 12:09:57 2015 -0700

----------------------------------------------------------------------
 .../server/state/theme/ConfigCondition.java     |  11 ++
 .../services/RANGER/themes/theme_version_1.json |  90 ++++++++++++-
 .../RANGER/configuration/ranger-admin-site.xml  |   2 +-
 .../RANGER/configuration/ranger-env.xml         |   2 +-
 .../RANGER/configuration/ranger-ugsync-site.xml |  28 ++---
 .../services/RANGER/themes/theme_version_2.json | 126 +++++++++++++++++--
 ambari-web/app/mappers/configs/themes_mapper.js |  17 ++-
 .../app/models/configs/config_condition.js      |   5 +
 .../configs/service_config_layout_tab_view.js   |   9 +-
 .../configs/widgets/config_widget_view.js       |  84 +++++++++----
 10 files changed, 305 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-server/src/main/java/org/apache/ambari/server/state/theme/ConfigCondition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/theme/ConfigCondition.java b/ambari-server/src/main/java/org/apache/ambari/server/state/theme/ConfigCondition.java
index 2d98660..bf54f8a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/theme/ConfigCondition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/theme/ConfigCondition.java
@@ -30,6 +30,8 @@ import java.util.List;
 public class ConfigCondition {
   @JsonProperty("configs")
   private List<String> configs;
+  @JsonProperty("resource")
+  private String resource;
   @JsonProperty("if")
   private String ifLabel;
   @JsonProperty("then")
@@ -69,6 +71,15 @@ public class ConfigCondition {
     this.elseLabel = elseLabel;
   }
 
+
+  public String getResource() {
+    return resource;
+  }
+
+  public void setResource(String resource) {
+    this.resource = resource;
+  }
+
   @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
   @JsonIgnoreProperties(ignoreUnknown = true)
   public class ConfigConditionResult {

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/themes/theme_version_1.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/themes/theme_version_1.json b/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/themes/theme_version_1.json
index 901512b..23f1a0b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/themes/theme_version_1.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/themes/theme_version_1.json
@@ -57,23 +57,103 @@
       "configs": [
         {
           "config": "ranger-env/ranger-hdfs-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col1"
+          "subsection-name": "section-ranger-plugin-row1-col1",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "HDFS",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-hive-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col1"
+          "subsection-name": "section-ranger-plugin-row1-col1",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "HIVE",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-hbase-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col2"
+          "subsection-name": "section-ranger-plugin-row1-col2",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "HBASE",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-storm-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col2"
+          "subsection-name": "section-ranger-plugin-row1-col2",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "STORM",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-knox-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col3"
+          "subsection-name": "section-ranger-plugin-row1-col3",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "KNOX",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         }
       ]
     },

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-admin-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-admin-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-admin-site.xml
index 49813d8..c2e94e2 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-admin-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-admin-site.xml
@@ -270,7 +270,7 @@
   <property>
     <name>ranger.ldap.ad.domain</name>
     <display-name>Domain Name (AD specific)</display-name>
-    <value>localhost</value>
+    <value></value>
     <description>AD domain, only used if Authentication method is AD</description>
     <description></description>
     <value-attributes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-env.xml
index 5ed7b22..a25b891 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-env.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-env.xml
@@ -28,7 +28,7 @@
 
   <property>
     <name>create_db_dbuser</name>
-    <value>false</value>
+    <value>true</value>
     <display-name>Setup Database and Databse User</display-name>
     <description>If set to Yes, Ranger will Setup Database and Databse User. This will require to specify Database root user and password</description>
     <value-attributes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-ugsync-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-ugsync-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-ugsync-site.xml
index 4c12322..6f8d810 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-ugsync-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-ugsync-site.xml
@@ -178,8 +178,8 @@
   <property>
     <name>ranger.usersync.ldap.url</name>
     <display-name>LDAP (AD) URL</display-name>
-    <value>ldap://localhost:389</value>
-    <description>LDAP server URL</description>
+    <value></value>
+    <description>LDAP server URL. Example value = ldap://localhost:389</description>
   </property>
 
   <property>
@@ -225,7 +225,7 @@
   <property>
     <name>ranger.usersync.ldap.user.searchbase</name>
     <display-name>User Search Base</display-name>
-    <value>ou=users,dc=xasecure,dc=net</value>
+    <value></value>
     <description>"# search base for users
 # sample value would be ou=users,dc=hadoop,dc=apache,dc=org
 # overrides value specified in ranger.usersync.ldap.searchBase"</description>
@@ -353,7 +353,7 @@
   <property>
     <name>ranger.usersync.group.searchbase</name>
     <display-name>Group Search Base</display-name>
-    <value> </value>
+    <value></value>
     <description>"# search base for groups
 # sample value would be ou=groups,dc=hadoop,dc=apache,dc=org
 # overrides value specified in ranger.usersync.ldap.searchBase,  ranger.usersync.ldap.user.searchbase
@@ -375,44 +375,32 @@
   <property>
     <name>ranger.usersync.group.objectclass</name>
     <display-name>Group Object Class</display-name>
-    <value> </value>
+    <value></value>
     <description></description>
-    <value-attributes>
-      <empty-value-valid>true</empty-value-valid>
-    </value-attributes>
   </property>
 
   <property>
     <name>ranger.usersync.group.searchfilter</name>
-    <value> </value>
+    <value></value>
     <display-name>Group Search Filter</display-name>
     <description>"# optional additional filter constraining the groups selected for syncing
 # a sample value would be (dept=eng)
 # please customize the value to suit your deployment
 # default value is empty"</description>
-    <value-attributes>
-      <empty-value-valid>true</empty-value-valid>
-    </value-attributes>
   </property>
 
   <property>
     <name>ranger.usersync.group.nameattribute</name>
     <display-name>Group Name Attribute</display-name>
-    <value> </value>
+    <value></value>
     <description>LDAP group name attribute</description>
-    <value-attributes>
-      <empty-value-valid>true</empty-value-valid>
-    </value-attributes>
   </property>
 
   <property>
     <name>ranger.usersync.group.memberattributename</name>
     <display-name>Group Member Attribute</display-name>
-    <value> </value>
+    <value></value>
     <description>LDAP group member attribute name</description>
-    <value-attributes>
-      <empty-value-valid>true</empty-value-valid>
-    </value-attributes>
   </property>
 
   <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/themes/theme_version_2.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/themes/theme_version_2.json b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/themes/theme_version_2.json
index 540c7f5..d19d5fc 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/themes/theme_version_2.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/themes/theme_version_2.json
@@ -792,31 +792,143 @@
         },
         {
           "config": "ranger-env/ranger-hdfs-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col1"
+          "subsection-name": "section-ranger-plugin-row1-col1",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "HDFS",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-yarn-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col1"
+          "subsection-name": "section-ranger-plugin-row1-col1",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "YARN",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-hive-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col1"
+          "subsection-name": "section-ranger-plugin-row1-col1",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "HIVE",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-hbase-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col2"
+          "subsection-name": "section-ranger-plugin-row1-col2",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "HBASE",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-storm-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col2"
+          "subsection-name": "section-ranger-plugin-row1-col2",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "STORM",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-knox-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col3"
+          "subsection-name": "section-ranger-plugin-row1-col3",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "KNOX",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         },
         {
           "config": "ranger-env/ranger-kafka-plugin-enabled",
-          "subsection-name": "section-ranger-plugin-row1-col3"
+          "subsection-name": "section-ranger-plugin-row1-col3",
+          "depends-on": [
+            {
+              "resource": "service",
+              "if": "KAFKA",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
         }
       ]
     },

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-web/app/mappers/configs/themes_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/themes_mapper.js b/ambari-web/app/mappers/configs/themes_mapper.js
index e23b691..2fc9641 100644
--- a/ambari-web/app/mappers/configs/themes_mapper.js
+++ b/ambari-web/app/mappers/configs/themes_mapper.js
@@ -225,12 +225,17 @@ App.themesMapper = App.QuickDataMapper.create({
       configCondition.id = configProperty.get('id') + '_' + index;
       configCondition.config_name =  configProperty.get('name');
       configCondition.file_name =  configProperty.get('filename');
-      configCondition.configs =  _configCondition.configs.map(function(item) {
-        var result = {};
-        result.fileName = item.split('/')[0] + '.xml';
-        result.configName = item.split('/')[1];
-        return result;
-      });
+      if (_configCondition.configs && _configCondition.configs.length) {
+        configCondition.configs = _configCondition.configs.map(function (item) {
+          var result = {};
+          result.fileName = item.split('/')[0] + '.xml';
+          result.configName = item.split('/')[1];
+          return result;
+        });
+      }
+
+      configCondition.resource = _configCondition.resource || 'config';
+
       configConditionsCopy.pushObject(configCondition);
     }, this);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-web/app/models/configs/config_condition.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/config_condition.js b/ambari-web/app/models/configs/config_condition.js
index 26cf219..f978424 100644
--- a/ambari-web/app/models/configs/config_condition.js
+++ b/ambari-web/app/models/configs/config_condition.js
@@ -47,6 +47,11 @@ App.ConfigCondition = DS.Model.extend({
   configs: DS.attr('array', {defaultValue: []}),
 
   /**
+   * resource can be `config`, `service`
+   */
+  resource: DS.attr('string', {defaultValue: 'config'}),
+
+  /**
    * conditional String which can be evaluated to boolean result.
    * If evaluated result of this staring is true then use the statement provided by `then` attribute.
    * Otherwise use the attribute provided by `else` attributes

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
index 5cce947..2f23f2d 100644
--- a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
+++ b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
@@ -119,9 +119,14 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
         stackConfigProperty: config
       };
 
+
       var configConditions = App.ConfigCondition.find().filter(function (_configCondition) {
-        var conditionalConfigs = _configCondition.get('configs').filterProperty('fileName', config.get('filename')).filterProperty('configName', config.get('name'));
-        return (conditionalConfigs && conditionalConfigs.length);
+        // Filter config condition depending on the value of another config
+        var conditionalConfigs = (_configCondition.get('configs')||[]).filterProperty('fileName', config.get('filename')).filterProperty('configName', config.get('name'));
+        // Filter config condition depending on the service existence or service state
+        var serviceConfigCondition = ((_configCondition.get('configName') === config.get('name')) &&  (_configCondition.get('fileName') === config.get('filename')) &&  (_configCondition.get('resource') === 'service'));
+        var conditions = conditionalConfigs.concat(serviceConfigCondition);
+        return ((conditions && conditions.length));
       }, this);
 
       if (configConditions && configConditions.length) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb307635/ambari-web/app/views/common/configs/widgets/config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/config_widget_view.js b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
index 5fa6430..f1c0b93 100644
--- a/ambari-web/app/views/common/configs/widgets/config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
@@ -379,7 +379,10 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
     var configConditions = this.get('config.configConditions');
     if (configConditions && configConditions.length) {
       this.configValueObserver();
-      this.addObserver('config.value', this, this.configValueObserver);
+      var isConditionConfigDependent =  configConditions.filterProperty('resource', 'config').length;
+      if (isConditionConfigDependent) {
+        this.addObserver('config.value', this, this.configValueObserver);
+      }
     }
   },
 
@@ -393,42 +396,69 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
     var configConditions = this.get('config.configConditions');
     var serviceName = this.get('config.serviceName');
     var serviceConfigs = this.get('controller.stepConfigs').findProperty('serviceName',serviceName).get('configs');
+    var isConditionTrue;
     configConditions.forEach(function(configCondition){
       var ifStatement =  configCondition.get("if");
-      var splitIfCondition = ifStatement.split('===');
-      var ifCondition =  splitIfCondition[0];
-      var result = splitIfCondition[1] || "true";
-      var conditionalConfigName = configCondition.get("configName");
-      var conditionalConfigFileName = configCondition.get("fileName");
-      var parseIfConditionVal = ifCondition;
-      var regex = /\$\{.*?\}/g;
-      var configStrings = ifCondition.match(regex);
-      configStrings.forEach(function(_configString){
-        var configObject = _configString.substring(2, _configString.length-1).split("/");
-        var config = serviceConfigs.filterProperty('filename',configObject[0] + '.xml').findProperty('name', configObject[1]);
-        if (config) {
-          var configValue = config.get('value');
-          parseIfConditionVal = parseIfConditionVal.replace(_configString, configValue);
-        }
-      }, this);
-
-      var isConditionTrue =  window.eval(JSON.stringify(parseIfConditionVal.trim())) === result.trim();
-      var action = isConditionTrue ? configCondition.get("then") : configCondition.get("else");
-      var valueAttributes = action.property_value_attributes;
-      for (var key in valueAttributes) {
-        if (valueAttributes.hasOwnProperty(key)) {
-          var valueAttribute = App.StackConfigValAttributesMap[key] || key;
-          var conditionalConfig = serviceConfigs.filterProperty('filename',conditionalConfigFileName).findProperty('name', conditionalConfigName);
-          if (conditionalConfig) {
-            conditionalConfig.set(valueAttribute, valueAttributes[key]);
+      if (configCondition.get("resource") === 'config') {
+        var splitIfCondition = ifStatement.split('===');
+        var ifCondition =  splitIfCondition[0];
+        var result = splitIfCondition[1] || "true";
+        var parseIfConditionVal = ifCondition;
+        var regex = /\$\{.*?\}/g;
+        var configStrings = ifCondition.match(regex);
+        configStrings.forEach(function(_configString){
+          var configObject = _configString.substring(2, _configString.length-1).split("/");
+          var config = serviceConfigs.filterProperty('filename',configObject[0] + '.xml').findProperty('name', configObject[1]);
+          if (config) {
+            var configValue = config.get('value');
+            parseIfConditionVal = parseIfConditionVal.replace(_configString, configValue);
           }
+        }, this);
+
+        isConditionTrue =  window.eval(JSON.stringify(parseIfConditionVal.trim())) === result.trim();
+        this.changeConfigAttribute(configCondition, isConditionTrue);
+      } else if (configCondition.get("resource") === 'service') {
+        var service = App.Service.find().findProperty('serviceName', ifStatement);
+        var serviceName;
+        if (service) {
+          isConditionTrue = true;
+        } else if (!service && this.get('controller.allSelectedServiceNames') && this.get('controller.allSelectedServiceNames').length) {
+          isConditionTrue = this.get('controller.allSelectedServiceNames').contains(ifStatement);
+        } else {
+          isConditionTrue = false;
         }
+        this.changeConfigAttribute(configCondition, isConditionTrue);
       }
     }, this);
   },
 
 
   /**
+   *
+   * @param configCondition {App.ConfigCondition}
+   * @param isConditionTrue {boolean}
+   */
+  changeConfigAttribute: function(configCondition, isConditionTrue) {
+    var conditionalConfigName = configCondition.get("configName");
+    var conditionalConfigFileName = configCondition.get("fileName");
+    var serviceName = this.get('config.serviceName');
+    var serviceConfigs = this.get('controller.stepConfigs').findProperty('serviceName',serviceName).get('configs');
+    var action = isConditionTrue ? configCondition.get("then") : configCondition.get("else");
+    var valueAttributes = action.property_value_attributes;
+    for (var key in valueAttributes) {
+      if (valueAttributes.hasOwnProperty(key)) {
+        var valueAttribute = App.StackConfigValAttributesMap[key] || key;
+        var conditionalConfig = serviceConfigs.filterProperty('filename',conditionalConfigFileName).findProperty('name', conditionalConfigName);
+        if (conditionalConfig) {
+          conditionalConfig.set(valueAttribute, valueAttributes[key]);
+        }
+      }
+    }
+  },
+
+
+
+  /**
    * set widget value same as config value
    * useful for widgets that work with intermediate config value, not original
    * for now used in slider widget