You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2012/12/09 16:23:07 UTC

svn commit: r1419009 [2/4] - in /incubator/ambari/branches/AMBARI-666/ambari-web/app: ./ assets/data/apps/ assets/data/wizard/bootstrap/ assets/img/ controllers/ controllers/global/ controllers/main/host/ controllers/main/service/ controllers/wizard/ d...

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js?rev=1419009&r1=1419008&r2=1419009&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js Sun Dec  9 15:23:01 2012
@@ -48,66 +48,15 @@ App.WizardStep8Controller = Em.Controlle
     this.loadGlobals();
     this.loadConfigs();
     this.setCustomConfigs();
-    this.loadClusterInfo();
     this.loadSlaveConfiguration();
+    this.loadClusterInfo();
     this.loadServices();
   },
 
-  loadSlaveConfiguration: function () {
-    var slaveComponentConfig = this.convertSlaveConfig(this.get('content.slaveGroupProperties'));
-    this.set("slaveComponentConfig", slaveComponentConfig);
-  },
-
-  convertSlaveConfig: function (slaveContent) {
-    var dest = {
-      "version": "1.0",
-      "components": [
-      ]
-    };
-
-    slaveContent.forEach(function (_slaveContent) {
-      var newComponent = {};
-      newComponent.componentName = _slaveContent.componentName;
-      newComponent.serviceName = this.getServiceName(newComponent.componentName);
-      newComponent.groups = [];
-      _slaveContent.groups.forEach(function (_group) {
-        var newGroup = {};
-        newGroup.groupName = _group.name;
-        newGroup.configVersion = "1.0"; // TODO : every time a new version should be generated
-        newGroup.hostNames = _slaveContent.hosts.filterProperty("group", newGroup.groupName);
-        newGroup.properties = _group.properties;
-        if (!Ember.empty(newGroup.hostNames)) {
-          newComponent.groups.push(newGroup);
-        }
-      }, this);
-      dest.components.push(newComponent);
-    }, this);
-    return dest;
-
-  },
-
-  getServiceName: function (componentName) {
-    var serviceName = null
-    switch (componentName) {
-      case 'DATANODE':
-        serviceName = 'HDFS';
-        break;
-      case 'TASKTRACKER':
-        serviceName = 'MAPREDUCE';
-        break;
-      case 'HBASE_REGIONSERVER':
-        serviceName = 'HBASE';
-        break;
-      default:
-        serviceName = null;
-    }
-    return serviceName;
-  },
-
   loadGlobals: function () {
     var globals = this.get('content.serviceConfigProperties').filterProperty('id', 'puppet var');
     if (globals.someProperty('name', 'hive_database')) {
-      //TODO: Hive host depends on the type of db selected. Change puppet variable name if postgress is not the default db
+      //TODO: Hive host depends on the type of db selected. Change puppet variable name if postgres is not the default db
       var hiveDb = globals.findProperty('name', 'hive_database');
       if (hiveDb.value === 'New PostgreSQL Database') {
         globals.findProperty('name', 'hive_ambari_host').name = 'hive_mysql_host';
@@ -284,6 +233,100 @@ App.WizardStep8Controller = Em.Controlle
     }
   },
 
+  loadSlaveConfiguration: function () {
+
+    var slaveComponentConfig = this.convertSlaveConfig(this.get('content.slaveGroupProperties'));
+    this.set("slaveComponentConfig", slaveComponentConfig);
+  },
+
+  convertSlaveConfig: function (slaveContent) {
+    var dest = {
+      "version": "1.0",
+      "components": [
+      ],
+      "slaveHostComponents": []
+    };
+
+    slaveContent.forEach(function (_slaveContent) {
+      var newComponent = {};
+      newComponent.componentName = _slaveContent.componentName;
+      newComponent.serviceName = this.getServiceInfo(newComponent.componentName).name;
+      newComponent.groups = [];
+      var index = 2;
+      _slaveContent.groups.forEach(function (_group) {
+        var newGroup = {};
+        newGroup.groupName = _group.name;
+        newGroup.configVersion = {config: {'global': 'version1', 'core-site': 'version1'}}; // TODO : every time a new version should be generated
+        if (this.getServiceInfo(_slaveContent.componentName)) {
+          newGroup.configVersion.config[this.getServiceInfo(_slaveContent.componentName).domain] = 'version' + index;
+          newGroup.configVersion.config[this.getServiceInfo(_slaveContent.componentName).siteName] = 'version' + index;
+        }
+        newGroup.siteVersion = 'version' + index;
+        newGroup.hostNames = _slaveContent.hosts.filterProperty("group", newGroup.groupName).mapProperty('hostName');
+        newGroup.properties = _group.properties;
+        if (!Ember.empty(newGroup.hostNames)) {
+          newComponent.groups.push(newGroup);
+        }
+        index++;
+      }, this);
+      dest.components.push(newComponent);
+    }, this);
+    var hostsInfo = this.get('content.hostsInfo');
+
+    for (var index in hostsInfo) {
+      var hostIndex = 2;
+      var slaveHost = {name: null, configVersion: null, slaveComponents: []};
+      dest.components.forEach(function (_component) {
+        _component.groups.forEach(function (_group) {
+          if (_group.hostNames.contains(hostsInfo[index].name)) {
+            var slaveComponent = {};
+            slaveHost.name = hostsInfo[index].name;
+            slaveComponent.componentName = _component.componentName;
+            slaveComponent.groupName = _group.groupName;
+            slaveComponent.properties = _group.properties;
+            slaveHost.slaveComponents.pushObject(slaveComponent);
+          }
+        }, this);
+      }, this);
+      hostIndex++;
+      if (!Ember.none(slaveHost.name)) {
+        dest.slaveHostComponents.pushObject(slaveHost);
+      }
+
+    }
+    return dest;
+  },
+
+  getServiceInfo: function (componentName) {
+    var serviceConfig;
+    switch (componentName) {
+      case 'DATANODE':
+        serviceConfig = {
+          name: 'HDFS',
+          siteName: 'hdfs-site',
+          domain: 'datanode-global'
+        };
+        break;
+      case 'TASKTRACKER':
+        serviceConfig = {
+          name: 'MAPREDUCE',
+          siteName: 'mapred-site',
+          domain: 'tasktracker-global'
+        };
+        break;
+      case 'HBASE_REGIONSERVER':
+        serviceConfig = {
+          name: 'HBASE',
+          siteName: 'hbase-site',
+          domain: 'regionserver-global'
+        };
+        break;
+      default:
+        serviceConfig = null;
+    }
+    return serviceConfig;
+  },
+
   /**
    * Load all info about cluster to <code>clusterInfo</code> variable
    */
@@ -406,7 +449,7 @@ App.WizardStep8Controller = Em.Controlle
   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';
@@ -444,7 +487,7 @@ App.WizardStep8Controller = Em.Controlle
   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';
@@ -522,7 +565,7 @@ App.WizardStep8Controller = Em.Controlle
   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';
@@ -667,33 +710,35 @@ App.WizardStep8Controller = Em.Controlle
       this.createComponents();
       this.registerHostsToCluster();
       this.createAllHostComponents();
+      this.applyCreatedConfToSlaveGroups();
+      this.ajaxQueueFinished = function(){
+        console.log('everything is loaded')
+        App.router.send('next');
+      };
+      this.doNextAjaxCall();
+    } else {
+      App.router.send('next');
     }
