Implemented use of service config API in UI. (#836)
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index 2ef1597..e4da276 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -1465,6 +1465,8 @@
registerHostsToComponent: function (hostNames, componentName) {
if (!hostNames.length) return;
+ let serviceName,
+ serviceGroupName;
var queryStr = '';
hostNames.forEach(function (hostName) {
queryStr += 'Hosts/host_name=' + hostName + '|';
@@ -1472,6 +1474,13 @@
//slice off last symbol '|'
queryStr = queryStr.slice(0, -1);
+ this.get('selectedServices').forEach( function (service) {
+ if (service.get('serviceComponents').findProperty('componentName', componentName)) {
+ serviceName = service.get('serviceName');
+ serviceGroupName = service.get('stackName') + "-" + service.get('stackVersion');
+ }
+ });
+
var data = {
"RequestInfo": {
"query": queryStr
@@ -1480,7 +1489,9 @@
"host_components": [
{
"HostRoles": {
- "component_name": componentName
+ "component_name": componentName,
+ "service_name": serviceName,
+ "service_group_name": serviceGroupName
}
}
]
@@ -1557,39 +1568,33 @@
*/
applyConfigurationsToCluster: function (serviceConfigTags) {
var allServices = this.get('installedServices').concat(this.get('selectedServices'));
- var allConfigData = [];
+
allServices.forEach(function (service) {
var serviceConfigData = [];
+
Object.keys(service.get('configTypesRendered')).forEach(function (type) {
var serviceConfigTag = serviceConfigTags.findProperty('type', type);
if (serviceConfigTag) {
serviceConfigData.pushObject(serviceConfigTag);
}
}, this);
+
if (serviceConfigData.length) {
- allConfigData.pushObject(JSON.stringify({
- Clusters: {
- desired_config: serviceConfigData.map(function(item) {
- var props = {};
- Em.keys(item.properties).forEach(function(propName) {
- if (item.properties[propName] !== null) {
- props[propName] = item.properties[propName];
- }
- });
- item.properties = props;
- return item;
- })
+ //TODO: Remove this delete call when the API supports service_config_version_note
+ serviceConfigData.forEach(scd => {
+ delete scd.service_config_version_note;
+ })
+
+ this.addRequestToAjaxQueue({
+ name: 'common.service.create.configs',
+ data: {
+ serviceName: service.get('serviceName'),
+ serviceGroupName: `${service.get('stackName')}-${service.get('stackVersion')}`,
+ data: serviceConfigData
}
- }));
+ });
}
}, this);
-
- this.addRequestToAjaxQueue({
- name: 'common.across.services.configurations',
- data: {
- data: '[' + allConfigData.toString() + ']'
- }
- });
},
/**
diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js
index ffa392f..2082052 100644
--- a/ambari-web/app/routes/installer.js
+++ b/ambari-web/app/routes/installer.js
@@ -303,16 +303,16 @@
controller.save('selectedServices');
controller.save('selectedMpacks');
controller.save('advancedMode');
- var wizardStep6Controller = router.get('wizardStep6Controller');
+ var wizardSelectMpacksController = router.get('wizardSelectMpacksController');
// Clear subsequent settings if user changed service selections
- if (!wizardStep6Controller.get('isSaved')) {
+ if (!wizardSelectMpacksController.get('isSaved')) {
router.get('wizardStep5Controller').clearRecommendations();
controller.setDBProperty('recommendations', undefined);
controller.set('content.masterComponentHosts', undefined);
controller.setDBProperty('masterComponentHosts', undefined);
controller.clearEnhancedConfigs();
controller.setDBProperty('slaveComponentHosts', undefined);
- wizardStep6Controller.set('isClientsSet', false);
+ router.get('wizardStep6Controller').set('isClientsSet', false);
}
controller.setStepSaved('selectMpacks');
const downloadConfig = controller.get('content.downloadConfig');
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 674d792..f00f08a 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -228,6 +228,7 @@
}
},
+ //This is now legacy and should be replaced by common.service.create.configs below
'common.across.services.configurations': {
'type': 'PUT',
'real':'/clusters/{clusterName}',
@@ -240,6 +241,17 @@
}
},
+ 'common.service.create.configs': {
+ 'type': 'POST',
+ 'real':'/clusters/{clusterName}/servicegroups/{serviceGroupName}/services/{serviceName}/configurations',
+ 'format': function(data) {
+ return {
+ apiPrefix: 'api/v2',
+ data: JSON.stringify(data.data)
+ }
+ }
+ },
+
'common.request.polling': {
'real': '/clusters/{clusterName}/requests/{requestId}?fields=tasks/Tasks/request_id,tasks/Tasks/command,tasks/Tasks/command_detail,tasks/Tasks/ops_display_name,tasks/Tasks/start_time,tasks/Tasks/end_time,tasks/Tasks/exit_code,tasks/Tasks/host_name,tasks/Tasks/id,tasks/Tasks/role,tasks/Tasks/status,tasks/Tasks/structured_out,Requests/*&tasks/Tasks/stage_id={stageId}',
'mock': '/data/background_operations/host_upgrade_tasks.json'
diff --git a/ambari-web/test/controllers/wizard/step8_test.js b/ambari-web/test/controllers/wizard/step8_test.js
index 597265d..896a731 100644
--- a/ambari-web/test/controllers/wizard/step8_test.js
+++ b/ambari-web/test/controllers/wizard/step8_test.js
@@ -1302,30 +1302,26 @@
describe('#applyConfigurationsToCluster', function() {
it('should call addRequestToAjaxQueue', function() {
var serviceConfigTags = [
- {
- type: 'hdfs',
- tag: 'tag1',
- properties: {
- 'prop1': 'value1'
- }
+ {
+ type: 'hdfs',
+ properties: {
+ 'prop1': 'value1'
}
- ],
- data = '['+JSON.stringify({
- Clusters: {
- desired_config: [serviceConfigTags[0]]
- }
- })+']';
+ }
+ ];
+
installerStep8Controller.reopen({
installedServices: [
- Em.Object.create({
- isSelected: true,
- isInstalled: false,
- configTypesRendered: {hdfs:'tag1'}
- })
- ], selectedServices: []
+ Em.Object.create({
+ isSelected: true,
+ isInstalled: false,
+ configTypesRendered: { hdfs: 'tag1' }
+ })
+ ],
+ selectedServices: []
});
installerStep8Controller.applyConfigurationsToCluster(serviceConfigTags);
- expect(installerStep8Controller.addRequestToAjaxQueue.args[0][0].data.data).to.equal(data);
+ expect(installerStep8Controller.addRequestToAjaxQueue.args[0][0].data.data).to.deep.equal(serviceConfigTags);
});
});