AMBARI-6443. Add Service Wizard: Hive "Database host" config empty and disabled. (Buzhor Denys via alexantonenko)
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index c137e5c..c985389 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -341,6 +341,16 @@
App.config.loadServiceConfigGroupOverrides(allConfigs, this.loadedGroupToOverrideSiteToTagMap, this.get('configGroups'), this.onLoadOverrides, this);
}.observes('selectedConfigGroup'),
+ checkDatabaseProperties: function (serviceConfig) {
+ if (!['OOZIE', 'HIVE'].contains(this.get('content.serviceName'))) return;
+ var configsToHide = ['oozie_hostname'];
+ configsToHide.forEach(function(configName) {
+ var property = serviceConfig.configs.findProperty('name', configName);
+ if (property) property.set('isVisible', false);
+ });
+ },
+
+
onLoadOverrides: function (allConfigs) {
var serviceName = this.get('content.serviceName');
var advancedConfigs = this.get('advancedConfigs');
@@ -358,6 +368,7 @@
this.setRecommendedDefaults(advancedConfigs).done(function () {
self.loadConfigs(allConfigs, serviceConfig);
self.checkOverrideProperty(serviceConfig);
+ self.checkDatabaseProperties(serviceConfig);
self.get('stepConfigs').pushObject(serviceConfig);
self.set('selectedService', self.get('stepConfigs').objectAt(0));
self.checkForSecureConfig(self.get('selectedService'));
@@ -610,7 +621,6 @@
return serviceConfigProperty;
},
-
/**
* trigger addOverrideProperty
* @param {Object} componentConfig
@@ -1237,6 +1247,7 @@
* @param globals
*/
setOozieHostName: function (globals) {
+ var dbHostPropertyName = null;
if (globals.someProperty('name', 'oozie_database')) {
var oozieDb = globals.findProperty('name', 'oozie_database');
if (oozieDb.value === 'New Derby Database') {
@@ -1264,7 +1275,7 @@
} else if (oozieDb.value === 'Existing MySQL Database') {
var existingMySqlHost = globals.findProperty('name', 'oozie_existing_mysql_host');
if (existingMySqlHost) {
- existingMySqlHost.name = 'oozie_hostname';
+ dbHostPropertyName = 'oozie_existing_mysql_host';
}
globals = globals.without(globals.findProperty('name', 'oozie_ambari_host'));
globals = globals.without(globals.findProperty('name', 'oozie_ambari_database'));
@@ -1276,7 +1287,7 @@
} else if (oozieDb.value === Em.I18n.t('services.service.config.hive.oozie.postgresql')) {
var existingPostgreSqlHost = globals.findProperty('name', 'oozie_existing_postgresql_host');
if (existingPostgreSqlHost) {
- existingPostgreSqlHost.name = 'oozie_hostname';
+ dbHostPropertyName = 'oozie_existing_postgresql_host';
}
globals = globals.without(globals.findProperty('name', 'oozie_ambari_host'));
globals = globals.without(globals.findProperty('name', 'oozie_ambari_database'));
@@ -1288,7 +1299,7 @@
else { //existing oracle database
var existingOracleHost = globals.findProperty('name', 'oozie_existing_oracle_host');
if (existingOracleHost) {
- existingOracleHost.name = 'oozie_hostname';
+ dbHostPropertyName = 'oozie_existing_oracle_host';
}
globals = globals.without(globals.findProperty('name', 'oozie_ambari_host'));
globals = globals.without(globals.findProperty('name', 'oozie_ambari_database'));
@@ -1298,6 +1309,12 @@
}
}
+
+ if (dbHostPropertyName) {
+ var oozieHostNameProperty = App.ServiceConfigProperty.create(App.config.get('preDefinedGlobalProperties').findProperty('name','oozie_hostname'));
+ oozieHostNameProperty.set('value', globals.findProperty('name', dbHostPropertyName).get('value'));
+ globals.pushObject(oozieHostNameProperty);
+ }
},
/**
@@ -1816,13 +1833,13 @@
if (serviceName === 'HIVE') {
var hiveDb = globalConfigs.findProperty('name', 'hive_database').value;
- if (['Existing MySQL Database', 'Existing Oracle Database'].contains(hiveDb)) {
+ if (['Existing MySQL Database', 'Existing Oracle Database', 'Existing PostgreSQL Database'].contains(hiveDb)) {
globalConfigs.findProperty('name', 'hive_hostname').isVisible = true;
}
}
if (serviceName === 'OOZIE') {
var oozieDb = globalConfigs.findProperty('name', 'oozie_database').value;
- if (['Existing MySQL Database', 'Existing Oracle Database'].contains(oozieDb)) {
+ if (['Existing MySQL Database', 'Existing Oracle Database', 'Existing PostgreSQL Database'].contains(oozieDb)) {
globalConfigs.findProperty('name', 'oozie_hostname').isVisible = true;
}
}
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index d59c1fd..833c672 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -816,6 +816,7 @@
}
});
+ this.setServiceDatabaseConfigs(configs);
//add user properties
for (var name in configsMap) {
configs.push(configMixin.addUserProperty({
@@ -835,7 +836,26 @@
}, false, []));
}
},
-
+ /**
+ * Check if Oozie or Hive 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);
+ });
+ serviceNames.forEach(function(serviceName) {
+ var dbTypeConfig = configs.findProperty('name', serviceName.toLowerCase() + '_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');
+ if (!existingDBConfig.value)
+ existingDBConfig.value = existingDBConfig.defaultValue = configs.findProperty('name', dbHostName).value;
+ }, this);
+ },
/**
* Add group ids to <code>groupsToDelete</code>
* Also save <code>groupsToDelete</code> to local storage
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index 4c97e41..de3ad48 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -809,37 +809,6 @@
return this.submitProceed();
}
},
-
- /**
- * Update configurations for installed services.
- * Do separated PUT-request for each siteName for each service
- *
- * @param {Array} configsToUpdate - configs need to update
- * Format:
- * <code>
- * [
- * {serviceName: 's1', id: 'site property', filename: 'f1.xml', name: 'n1', value: 'v1'},
- * {serviceName: 's2', id: 'site property', filename: 'f1.xml', name: 'n2', value: 'v2'},
- * {serviceName: 's2', id: '', filename: 'f2.xml', name: 'n3', value: 'v3'}
- * ]
- * </code>
- * @method updateConfigurations
- */
- updateConfigurations: function (configsToUpdate) {
- var configurationController = App.router.get('mainServiceInfoConfigsController');
- var serviceNames = configsToUpdate.mapProperty('serviceName').uniq();
- serviceNames.forEach(function (serviceName) {
- var configs = configsToUpdate.filterProperty('serviceName', serviceName);
- configurationController.setNewTagNames(configs);
- var tagName = configs.objectAt(0).newTagName;
- var siteConfigs = configs.filterProperty('id', 'site property');
- siteConfigs.mapProperty('filename').uniq().forEach(function (siteName) {
- var formattedConfigs = configurationController.createSiteObj(siteName.replace(".xml", ""), tagName, configs.filterProperty('filename', siteName));
- configurationController.doPUTClusterConfigurationSite(formattedConfigs);
- });
- });
- },
-
/**
* Prepare <code>ajaxQueue</code> and start to execute it
* @method submitProceed
@@ -887,7 +856,7 @@
this.deleteClusters(this.getExistingClusterNames());
}
if (this.get('wizardController').getDBProperty('configsToUpdate')) {
- this.updateConfigurations(this.get('wizardController').getDBProperty('configsToUpdate'));
+ $.extend(true, this.get('configs'), this.get('wizardController').getDBProperty('configsToUpdate'));
}
this.setLocalRepositories();
this.createCluster();
diff --git a/ambari-web/app/data/HDP2/global_properties.js b/ambari-web/app/data/HDP2/global_properties.js
index f4868ca..f30ce58 100644
--- a/ambari-web/app/data/HDP2/global_properties.js
+++ b/ambari-web/app/data/HDP2/global_properties.js
@@ -777,7 +777,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"displayType": "host",
"isOverridable": false,
"isRequiredByAgent": false,
@@ -793,7 +792,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"displayType": "host",
"isOverridable": false,
"isRequiredByAgent": false,
@@ -809,7 +807,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"displayType": "host",
"isOverridable": false,
"isRequiredByAgent": false,
@@ -1127,7 +1124,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"isOverridable": false,
"displayType": "host",
"isVisible": false,
@@ -1142,7 +1138,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"isOverridable": false,
"displayType": "host",
"isVisible": false,
@@ -1157,7 +1152,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"isOverridable": false,
"displayType": "host",
"isVisible": false,
diff --git a/ambari-web/app/data/global_properties.js b/ambari-web/app/data/global_properties.js
index 4812eb2..bb5cf2a 100644
--- a/ambari-web/app/data/global_properties.js
+++ b/ambari-web/app/data/global_properties.js
@@ -696,8 +696,8 @@
},
{
displayName: 'Existing PostgreSQL Database',
- foreignKeys: ['hive_existing_postgresql_database', 'hive_existing_postgresql_host'],
- },
+ foreignKeys: ['hive_existing_postgresql_database', 'hive_existing_postgresql_host']
+ },
{
displayName: 'Existing Oracle Database',
foreignKeys: ['hive_existing_oracle_database', 'hive_existing_oracle_host'],
@@ -735,7 +735,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"displayType": "host",
"isRequiredByAgent": false,
"isOverridable": false,
@@ -751,7 +750,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"displayType": "host",
"isOverridable": false,
"isRequiredByAgent": false,
@@ -762,21 +760,20 @@
"index": 3
},
{
- "id": "puppet var",
- "name": "hive_existing_postgresql_host",
- "displayName": "Database Host",
- "description": "Specify the host on which the existing database is hosted",
- "defaultValue": "",
- "isReconfigurable": false,
- "displayType": "host",
- "isOverridable": false,
- "isRequiredByAgent": false,
- "isVisible": false,
- "isObserved": true,
- "serviceName": "HIVE",
- "category": "Hive Metastore",
- "index": 3
- },
+ "id": "puppet var",
+ "name": "hive_existing_postgresql_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",
+ "category": "Hive Metastore",
+ "index": 3
+ },
{
"id": "puppet var",
"name": "hive_ambari_host",
@@ -1034,7 +1031,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"isOverridable": false,
"displayType": "host",
"isRequiredByAgent": false,
@@ -1050,7 +1046,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"isOverridable": false,
"displayType": "host",
"isRequiredByAgent": false,
@@ -1066,7 +1061,6 @@
"displayName": "Database Host",
"description": "Specify the host on which the existing database is hosted",
"defaultValue": "",
- "isReconfigurable": false,
"isOverridable": false,
"isRequiredByAgent": false,
"displayType": "host",
diff --git a/ambari-web/app/views/wizard/controls_view.js b/ambari-web/app/views/wizard/controls_view.js
index 031d887..8fb971a 100644
--- a/ambari-web/app/views/wizard/controls_view.js
+++ b/ambari-web/app/views/wizard/controls_view.js
@@ -203,6 +203,7 @@
},
configs: function () {
+ if (this.get('controller.name') == 'mainServiceInfoConfigsController') return this.get('categoryConfigsAll');
return this.get('categoryConfigsAll').filterProperty('isObserved', true);
}.property('categoryConfigsAll'),
@@ -735,6 +736,9 @@
pollInterval: 3000,
/** @property {string} hostNameProperty - host name property based on service and database names **/
hostNameProperty: function() {
+ if (!/wizard/i.test(this.get('controller.name')) && this.get('parentView.service.serviceName') === 'HIVE') {
+ return this.get('parentView.service.serviceName').toLowerCase() + '_hostname';
+ }
return '{0}_existing_{1}_host'.format(this.get('parentView.service.serviceName').toLowerCase(), this.get('databaseName').toLowerCase());
}.property('databaseName'),
/** @property {boolean} isBtnDisabled - disable button on failed validation or active request **/
@@ -808,7 +812,8 @@
var properties = [].concat(this.get('requiredProperties'));
properties.push(this.get('hostNameProperty'));
properties.forEach(function(propertyName) {
- if(!this.get('parentView.categoryConfigsAll').findProperty('name', propertyName).get('isValid')) isValid = false;
+ var property = this.get('parentView.categoryConfigsAll').findProperty('name', propertyName);
+ if(property && !property.get('isValid')) isValid = false;
}, this);
this.set('isValidationPassed', isValid);
}.observes('parentView.categoryConfigsAll.@each.isValid', 'parentView.categoryConfigsAll.@each.value', 'databaseName'),