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);
       });
     });