-
-    App.router.send('next');
   },
 
   setAmbariUIDb: function () {
+    var dbContent =  this.get('content.slaveGroupProperties');
     var slaveComponentConfig = this.get("slaveComponentConfig");
-    this.persistKeyValues(slaveComponentConfig.version, slaveComponentConfig);
+    this.persistKeyValues(slaveComponentConfig.version, dbContent);
+    this.persistKeyValues('current_version',slaveComponentConfig.version);
   },
 
   persistKeyValues: function (key, value) {
 
     var str = "{ '" + key + "' : '" + JSON.stringify(value) + "'}";
     var obj = eval("(" + str + ")");
-    $.ajax({
+
+    this.ajax({
       type: "POST",
       url: App.apiPrefix + '/persist',
       data: JSON.stringify(obj),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        console.debug('success...ajax call returned');
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: Error message is: ' + request.responseText);
+      beforeSend: function () {
+        console.log('BeforeSend: persistKeyValues', obj);
       }
     });
   },
@@ -712,61 +757,35 @@ App.WizardStep8Controller = Em.Controlle
       return false;
     }
 
-    var url = App.apiPrefix + '/clusters/' + this.get('clusterName');
+    var clusterName = this.get('clusterName');
+    var url = App.apiPrefix + '/clusters/' + clusterName;
 
     var stackVersion = (App.db.getSoftRepo().repoType == 'local') ? App.defaultLocalStackVersion : App.defaultStackVersion;
 
-    $.ajax({
+    this.ajax({
       type: 'POST',
       url: url,
-      async: false,
-      //accepts: 'text',
-      dataType: 'text',
       data: JSON.stringify({ "Clusters": {"version": stackVersion }}),
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: Step8 -> In success function for createCluster call");
-        console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log("BeforeSend: createCluster for " + clusterName);
+      }
     });
-    console.log("Exiting createCluster");
 
   },
 
-  createSelectedServices: function (service, httpMethod) {
+  createSelectedServices: function () {
 
     var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/services';
     var data = this.createServiceData();
     var httpMethod = 'POST';
-    $.ajax({
+
+    this.ajax({
       type: httpMethod,
       url: url,
       data: JSON.stringify(data),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: Step8 -> In success function for the createSelectedServices call");
-        console.log("TRACE: Step8 -> value of the url is: " + url);
-        console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log('BeforeSend: createSelectedServices ', data);
+      }
     });
   },
 
@@ -795,26 +814,14 @@ App.WizardStep8Controller = Em.Controlle
       var data = {
         "components": componentsData
       }
-      $.ajax({
+
+      this.ajax({
         type: 'POST',
         url: url,
-        async: false,
-        dataType: 'text',
         data: JSON.stringify(data),
-        timeout: App.timeout,
-        success: function (data) {
-          var jsonData = jQuery.parseJSON(data);
-          console.log("TRACE: Step8 -> In success function for createComponents");
-          console.log("TRACE: Step8 -> value of the url is: " + url);
-          console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-        },
-
-        error: function (request, ajaxOptions, error) {
-          console.log('Step8: In Error ');
-          console.log('Step8: Error message is: ' + request.responseText);
-        },
-
-        statusCode: require('data/statusCodes')
+        beforeSend: function () {
+          console.log('BeforeSend: createComponents for ' + _service, componentsData);
+        }
       });
     }, this);
 
@@ -829,27 +836,13 @@ App.WizardStep8Controller = Em.Controlle
       return;
     }
 
-    $.ajax({
+    this.ajax({
       type: 'POST',
       url: url,
       data: JSON.stringify(data),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: Step8 -> In success function for registerHostsToCluster");
-        console.log("TRACE: Step8 -> value of the url is: " + url);
-        console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log('BeforeSend: registerHostsToCluster', data);
+      }
     });
   },
 
@@ -933,7 +926,7 @@ App.WizardStep8Controller = Em.Controlle
     //   return 'Hosts/host_name=' + hostName;
     // }).join('|');
 
-    var queryStrArr = []
+    var queryStrArr = [];
     var queryStr = '';
     hostNames.forEach(function (hostName) {
       queryStr += 'Hosts/host_name=' + hostName + '|';
@@ -960,26 +953,13 @@ App.WizardStep8Controller = Em.Controlle
         ]
       };
 
-      $.ajax({
+      this.ajax({
         type: 'POST',
         url: url,
-        async: false,
-        dataType: 'text',
-        timeout: App.timeout,
         data: JSON.stringify(data),
-        success: function (data) {
-          var jsonData = jQuery.parseJSON(data);
-          console.log("TRACE: Step8 -> In success function for the registerHostsToComponent");
-          console.log("TRACE: Step8 -> value of the url is: " + url);
-          console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-        },
-
-        error: function (request, ajaxOptions, error) {
-          console.log('Step8: In Error ');
-          console.log('Step8: Error message is: ' + request.responseText);
-        },
-
-        statusCode: require('data/statusCodes')
+        beforeSend: function () {
+          console.log('BeforeSend: registerHostsToComponent for ' + queryStr + ' and component ' + componentName);
+        }
       });
     }, this);
   },
@@ -987,64 +967,56 @@ App.WizardStep8Controller = Em.Controlle
   createConfigurations: function () {
     var selectedServices = this.get('selectedServices');
     if (!this.get('content.isWizard')) {
-      this.createConfigSite(this.createGlobalSiteObj());
-      this.createConfigSite(this.createCoreSiteObj());
-      this.createConfigSite(this.createHdfsSiteObj('HDFS'));
+      this.createConfigSiteForService(this.createGlobalSiteObj());
+      this.createGlobalSitePerSlaveGroup();
+      this.createConfigSiteForService(this.createCoreSiteObj());
+      this.createConfigSiteForService(this.createHdfsSiteObj());
+      this.createHdfsSitePerSlaveGroup('HDFS');
     }
     if (selectedServices.someProperty('serviceName', 'MAPREDUCE')) {
-      this.createConfigSite(this.createMrSiteObj('MAPREDUCE'));
+      this.createConfigSiteForService(this.createMrSiteObj());
+      this.createMrSitePerSlaveGroup('MAPREDUCE');
     }
     if (selectedServices.someProperty('serviceName', 'HBASE')) {
-      this.createConfigSite(this.createHbaseSiteObj('HBASE'));
+      this.createConfigSiteForService(this.createHbaseSiteObj());
+      this.createHbaseSitePerSlaveGroup('HBASE');
     }
     if (selectedServices.someProperty('serviceName', 'OOZIE')) {
-      this.createConfigSite(this.createOozieSiteObj('OOZIE'));
+      this.createConfigSiteForService(this.createOozieSiteObj('OOZIE'));
     }
     if (selectedServices.someProperty('serviceName', 'HIVE')) {
-      // TODO
-      // this.createConfigSite(this.createHiveSiteObj('HIVE'));
+      this.createConfigSiteForService(this.createHiveSiteObj('HIVE'));
     }
   },
 
-  createConfigSite: function (data) {
-    console.log("Inside createConfigSite");
+  createConfigSiteForService: function (data) {
+    console.log("Inside createConfigSiteForService");
 
     var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/configurations';
-    $.ajax({
+
+    this.ajax({
       type: 'POST',
       url: url,
       data: JSON.stringify(data),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: STep8 -> In success function for the createConfigSite");
-        console.log("TRACE: STep8 -> value of the url is: " + url);
-        console.log("TRACE: STep8 -> value of the received data is: " + jsonData);
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-        console.log("TRACE: STep8 -> value of the url is: " + url);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log("BeforeSend: createConfigSiteForService for " + data.type);
+      }
     });
-    console.log("Exiting createConfigSite");
   },
 
   createGlobalSiteObj: function () {
     var globalSiteProperties = {};
-    this.get('globals').forEach(function (_globalSiteObj) {
+    this.get('globals').filterProperty('domain', 'global').forEach(function (_globalSiteObj) {
       // do not pass any globals whose name ends with _host or _hosts
       if (!/_hosts?$/.test(_globalSiteObj.name)) {
         // append "m" to JVM memory options
+        var value = null;
         if (/_heapsize|_newsize|_maxnewsize$/.test(_globalSiteObj.name)) {
-          _globalSiteObj.value += "m";
+          value = _globalSiteObj.value + "m";
+          globalSiteProperties[_globalSiteObj.name] = value;
+        } else {
+          globalSiteProperties[_globalSiteObj.name] = _globalSiteObj.value;
         }
-        globalSiteProperties[_globalSiteObj.name] = _globalSiteObj.value;
         console.log("STEP8: name of the global property is: " + _globalSiteObj.name);
         console.log("STEP8: value of the global property is: " + _globalSiteObj.value);
       }
@@ -1052,6 +1024,36 @@ App.WizardStep8Controller = Em.Controlle
     return {"type": "global", "tag": "version1", "properties": globalSiteProperties};
   },
 
+  createGlobalSitePerSlaveGroup: function () {
+    this.get('slaveComponentConfig.components').forEach(function (_component) {
+      _component.groups.forEach(function (_group) {
+        var globalSiteProperties = {};
+        var properties = _group.properties;
+        properties.forEach(function (_property) {
+          if (!/_hosts?$/.test(_property.name)) {
+            // append "m" to JVM memory options
+            var value = null;
+            if (/_heapsize|_newsize|_maxnewsize$/.test(_property.name)) {
+              value = _property.value + "m";
+              globalSiteProperties[_property.name] = value;
+            } else {
+              globalSiteProperties[_property.name] = _property.storeValue;
+            }
+            console.log("STEP8: name of the global property is: " + _property.name);
+            console.log("STEP8: value of the global property is: " + _property.storeValue);
+          }
+        }, this);
+        var config = _group.configVersion.config;
+        for (var index in config) {
+          if (index === 'datanode-global' || index === 'tasktracker-global' || index === 'regionserver-global') {
+            var data = {"type": index, "tag": config[index], "properties": globalSiteProperties};
+            this.createConfigSiteForService(data);
+          }
+        }
+      }, this);
+    }, this);
+  },
+
   createCoreSiteObj: function () {
     var coreSiteObj = this.get('configs').filterProperty('filename', 'core-site.xml');
     var coreSiteProperties = {};
@@ -1067,7 +1069,7 @@ App.WizardStep8Controller = Em.Controlle
     return {"type": "core-site", "tag": "version1", "properties": coreSiteProperties};
   },
 
-  createHdfsSiteObj: function (serviceName) {
+  createHdfsSiteObj: function () {
     var hdfsSiteObj = this.get('configs').filterProperty('filename', 'hdfs-site.xml');
     var hdfsProperties = {};
     hdfsSiteObj.forEach(function (_configProperty) {
@@ -1078,7 +1080,29 @@ App.WizardStep8Controller = Em.Controlle
     return {"type": "hdfs-site", "tag": "version1", "properties": hdfsProperties };
   },
 
-  createMrSiteObj: function (serviceName) {
+  createHdfsSitePerSlaveGroup: function (serviceName) {
+    var hdfsSite = this.createHdfsSiteObj();
+    var component = this.get('slaveComponentConfig.components').findProperty('serviceName', serviceName);
+    component.groups.forEach(function (_group) {
+      var siteProperties = hdfsSite.properties;
+      _group.properties.forEach(function (_property) {
+        this.get('configMapping').forEach(function (_config) {
+          if (_config.templateName.contains(_property.name)) {
+            this.get('globals').findProperty('name', _property.name).value = _property.storeValue;
+            var value = this.getGlobConfigValue(_config.templateName, _config.value);
+            if (siteProperties[_config.name]) {
+              siteProperties[_config.name] = value;
+            }
+          }
+        }, this);
+      }, this);
+      var data = {"type": hdfsSite.type, "tag": _group.siteVersion, "properties": siteProperties};
+      console.log("The value of globalConfig is: " + JSON.stringify(siteProperties));
+      this.createConfigSiteForService(data);
+    }, this);
+  },
+
+  createMrSiteObj: function () {
     var configs = this.get('configs').filterProperty('filename', 'mapred-site.xml');
     var mrProperties = {};
     configs.forEach(function (_configProperty) {
@@ -1089,7 +1113,28 @@ App.WizardStep8Controller = Em.Controlle
     return {type: 'mapred-site', tag: 'version1', properties: mrProperties};
   },
 
-  createHbaseSiteObj: function (serviceName) {
+  createMrSitePerSlaveGroup: function (serviceName) {
+    var mrSite = this.createMrSiteObj();
+    var component = this.get('slaveComponentConfig.components').findProperty('serviceName', serviceName);
+    component.groups.forEach(function (_group) {
+      var siteProperties = mrSite.properties;
+      _group.properties.forEach(function (_property) {
+        this.get('configMapping').forEach(function (_config) {
+          if (_config.templateName.contains(_property.name)) {
+            this.get('globals').findProperty('name', _property.name).value = _property.storeValue;
+            var value = this.getGlobConfigValue(_config.templateName, _config.value);
+            if (siteProperties[_config.name]) {
+              siteProperties[_config.name] = value;
+            }
+          }
+        }, this);
+      }, this);
+      var data = {"type": mrSite.type, "tag": _group.siteVersion, "properties": siteProperties};
+      this.createConfigSiteForService(data);
+    }, this);
+  },
+
+  createHbaseSiteObj: function () {
     var configs = this.get('configs').filterProperty('filename', 'hbase-site.xml');
     var hbaseProperties = {};
     configs.forEach(function (_configProperty) {
@@ -1102,17 +1147,38 @@ App.WizardStep8Controller = Em.Controlle
     return {type: 'hbase-site', tag: 'version1', properties: hbaseProperties};
   },
 
+  createHbaseSitePerSlaveGroup: function (serviceName) {
+    var hbaseSite = this.createHbaseSiteObj();
+    var component = this.get('slaveComponentConfig.components').findProperty('serviceName', serviceName);
+    component.groups.forEach(function (_group) {
+      var siteProperties = hbaseSite.properties;
+      _group.properties.forEach(function (_property) {
+        this.get('configMapping').forEach(function (_config) {
+          if (_config.templateName.contains(_property.name)) {
+            this.get('globals').findProperty('name', _property.name).value = _property.storeValue;
+            var value = this.getGlobConfigValue(_config.templateName, _config.value);
+            if (siteProperties[_config.name]) {
+              siteProperties[_config.name] = value;
+            }
+          }
+        }, this);
+      }, this);
+      var data = {"type": hbaseSite.type, "tag": _group.siteVersion, "properties": siteProperties};
+      this.createConfigSiteForService(data);
+    }, this);
+  },
+
   createOozieSiteObj: function (serviceName) {
     var configs = this.get('configs').filterProperty('filename', 'oozie-site.xml');
     var oozieProperties = {};
     configs.forEach(function (_configProperty) {
       oozieProperties[_configProperty.name] = _configProperty.value;
     }, this);
-    var baseUrl = oozieProperties['oozie.base.url'];
-    oozieProperties = {
-      "oozie.service.JPAService.jdbc.password": " ", "oozie.db.schema.name": "oozie", "oozie.service.JPAService.jdbc.url": "jdbc:derby:/var/data/oozie/oozie-db;create=true", "oozie.service.JPAService.jdbc.driver": "org.apache.derby.jdbc.EmbeddedDriver", "oozie.service.WorkflowAppService.system.libpath": "/user/oozie/share/lib", "oozie.service.JPAService.jdbc.username": "sa", "oozie.service.SchemaService.wf.ext.schemas": "shell-action-0.1.xsd,email-action-0.1.xsd,hive-action-0.2.xsd,sqoop-action-0.2.xsd,ssh-action-0.1.xsd,distcp-action-0.1.xsd", "oozie.service.JPAService.create.db.schema": "false", "use.system.libpath.for.mapreduce.and.pig.jobs": "false", "oozie.service.ActionService.executor.ext.classes": "org.apache.oozie.action.email.EmailActionExecutor,org.apache.oozie.action.hadoop.HiveActionExecutor,org.apache.oozie.action.hadoop.ShellActionExecutor,org.apache.oozie.action.hadoop.SqoopActionExecutor,org.apache.oozie.action.hadoop.DistcpActionExecutor", "oozie.service.Ha
 doopAccessorService.hadoop.configurations": "*=/etc/hadoop/conf"
-    };
-    oozieProperties['oozie.base.url'] = baseUrl;
+    // var baseUrl = oozieProperties['oozie.base.url'];
+    // oozieProperties = {
+    //   "oozie.service.JPAService.jdbc.password": " ", "oozie.db.schema.name": "oozie", "oozie.service.JPAService.jdbc.url": "jdbc:derby:/var/data/oozie/oozie-db;create=true", "oozie.service.JPAService.jdbc.driver": "org.apache.derby.jdbc.EmbeddedDriver", "oozie.service.WorkflowAppService.system.libpath": "/user/oozie/share/lib", "oozie.service.JPAService.jdbc.username": "sa", "oozie.service.SchemaService.wf.ext.schemas": "shell-action-0.1.xsd,email-action-0.1.xsd,hive-action-0.2.xsd,sqoop-action-0.2.xsd,ssh-action-0.1.xsd,distcp-action-0.1.xsd", "oozie.service.JPAService.create.db.schema": "false", "use.system.libpath.for.mapreduce.and.pig.jobs": "false", "oozie.service.ActionService.executor.ext.classes": "org.apache.oozie.action.email.EmailActionExecutor,org.apache.oozie.action.hadoop.HiveActionExecutor,org.apache.oozie.action.hadoop.ShellActionExecutor,org.apache.oozie.action.hadoop.SqoopActionExecutor,org.apache.oozie.action.hadoop.DistcpActionExecutor", "oozie.service
 .HadoopAccessorService.hadoop.configurations": "*=/etc/hadoop/conf"
+    // };
+    // oozieProperties['oozie.base.url'] = baseUrl;
     return {type: 'oozie-site', tag: 'version1', properties: oozieProperties};
   },
 
@@ -1122,7 +1188,7 @@ App.WizardStep8Controller = Em.Controlle
     configs.forEach(function (_configProperty) {
       hiveProperties[_configProperty.name] = _configProperty.value;
     }, this);
-    return {type: 'hbase-site', tag: 'version1', properties: hiveProperties};
+    return {type: 'hive-site', tag: 'version1', properties: hiveProperties};
   },
 
   applyCreatedConfToServices: function () {
@@ -1138,28 +1204,45 @@ App.WizardStep8Controller = Em.Controlle
 
     var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/services/' + service;
 
-    $.ajax({
+    this.ajax({
       type: httpMethod,
       url: url,
-      async: false,
-      dataType: 'text',
       data: JSON.stringify(data),
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: STep8 -> In success function for the applyCreatedConfToService call");
-        console.log("TRACE: STep8 -> value of the url is: " + url);
-        console.log("TRACE: STep8 -> value of the received data is: " + jsonData);
-      },
+      beforeSend: function () {
+        console.log("BeforeSend: applyCreatedConfToService for " + service);
+      }
+    });
+  },
 
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
 
-      statusCode: require('data/statusCodes')
+  applyCreatedConfToSlaveGroups: function () {
+    this.get('slaveComponentConfig.components').forEach(function (_component) {
+      _component.groups.forEach(function (_group) {
+        var aggregatedHostNames = '';
+        _group.hostNames.forEach(function (_hostName, index) {
+          aggregatedHostNames += 'HostRoles/host_name=' + _hostName;
+          if (index !== _group.hostNames.length-1) {
+            aggregatedHostNames += '|';
+          }
+        }, this);
+        console.log("The aggregated hostNames value is: " + aggregatedHostNames);
+        this.applyCreatedConfToSlaveGroup(aggregatedHostNames, 'PUT', _group.configVersion,_group.groupName);
+      }, this);
+    }, this);
+  },
+
+  applyCreatedConfToSlaveGroup: function (aggregatedHostNames, httpMethod, data, groupName) {
+    console.log("Inside applyCreatedConfToHost");
+    var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/host_components?' + aggregatedHostNames;
+
+    this.ajax({
+      type: httpMethod,
+      url: url,
+      data: JSON.stringify(data),
+      beforeSend: function () {
+        console.log("BeforeSend: applyCreatedConfToSlaveGroup for group: " + groupName);
+      }
     });
-    console.log("Exiting applyCreatedConfToService");
   },
 
   getConfigForService: function (serviceName) {
@@ -1175,6 +1258,85 @@ App.WizardStep8Controller = Em.Controlle
       default:
         return {config: {'global': 'version1'}};
     }
+  },
+
+  ajaxQueue: [],
+
+  ajaxQueueFinished: function () {
+    //do something
+  },
+
+  doNextAjaxCall: function () {
+
+    if (this.get('ajaxBusy')) {
+      return;
+    }
+
+    var queue = this.get('ajaxQueue');
+    if (!queue.length) {
+      this.ajaxQueueFinished();
+      return;
+    }
+
+    var first = queue[0];
+    this.set('ajaxQueue', queue.slice(1));
+
+    this.set('ajaxBusy', true);
+    console.log('AJAX send ' + first.url);
+    $.ajax(first);
+
+  },
+
+  /**
+   * We need to do a lot of ajax calls(about 10 or more) async in special order.
+   * To do this i generate array of ajax objects and then send requests step by step.
+   * All ajax objects are stored in <code>ajaxQueue</code>
+   * @param params
+   */
+
+  ajax: function(params){
+    if(App.testMode) return;
+
+    var self = this;
+    params = jQuery.extend({
+      async: true,
+      dataType: 'text',
+      statusCode: require('data/statusCodes'),
+      timeout: App.timeout,
+      error: function (request, ajaxOptions, error) {
+        console.log('Step8: In Error ');
+        console.log('Step8: Error message is: ' + request.responseText);
+      },
+      success: function (data) {
+        var jsonData = jQuery.parseJSON(data);
+        console.log("TRACE: STep8 -> In success function");
+        console.log("TRACE: STep8 -> value of the url is: " + params.url);
+        console.log("TRACE: STep8 -> value of the received data is: " + jsonData);
+      }
+    }, params);
+
+    var success = params.success;
+    var error = params.error;
+
+    params.success = function () {
+      if (success) {
+        success();
+      }
+      ;
+      self.set('ajaxBusy', false);
+      self.doNextAjaxCall();
+    }
+
+    params.error = function () {
+      if (error) {
+        error();
+      }
+      ;
+      self.set('ajaxBusy', false);
+      self.doNextAjaxCall();
+    }
+
+    this.get('ajaxQueue').pushObject(params);
   }
 
 })

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js?rev=1419009&r1=1419008&r2=1419009&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js Sun Dec  9 15:23:01 2012
@@ -70,6 +70,7 @@ App.WizardStep9Controller = Em.Controlle
         this.launchStartServices();
       } else {
         this.loadStep();
+        this.loadLogData(this.get('content.cluster.requestId'));
         this.startPolling();
       }
     } else {
@@ -240,13 +241,11 @@ App.WizardStep9Controller = Em.Controlle
         console.log("TRACE: Step9 -> In success function for the startService call");
         console.log("TRACE: Step9 -> value of the url is: " + url);
         console.log("TRACE: Step9 -> value of the received data is: " + jsonData);
-        var requestId = jsonData.href.match(/.*\/(.*)$/)[1];
+        var requestId = jsonData.Requests.id;
         console.log('requestId is: ' + requestId);
         var clusterStatus = {
-          name: clusterName,
           status: 'INSTALLED',
           requestId: requestId,
-          installStartTime: self.get('content.cluster').installStartTime,
           isStartError: false,
           isCompleted: false
         };
@@ -258,9 +257,7 @@ App.WizardStep9Controller = Em.Controlle
       error: function () {
         console.log("ERROR");
         var clusterStatus = {
-          name: clusterName,
           status: 'START FAILED',
-          installStartTime: self.get('content.cluster').installStartTime,
           isStartError: true,
           isCompleted: false
         };
@@ -387,8 +384,7 @@ App.WizardStep9Controller = Em.Controlle
         clusterStatus = {
           status: 'INSTALLED',
           requestId: requestId,
-          isCompleted: true,
-          installStartTime: this.get('content.cluster.installStartTime')
+          isCompleted: true
         }
         if (this.isSuccess(polledData)) {
           clusterStatus.status = 'STARTED';
@@ -414,8 +410,7 @@ App.WizardStep9Controller = Em.Controlle
         clusterStatus = {
           status: 'PENDING',
           requestId: requestId,
-          isCompleted: false,
-          installStartTime: this.get('content.cluster.installStartTime')
+          isCompleted: false
         }
         if (this.isStepFailed(polledData)) {
           console.log("In installation failure");
@@ -525,25 +520,28 @@ App.WizardStep9Controller = Em.Controlle
 
   loadLogData:function(requestId){
     var url = this.getUrl(requestId);
-
+    var requestsId = App.db.getCluster().oldRequestsId;
     if (App.testMode) {
       this.POLL_INTERVAL = 1;
       this.numPolls++;
-      if (this.numPolls == 5) {
-        url = this.get('mockDataPrefix') + '/poll_5.json';
-        // url = this.get('mockDataPrefix') + '/poll_5_failed.json';
-      } else {
-        url = this.get('mockDataPrefix') + '/poll_' + this.numPolls + '.json';
-      }
     }
-    this.getLogsByRequest(url);
 
-    if(typeof(requestId) === 'number' && requestId > 1){
-      requestId--;
-      this.loadLogData(requestId);
-    }
+    requestsId.forEach(function(requestId) {
+      url = this.getUrl(requestId);
+      if (App.testMode) {
+        this.POLL_INTERVAL = 1;
+
+        if (requestId == 1) {
+          url = this.get('mockDataPrefix') + '/poll_' + this.numPolls + '.json';
+          // url = this.get('mockDataPrefix') + '/poll_5_failed.json';
+        } else {
+          url = this.get('mockDataPrefix') + '/poll_9.json';
+        }
+      }
+      this.getLogsByRequest(url, false);
+    }, this);
   },
-  getLogsByRequest: function(url){
+  getLogsByRequest: function(url, polling){
     var self = this;
     $.ajax({
       type: 'GET',
@@ -555,6 +553,9 @@ App.WizardStep9Controller = Em.Controlle
         console.log("TRACE: In success function for the GET logs data");
         console.log("TRACE: STep9 -> The value is: ", jQuery.parseJSON(data));
         var result = self.parseHostInfo(jQuery.parseJSON(data));
+        if(!polling){
+          return;
+        }
         if (result !== true) {
           window.setTimeout(function () {
             self.doPolling();
@@ -578,16 +579,10 @@ App.WizardStep9Controller = Em.Controlle
     var url = this.getUrl();
 
     if (App.testMode) {
-      this.POLL_INTERVAL = 1;
       this.numPolls++;
-      if (this.numPolls == 5) {
-        url = this.get('mockDataPrefix') + '/poll_5.json';
-        // url = this.get('mockDataPrefix') + '/poll_5_failed.json';
-      } else {
-        url = this.get('mockDataPrefix') + '/poll_' + this.numPolls + '.json';
-      }
+      url = this.get('mockDataPrefix') + '/poll_' + this.get('numPolls') + '.json';
     }
-    this.getLogsByRequest(url);
+    this.getLogsByRequest(url, true);
   },
 
   stopPolling: function () {
@@ -597,8 +592,6 @@ App.WizardStep9Controller = Em.Controlle
 
   submit: function () {
     if (!this.get('isSubmitDisabled')) {
-      this.set('content.cluster.status', this.get('status'));
-      this.set('content.cluster.isCompleted', true);
       App.router.send('next');
     }
   },

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js?rev=1419009&r1=1419008&r2=1419009&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js Sun Dec  9 15:23:01 2012
@@ -294,7 +294,7 @@ module.exports = [
     "value": "http://<templateName[0]>:11000/oozie",
     "filename": "oozie-site.xml"
   },
-  //TODO: Oozie configs hardcoded for now. Map them to templates later
+  /*
   {
     "name": "oozie.service.JPAService.jdbc.password",
     "templateName": [],
@@ -323,6 +323,7 @@ module.exports = [
     "value": " ",
     "filename": "oozie-site.xml"
   },
+  */
   {
     "name": "javax.jdo.option.ConnectionURL",
     "templateName": ["hive_mysql_host", "hive_database_name"],

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js?rev=1419009&r1=1419008&r2=1419009&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js Sun Dec  9 15:23:01 2012
@@ -73,6 +73,7 @@ module.exports =
       "description": "The host that has been assigned to run HBase Master",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "HBase Master"
     },
@@ -86,6 +87,7 @@ module.exports =
       "displayType": "slaveHosts",
       "isVisible": true,
       "isRequired": false,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -98,6 +100,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -110,6 +113,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -122,6 +126,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -134,6 +139,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "HBase Master"
     },
@@ -145,6 +151,7 @@ module.exports =
       "defaultValue": "3",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -155,6 +162,7 @@ module.exports =
       "defaultValue": "0.25",
       "displayType": "float",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -166,6 +174,7 @@ module.exports =
       "displayType": "int",
       "unit": "bytes",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -176,6 +185,7 @@ module.exports =
       "defaultValue": "30",
       "displayType": "int",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -188,6 +198,7 @@ module.exports =
       "displayType": "int",
       "unit": "ms",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -199,6 +210,7 @@ module.exports =
       "defaultValue": "2",
       "displayType": "int",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -211,6 +223,7 @@ module.exports =
       "displayType": "int",
       "unit": "bytes",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -223,6 +236,7 @@ module.exports =
       "displayType": "int",
       "unit": "rows",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -234,6 +248,7 @@ module.exports =
       "displayType": "int",
       "unit": "ms",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -245,6 +260,7 @@ module.exports =
       "displayType": "int",
       "unit": "bytes",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
    /* {
@@ -268,6 +284,7 @@ module.exports =
       "isRequired": true,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -280,6 +297,7 @@ module.exports =
       "isRequired": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -292,6 +310,7 @@ module.exports =
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -304,6 +323,7 @@ module.exports =
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -316,6 +336,7 @@ module.exports =
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -330,6 +351,7 @@ module.exports =
       "isRequired": true,
       "displayType": "init",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -342,6 +364,7 @@ module.exports =
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -354,6 +377,7 @@ module.exports =
       "isRequired": false,
       "displayType": "float",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -366,6 +390,7 @@ module.exports =
       "isRequired": true,
       "displayType": "float",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -378,6 +403,7 @@ module.exports =
       "isRequired": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -390,6 +416,7 @@ module.exports =
       "description": "The host that has been assigned to run NameNode",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -399,9 +426,11 @@ module.exports =
       "displayName": "NameNode directories",
       "description": "NameNode directories for HDFS to store the file system image",
       "defaultValue": "/grid/0/hadoop/hdfs/namenode\n/grid/1/hadoop/hdfs/namenode\n",
+      "defaultDirectory": "hadoop/hdfs/namenode",
       "isReconfigurable": false,
       "displayType": "directories",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -414,6 +443,7 @@ module.exports =
       "description": "The host that has been assigned to run SecondaryNameNode",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "SNameNode"
     },
@@ -423,9 +453,11 @@ module.exports =
       "displayName": "SecondaryNameNode Checkpoint directory",
       "description": "Directory on the local filesystem where the Secondary NameNode should store the temporary images to merge",
       "defaultValue": "/grid/0/hadoop/hdfs/namesecondary",
+      "defaultDirectory": "hadoop/hdfs/namesecondary",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "SNameNode"
     },
@@ -439,6 +471,7 @@ module.exports =
       "displayType": "slaveHosts",
       "isRequired": false,
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -448,9 +481,11 @@ module.exports =
       "displayName": "DataNode directories",
       "description": "DataNode directories for HDFS to store the data blocks",
       "defaultValue": "/tmp/hadoop-hdfs/dfs/data",
+      "defaultDirectory": "hadoop-hdfs/dfs/data",
       "isReconfigurable": false,
       "displayType": "directories",
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -463,6 +498,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -475,6 +511,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -486,6 +523,7 @@ module.exports =
       "defaultValue": true,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -496,6 +534,7 @@ module.exports =
       "defaultValue": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -507,6 +546,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -518,6 +558,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -530,6 +571,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -542,6 +584,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -554,6 +597,7 @@ module.exports =
       "displayType": "int",
       "unit": "GB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -565,6 +609,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -576,6 +621,7 @@ module.exports =
       "defaultValue": "0",
       "displayType": "int",
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -589,6 +635,7 @@ module.exports =
       "displayType": "int",
       "unit": "seconds",
       "isVisible": true,
+      "domain": "global",
       "filename": "core-site.xml",
       "serviceName": "HDFS"
     },
@@ -603,6 +650,7 @@ module.exports =
       "displayType": "float",
       "unit": "GB",
       "isVisible": true,
+      "domain": "global",
       "filename": "core-site.xml",
       "serviceName": "HDFS"
     },
@@ -616,6 +664,7 @@ module.exports =
       "displayType": "advanced",
       "isVisible": true,
       "filename": "core-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -629,6 +678,7 @@ module.exports =
       "displayType": "advanced",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -642,6 +692,7 @@ module.exports =
       "displayType": "advanced",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -655,6 +706,7 @@ module.exports =
       "isReconfigurable": false,
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -668,6 +720,7 @@ module.exports =
       "isReconfigurable": false,
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -681,6 +734,7 @@ module.exports =
       "displayType": "int",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -694,6 +748,7 @@ module.exports =
       "displayType": "int",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -707,6 +762,7 @@ module.exports =
       "displayType": "int",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -720,6 +776,7 @@ module.exports =
       "displayType": "int",
       "isVisible": false,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -732,6 +789,7 @@ module.exports =
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -743,6 +801,7 @@ module.exports =
       "defaultValue": "EXAMPLE.COM",
       "isRequired": true,
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -755,6 +814,7 @@ module.exports =
       "isRequired": true,
       "displayType": "password",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -767,6 +827,7 @@ module.exports =
       "isRequired": true,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -794,6 +855,7 @@ module.exports =
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
+    /* Comment out the other hive_database and uncomment this for Hive with Postgres support
     {
       "id": "puppet var",
       "name": "hive_database",
@@ -810,10 +872,64 @@ module.exports =
           foreignKeys: ['hive_existing_database', 'hive_existing_host']
         }
       ],
-      "description": "PostgreSQL will be installed by ambari. Any other database will have to be installed by the user.",
+      "description": "PostgreSQL will be installed by Ambari. Any other database will have to be installed by the user.",
+      "displayType": "radio button",
+      "radioName": "hive-database",
+      "isVisible": true,
+      "domain": "global",
+      "serviceName": "HIVE",
+      "category": "Hive Metastore"
+    },
+    */
+    {
+      "id": "puppet var",
+      "name": "hive_database",
+      "displayName": "Hive Database",
+      "value": "",
+      "defaultValue": "New MySQL Database",
+      "options": [
+        {
+          displayName: 'New MySQL Database',
+          foreignKeys: ['hive_ambari_database', 'hive_ambari_host']
+        },
+        {
+          displayName: 'Existing MySQL Database',
+          foreignKeys: ['hive_existing_database', 'hive_existing_host']
+        }
+      ],
+      "description": "MySQL will be installed by Ambari",
       "displayType": "radio button",
       "radioName": "hive-database",
       "isVisible": true,
+      "domain": "global",
+      "serviceName": "HIVE",
+      "category": "Hive Metastore"
+    },
+    {
+      "id": "puppet var",
+      "name": "hive_existing_database",
+      "displayName": "Database Type",
+      "value": "",
+      "defaultValue": "MySQL",
+      "description": "Using an existing database for Hive Metastore",
+      "displayType": "masterHost",
+      "isVisible": false,
+      "domain": "global",
+      "serviceName": "HIVE",
+      "category": "Hive Metastore"
+    },
+    /* Uncomment for Hive with Postgres support
+    {
+      "id": "puppet var",
+      "name": "hive_existing_database",
+      "displayName": "Hive Database",
+      "value": "",
+      "defaultValue": "MySQL",
+      "description": "Select the database, if you already have existing one for Hive Metastore.",
+      "displayType": "string",
+      "isVisible": false,
+      "options": ['MySQL', 'PostgreSQL'],
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -827,30 +943,34 @@ module.exports =
       "displayType": "combobox",
       "isVisible": false,
       "options": ['MySQL', 'PostgreSQL'],
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
+    */
     {
       "id": "puppet var",
       "name": "hive_existing_host",
       "displayName": "Database host",
-      "description": "Select the host on which the existing database is hosted.",
+      "description": "Specify the host on which the existing database is hosted",
       "defaultValue": "",
       "isReconfigurable": false,
       "displayType": "host",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
     {
       "id": "puppet var",
       "name": "hive_ambari_database",
-      "displayName": "Hive Database",
+      "displayName": "Database Type",
       "value": "",
-      "defaultValue": "PostgreSQL",
-      "description": "PostgreSQL will be installed by ambari.",
+      "defaultValue": "MySQL",
+      "description": "MySQL will be installed by Ambari",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -860,10 +980,11 @@ module.exports =
       "value": "",
       "defaultValue": "",
       "displayName": "PostgreSQL host",
-      "description": "Host  on which the PostgreSQL database will be created by ambari. ",
+      "description": "Host on which the PostgreSQL database will be created by Ambari",
       "isReconfigurable": false,
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -876,6 +997,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "host",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -888,6 +1010,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -900,6 +1023,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "password",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -912,6 +1036,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "int",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -924,6 +1049,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -936,6 +1062,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -948,6 +1075,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -960,6 +1088,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -972,6 +1101,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -984,6 +1114,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -996,6 +1127,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1008,6 +1140,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1020,6 +1153,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1032,6 +1166,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "GANGLIA",
       "category": "Advanced"
     },
@@ -1044,6 +1179,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1056,6 +1192,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1068,6 +1205,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1080,6 +1218,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1092,6 +1231,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1104,6 +1244,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1116,6 +1257,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1140,6 +1282,7 @@ module.exports =
       "description": "The host that has been assigned to run JobTracker",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1153,6 +1296,7 @@ module.exports =
       "displayType": "slaveHosts",
       "isVisible": true,
       "isRequired": false,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1162,9 +1306,11 @@ module.exports =
       "displayName": "MapReduce local directories",
       "description": "Directories for MapReduce to store intermediate data files",
       "defaultValue": "/grid/0/hadoop/mapred\n/grid/1/hadoop/mapred\n",
+      "defaultDirectory": "hadoop/mapred",
       "displayType": "directories",
       "isReconfigurable": false,
       "isVisible": true,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1178,6 +1324,7 @@ module.exports =
       "isReconfigurable": false,
       "isVisible": true,
       "isRequired": false,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "Advanced"
     },
@@ -1200,6 +1347,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1212,6 +1360,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1224,6 +1373,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1235,6 +1385,7 @@ module.exports =
       "defaultValue": "4",
       "displayType": "int",
       "isVisible": true,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1247,6 +1398,7 @@ module.exports =
       "displayType": "int",
       "isVisible": true,
       "isRequired": false,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1259,6 +1411,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1270,6 +1423,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1281,6 +1435,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1292,6 +1447,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1303,6 +1459,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1314,6 +1471,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1325,6 +1483,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1337,6 +1496,7 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1347,6 +1507,7 @@ module.exports =
       "defaultValue": "0.9",
       "displayType": "float",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1358,6 +1519,7 @@ module.exports =
       "displayType": "int",
       "unit": "hours",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1368,6 +1530,7 @@ module.exports =
       "defaultValue": "-1",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1378,6 +1541,7 @@ module.exports =
       "defaultValue": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1389,6 +1553,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1400,6 +1565,7 @@ module.exports =
       "isReconfigurable": true,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     /*{
@@ -1423,6 +1589,7 @@ module.exports =
       "displayType": "directories",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     {
@@ -1434,6 +1601,7 @@ module.exports =
       "displayType": "directories",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     {
@@ -1445,6 +1613,7 @@ module.exports =
       "displayType": "advanced",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     {
@@ -1456,6 +1625,7 @@ module.exports =
       "displayType": "advanced",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     /*
@@ -1476,12 +1646,13 @@ module.exports =
       "id": "puppet var",
       "name": "java64_home",
       "displayName": "Path to 64-bit JAVA_HOME",
-      "description": "Path to 64-bit JAVA_HOME",
-      "defaultValue": "",
-      "isRequired": false,
+      "description": "Path to 64-bit JAVA_HOME.  /usr/jdk/jdk1.6.0_31 is the default used by Ambari.  You can override this to a specific path that contains the JDK.  Note that the path must be valid on ALL hosts in your cluster.",
+      "defaultValue": "/usr/jdk64/jdk1.6.0_31",
+      "isRequired": true,
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1494,6 +1665,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -1507,6 +1679,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -1520,6 +1693,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -1533,6 +1707,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -1546,6 +1721,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1558,6 +1734,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1570,6 +1747,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1582,6 +1760,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     /*
@@ -1607,7 +1786,6 @@ module.exports =
      "isVisible":  true, "serviceName": "MISC",
      "category": "Advanced"
      },
-     */
     {
       "id": "puppet var",
       "name": "using_local_repo",
@@ -1616,7 +1794,8 @@ module.exports =
       "defaultValue": false,
       "isReconfigurable": false,
       "displayType": "checkbox",
-      "isVisible": true,
+      "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1628,8 +1807,10 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC"
     },
+    */
     {
       "id": "puppet var",
       "name": "hdfs_user",
@@ -1640,6 +1821,7 @@ module.exports =
       "displayType": "user",
       "isVisible": true,
       "serviceName": "MISC",
+      "domain": "global",
       "category": "Users and Groups"
     },
     {
@@ -1651,6 +1833,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1663,6 +1846,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1675,6 +1859,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1687,6 +1872,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1699,6 +1885,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1711,6 +1898,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1723,6 +1911,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1735,6 +1924,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1747,6 +1937,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1759,6 +1950,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1771,6 +1963,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1783,6 +1976,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1795,6 +1989,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1807,6 +2002,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1818,6 +2014,7 @@ module.exports =
       "defaultValue": "nagios",
       "isReconfigurable": false,
       "displayType": "user",
+      "domain": "global",
       "isVisible": false,
       "serviceName": "NAGIOS"
     },
@@ -1829,6 +2026,7 @@ module.exports =
       "defaultValue": "nagios",
       "isReconfigurable": false,
       "displayType": "user",
+      "domain": "global",
       "isVisible": false,
       "serviceName": "NAGIOS"
     },
@@ -1840,6 +2038,7 @@ module.exports =
       "defaultValue": "nagiosadmin",
       "isReconfigurable": false,
       "displayType": "user",
+      "domain": "global",
       "isVisible": true,
       "serviceName": "NAGIOS"
     },
@@ -1852,6 +2051,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "password",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "NAGIOS"
     },
     {
@@ -1862,6 +2062,7 @@ module.exports =
       "defaultValue": "",
       "displayType": "email",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "NAGIOS"
     },
     {
@@ -1873,6 +2074,7 @@ module.exports =
       "description": "The host that has been assigned to run Oozie Server",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Oozie Server"
     },
@@ -1997,6 +2199,7 @@ module.exports =
       "displayType": "directory",
       "isVisible": true,
       "isRequired": false,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Oozie Server"
     },
@@ -2009,6 +2212,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Advanced"
     },
@@ -2021,6 +2225,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Advanced"
     },
@@ -2043,9 +2248,11 @@ module.exports =
       "displayName": "ZooKeeper directory",
       "description": "Data directory for ZooKeeper",
       "defaultValue": "/grid/0/hadoop/zookeeper",
+      "defaultDirectory": "hadoop/zookeeper",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2058,6 +2265,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "Advanced"
     },
@@ -2070,6 +2278,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "Advanced"
     },
@@ -2082,6 +2291,7 @@ module.exports =
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "Advanced"
     },
@@ -2094,6 +2304,7 @@ module.exports =
       "displayType": "int",
       "unit": "ms",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2105,6 +2316,7 @@ module.exports =
       "defaultValue": "10",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2116,6 +2328,7 @@ module.exports =
       "defaultValue": "5",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2127,6 +2340,7 @@ module.exports =
       "defaultValue": "2181",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2138,6 +2352,7 @@ module.exports =
       "defaultValue": "/etc/conf/",
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     }

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js?rev=1419009&r1=1419008&r2=1419009&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js Sun Dec  9 15:23:01 2012
@@ -164,13 +164,21 @@ module.exports = new Ember.Set([
   },
   {
     service_name: 'HIVE',
-    component_name: 'HIVE_MYSQL',
+    component_name: 'MYSQL_SERVER',
     display_name: 'MySql Server for Hive',
     isMaster: false,
     isClient: false,
     description: 'The slave for HBase'
   },
   {
+    service_name: 'HCATALOG',
+    component_name: 'HCAT',
+    display_name: 'HCat Client',
+    isMaster: false,
+    isClient: true,
+    description: ''
+  },
+  {
     service_name: 'TEMPLETON',
     component_name: 'TEMPLETON_SERVER',
     display_name: 'Templeton Server',

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_configs.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_configs.js?rev=1419009&r1=1419008&r2=1419009&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_configs.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_configs.js Sun Dec  9 15:23:01 2012
@@ -107,7 +107,7 @@ module.exports = [
     serviceName: 'MISC',
     displayName: 'Misc',
     configCategories: [
-      // App.ServiceConfigCategory.create({ name: 'General'}),
+      App.ServiceConfigCategory.create({ name: 'General'}),
       App.ServiceConfigCategory.create({ name: 'Users and Groups'})
     ],
     configs: configProperties.filterProperty('serviceName', 'MISC')

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js?rev=1419009&r1=1419008&r2=1419009&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js Sun Dec  9 15:23:01 2012
@@ -62,6 +62,7 @@ Em.I18n.translations = {
   'installer.step2.hostName.error.required':'You must specify at least one host name',
   'installer.step2.hostName.error.notRequired':'Host Names will be ignored if not using SSH to automatically configure hosts',
   'installer.step2.hostName.error.invalid':'Invalid Host Name(s) - cannot start or end with a hyphen',
+  'installer.step2.hostName.pattern.header':'Host name pattern expressions',
   'installer.step2.sshKey':'Host Connectivity Information',
   'installer.step2.sshKey.info':'Provide your SSH Private Key (<b>id_rsa</b> for <b>root</b>)',
   'installer.step2.sshKey.error.required':'SSH Private Key is required',
@@ -74,13 +75,11 @@ Em.I18n.translations = {
   'installer.step2.localRepo.header':'Software Repository',
   'installer.step2.localRepo.label':'Use a local software repository',
   'installer.step2.localRepo.error.required':'Local repository file path is required',
-  'installer.step2.localRepo.info':'The repository configuration file should be installed on each host in your cluster. ' +
-    'This file instructs the package manager to use your local software repository to retrieve software packages, instead of ' +
-    'downloading them from the internet.',
+  'installer.step2.localRepo.info':'Instructs the package manager to use your local software repository to retrieve software packages, instead of ' +
+    'downloading from the internet.',
   'installer.step2.localRepo.tooltip.title':'Local Software Repository',
-  'installer.step2.localRepo.tooltip.content':'The repository configuration file should be installed on each host ' +
-    'in your cluster. This file instructs package manager to use your local' +
-    'software repository to retrieve software packages, instead of using the internet.',
+  'installer.step2.localRepo.tooltip.content':'Instructs the package manager to use your local software repository to retrieve software packages, instead of' +
+    'downloading from the internet.',
   'installer.step2.manualInstall.tooltip.title':'Not Using SSH (Manual Install)',
   'installer.step2.manualInstall.tooltip.content':'If you do not wish Ambari to automatically configure the target hosts via SSH,' +
     ' you have the option of configuring them yourself.  This involves installing and starting Ambari Agent on each of your target hosts.',
@@ -88,17 +87,18 @@ Em.I18n.translations = {
   'installer.step2.manualInstall.popup.body':'You must install Ambari Agents on each host you want to manage before you proceed.  <a href="#" target="_blank">Learn more</a>',
 
   'installer.step3.header':'Confirm Hosts',
-  'installer.step3.body':'Here are the results of the host discovery process.<br>' +
-    'Please verify and remove the ones that you do not want to be part of the cluster.',
-  'installer.step3.hostLog.popup.header':'Bootstrap log for {0}',
+  'installer.step3.body':'Registering your hosts.<br>' +
+    'Please confirm the host list and remove any hosts you do not want to include the cluster.',
+  'installer.step3.hostLog.popup.header':'Registration log for {0}',
   'installer.step3.hosts.remove.popup.header':'Remove Hosts',
   'installer.step3.hosts.remove.popup.body':'Are you sure you want to remove the selected host(s)?',
   'installer.step3.hosts.retry.popup.header':'Retry Host Discovery',
   'installer.step3.hosts.retry.popup.body':'Are you sure you want to retry discovery of the selected host(s)?',
+  'installer.step3.hosts.summary' : 'Installing: %@, Registering: %@, Successful: %@, Failed: %@ ',
   'installer.step3.hostInformation.popup.header':'Error in retrieving host Information',
   'installer.step3.hostInformation.popup.body' : 'All bootstrapped hosts registered but unable to retrieve cpu and memory related information',
   'installer.step4.header':'Choose Services',
-  'installer.step4.body':'Choose which services you want to install on your cluster.<br>Note that some services have dependencies (e.g., HBase requires ZooKeeper.)',
+  'installer.step4.body':'Choose which services you want to install on your cluster.',
   'installer.step4.mapreduceCheck.popup.header':'MapReduce Needed',
   'installer.step4.mapreduceCheck.popup.body':'You did not select MapReduce, but it is needed by other services you selected.  We will automatically add MapReduce.  Is this OK?',
   'installer.step4.monitoringCheck.popup.header':'Limited Functionality Warning',
@@ -109,7 +109,7 @@ Em.I18n.translations = {
   'installer.step5.body':'Assign master components to hosts you want to run them on.',
 
   'installer.step6.header':'Assign Slaves and Clients',
-  'installer.step6.body':'Assign slave and client components to hosts you want to run them on. <br/>Client component will install ',
+  '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 ',
   'installer.step6.error.mustSelectOne':'You must assign at least one host to each.',
 
   'installer.step7.header':'Customize Services',