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 2014/11/14 03:19:45 UTC
[03/29] ambari git commit: AMBARI-8269. Merge branch-windows-dev
changes to trunk. (Jayush Luniya via yusaku)
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/controllers/wizard/step4_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step4_controller.js b/ambari-web/app/controllers/wizard/step4_controller.js
index 0199bd4..3a72854 100644
--- a/ambari-web/app/controllers/wizard/step4_controller.js
+++ b/ambari-web/app/controllers/wizard/step4_controller.js
@@ -98,6 +98,16 @@ App.WizardStep4Controller = Em.ArrayController.extend({
},
/**
+ * Check if the stack definition has any monitoring service (alerting, metrics services) that has not been selected
+ * @return {bool}
+ * @method isMonitoringServiceNotSelected
+ */
+ isMonitoringServiceNotSelected: function () {
+ var stackMonitoringServices = this.filterProperty('isMonitoringService',true);
+ return stackMonitoringServices.length && stackMonitoringServices.someProperty('isSelected',false);
+ },
+
+ /**
* Check whether user turned on monitoring service and go to next step
* @method validateMonitoring
*/
@@ -291,7 +301,7 @@ App.WizardStep4Controller = Em.ArrayController.extend({
},this);
}
},this);
-
+
if (missingDependencies.length > 0) {
for(var i = 0; i < missingDependencies.length; i++) {
this.addValidationError({
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/controllers/wizard/step5_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step5_controller.js b/ambari-web/app/controllers/wizard/step5_controller.js
index 768b96f..33afa00 100644
--- a/ambari-web/app/controllers/wizard/step5_controller.js
+++ b/ambari-web/app/controllers/wizard/step5_controller.js
@@ -595,12 +595,12 @@ App.WizardStep5Controller = Em.Controller.extend(App.BlueprintMixin, {
multipleComponentHasBeenAdded[component.name] = true;
savedComponents.forEach(function(saved) {
- resultComponents.push(self.createComponentInstallationObject(fullComponent, host.fqdn, saved));
+ resultComponents.push(self.createComponentInstallationObject(fullComponent, host.fqdn.toLowerCase(), saved));
});
}
} else {
var savedComponent = masterHosts.findProperty('component', component.name);
- resultComponents.push(self.createComponentInstallationObject(fullComponent, host.fqdn, savedComponent));
+ resultComponents.push(self.createComponentInstallationObject(fullComponent, host.fqdn.toLowerCase(), savedComponent));
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/controllers/wizard/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index cfe1888..5b2a904 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -874,21 +874,33 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, {
},
/**
- * Check if Oozie or Hive use existing database then need
+ * Check if Oozie, Hive or MetricsSink use existing database then need
* to restore missed properties
*
* @param {Object[]} configs
**/
setServiceDatabaseConfigs: function (configs) {
var serviceNames = this.get('installedServiceNames').filter(function (serviceName) {
- return ['OOZIE', 'HIVE'].contains(serviceName);
+ return ['OOZIE', 'HIVE', 'HDFS'].contains(serviceName);
});
serviceNames.forEach(function (serviceName) {
- var dbTypeConfig = configs.findProperty('name', serviceName.toLowerCase() + '_database');
+ var propertyPrefix = serviceName.toLowerCase();
+ if(/HDFS/gi.test(serviceName)) propertyPrefix = 'sink';
+ var dbTypeConfig = configs.findProperty('name', propertyPrefix + '_database');
if (!/existing/gi.test(dbTypeConfig.value)) return;
- var dbHostName = serviceName.toLowerCase() + '_hostname';
- var database = dbTypeConfig.value.match(/MySQL|PostgreSQL|Oracle|Derby/gi)[0];
- var existingDBConfig = configs.findProperty('name', serviceName.toLowerCase() + '_existing_' + database.toLowerCase() + '_host');
+ var dbHostName = propertyPrefix + '_hostname';
+ var database = dbTypeConfig.value.match(/MySQL|PostgreSQL|Oracle|Derby|MSSQL/gi)[0];
+ var dbPrefix = database.toLowerCase();
+ if(database.toLowerCase() == 'mssql') {
+ dbHostName = 'sink.dbservername';
+ if(/integrated/gi.test(dbTypeConfig.value)) {
+ dbPrefix = 'mssql_server';
+ } else {
+ dbPrefix = 'mssql_server_2';
+ }
+ }
+ var propertyName = propertyPrefix + '_existing_' + dbPrefix + '_host';
+ var existingDBConfig = configs.findProperty('name', propertyName);
if (!existingDBConfig.value)
existingDBConfig.value = existingDBConfig.defaultValue = configs.findProperty('name', dbHostName).value;
}, this);
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index 0f593e8..affad0c 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -226,6 +226,38 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
},
/**
+ * Remove unused Sink configs
+ * @param {Ember.Enumerable} configs
+ * @returns {Ember.Enumerable}
+ * @method removeSinkConfigs
+ */
+ removeSinkConfigs: function (configs) {
+ var sinkDb = configs.findProperty('name', 'sink_database');
+ var sinkDbType = configs.findProperty('name', 'sink_database_type');
+ if (sinkDbType) {
+ var sink_properties = Em.A([]);
+
+ switch (sinkDb.value) {
+ case 'Existing MSSQL Server database with integrated authentication':
+ configs.findProperty('name', 'sink.dbservername').value = configs.findProperty('name', 'sink_existing_mssql_server_host').value;
+ sinkDbType.value = 'mssql';
+ sink_properties = Em.A(['sink_existing_mssql_server_2_database', 'sink_existing_mssql_server_2_host']);
+ break;
+ case 'Existing MSSQL Server database with sql auth':
+ configs.findProperty('name', 'sink.dbservername').value = configs.findProperty('name', 'sink_existing_mssql_server_2_host').value;
+ sinkDbType.value = 'mssql';
+ sink_properties = Em.A(['sink_existing_mssql_server_database', 'sink_existing_mssql_server_host']);
+ break;
+ }
+
+ sink_properties.forEach(function (property) {
+ configs = configs.without(configs.findProperty('name', property));
+ });
+ }
+ return configs;
+ },
+
+ /**
* Remove unused Hive configs
* @param {Ember.Enumerable} configs
* @returns {Ember.Enumerable}
@@ -244,7 +276,9 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
hiveDbType.value = 'mysql';
}
hive_properties = Em.A(['hive_existing_mysql_host', 'hive_existing_mysql_database', 'hive_existing_oracle_host',
- 'hive_existing_oracle_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database']);
+ 'hive_existing_oracle_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database',
+ 'hive_existing_mssql_server_database', 'hive_existing_mssql_server_host',
+ 'hive_existing_mssql_server_2_database', 'hive_existing_mssql_server_2_host']);
break;
case 'New PostgreSQL Database':
if (configs.someProperty('name', 'hive_ambari_host')) {
@@ -258,19 +292,41 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
configs.findProperty('name', 'hive_hostname').value = configs.findProperty('name', 'hive_existing_mysql_host').value;
hiveDbType.value = 'mysql';
hive_properties = Em.A(['hive_ambari_host', 'hive_ambari_database', 'hive_existing_oracle_host',
- 'hive_existing_oracle_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database']);
+ 'hive_existing_oracle_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database',
+ 'hive_existing_mssql_server_database', 'hive_existing_mssql_server_host',
+ 'hive_existing_mssql_server_2_database', 'hive_existing_mssql_server_2_host']);
break;
case Em.I18n.t('services.service.config.hive.oozie.postgresql'):
configs.findProperty('name', 'hive_hostname').value = configs.findProperty('name', 'hive_existing_postgresql_host').value;
hiveDbType.value = 'postgres';
hive_properties = Em.A(['hive_ambari_host', 'hive_ambari_database', 'hive_existing_oracle_host',
- 'hive_existing_oracle_database', 'hive_existing_mysql_host', 'hive_existing_mysql_database']);
+ 'hive_existing_oracle_database', 'hive_existing_mysql_host', 'hive_existing_mysql_database',
+ 'hive_existing_mssql_server_database', 'hive_existing_mssql_server_host',
+ 'hive_existing_mssql_server_2_database', 'hive_existing_mssql_server_2_host']);
+ break;
+ case 'Existing MSSQL Server database with integrated authentication':
+ configs.findProperty('name', 'hive_hostname').value = configs.findProperty('name', 'hive_existing_mssql_server_2_host').value;
+ hiveDbType.value = 'mssql';
+ hive_properties = Em.A(['hive_ambari_host', 'hive_ambari_database', 'hive_existing_oracle_host',
+ 'hive_existing_oracle_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database',
+ 'hive_existing_mysql_host', 'hive_existing_mysql_database', 'hive_existing_mssql_server_database',
+ 'hive_existing_mssql_server_host', 'hive_existing_mssql_server_2_database', 'hive_existing_mssql_server_2_host']);
+ break;
+ case 'Existing MSSQL Server database with sql auth':
+ configs.findProperty('name', 'hive_hostname').value = configs.findProperty('name', 'hive_existing_mssql_server_host').value;
+ hiveDbType.value = 'mssql';
+ hive_properties = Em.A(['hive_ambari_host', 'hive_ambari_database', 'hive_existing_oracle_host',
+ 'hive_existing_oracle_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database',
+ 'hive_existing_mysql_host', 'hive_existing_mysql_database', 'hive_existing_mssql_server_database',
+ 'hive_existing_mssql_server_host', 'hive_existing_mssql_server_database', 'hive_existing_mssql_server_host']);
break;
default:
configs.findProperty('name', 'hive_hostname').value = configs.findProperty('name', 'hive_existing_oracle_host').value;
hiveDbType.value = 'oracle';
hive_properties = Em.A(['hive_ambari_host', 'hive_ambari_database', 'hive_existing_mysql_host',
- 'hive_existing_mysql_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database']);
+ 'hive_existing_mysql_database', 'hive_existing_postgresql_host', 'hive_existing_postgresql_database',
+ 'hive_existing_mssql_server_database', 'hive_existing_mssql_server_host',
+ 'hive_existing_mssql_server_2_database', 'hive_existing_mssql_server_2_host']);
break;
}
@@ -299,25 +355,51 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
oozieDbType.value = 'derby';
oozie_properties = Em.A(['oozie_ambari_host', 'oozie_ambari_database', 'oozie_existing_mysql_host',
'oozie_existing_mysql_database', 'oozie_existing_oracle_host', 'oozie_existing_oracle_database',
- 'oozie_existing_postgresql_host', 'oozie_existing_postgresql_database']);
+ 'oozie_existing_postgresql_host', 'oozie_existing_postgresql_database',
+ 'oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host',
+ 'oozie_existing_mssql_server_2_database', 'oozie_existing_mssql_server_2_host']);
break;
case 'Existing MySQL Database':
configs.findProperty('name', 'oozie_hostname').value = configs.findProperty('name', 'oozie_existing_mysql_host').value;
oozieDbType.value = 'mysql';
oozie_properties = Em.A(['oozie_ambari_host', 'oozie_ambari_database', 'oozie_existing_oracle_host',
- 'oozie_existing_oracle_database', 'oozie_derby_database', 'oozie_existing_postgresql_host', 'oozie_existing_postgresql_database']);
+ 'oozie_existing_oracle_database', 'oozie_derby_database', 'oozie_existing_postgresql_host', 'oozie_existing_postgresql_database',
+ 'oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host',
+ 'oozie_existing_mssql_server_2_database', 'oozie_existing_mssql_server_2_host']);
break;
case Em.I18n.t('services.service.config.hive.oozie.postgresql'):
configs.findProperty('name', 'oozie_hostname').value = configs.findProperty('name', 'oozie_existing_postgresql_host').value;
oozieDbType.value = 'postgresql';
oozie_properties = Em.A(['oozie_ambari_host', 'oozie_ambari_database', 'oozie_existing_oracle_host',
- 'oozie_existing_oracle_database', 'oozie_existing_mysql_host', 'oozie_existing_mysql_database']);
+ 'oozie_existing_oracle_database', 'oozie_existing_mysql_host', 'oozie_existing_mysql_database',
+ 'oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host',
+ 'oozie_existing_mssql_server_2_database', 'oozie_existing_mssql_server_2_host']);
+ break;
+ case 'Existing MSSQL Server database with integrated authentication':
+ configs.findProperty('name', 'oozie_hostname').value = configs.findProperty('name', 'oozie_existing_mysql_host').value;
+ oozieDbType.value = 'mssql';
+ hive_properties = Em.A(['hive_ambari_host', 'hive_ambari_database', 'oozie_existing_oracle_host',
+ 'oozie_existing_oracle_database', 'oozie_existing_postgresql_host', 'oozie_existing_postgresql_database',
+ 'oozie_existing_mysql_host', 'oozie_existing_mysql_database',
+ 'oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host',
+ 'oozie_existing_mssql_server_2_database', 'oozie_existing_mssql_server_2_host']);
+ break;
+ case 'Existing MSSQL Server database with sql auth':
+ configs.findProperty('name', 'oozie_hostname').value = configs.findProperty('name', 'oozie_existing_mysql_host').value;
+ oozieDbType.value = 'mssql';
+ hive_properties = Em.A(['hive_ambari_host', 'hive_ambari_database', 'oozie_existing_oracle_host',
+ 'oozie_existing_oracle_database', 'oozie_existing_postgresql_host', 'oozie_existing_postgresql_database',
+ 'oozie_existing_mysql_host', 'oozie_existing_mysql_database',
+ 'oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host',
+ 'oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host']);
break;
default:
configs.findProperty('name', 'oozie_hostname').value = configs.findProperty('name', 'oozie_existing_oracle_host').value;
oozieDbType.value = 'oracle';
oozie_properties = Em.A(['oozie_ambari_host', 'oozie_ambari_database', 'oozie_existing_mysql_host',
- 'oozie_existing_mysql_database', 'oozie_derby_database', 'oozie_existing_postgresql_host', 'oozie_existing_postgresql_database']);
+ 'oozie_existing_mysql_database', 'oozie_derby_database', 'oozie_existing_postgresql_host',
+ 'oozie_existing_postgresql_database', 'oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host',
+ 'oozie_existing_mssql_server_2_database', 'oozie_existing_mssql_server_2_host']);
break;
}
oozie_properties.forEach(function (property) {
@@ -337,6 +419,9 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
if (configs.someProperty('name', 'hive_database')) {
configs = this.removeHiveConfigs(configs);
}
+ if (configs.someProperty('name', 'sink_database')) {
+ configs = this.removeSinkConfigs(configs);
+ }
if (configs.someProperty('name', 'oozie_database')) {
configs = this.removeOozieConfigs(configs);
}
@@ -579,7 +664,7 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
base_url: repo.get('baseUrl'),
os_type: repo.get('osType'),
repo_id: repo.get('repoId')
- }));
+ }));
}, this);
}
}, this);
@@ -719,14 +804,33 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
hostsCount + ' ' + Em.I18n.t('installer.step8.hosts'));
},
+/**
+ * Set displayed MetricsSink DB value based on DB type
+ * @param {Ember.Object} dbComponent
+ * @method loadSinkDbValue
+ */
+ loadSinkDbValue: function () {
+ var db, serviceConfigProperties = this.get('wizardController').getDBProperty('serviceConfigProperties'),
+ sinkDb = serviceConfigProperties.findProperty('name', 'sink_database');
+ if (sinkDb.value === 'Existing MSSQL Server database with integrated authentication') {
+ db = serviceConfigProperties.findProperty('name', 'sink_existing_mssql_server_database');
+ return db.value + ' (' + sinkDb.value + ')';
+ }
+ else {
+ if (sinkDb.value === 'Existing MSSQL Server database with sql auth') {
+ db = serviceConfigProperties.findProperty('name', 'sink_existing_mssql_server_2_database');
+ return db.value + ' (' + sinkDb.value + ')';
+ }
+ }
+ },
+
/**
* Set dispalyed Hive DB value based on DB type
* @param {Ember.Object} dbComponent
* @method loadHiveDbValue
*/
loadHiveDbValue: function () {
- var db,
- serviceConfigPreoprties = this.get('wizardController').getDBProperty('serviceConfigProperties'),
+ var db, serviceConfigPreoprties = this.get('wizardController').getDBProperty('serviceConfigProperties'),
hiveDb = serviceConfigPreoprties.findProperty('name', 'hive_database');
if (hiveDb.value === 'New MySQL Database') {
return 'MySQL (New Database)';
@@ -743,9 +847,22 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
db = serviceConfigPreoprties.findProperty('name', 'hive_existing_postgresql_database');
return db.value + ' (' + hiveDb.value + ')';
}
- else { // existing oracle database
- db = serviceConfigPreoprties.findProperty('name', 'hive_existing_oracle_database');
- return db.value + ' (' + hiveDb.value + ')';
+ else {
+ if (hiveDb.value === 'Existing MSSQL Server database with integrated authentication') {
+ db = serviceConfigPreoprties.findProperty('name', 'hive_existing_mssql_server_database');
+ return db.value + ' (' + hiveDb.value + ')';
+ }
+ else {
+ if (hiveDb.value === 'Existing MSSQL Server database with sql auth') {
+ db = serviceConfigPreoprties.findProperty('name', 'hive_existing_mssql_server_2_database');
+ return db.value + ' (' + hiveDb.value + ')';
+ }
+ else {
+ // existing oracle database
+ db = serviceConfigPreoprties.findProperty('name', 'hive_existing_oracle_database');
+ return db.value + ' (' + hiveDb.value + ')';
+ }
+ }
}
}
}
@@ -802,9 +919,22 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, {
db = this.get('wizardController').getDBProperty('serviceConfigProperties').findProperty('name', 'oozie_existing_postgresql_database');
return db.value + ' (' + oozieDb.value + ')';
}
- else { // existing oracle database
- db = this.get('wizardController').getDBProperty('serviceConfigProperties').findProperty('name', 'oozie_existing_oracle_database');
- return db.value + ' (' + oozieDb.value + ')';
+ else {
+ if (oozieDb.value === 'Existing MSSQL Server database with integrated authentication') {
+ db = this.get('wizardController').getDBProperty('serviceConfigProperties').findProperty('name', 'oozie_existing_mssql_server_database');
+ return db.value + ' (' + oozieDb.value + ')';
+ }
+ else {
+ if (oozieDb.value === 'Existing MSSQL Server database with sql auth') {
+ db = this.get('wizardController').getDBProperty('serviceConfigProperties').findProperty('name', 'oozie_existing_mssql_server_2_database');
+ return db.value + ' (' + oozieDb.value + ')';
+ }
+ else {
+ // existing oracle database
+ db = this.get('wizardController').getDBProperty('serviceConfigProperties').findProperty('name', 'oozie_existing_oracle_database');
+ return db.value + ' (' + oozieDb.value + ')';
+ }
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/controllers/wizard/step9_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step9_controller.js b/ambari-web/app/controllers/wizard/step9_controller.js
index adfe292..93372c6 100644
--- a/ambari-web/app/controllers/wizard/step9_controller.js
+++ b/ambari-web/app/controllers/wizard/step9_controller.js
@@ -487,7 +487,7 @@ App.WizardStep9Controller = Em.Controller.extend({
data = {
"context": Em.I18n.t("requestInfo.startAddedServices"),
"ServiceInfo": { "state": "STARTED" },
- "urlParams": "ServiceInfo/state=INSTALLED&ServiceInfo/service_name.in(" + servicesList.join(",") + ")¶ms/reconfigure_client=false"
+ "urlParams": "ServiceInfo/state=INSTALLED&ServiceInfo/service_name.in(" + servicesList.join(",") + ")¶ms/run_smoke_test=true¶ms/reconfigure_client=false"
};
break;
default:
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/data/HDP2/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/site_properties.js b/ambari-web/app/data/HDP2/site_properties.js
index f132b63..e9b8234 100644
--- a/ambari-web/app/data/HDP2/site_properties.js
+++ b/ambari-web/app/data/HDP2/site_properties.js
@@ -47,6 +47,203 @@ module.exports =
"index": 3
},
{
+ "id": "puppet var",
+ "name": "hadoop.user.name",
+ "displayName": "Hadoop User Name",
+ "description": "User to run Hadoop services under",
+ "defaultValue": "hadoop",
+ "isReconfigurable": false,
+ "displayType": "user",
+ "isOverridable": false,
+ "isVisible": App.get('isHadoopWindowsStack'),
+ "serviceName": "MISC",
+ "filename": "cluster-env.xml",
+ "category": "Users and Groups",
+ "belongsToService": ["HDFS"],
+ "index": 0
+ },
+ {
+ "id": "puppet var",
+ "name": "hadoop.user.password",
+ "displayName": "Hadoop User Password",
+ "description": "Password for hadoop user",
+ "isReconfigurable": false,
+ "displayType": "password",
+ "isOverridable": false,
+ "isVisible": App.get('isHadoopWindowsStack'),
+ "serviceName": "MISC",
+ "filename": "cluster-env.xml",
+ "category": "Users and Groups",
+ "belongsToService": ["HDFS"],
+ "index": 1
+ },
+ {
+ "id": "puppet var",
+ "name": "hadoop_host",
+ "displayName": "Hadoop host",
+ "value": "",
+ "defaultValue": "",
+ "description": "A hadoop host from where metrics will be uploaded",
+ "displayType": "masterHost",
+ "isOverridable": false,
+ "isVisible": true,
+ "isRequiredByAgent": false,
+ "serviceName": "HDFS",
+ "category": "MetricsSink",
+ "index": 0
+ },
+ {
+ "id": "puppet var",
+ "name": "sink_existing_mssql_server_database",
+ "displayName": "Database Type",
+ "value": "",
+ "defaultValue": "MSSQL",
+ "description": "Using an existing MSSQL database for Metrics Sink",
+ "displayType": "masterHost",
+ "isOverridable": false,
+ "isVisible": false,
+ "isReconfigurable": false,
+ "serviceName": "HDFS",
+ "category": "MetricsSink",
+ "index": 1
+ },
+ {
+ "id": "puppet var",
+ "name": "sink_existing_mssql_server_2_database",
+ "displayName": "Database Type",
+ "value": "",
+ "defaultValue": "MSSQL",
+ "description": "Using an existing MSSQL database for Metrics Sink",
+ "displayType": "masterHost",
+ "isOverridable": false,
+ "isVisible": false,
+ "isReconfigurable": false,
+ "serviceName": "HDFS",
+ "category": "MetricsSink",
+ "index": 1
+ },
+ {
+ "id": "puppet var",
+ "name": "sink_database",
+ "displayName": "Metrics Sink Database",
+ "value": "",
+ "defaultValue": "Existing MSSQL Server database with sql auth",
+ "options": [
+ {
+ displayName: 'Existing MSSQL Server database with integrated authentication',
+ foreignKeys: ['sink_existing_mssql_server_database', 'sink_existing_mssql_server_host']
+ },
+ {
+ displayName: 'Existing MSSQL Server database with sql auth',
+ foreignKeys: ['sink_existing_mssql_server_2_database', 'sink_existing_mssql_server_2_host']
+ }
+ ],
+ "displayType": "radio button",
+ "isReconfigurable": false,
+ "radioName": "sink-database",
+ "isOverridable": false,
+ "isVisible": true,
+ "serviceName": "HDFS",
+ "category": "MetricsSink",
+ "index": 2
+ },
+ {
+ "id": "site property",
+ "name": "sink.dbservername",
+ "displayName": "Database Host",
+ "description": "Specify the host on which the database is hosted",
+ "defaultValue": "",
+ "isReconfigurable": true,
+ "displayType": "host",
+ "isOverridable": false,
+ "isObserved": true,
+ "isVisible": false,
+ "category": "MetricsSink",
+ "serviceName": "HDFS",
+ "index": 2
+ },
+ {
+ "id": "puppet var",
+ "name": "sink_existing_mssql_server_host",
+ "displayName": "Database Host",
+ "description": "Specify the host on which the existing database is hosted",
+ "defaultValue": "",
+ "displayType": "host",
+ "isOverridable": false,
+ "isRequiredByAgent": false,
+ "isVisible": false,
+ "isObserved": true,
+ "serviceName": "HDFS",
+ "category": "MetricsSink",
+ "index": 3
+ },
+ {
+ "id": "puppet var",
+ "name": "sink_existing_mssql_server_2_host",
+ "displayName": "Database Host",
+ "description": "Specify the host on which the existing database is hosted",
+ "defaultValue": "",
+ "displayType": "host",
+ "isOverridable": false,
+ "isRequiredByAgent": false,
+ "isVisible": false,
+ "isObserved": true,
+ "serviceName": "HDFS",
+ "category": "MetricsSink",
+ "index": 3
+ },
+ {
+ "id": "site property",
+ "name": "sink.db.schema.name",
+ "displayName": "Database Name",
+ "isOverridable": false,
+ "displayType": "host",
+ "isObserved": true,
+ "category": "MetricsSink",
+ "serviceName": "HDFS",
+ "index": 4
+ },
+ {
+ "id": "site property",
+ "name": "sink.dblogin",
+ "displayName": "Database Username",
+ "isOverridable": false,
+ "displayType": "user",
+ "category": "MetricsSink",
+ "serviceName": "HDFS",
+ "index": 5
+ },
+ {
+ "id": "site property",
+ "name": "sink.dbpassword",
+ "displayName": "Database Password",
+ "isOverridable": false,
+ "displayType": "password",
+ "category": "MetricsSink",
+ "serviceName": "HDFS",
+ "index": 6
+ },
+ {
+ "id": "site property",
+ "name": "sink.jdbc.driver",
+ "displayName": "JDBC Driver Class",
+ "isOverridable": false,
+ "category": "MetricsSink",
+ "serviceName": "HDFS",
+ "index": 7
+ },
+ {
+ "id": "site property",
+ "name": "sink.jdbc.url",
+ "displayName": "Database URL",
+ "isOverridable": false,
+ "displayType": "advanced",
+ "category": "MetricsSink",
+ "serviceName": "HDFS",
+ "index": 8
+ },
+
+ {
"id": "site property",
"name": "dfs.namenode.name.dir",
"displayName": "NameNode directories",
@@ -450,7 +647,7 @@ module.exports =
"name": "oozie.service.JPAService.jdbc.username",
"displayName": "Database Username",
"isOverridable": false,
- "displayType": "host",
+ "displayType": "user",
"category": "OOZIE_SERVER",
"serviceName": "OOZIE",
"filename": "oozie-site.xml",
@@ -516,7 +713,7 @@ module.exports =
"id": "site property",
"name": "javax.jdo.option.ConnectionUserName",
"displayName": "Database Username",
- "displayType": "host",
+ "displayType": "user",
"isOverridable": false,
"category": "HIVE_METASTORE",
"serviceName": "HIVE",
@@ -2890,6 +3087,38 @@ module.exports =
"category": "HIVE_METASTORE",
"index": 1
},
+ {
+ "id": "puppet var",
+ "name": "hive_existing_mssql_server_database",
+ "displayName": "Database Type",
+ "value": "",
+ "defaultValue": "MSSQL",
+ "description": "Using an existing MSSQL database for Hive Metastore",
+ "displayType": "masterHost",
+ "isOverridable": false,
+ "isVisible": false,
+ "isReconfigurable": false,
+ "serviceName": "HIVE",
+ "filename": "hive-env.xml",
+ "category": "HIVE_METASTORE",
+ "index": 1
+ },
+ {
+ "id": "puppet var",
+ "name": "hive_existing_mssql_server_2_database",
+ "displayName": "Database Type",
+ "value": "",
+ "defaultValue": "MSSQL",
+ "description": "Using an existing MSSQL database for Hive Metastore",
+ "displayType": "masterHost",
+ "isOverridable": false,
+ "isVisible": false,
+ "isReconfigurable": false,
+ "serviceName": "HIVE",
+ "filename": "hive-env.xml",
+ "category": "HIVE_METASTORE",
+ "index": 1
+ },
// for existing PostgreSQL
{
"id": "puppet var",
@@ -2934,6 +3163,7 @@ module.exports =
"description": "MySQL will be installed by Ambari",
"displayType": "masterHost",
"isOverridable": false,
+ "isReconfigurable": false,
"isVisible": false,
"serviceName": "HIVE",
"filename": "hive-env.xml",
@@ -2949,19 +3179,33 @@ module.exports =
"options": [
{
displayName: 'New MySQL Database',
- foreignKeys: ['hive_ambari_database', 'hive_ambari_host']
+ foreignKeys: ['hive_ambari_database', 'hive_ambari_host'],
+ hidden: App.get('isHadoopWindowsStack')
},
{
displayName: 'Existing MySQL Database',
- foreignKeys: ['hive_existing_mysql_database', 'hive_existing_mysql_host']
+ foreignKeys: ['hive_existing_mysql_database', 'hive_existing_mysql_host'],
+ hidden: App.get('isHadoopWindowsStack')
},
{
displayName: 'Existing PostgreSQL Database',
- foreignKeys: ['hive_existing_postgresql_database', 'hive_existing_postgresql_host']
+ foreignKeys: ['hive_existing_postgresql_database', 'hive_existing_postgresql_host'],
+ hidden: App.get('isHadoopWindowsStack')
},
{
displayName: 'Existing Oracle Database',
- foreignKeys: ['hive_existing_oracle_database', 'hive_existing_oracle_host']
+ foreignKeys: ['hive_existing_oracle_database', 'hive_existing_oracle_host'],
+ hidden: App.get('isHadoopWindowsStack')
+ },
+ {
+ displayName: 'Existing MSSQL Server database with integrated authentication',
+ foreignKeys: ['hive_existing_mssql_server_database', 'hive_existing_mssql_server_host'],
+ hidden: !App.get('isHadoopWindowsStack')
+ },
+ {
+ displayName: 'Existing MSSQL Server database with sql auth',
+ foreignKeys: ['hive_existing_mssql_server_2_database', 'hive_existing_mssql_server_2_host'],
+ hidden: !App.get('isHadoopWindowsStack')
}
],
"description": "MySQL will be installed by Ambari",
@@ -3060,6 +3304,38 @@ module.exports =
},
{
"id": "puppet var",
+ "name": "hive_existing_mssql_server_host",
+ "displayName": "Database Host",
+ "description": "Specify the host on which the existing database is hosted",
+ "defaultValue": "",
+ "displayType": "host",
+ "isOverridable": false,
+ "isRequiredByAgent": false,
+ "isVisible": false,
+ "isObserved": true,
+ "serviceName": "HIVE",
+ "filename": "hive-env.xml",
+ "category": "HIVE_METASTORE",
+ "index": 3
+ },
+ {
+ "id": "puppet var",
+ "name": "hive_existing_mssql_server_2_host",
+ "displayName": "Database Host",
+ "description": "Specify the host on which the existing database is hosted",
+ "defaultValue": "",
+ "displayType": "host",
+ "isOverridable": false,
+ "isRequiredByAgent": false,
+ "isVisible": false,
+ "isObserved": true,
+ "serviceName": "HIVE",
+ "filename": "hive-env.xml",
+ "category": "HIVE_METASTORE",
+ "index": 3
+ },
+ {
+ "id": "puppet var",
"name": "hive_metastore_port",
"displayName": "Hive metastore port",
"description": "",
@@ -3258,6 +3534,7 @@ module.exports =
"description": "MySQL will be installed by Ambari",
"displayType": "masterHost",
"isVisible": false,
+ "isReconfigurable": false,
"isOverridable": false,
"serviceName": "OOZIE",
"filename": "oozie-env.xml",
@@ -3300,6 +3577,38 @@ module.exports =
},
{
"id": "puppet var",
+ "name": "oozie_existing_mssql_server_database",
+ "displayName": "Database Type",
+ "value": "",
+ "defaultValue": "MSSQL",
+ "description": "Using an existing MSSQL database with integrated authentication for Oozie Metastore",
+ "displayType": "masterHost",
+ "isVisible": false,
+ "isReconfigurable": false,
+ "isOverridable": false,
+ "serviceName": "OOZIE",
+ "filename": "oozie-env.xml",
+ "category": "OOZIE_SERVER",
+ "index": 1
+ },
+ {
+ "id": "puppet var",
+ "name": "oozie_existing_mssql_server_2_database",
+ "displayName": "Database Type",
+ "value": "",
+ "defaultValue": "MSSQL",
+ "description": "Using an existing MSSQL database with sql auth for Oozie Metastore",
+ "displayType": "masterHost",
+ "isVisible": false,
+ "isReconfigurable": false,
+ "isOverridable": false,
+ "serviceName": "OOZIE",
+ "filename": "oozie-env.xml",
+ "category": "OOZIE_SERVER",
+ "index": 1
+ },
+ {
+ "id": "puppet var",
"name": "oozie_database",
"displayName": "Oozie Database",
"value": "",
@@ -3307,19 +3616,33 @@ module.exports =
"options": [
{
displayName: 'New Derby Database',
- foreignKeys: ['oozie_derby_database']
+ foreignKeys: ['oozie_derby_database'],
+ hidden: App.get('isHadoopWindowsStack')
},
{
displayName: 'Existing MySQL Database',
- foreignKeys: ['oozie_existing_mysql_database', 'oozie_existing_mysql_host']
+ foreignKeys: ['oozie_existing_mysql_database', 'oozie_existing_mysql_host'],
+ hidden: App.get('isHadoopWindowsStack')
},
{
displayName: 'Existing PostgreSQL Database',
- foreignKeys: ['oozie_existing_postgresql_database', 'oozie_existing_postgresql_host']
+ foreignKeys: ['oozie_existing_postgresql_database', 'oozie_existing_postgresql_host'],
+ hidden: App.get('isHadoopWindowsStack')
},
{
displayName: 'Existing Oracle Database',
- foreignKeys: ['oozie_existing_oracle_database', 'oozie_existing_oracle_host']
+ foreignKeys: ['oozie_existing_oracle_database', 'oozie_existing_oracle_host'],
+ hidden: App.get('isHadoopWindowsStack')
+ },
+ {
+ displayName: 'Existing MSSQL Server database with integrated authentication',
+ foreignKeys: ['oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_host'],
+ hidden: !App.get('isHadoopWindowsStack')
+ },
+ {
+ displayName: 'Existing MSSQL Server database with sql auth',
+ foreignKeys: ['oozie_existing_mssql_server_2_database', 'oozie_existing_mssql_server_2_host'],
+ hidden: !App.get('isHadoopWindowsStack')
}
],
"description": "Current Derby Database will be installed by Ambari",
@@ -3428,6 +3751,38 @@ module.exports =
},
{
"id": "puppet var",
+ "name": "oozie_existing_mssql_server_host",
+ "displayName": "Database Host",
+ "description": "Specify the host on which the existing database is hosted",
+ "defaultValue": "",
+ "displayType": "host",
+ "isOverridable": false,
+ "isRequiredByAgent": false,
+ "isVisible": false,
+ "isObserved": true,
+ "serviceName": "OOZIE",
+ "filename": "oozie-env.xml",
+ "category": "OOZIE_SERVER",
+ "index": 3
+ },
+ {
+ "id": "puppet var",
+ "name": "oozie_existing_mssql_server_2_host",
+ "displayName": "Database Host",
+ "description": "Specify the host on which the existing database is hosted",
+ "defaultValue": "",
+ "displayType": "host",
+ "isOverridable": false,
+ "isRequiredByAgent": false,
+ "isVisible": false,
+ "isObserved": true,
+ "serviceName": "OOZIE",
+ "filename": "oozie-env.xml",
+ "category": "OOZIE_SERVER",
+ "index": 3
+ },
+ {
+ "id": "puppet var",
"name": "oozie_log_dir",
"displayName": "Oozie Log Dir",
"description": "Directory for oozie logs",
@@ -3883,13 +4238,13 @@ module.exports =
{
"id": "puppet var",
"name": "proxyuser_group",
- "displayName": "Proxy group for Hive, WebHCat, Oozie and Falcon",
+ "displayName": "Proxy group for Hive, Oozie and Falcon",
"description": "",
"defaultValue": "users",
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"filename": "hadoop-env.xml",
"serviceName": "MISC",
"category": "Users and Groups",
@@ -3919,12 +4274,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "hadoop-env.xml",
"category": "Users and Groups",
"belongsToService": ["HDFS"],
- "index": 1
+ "index": 2
},
{
"id": "puppet var",
@@ -3935,12 +4290,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "mapred-env.xml",
"category": "Users and Groups",
"belongsToService": ["MAPREDUCE2"],
- "index": 2
+ "index": 3
},
{
"id": "puppet var",
@@ -3951,12 +4306,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "yarn-env.xml",
"category": "Users and Groups",
"belongsToService": ["YARN"],
- "index": 3
+ "index": 4
},
{
"id": "puppet var",
@@ -3967,12 +4322,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "hbase-env.xml",
"category": "Users and Groups",
"belongsToService": ["HBASE"],
- "index": 4
+ "index": 5
},
{
"id": "puppet var",
@@ -3983,12 +4338,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "hive-env.xml",
"category": "Users and Groups",
"belongsToService": ["HIVE"],
- "index": 5
+ "index": 6
},
{
"id": "puppet var",
@@ -3999,7 +4354,7 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "hive-env.xml",
"category": "Users and Groups",
@@ -4015,7 +4370,7 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "hive-env.xml",
"category": "Users and Groups",
@@ -4031,12 +4386,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "oozie-env.xml",
"category": "Users and Groups",
"belongsToService": ["OOZIE"],
- "index": 8
+ "index": 9
},
{
"id": "puppet var",
@@ -4047,12 +4402,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "falcon-env.xml",
"category": "Users and Groups",
"belongsToService": ["FALCON"],
- "index": 10
+ "index": 11
},
{
"id": "puppet var",
@@ -4063,12 +4418,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "storm-env.xml",
"category": "Users and Groups",
"belongsToService": ["STORM"],
- "index": 9
+ "index": 10
},
{
"id": "puppet var",
@@ -4079,12 +4434,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "zookeeper-env.xml",
"category": "Users and Groups",
"belongsToService": ["ZOOKEEPER"],
- "index": 11
+ "index": 12
},
{
"id": "puppet var",
@@ -4111,7 +4466,7 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "ganglia-env.xml",
"category": "Users and Groups",
@@ -4127,7 +4482,7 @@ module.exports =
"isReconfigurable": false,
"displayType": "advanced",
"isOverridable": false,
- "isVisible": false,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "ganglia-env.xml",
"category": "Users and Groups",
@@ -4142,12 +4497,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "nagios-env.xml",
"category": "Users and Groups",
"belongsToService": ["NAGIOS"],
- "index": 14
+ "index": 15
},
{
"id": "puppet var",
@@ -4158,12 +4513,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "nagios-env.xml",
"category": "Users and Groups",
"belongsToService": ["NAGIOS"],
- "index": 13
+ "index": 14
},
{
"id": "puppet var",
@@ -4174,6 +4529,7 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "cluster-env.xml",
"category": "Users and Groups",
@@ -4188,12 +4544,12 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "tez-env.xml",
"category": "Users and Groups",
"belongsToService": ["TEZ"],
- "index": 15
+ "index": 16
},
{
"id": "puppet var",
@@ -4204,7 +4560,7 @@ module.exports =
"isReconfigurable": false,
"displayType": "user",
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "cluster-env.xml",
"category": "Users and Groups",
@@ -4222,7 +4578,7 @@ module.exports =
"filename": "sqoop-env.xml",
"category": "Users and Groups",
"belongsToService": ["SQOOP"],
- "index": 17
+ "index": 18
},
{
"id": "puppet var",
@@ -4290,7 +4646,7 @@ module.exports =
"displayType": "checkbox",
"isReconfigurable": true,
"isOverridable": false,
- "isVisible": true,
+ "isVisible": !App.get('isHadoopWindowsStack'),
"serviceName": "MISC",
"filename": "cluster-env.xml",
"category": "Users and Groups"
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 76dc25f..94382b0 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -300,7 +300,7 @@ Em.I18n.translations = {
'login.error.bad.connection':'Unable to connect to Ambari Server. Confirm Ambari Server is running and you can reach Ambari Server from this machine.',
'graphs.noData.title': 'No Data',
- 'graphs.noData.message': 'There was no data available. Possible reasons include inaccessible Ganglia service.',
+ 'graphs.noData.message': 'There was no data available. Possible reasons include inaccessible/unsupported metrics service.',
'graphs.noDataAtTime.message': 'No available data for the time period.',
'graphs.error.title': 'Error',
'graphs.error.message': 'There was a problem getting data for the chart ({0}: {1})',
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/models/quick_links.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/quick_links.js b/ambari-web/app/models/quick_links.js
index a4d6f5e..260f4a7 100644
--- a/ambari-web/app/models/quick_links.js
+++ b/ambari-web/app/models/quick_links.js
@@ -388,10 +388,9 @@ App.QuickLinks.FIXTURES = [
url:'%@://%@:%@/',
service_id: 'STORM',
template:'%@://%@:%@/',
- http_config: 'stormuiserver_host',
- https_config: 'stormuiserver_host',
+ http_config: 'ui.port',
site: 'storm-site',
- regex: portRegex,
+ regex: '^(\\d+)$',
default_http_port: 8744
},
{
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/models/service_config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/service_config.js b/ambari-web/app/models/service_config.js
index 300c2c6..36ac180 100644
--- a/ambari-web/app/models/service_config.js
+++ b/ambari-web/app/models/service_config.js
@@ -466,6 +466,9 @@ App.ServiceConfigProperty = Ember.Object.extend({
case 'oozie_ambari_host':
this.set('value', masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName);
break;
+ case 'hadoop_host':
+ this.set('value', masterComponentHostsInDB.filterProperty('component', 'NAMENODE').mapProperty('hostName'));
+ break;
case 'storm.zookeeper.servers':
case 'zookeeperserver_hosts':
this.set('value', masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName'));
@@ -477,13 +480,19 @@ App.ServiceConfigProperty = Ember.Object.extend({
this.set('value', masterComponentHostsInDB.findProperty('component', 'FALCON_SERVER').hostName);
break;
case 'drpcserver_host':
- this.set('value', masterComponentHostsInDB.findProperty('component', 'DRPC_SERVER').hostName);
+ var drpcHost = masterComponentHostsInDB.findProperty('component', 'DRPC_SERVER');
+ if (drpcHost) {
+ this.set('value', drpcHost.hostName);
+ }
break;
case 'stormuiserver_host':
this.set('value', masterComponentHostsInDB.findProperty('component', 'STORM_UI_SERVER').hostName);
break;
case 'storm_rest_api_host':
- this.set('value', masterComponentHostsInDB.findProperty('component', 'STORM_REST_API').hostName);
+ var stormRresApiHost = masterComponentHostsInDB.findProperty('component', 'STORM_REST_API');
+ if(stormRresApiHost) {
+ this.set('value', stormRresApiHost.hostName);
+ }
break;
case 'supervisor_hosts':
this.set('value', slaveComponentHostsInDB.findProperty('componentName', 'SUPERVISOR').hosts.mapProperty('hostName'));
@@ -686,7 +695,10 @@ App.ServiceConfigProperty = Ember.Object.extend({
}
mountPointsPerHost = mountPointsPerHost.filter(function (mPoint) {
- return !(['/', '/home', '/boot'].contains(mPoint.mountpoint) || ['devtmpfs', 'tmpfs', 'vboxsf'].contains(mPoint.type));
+ return !(['/', '/home', '/boot'].contains(mPoint.mountpoint)
+ || ['devtmpfs', 'tmpfs', 'vboxsf'].contains(mPoint.type)
+ || mPoint.available == 0
+ || mPoint.type == 'CDFS');
});
mountPointsPerHost.forEach(function (mPoint) {
@@ -699,6 +711,7 @@ App.ServiceConfigProperty = Ember.Object.extend({
allMountPoints.push(mountPointAsRoot);
}
this.set('value', '');
+ var winRegex = /^([a-z]):\\?$/;
if (!isOnlyFirstOneNeeded) {
allMountPoints.forEach(function (eachDrive) {
var mPoint = this.get('value');
@@ -707,6 +720,21 @@ App.ServiceConfigProperty = Ember.Object.extend({
}
if (eachDrive.mountpoint === "/") {
mPoint += this.get('defaultDirectory') + "\n";
+ } else if(winRegex.test(eachDrive.mountpoint.toLowerCase())) {
+ switch (this.get('name')) {
+ case 'dfs.datanode.data.dir':
+ case 'dfs.name.dir':
+ case 'dfs.namenode.name.dir':
+ case 'dfs.data.dir':
+ case 'dfs.datanode.data.dir':
+ var winDriveUrl = eachDrive.mountpoint.toLowerCase().replace(winRegex, "file:///$1:");
+ mPoint += winDriveUrl + this.get('defaultDirectory') + "\n";
+ break;
+ default:
+ var winDrive = eachDrive.mountpoint.toLowerCase().replace(winRegex, "$1:");
+ var winDir = this.get('defaultDirectory').replace(/\//g, "\\");
+ mPoint += winDrive + winDir + "\n";
+ }
} else {
mPoint += eachDrive.mountpoint + this.get('defaultDirectory') + "\n";
}
@@ -717,6 +745,23 @@ App.ServiceConfigProperty = Ember.Object.extend({
var mPoint = allMountPoints[0].mountpoint;
if (mPoint === "/") {
mPoint = this.get('defaultDirectory');
+ } else if(winRegex.test(mPoint.toLowerCase())) {
+ switch (this.get('name')) {
+ case 'fs.checkpoint.dir':
+ case 'dfs.namenode.checkpoint.dir':
+ var winDriveUrl = mPoint.toLowerCase().replace(winRegex, "file:///$1:");
+ mPoint = winDriveUrl + this.get('defaultDirectory') + "\n";
+ break;
+ case 'zk_data_dir':
+ var winDrive = mPoint.toLowerCase().replace(winRegex, "$1:");
+ var winDir = this.get('defaultDirectory').replace(/\//g, "\\\\");
+ mPoint = winDrive + winDir + "\n";
+ break;
+ default:
+ var winDrive = mPoint.toLowerCase().replace(winRegex, "$1:");
+ var winDir = this.get('defaultDirectory').replace(/\//g, "\\");
+ mPoint = winDrive + winDir + "\n";
+ }
} else {
mPoint = mPoint + this.get('defaultDirectory');
}
@@ -841,7 +886,7 @@ App.ServiceConfigProperty = Ember.Object.extend({
case 'directories':
case 'directory':
if (!validator.isValidDir(value)) {
- this.set('errorMessage', 'Must be a slash at the start');
+ this.set('errorMessage', 'Must be a slash or drive at the start');
isError = true;
}
else {
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/models/stack_service.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_service.js b/ambari-web/app/models/stack_service.js
index 64516a0..5c91e41 100644
--- a/ambari-web/app/models/stack_service.js
+++ b/ambari-web/app/models/stack_service.js
@@ -87,6 +87,24 @@ App.StackService = DS.Model.extend({
return services.contains(this.get('serviceName'));
}.property('serviceName'),
+ // Is the service required for reporting host metrics
+ isHostMetricsService: function () {
+ var services = ['GANGLIA'];
+ return services.contains(this.get('serviceName'));
+ }.property('serviceName'),
+
+ // Is the service required for reporting hadoop service metrics
+ isServiceMetricsService: function () {
+ var services = ['GANGLIA'];
+ return services.contains(this.get('serviceName'));
+ }.property('serviceName'),
+
+ // Is the service required for reporting aleerts
+ isAlertingService: function () {
+ var services = ['NAGIOS'];
+ return services.contains(this.get('serviceName'));
+ }.property('serviceName'),
+
coSelectedServices: function () {
var coSelectedServices = App.StackService.coSelected[this.get('serviceName')];
if (!!coSelectedServices) {
@@ -122,7 +140,7 @@ App.StackService = DS.Model.extend({
}.property('configTypes'),
customReviewHandler: function () {
- return App.StackService.reviewPageHandlers[this.get('serviceName')];
+ return App.get('isHadoopWindowsStack')? App.StackService.reviewWindowsPageHandlers[this.get('serviceName')] : App.StackService.reviewPageHandlers[this.get('serviceName')];
}.property('serviceName'),
/**
@@ -134,7 +152,7 @@ App.StackService = DS.Model.extend({
var configTypes = this.get('configTypes');
var serviceComponents = this.get('serviceComponents');
if (configTypes && Object.keys(configTypes).length) {
- var pattern = ["General", "CapacityScheduler", "FaultTolerance", "Isolation", "Performance", "^Advanced", "Env$", "^Custom", "Falcon - Oozie integration", "FalconStartupSite", "FalconRuntimeSite"];
+ var pattern = ["MetricsSink", "General", "CapacityScheduler", "FaultTolerance", "Isolation", "Performance", "^Advanced", "Env$", "^Custom", "Falcon - Oozie integration", "FalconStartupSite", "FalconRuntimeSite"];
configCategories = App.StackService.configCategories.call(this).filter(function (_configCategory) {
var serviceComponentName = _configCategory.get('name');
var isServiceComponent = serviceComponents.someProperty('componentName', serviceComponentName);
@@ -191,10 +209,30 @@ App.StackService.reviewPageHandlers = {
}
};
+App.StackService.reviewWindowsPageHandlers = {
+ 'HIVE': {
+ 'Database': 'loadHiveDbValue'
+ },
+ 'HDFS': {
+ 'Database': 'loadSinkDbValue'
+ },
+ 'NAGIOS': {
+ 'Administrator': 'loadNagiosAdminValue'
+ },
+ 'OOZIE': {
+ 'Database': 'loadOozieDbValue'
+ }
+};
+
App.StackService.configCategories = function () {
var serviceConfigCategories = [];
switch (this.get('serviceName')) {
case 'HDFS':
+ if (App.get('isHadoopWindowsStack')) {
+ serviceConfigCategories.pushObjects([
+ App.ServiceConfigCategory.create({ name: 'MetricsSink', displayName: 'Metrics Sink'})
+ ]);
+ }
serviceConfigCategories.pushObjects([
App.ServiceConfigCategory.create({ name: 'NAMENODE', displayName: 'NameNode'}),
App.ServiceConfigCategory.create({ name: 'SECONDARY_NAMENODE', displayName: 'Secondary NameNode'}),
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/templates/main/dashboard/widgets.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/dashboard/widgets.hbs b/ambari-web/app/templates/main/dashboard/widgets.hbs
index 84fe9d6..c462b68 100644
--- a/ambari-web/app/templates/main/dashboard/widgets.hbs
+++ b/ambari-web/app/templates/main/dashboard/widgets.hbs
@@ -32,11 +32,13 @@
<i class="icon-refresh"></i> {{t dashboard.button.reset}}
</a>
</li>
- <li>
- <a target="_blank" {{bindAttr href="view.gangliaUrl"}}>
- <i class="icon-share"></i> {{t dashboard.button.gangliaLink}}
- </a>
- </li>
+ {{#if App.router.clusterController.isGangliaInstalled}}
+ <li>
+ <a target="_blank" {{bindAttr href="view.gangliaUrl"}}>
+ <i class="icon-share"></i> {{t dashboard.button.gangliaLink}}
+ </a>
+ </li>
+ {{/if}}
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/templates/main/host/summary.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/host/summary.hbs b/ambari-web/app/templates/main/host/summary.hbs
index bace511..7b2a2f2 100644
--- a/ambari-web/app/templates/main/host/summary.hbs
+++ b/ambari-web/app/templates/main/host/summary.hbs
@@ -144,24 +144,26 @@
</div>
</div>
{{!metrics}}
- <div class="span6">
- <div class="box">
- <div class="box-header">
- <h4>{{t hosts.host.summary.hostMetrics}}</h4>
- {{#if App.router.clusterController.isGangliaInstalled}}
- <div class="btn-group">
- {{#if App.router.clusterController.isGangliaUrlLoaded}}
- <a class="btn" rel="tooltip" title="Go to Ganglia" {{action "showGangliaCharts" target="view"}}><i class="icon-link"></i></a>
- {{else}}
- <div class="spinner"></div>
- {{/if}}
- </div>
- {{/if}}
- </div>
- <div>
- {{view App.MainHostMetricsView contentBinding="view.content"}}
+ {{#unless view.isNoHostMetricsService}}
+ <div class="span6">
+ <div class="box">
+ <div class="box-header">
+ <h4>{{t hosts.host.summary.hostMetrics}}</h4>
+ {{#if App.router.clusterController.isGangliaInstalled}}
+ <div class="btn-group">
+ {{#if App.router.clusterController.isGangliaUrlLoaded}}
+ <a class="btn" rel="tooltip" title="Go to Ganglia" {{action "showGangliaCharts" target="view"}}><i class="icon-link"></i></a>
+ {{else}}
+ <div class="spinner"></div>
+ {{/if}}
+ </div>
+ {{/if}}
+ </div>
+ <div>
+ {{view App.MainHostMetricsView contentBinding="view.content"}}
+ </div>
</div>
</div>
</div>
- </div>
+ {{/unless}}
</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/templates/main/service/info/summary.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary.hbs b/ambari-web/app/templates/main/service/info/summary.hbs
index 6084484..8ccc64e 100644
--- a/ambari-web/app/templates/main/service/info/summary.hbs
+++ b/ambari-web/app/templates/main/service/info/summary.hbs
@@ -61,8 +61,8 @@
</div>
</div>
</div>
- <div class="span6">
- {{#unless view.isNoAlertsService}}
+ {{#unless view.isNoAlertsService}}
+ <div class="span6">
<div class="box">
<div class="box-header">
<h4>{{t services.alerts.headingOfList}}</h4>
@@ -99,8 +99,8 @@
{{/if}}
</ul>
</div>
- {{/unless}}
- </div>
+ </div>
+ {{/unless}}
</div>
{{#if view.collapsedSections}}
@@ -135,7 +135,9 @@
</div>
{{/if}}
-{{#if view.serviceMetricGraphs.length}}
+{{!todo: Enable service metrics check once MetricsSink is deployed as a service}}
+{{!#unless view.isNoServiceMetricsService}}
+ {{#if view.serviceMetricGraphs.length}}
<div class="row-fluid">
<div class="span12">
<div class="box">
@@ -152,7 +154,6 @@
</div>
{{/if}}
</div>
-
<div class="">
<table class="graphs">
{{#each graphs in view.serviceMetricGraphs}}
@@ -168,10 +169,8 @@
{{/each}}
</table>
</div>
-
</div>
-
+ </div>
</div>
- </div>
-</div>
-{{/if}}
+ {{/if}}
+{{!/unless}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/templates/wizard/step2.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step2.hbs b/ambari-web/app/templates/wizard/step2.hbs
index 7d1b22a..911eae4 100644
--- a/ambari-web/app/templates/wizard/step2.hbs
+++ b/ambari-web/app/templates/wizard/step2.hbs
@@ -46,45 +46,47 @@
<div class="ambari-agents">
<h5>{{t installer.step2.sshKey}}</h5>
- <label class="radio">
- {{view view.providingSSHKeyRadioButton}}
- {{t installer.step2.useSsh.provide}}
- <a href="javascript:void(null)"
- rel="popover"
- {{translateAttr title="installer.step2.useSsh.tooltip.title" data-content="installer.step2.useSsh.tooltip.content"}}>
- {{t installer.step2.useSsh.tooltip.title}}</a>
- {{t installer.step2.useSsh.provide_id_rsa}}
- </label>
+ {{#if isSSHRegistrationEnabled}}
+ <label class="radio">
+ {{view view.providingSSHKeyRadioButton}}
+ {{t installer.step2.useSsh.provide}}
+ <a href="javascript:void(null)"
+ rel="popover"
+ {{translateAttr title="installer.step2.useSsh.tooltip.title" data-content="installer.step2.useSsh.tooltip.content"}}>
+ {{t installer.step2.useSsh.tooltip.title}}</a>
+ {{t installer.step2.useSsh.provide_id_rsa}}
+ </label>
- <div class="ssh-key-input">
- {{#if view.isFileApi}}
- {{view App.SshKeyFileUploader disabledBinding="view.sshKeyState"}}
- {{/if}}
- <div {{bindAttr class="sshKeyError:error :controls :control-group"}}>
- {{view Ember.TextArea class="span6" rows="3" id="sshKey"
- placeholder="ssh private key" disabledBinding="view.sshKeyState" valueBinding="content.installOptions.sshKey"}}
- {{#if sshKeyError}}
- <span class="help-inline">{{sshKeyError}}</span>
+ <div class="ssh-key-input">
+ {{#if view.isFileApi}}
+ {{view App.SshKeyFileUploader disabledBinding="view.sshKeyState"}}
{{/if}}
- </div>
- <div>
- <label class="ssh-user pull-left">
- {{t installer.step2.sshUser}}
- <a href="javascript:void(null)"
- rel="popover"
- {{translateAttr title="installer.step2.sshUser.link" data-content="installer.step2.sshUser.toolTip"}}>
- {{t installer.step2.sshUser.link}}</a>
- {{t installer.step2.sshUser.account}}
- </label>
-
- <div {{bindAttr class="sshUserError:error :control-group"}}>
- {{view view.textFieldView valueBinding="content.installOptions.sshUser" isEnabledBinding="content.installOptions.useSsh"}}
- {{#if sshUserError}}
- <span class="help-inline">{{sshUserError}}</span>
+ <div {{bindAttr class="sshKeyError:error :controls :control-group"}}>
+ {{view Ember.TextArea class="span6" rows="3" id="sshKey"
+ placeholder="ssh private key" disabledBinding="view.sshKeyState" valueBinding="content.installOptions.sshKey"}}
+ {{#if sshKeyError}}
+ <span class="help-inline">{{sshKeyError}}</span>
{{/if}}
</div>
+ <div>
+ <label class="ssh-user pull-left">
+ {{t installer.step2.sshUser}}
+ <a href="javascript:void(null)"
+ rel="popover"
+ {{translateAttr title="installer.step2.sshUser.link" data-content="installer.step2.sshUser.toolTip"}}>
+ {{t installer.step2.sshUser.link}}</a>
+ {{t installer.step2.sshUser.account}}
+ </label>
+
+ <div {{bindAttr class="sshUserError:error :control-group"}}>
+ {{view view.textFieldView valueBinding="content.installOptions.sshUser" isEnabledBinding="content.installOptions.useSsh"}}
+ {{#if sshUserError}}
+ <span class="help-inline">{{sshUserError}}</span>
+ {{/if}}
+ </div>
+ </div>
</div>
- </div>
+ {{/if}}
<label class="radio">
{{view view.manualRegistrationRadioButton}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 0f67b9b..4c577b1 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -608,6 +608,11 @@ var urls = {
'mock': '/data/configurations/host_level_overrides_configs.json?{params}'
},
+ 'config.cluster_env_site': {
+ 'real': '/clusters/{clusterName}/configurations?type=cluster-env',
+ 'mock': '/data/configuration/cluster_env_site.json'
+ },
+
'host.host_component.add_new_component': {
'real': '/clusters/{clusterName}/hosts?Hosts/host_name={hostName}',
'mock': '/data/wizard/deploy/poll_1.json',
@@ -1047,7 +1052,12 @@ var urls = {
},
'cluster.update_upgrade_version': {
'real': '/stacks/{stackName}/versions?fields=stackServices/StackServices,Versions',
- 'mock': '/data/wizard/stack/stacks.json'
+ 'mock': '/data/wizard/stack/stacks.json',
+ 'format': function (data) {
+ return {
+ data: data.data
+ };
+ }
},
'cluster.load_repositories': {
'real': '/stacks/{stackName}/versions/{stackVersion}/operating_systems?fields=repositories/*',
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/utils/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js
index 8c183b2..cb44f36 100644
--- a/ambari-web/app/utils/config.js
+++ b/ambari-web/app/utils/config.js
@@ -642,7 +642,7 @@ App.config = Em.Object.create({
miscConfigVisibleProperty: function (configs, serviceToShow) {
configs.forEach(function (item) {
- if (item.belongsToService && item.belongsToService.length) {
+ if (item.get('isVisible') && item.belongsToService && item.belongsToService.length) {
item.set("isVisible", item.belongsToService.some(function (cur) {
return serviceToShow.contains(cur)
}));
@@ -844,8 +844,9 @@ App.config = Em.Object.create({
params.callback(properties);
},
- loadClusterConfigError: function (request, ajaxOptions, error, opt) {
+ loadClusterConfigError: function (request, ajaxOptions, error, opt, params) {
console.log('ERROR: Failed to load cluster-env configs');
+ params.callback([]);
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/utils/validator.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/validator.js b/ambari-web/app/utils/validator.js
index 3fcdfb5..d1af967 100644
--- a/ambari-web/app/utils/validator.js
+++ b/ambari-web/app/utils/validator.js
@@ -41,15 +41,17 @@ module.exports = {
return floatRegex.test(value);
},
/**
- * validate directory with slash at the start
+ * validate directory with slash or drive at the start
* @param value
* @return {Boolean}
*/
isValidDir: function(value){
var floatRegex = /^\/[0-9a-z]*/;
+ var winRegex = /^[a-z]:\\[0-9a-z]*/;
+ var winUrlRegex = /^file:\/\/\/[a-z]:\/[0-9a-z]*/;
var dirs = value.replace(/,/g,' ').trim().split(new RegExp("\\s+", "g"));
for(var i = 0; i < dirs.length; i++){
- if(!floatRegex.test(dirs[i])){
+ if(!floatRegex.test(dirs[i]) && !winRegex.test(dirs[i]) && !winUrlRegex.test(dirs[i])){
return false;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/views/common/quick_view_link_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/quick_view_link_view.js b/ambari-web/app/views/common/quick_view_link_view.js
index 4123c8f..75bf691 100644
--- a/ambari-web/app/views/common/quick_view_link_view.js
+++ b/ambari-web/app/views/common/quick_view_link_view.js
@@ -75,7 +75,7 @@ App.QuickViewLinks = Em.View.extend({
/**
* list of files that contains properties for enabling/disabling ssl
*/
- requiredSiteNames: ['hadoop-env','yarn-env','hbase-env','oozie-env','mapred-env','core-site', 'hdfs-site', 'hbase-site', 'oozie-site', 'yarn-site', 'mapred-site'],
+ requiredSiteNames: ['hadoop-env','yarn-env','hbase-env','oozie-env','mapred-env','storm-env', 'falcon-env', 'core-site', 'hdfs-site', 'hbase-site', 'oozie-site', 'yarn-site', 'mapred-site', 'storm-site'],
/**
* Get public host name by its host name.
*
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/views/main/admin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin.js b/ambari-web/app/views/main/admin.js
index b262f35..41d6cbf 100644
--- a/ambari-web/app/views/main/admin.js
+++ b/ambari-web/app/views/main/admin.js
@@ -40,11 +40,13 @@ App.MainAdminView = Em.View.extend({
url: 'adminServiceAccounts',
label: Em.I18n.t('common.serviceAccounts')
});
- items.push({
- name: 'security',
- url: 'adminSecurity.index',
- label: Em.I18n.t('common.security')
- });
+ if (!App.get('isHadoopWindowsStack')) {
+ items.push({
+ name: 'security',
+ url: 'adminSecurity.index',
+ label: Em.I18n.t('common.security')
+ });
+ }
return items;
}.property(''),
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/views/main/dashboard/widgets.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard/widgets.js b/ambari-web/app/views/main/dashboard/widgets.js
index 60327b5..bce957b 100644
--- a/ambari-web/app/views/main/dashboard/widgets.js
+++ b/ambari-web/app/views/main/dashboard/widgets.js
@@ -100,6 +100,9 @@ App.MainDashboardWidgetsView = Em.View.extend(App.UserPref, App.LocalStorage, {
setWidgetsDataModel: function () {
var services = App.Service.find();
var self = this;
+ if(App.get('services.hostMetrics').length > 0) {
+ self.set('host_metrics_model', App.get('services.hostMetrics'));
+ }
services.forEach(function (item) {
switch (item.get('serviceName')) {
case "HDFS":
@@ -140,6 +143,15 @@ App.MainDashboardWidgetsView = Em.View.extend(App.UserPref, App.LocalStorage, {
'29' // flume
]; // all in order
var hiddenFull = [['22','Region In Transition']];
+
+ // Display widgets for host metrics if the stack definition has a host metrics service to display it.
+ if (this.get('host_metrics_model') == null) {
+ var hostMetrics = ['11', '12', '13', '14'];
+ hostMetrics.forEach ( function (item) {
+ visibleFull = visibleFull.without(item);
+ }, this);
+ }
+
if (this.get('hdfs_model') == null) {
var hdfs= ['1', '2', '3', '4', '5', '15', '17'];
hdfs.forEach ( function (item) {
@@ -182,6 +194,8 @@ App.MainDashboardWidgetsView = Em.View.extend(App.UserPref, App.LocalStorage, {
obj.set('hidden', hiddenFull);
},
+ host_metrics_model: null,
+
hdfs_model: null,
mapreduce_model: null,
@@ -378,17 +392,25 @@ App.MainDashboardWidgetsView = Em.View.extend(App.UserPref, App.LocalStorage, {
// check each service, find out the newly added service and already deleted service
if (this.get('hdfs_model') != null) {
- var hdfsAndMetrics= ['1', '2', '3', '4', '5', '15', '17', '11', '12', '13', '14'];
- hdfsAndMetrics.forEach ( function (item) {
+ var hdfs = ['1', '2', '3', '4', '5', '15', '17'];
+ hdfs.forEach ( function (item) {
toDelete = self.removeWidget(toDelete, item);
}, this);
}
- else {
- var graphs = ['11', '12', '13', '14'];
- graphs.forEach ( function (item) {
- toDelete = self.removeWidget(toDelete, item);
- }, this);
+
+ // Display widgets for host metrics if the stack definition has a host metrics service to display it.
+ if (this.get('host_metrics_model') != null) {
+ var hostMetrics = ['11', '12', '13', '14'];
+ var flag = self.containsWidget(toDelete, hostMetrics[0]);
+ if (flag) {
+ hostMetrics.forEach ( function (item) {
+ toDelete = self.removeWidget(toDelete, item);
+ }, this);
+ } else {
+ toAdd = toAdd.concat(hostMetrics);
+ }
}
+
if (this.get('mapreduce_model') != null) {
var map = ['6', '7', '8', '9', '10', '16', '18'];
var flag = self.containsWidget(toDelete, map[0]);
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/views/main/host/summary.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/host/summary.js b/ambari-web/app/views/main/host/summary.js
index 1e92fe7..c8317a9 100644
--- a/ambari-web/app/views/main/host/summary.js
+++ b/ambari-web/app/views/main/host/summary.js
@@ -60,6 +60,13 @@ App.MainHostSummaryView = Em.View.extend({
},
/**
+ * Host metrics panel not displayed when Metrics service (ex:Ganglia) is not in stack definition.
+ */
+ isNoHostMetricsService: function() {
+ return !App.get('services.hostMetrics').length;
+ }.property('App.services.hostMetrics'),
+
+ /**
* Message for "restart" block
* @type {String}
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/views/main/menu.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/menu.js b/ambari-web/app/views/main/menu.js
index 966f5ae..851ff99 100644
--- a/ambari-web/app/views/main/menu.js
+++ b/ambari-web/app/views/main/menu.js
@@ -141,11 +141,13 @@ App.MainMenuView = Em.CollectionView.extend({
url: 'serviceAccounts',
label: Em.I18n.t('common.serviceAccounts')
});
- categories.push({
- name: 'security',
- url: 'security/',
- label: Em.I18n.t('common.security')
- });
+ if (!App.get('isHadoopWindowsStack')) {
+ categories.push({
+ name: 'security',
+ url: 'security/',
+ label: Em.I18n.t('common.security')
+ });
+ }
}
return categories;
}.property('')
http://git-wip-us.apache.org/repos/asf/ambari/blob/8de3425f/ambari-web/app/views/main/service/info/summary.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/info/summary.js b/ambari-web/app/views/main/service/info/summary.js
index 08ef48c..99c049b 100644
--- a/ambari-web/app/views/main/service/info/summary.js
+++ b/ambari-web/app/views/main/service/info/summary.js
@@ -443,12 +443,21 @@ App.MainServiceInfoSummaryView = Em.View.extend({
this.set('oldServiceName', serviceName);
}.observes('serviceName'),
- /*
- * Alerts panel not display for PIG, SQOOP and TEZ Service
+ /**
+ * Alerts panel not displayed when alerting service (ex:Nagios)is not in stack definition.
+ * Alerts panel never displayed for PIG, SQOOP and TEZ Services
*/
isNoAlertsService: function () {
- return !!this.get('service.serviceName') && App.get('services.clientOnly').contains(this.get('service.serviceName'));
- }.property(''),
+ return !App.get('services.alerting').length ||
+ (!!this.get('service.serviceName') && App.get('services.clientOnly').contains(this.get('service.serviceName')));
+ }.property('service.serviceName', 'App.services.alerting'),
+
+ /**
+ * Service metrics panel not displayed when metrics service (ex:Ganglia) is not in stack definition.
+ */
+ isNoServiceMetricsService: function() {
+ return !App.get('services.serviceMetrics').length;
+ }.property('App.services.serviceMetrics'),
gangliaUrl:function () {
var gangliaUrl = App.router.get('clusterController.gangliaUrl');