浏览代码

AMBARI-1147. Handling Hive/HCat/WebHCat configuration parameters with Ambari Web. (yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1431618 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako 12 年之前
父节点
当前提交
d4ef1be151

+ 5 - 2
ambari-web/app/controllers/installer.js

@@ -286,6 +286,8 @@ App.InstallerController = App.WizardController.extend({
     App.db.setServiceConfigProperties(serviceConfigProperties);
     this.set('content.serviceConfigProperties', serviceConfigProperties);
 
+    //TODO: Uncomment below code to enable slave Configuration
+ /*
     var slaveConfigProperties = [];
     stepController.get('stepConfigs').forEach(function (_content) {
       if (_content.get('configCategories').someProperty('isForSlaveComponent', true)) {
@@ -305,6 +307,7 @@ App.InstallerController = App.WizardController.extend({
     }, this);
     App.db.setSlaveProperties(slaveConfigProperties);
     this.set('content.slaveGroupProperties', slaveConfigProperties);
+    */
   },
 
   /**
@@ -363,8 +366,8 @@ App.InstallerController = App.WizardController.extend({
       case '7':
         this.loadServiceConfigProperties();
         // loadSlaveGroupProperties depends on loadSlaveComponentHosts; call loadSlaveComponentHosts first
-        this.loadSlaveComponentHosts();
-        this.loadSlaveGroupProperties();
+       // this.loadSlaveComponentHosts();
+       // this.loadSlaveGroupProperties();
       case '6':
         this.loadSlaveComponentHosts();
         this.loadClients();

+ 0 - 1
ambari-web/app/controllers/main/service/add_controller.js

@@ -488,7 +488,6 @@ App.AddServiceController = App.WizardController.extend({
         this.load('cluster');
       case '4':
         this.loadServiceConfigProperties();
-        this.loadSlaveGroupProperties();
       case '3':
         this.loadServices();
         this.loadClients();

+ 14 - 1
ambari-web/app/controllers/wizard/step5_controller.js

@@ -28,6 +28,18 @@ App.WizardStep5Controller = Em.Controller.extend({
   selectedServicesMasters:[],
   zId:0,
 
+  hasWebHCatServer: function () {
+    return this.get('selectedServicesMasters').findProperty('component_name', 'WEBHCAT_SERVER');
+  }.property('selectedServicesMasters'),
+
+  updateWebHCatHost: function () {
+    var hiveServer =  this.get('selectedServicesMasters').findProperty('component_name', 'HIVE_SERVER');
+    var webHCatServer = this.get('selectedServicesMasters').findProperty('component_name', 'WEBHCAT_SERVER');
+    if (hiveServer && webHCatServer) {
+      this.get('selectedServicesMasters').findProperty('component_name', 'WEBHCAT_SERVER').set('selectedHost', hiveServer.get('selectedHost'));
+    }
+  }.observes('selectedServicesMasters.@each.selectedHost'),
+
   components:require('data/service_components'),
 
   clearStep:function () {
@@ -110,7 +122,6 @@ App.WizardStep5Controller = Em.Controller.extend({
       var componentInfo = masterComponents.filterProperty('service_name', services[index]);
 
       componentInfo.forEach(function (_componentInfo) {
-
         if (_componentInfo.component_name == 'ZOOKEEPER_SERVER') {
           var savedComponents = masterHosts.filterProperty('component', _componentInfo.component_name);
           if (savedComponents.length) {
@@ -137,6 +148,7 @@ App.WizardStep5Controller = Em.Controller.extend({
               zooKeeperHost.availableHosts = [];
               zooKeeperHost.serviceId = services[index];
               zooKeeperHost.isInstalled = false;
+              zooKeeperHost.isWebHCatServer = false;
               resultComponents.add(zooKeeperHost);
             });
 
@@ -150,6 +162,7 @@ App.WizardStep5Controller = Em.Controller.extend({
           componentObj.isInstalled = savedComponent ? savedComponent.isInstalled : App.Component.find().someProperty('componentName', _componentInfo.component_name);
           componentObj.serviceId = services[index];
           componentObj.availableHosts = [];
+          componentObj.isWebHCatServer = _componentInfo.component_name == 'WEBHCAT_SERVER';
           resultComponents.add(componentObj);
         }
       }, this);

+ 2 - 11
ambari-web/app/controllers/wizard/step7_controller.js

@@ -76,7 +76,6 @@ App.WizardStep7Controller = Em.Controller.extend({
     var serviceConfigs = this.get('serviceConfigs');
     var advancedConfig = this.get('content.advancedServiceConfig') || [];
     this.loadAdvancedConfig(serviceConfigs,advancedConfig);
-    this.loadHostConfigs();
     this.loadCustomConfig();
     this.renderServiceConfigs(serviceConfigs);
     var storedServices = this.get('content.serviceConfigProperties');
@@ -135,13 +134,6 @@ App.WizardStep7Controller = Em.Controller.extend({
     }, this);
   },
 
-  /*
-  loads host related configs obtained from server.
-   */
-  loadHostConfigs: function() {
-
-  },
-
 
   /**
    * Render a custom conf-site box for entering properties that will be written in *-site.xml files of the services
@@ -174,14 +166,13 @@ App.WizardStep7Controller = Em.Controller.extend({
         configs: []
       });
 
-        if (this.get('allInstalledServiceNames').contains(serviceConfig.serviceName) || serviceConfig.serviceName === 'MISC') {
+      if (this.get('allInstalledServiceNames').contains(serviceConfig.serviceName) || serviceConfig.serviceName === 'MISC') {
 
         this.loadComponentConfigs(_serviceConfig, serviceConfig);
 
         console.log('pushing ' + serviceConfig.serviceName, serviceConfig);
 
-        if(this.get('selectedServiceNames').contains(serviceConfig.serviceName))
-        {
+        if(this.get('selectedServiceNames').contains(serviceConfig.serviceName) || serviceConfig.serviceName === 'MISC') {
           serviceConfig.showConfig = true;
         }
 

+ 14 - 12
ambari-web/app/controllers/wizard/step8_controller.js

@@ -48,7 +48,7 @@ App.WizardStep8Controller = Em.Controller.extend({
     this.loadGlobals();
     this.loadConfigs();
     this.setCustomConfigs();
-    this.loadSlaveConfiguration();
+    //this.loadSlaveConfiguration();
     this.loadClusterInfo();
     this.loadServices();
     this.set('isSubmitDisabled', false);
@@ -460,14 +460,15 @@ App.WizardStep8Controller = Em.Controller.extend({
   loadDnValue: function (dnComponent) {
     var dnHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'DataNode');
     var totalDnHosts = dnHosts.hosts.length;
-    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'DATANODE').groups.length;
+   /* var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'DATANODE').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
     } else {
       groupLabel = 'groups';
     }
-    dnComponent.set('component_value', totalDnHosts + ' hosts ' + '(' + totalGroups + ' ' + groupLabel + ')');
+    */
+    dnComponent.set('component_value', totalDnHosts + ' hosts');
   },
 
 
@@ -498,14 +499,15 @@ App.WizardStep8Controller = Em.Controller.extend({
   loadTtValue: function (ttComponent) {
     var ttHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'TaskTracker');
     var totalTtHosts = ttHosts.hosts.length;
-    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'TASKTRACKER').groups.length;
+   /* var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'TASKTRACKER').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
     } else {
       groupLabel = 'groups';
     }
-    ttComponent.set('component_value', totalTtHosts + ' hosts ' + '(' + totalGroups + ' ' + groupLabel + ')');
+    */
+    ttComponent.set('component_value', totalTtHosts + ' hosts');
   },
 
   /**
@@ -576,14 +578,14 @@ App.WizardStep8Controller = Em.Controller.extend({
   loadRegionServerValue: function (rsComponent) {
     var rsHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'RegionServer');
     var totalRsHosts = rsHosts.hosts.length;
-    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'HBASE_REGIONSERVER').groups.length;
+   /* var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'HBASE_REGIONSERVER').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
     } else {
       groupLabel = 'groups';
-    }
-    rsComponent.set('component_value', totalRsHosts + ' hosts ' + '(' + totalGroups + ' ' + groupLabel + ')');
+    } */
+    rsComponent.set('component_value', totalRsHosts + ' hosts');
   },
 
   /**
@@ -1025,18 +1027,18 @@ App.WizardStep8Controller = Em.Controller.extend({
     var selectedServices = this.get('selectedServices');
     if (!this.get('content.isWizard')) {
       this.createConfigSiteForService(this.createGlobalSiteObj());
-      this.createGlobalSitePerSlaveGroup();
+     // this.createGlobalSitePerSlaveGroup();
       this.createConfigSiteForService(this.createCoreSiteObj());
       this.createConfigSiteForService(this.createHdfsSiteObj());
-      this.createHdfsSitePerSlaveGroup('HDFS');
+      //this.createHdfsSitePerSlaveGroup('HDFS');
     }
     if (selectedServices.someProperty('serviceName', 'MAPREDUCE')) {
       this.createConfigSiteForService(this.createMrSiteObj());
-      this.createMrSitePerSlaveGroup('MAPREDUCE');
+      //this.createMrSitePerSlaveGroup('MAPREDUCE');
     }
     if (selectedServices.someProperty('serviceName', 'HBASE')) {
       this.createConfigSiteForService(this.createHbaseSiteObj());
-      this.createHbaseSitePerSlaveGroup('HBASE');
+      //this.createHbaseSitePerSlaveGroup('HBASE');
     }
     if (selectedServices.someProperty('serviceName', 'OOZIE')) {
       this.createConfigSiteForService(this.createOozieSiteObj('OOZIE'));

+ 7 - 7
ambari-web/app/data/services.js

@@ -81,24 +81,24 @@ module.exports = [
     description: Em.I18n.t('services.oozie.description')
   },
   {
-    serviceName: 'ZOOKEEPER',
-	  displayName: 'ZooKeeper',
+    serviceName: 'HCATALOG',
+    displayName: 'HCatalog',
     isDisabled: false,
     isSelected: true,
     isHidden: true
   },
   {
-    serviceName: 'HCATALOG',
-	  displayName: 'HCatalog',
+    serviceName: 'WEBHCAT',
+    displayName: 'WebHCat',
     isDisabled: false,
     isSelected: true,
     isHidden: true
   },
   {
-    serviceName: 'WEBHCAT',
-    displayName: 'WebHCat',
+    serviceName: 'ZOOKEEPER',
+	  displayName: 'ZooKeeper',
     isDisabled: false,
     isSelected: true,
     isHidden: true
-  }
+  },
 ]

+ 1 - 0
ambari-web/app/messages.js

@@ -118,6 +118,7 @@ Em.I18n.translations = {
   'installer.step5.header':'Assign Masters',
   'installer.step5.attention':' hosts not running master services',
   'installer.step5.body':'Assign master components to hosts you want to run them on.',
+  'installer.step5.body.webhcat':'<i class="icon-asterisks">&#10037</i> Hive Server and WebHCat Server will be co-hosted on the same server.',
 
   'installer.step6.header':'Assign Slaves and Clients',
   'installer.step6.body':'Assign slave and client components to hosts you want to run them on.<br/>Hosts that are assigned master components are shown with <i class=icon-asterisks>&#10037</i>. <br/>&quot;Client&quot; will install ',

+ 11 - 0
ambari-web/app/models/service_config.js

@@ -114,6 +114,7 @@ App.ServiceConfigProperty = Ember.Object.extend({
   isRequired: true, // by default a config property is required
   isReconfigurable: true, // by default a config property is reconfigurable
   isEditable: true, // by default a config property is editable
+  isVisible: true,
   errorMessage: '',
   serviceConfig: null, // points to the parent App.ServiceConfig object
   filename: '',
@@ -129,6 +130,7 @@ App.ServiceConfigProperty = Ember.Object.extend({
     var masterComponentHostsInDB = App.db.getMasterComponentHosts();
     //console.log("value in initialvalue: " + JSON.stringify(masterComponentHostsInDB));
     var hostsInfo = App.db.getHosts(); // which we are setting in installerController in step3.
+    var slaveComponentHostsInDB = App.db.getSlaveComponentHosts();
     var isOnlyFirstOneNeeded = true;
     switch (this.get('name')) {
       case 'namenode_host':
@@ -138,12 +140,21 @@ App.ServiceConfigProperty = Ember.Object.extend({
       case 'snamenode_host':
         this.set('value', masterComponentHostsInDB.findProperty('component', 'SECONDARY_NAMENODE').hostName);
         break;
+      case 'datanode_hosts':
+        this.set('value', slaveComponentHostsInDB.findProperty('componentName', 'DATANODE').hosts.mapProperty('hostName'));
+        break;
       case 'jobtracker_host':
         this.set('value', masterComponentHostsInDB.findProperty('component', 'JOBTRACKER').hostName);
         break;
+      case 'tasktracker_hosts':
+        this.set('value', slaveComponentHostsInDB.findProperty('componentName', 'TASKTRACKER').hosts.mapProperty('hostName'));
+        break;
       case 'hbasemaster_host':
         this.set('value', masterComponentHostsInDB.findProperty('component', 'HBASE_MASTER').hostName);
         break;
+      case 'regionserver_hosts':
+        this.set('value', slaveComponentHostsInDB.findProperty('componentName', 'HBASE_REGIONSERVER').hosts.mapProperty('hostName'));
+        break;
       case 'hivemetastore_host':
         this.set('value', masterComponentHostsInDB.findProperty('component', 'HIVE_SERVER').hostName);
         break;

+ 1 - 1
ambari-web/app/routes/add_service_routes.js

@@ -135,7 +135,7 @@ module.exports = Em.Route.extend({
         addServiceController.get('content').set('serviceConfigProperties', null);
         App.db.setServiceConfigProperties(null);
         App.db.setSlaveProperties(null);
-        addServiceController.loadSlaveGroupProperties();
+        //addServiceController.loadSlaveGroupProperties();
         addServiceController.loadAdvancedConfigs();
         router.transitionTo('step4');
       }

+ 8 - 0
ambari-web/app/styles/application.less

@@ -1448,6 +1448,10 @@ a:focus {
     white-space: nowrap;
   }
 
+  label.host-name {
+    padding-top: 5px;
+  }
+
   .round-corners {
     border-radius: 8px;
     -webkit-border-radius: 8px;
@@ -2217,3 +2221,7 @@ ul.inline li {
 #hosts .table a.ui-icon-circle-close {
   margin-top: 6px;
 }
+
+i.icon-asterisks {
+  color: #FF4B4B;
+}

+ 4 - 7
ambari-web/app/templates/wizard/slave_hosts.hbs

@@ -17,14 +17,11 @@
 }}
 
 {{#if view.hasNoHosts}}
-No host assigned
+    No host assigned
 {{else}}
-<a
-  href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
   {{#if view.hasMultipleHosts}}
-  {{hosts.firstObject.hostName}} and {{view.otherLength}}
+    {{view.value.[0]}} and {{view.otherLength}}
   {{else}}
-  {{hosts.firstObject.hostName}}
+    {{view.value.[0]}}
   {{/if}}
-</a>
-  {{/if}}
+{{/if}}

+ 8 - 1
ambari-web/app/templates/wizard/step5.hbs

@@ -19,6 +19,10 @@
 <h2>{{t installer.step5.header}}</h2>
 <div class="alert alert-info">
   {{t installer.step5.body}}
+  {{#if hasWebHCatServer}}
+    <br>
+    {{t installer.step5.body.webhcat}}
+  {{/if}}
 </div>
 <div class="assign-masters">
   <div class="select-hosts">
@@ -27,7 +31,9 @@
       {{#each selectedServicesMasters}}
       <div class="control-group">
         <label class="control-label">{{display_name}}:</label>
-
+        {{#if isWebHCatServer}}
+          <label class="host-name">{{selectedHost}}<i class="icon-asterisks">&#10037</i></label>
+        {{else}}
         <div class="controls">
           {{view App.SelectHostView
             contentBinding="availableHosts"
@@ -49,6 +55,7 @@
           }}
           {{/if}}
         </div>
+        {{/if}}
       </div>
       {{/each}}
     </form>

+ 57 - 106
ambari-web/app/templates/wizard/step7.hbs

@@ -17,120 +17,71 @@
 }}
 
 <div id="serviceConfig">
-  <h2>{{t installer.step7.header}}</h2>
+    <h2>{{t installer.step7.header}}</h2>
 
-  <div class="alert alert-info">
-    {{t installer.step7.body}}
-  </div>
-
-  <ul class="nav nav-tabs">
-    {{#each service in controller.stepConfigs}}
-    {{#if service.showConfig}}
-    {{#view App.WizardStep7.ServiceConfigTab}}
-    <a class="active" href="#{{unbound service.serviceName}}"
-       data-toggle="tab" {{action selectService service target="view"}}>
-      {{service.displayName}}{{#if service.errorCount}}<span
-      class="badge badge-important">{{service.errorCount}}</span>{{/if}}</a>
-    {{/view}}
-    {{/if}}
-    {{/each}}
-  </ul>
+    <div class="alert alert-info">
+      {{t installer.step7.body}}
+    </div>
 
-  <div class="accordion">
-    {{#each category in selectedService.configCategories}}
-    <div class="accordion-group {{unbound category.name}}">
-      <div class="accordion-heading" {{action "onToggleBlock" category target="view"}}>
-        {{#if category.isCollapsed}}
-        <i class='icon-caret-right pull-left accordion-toggle'></i>
-        {{else}}
-        <i class='icon-caret-down pull-left accordion-toggle'></i>
+    <ul class="nav nav-tabs">
+      {{#each service in controller.stepConfigs}}
+        {{#if service.showConfig}}
+          {{#view App.WizardStep7.ServiceConfigTab}}
+              <a class="active" href="#{{unbound service.serviceName}}"
+                 data-toggle="tab" {{action selectService service target="view"}}>
+                {{service.displayName}}{{#if service.errorCount}}<span
+                      class="badge badge-important">{{service.errorCount}}</span>{{/if}}</a>
+          {{/view}}
         {{/if}}
-        <a class="accordion-toggle">
-          {{category.name}}
-        </a>
-      </div>
-
-      {{#unless category.isForSlaveComponent}}
-      {{#view App.WizardStep7.ServiceConfigsByCategoryView categoryBinding="category" serviceConfigsBinding="selectedService.configs"}}
-      <form class="form-horizontal">
-
-        {{#each view.categoryConfigs}}
-        {{#if isVisible}}
-        <div {{bindAttr class="errorMessage:error: :control-group"}}>
-          <label class="control-label">{{displayName}}</label>
-
-          <div class="controls">
-            {{view viewClass serviceConfigBinding="this" categoryConfigsBinding="view.categoryConfigs"}}
-            <span class="help-inline">{{errorMessage}}</span>
+      {{/each}}
+    </ul>
+
+    <div class="accordion">
+      {{#each category in selectedService.configCategories}}
+          <div class="accordion-group {{unbound category.name}}">
+              <div class="accordion-heading" {{action "onToggleBlock" category target="view"}}>
+                {{#if category.isCollapsed}}
+                    <i class='icon-caret-right pull-left accordion-toggle'></i>
+                {{else}}
+                    <i class='icon-caret-down pull-left accordion-toggle'></i>
+                {{/if}}
+                  <a class="accordion-toggle">
+                    {{category.name}}
+                  </a>
+              </div>
+
+
+              {{#view App.WizardStep7.ServiceConfigsByCategoryView categoryBinding="category" serviceConfigsBinding="selectedService.configs"}}
+                  <form class="form-horizontal">
+
+                    {{#each view.categoryConfigs}}
+                      {{#if isVisible}}
+                          <div {{bindAttr class="errorMessage:error: :control-group"}}>
+                              <label class="control-label">{{displayName}}</label>
+
+                              <div class="controls">
+                                {{view viewClass serviceConfigBinding="this" categoryConfigsBinding="view.categoryConfigs"}}
+                                  <span class="help-inline">{{errorMessage}}</span>
+                              </div>
+                          </div>
+                      {{/if}}
+                    {{/each}}
+
+                  </form>
+              {{/view}}
           </div>
-        </div>
-        {{/if}}
-        {{/each}}
-
-      </form>
-      {{/view}}
-      {{/unless}}
-
-      {{#if category.isForSlaveComponent}}
-      {{#view App.WizardStep7.ServiceConfigsByCategoryView categoryBinding="category" serviceConfigsBinding="selectedService.configs" controllerBinding="App.router.slaveComponentGroupsController"}}
-      <div class="slave-component-group-menu">
-        {{view App.SlaveComponentGroupsMenu}}
-      </div>
-
-      {{#view App.AddSlaveComponentGroupButton slaveComponentNameBinding="category.name"}}
-      <a
-        class="btn add-slave-component-group btn-large" {{action addSlaveComponentGroup target="controller"}}><i
-        class="icon-plus"></i></a>
-      {{/view}}
-      <div class="remove-group-error control-group warning">
-        <span class="help-inline">You cannot delete this group since there are hosts assigned to it. You must assign them to another group before you can delete this group.</span>
-      </div>
-
-      <form class="form-horizontal">
-
-        {{#view App.SlaveComponentChangeGroupNameView}}
-        <label class="control-label">Group name</label>
-
-        <div class="controls">
-          <div class="span6">
-            <input class="span9"
-                   type="text" {{bindAttr value="view.content.name"}}>
-            <button class="btn" {{action changeGroupName target="view"}}>Save
-            </button>
-          </div>
-          <span class="help-inline">{{view.errorMessage}}</span>
-        </div>
-        {{/view}}
-
-        {{#view App.SlaveGroupPropertiesView}}
-        {{#each view.groupConfigs}}
-        {{#if this.isVisible}}
-        <div {{bindAttr class="errorMessage:error: :control-group"}}>
-          <label class="control-label">{{this.displayName}}</label>
-          <div class="controls">
-            {{view this.viewClass serviceConfigBinding="this"}}
-            <span class="help-inline">{{this.errorMessage}}</span>
-          </div>
-        </div>
-        {{/if}}
-        {{/each}}
-        {{/view}}
-      </form>
-      {{/view}}
-      {{/if}}
+      {{/each}}
     </div>
-    {{/each}}
-  </div>
 
   {{#if isSubmitDisabled}}
-  <div class="alert">{{t installer.step7.attentionNeeded}}</div>
+      <div class="alert">{{t installer.step7.attentionNeeded}}</div>
   {{/if}}
 
-  <div class="btn-area">
-    <a class="btn" {{action back}}>&larr; Back</a>
+    <div class="btn-area">
+        <a class="btn" {{action back}}>&larr; Back</a>
 
-    <a
-      class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
-      {{action submit target="controller"}}>Next &rarr;</a>
-  </div>
+        <a
+                class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
+          {{action submit target="controller"}}>Next &rarr;</a>
+    </div>
 </div>

+ 2 - 14
ambari-web/app/views/wizard/controls_view.js

@@ -367,23 +367,11 @@ App.ServiceConfigSlaveHostsView = Ember.View.extend(App.ServiceConfigMultipleHos
   viewName: 'serviceConfigSlaveHostsView',
 
   classNames: ['slave-hosts', 'span6'],
-  valueBinding: 'hosts',
 
-  group: function () {
-    return this.get('controller.activeGroup');
-  }.property('controller.activeGroup'),
-
-  hosts: function () {
-    if (this.get('group')) {
-      return this.get('controller').getHostsByGroup(this.get('group'))
-    }
-  }.property('controller.hosts.@each.group', 'group'),
+  valueBinding: 'serviceConfig.value',
 
-  templateName: require('templates/wizard/slave_component_hosts'),
+  templateName: require('templates/wizard/slave_hosts')
 
-  disabled: function () {
-    return !this.get('serviceConfig.isEditable');
-  }.property('serviceConfig.isEditable')
 });
 
 /**

+ 1 - 1
ambari-web/app/views/wizard/step7_view.js

@@ -27,7 +27,7 @@ App.WizardStep7View = Em.View.extend({
     var controller = this.get('controller');
     var slaveController = App.router.get('slaveComponentGroupsController');
     controller.loadStep();
-    slaveController.loadStep();
+    //slaveController.loadStep();  // TODO: remove it to enable slaveConfiguration
   },
   onToggleBlock: function(event){
     $(document.getElementById(event.context.name)).toggle('blind', 500);