Ver código fonte

AMBARI-14402 Duplicate config group action doesn't duplicate configs (akovalenko)

Aleksandr Kovalenko 9 anos atrás
pai
commit
74a9d7223a

+ 17 - 5
ambari-web/app/controllers/main/service/manage_config_groups_controller.js

@@ -192,7 +192,8 @@ App.ManageConfigGroupsController = Em.Controller.extend(App.ConfigOverridable, {
             description: groupRecord.get('description'),
             description: groupRecord.get('description'),
             hosts: groupRecord.get('hosts').slice(0),
             hosts: groupRecord.get('hosts').slice(0),
             service_id: groupRecord.get('serviceName'),
             service_id: groupRecord.get('serviceName'),
-            desired_configs: groupRecord.get('desiredConfigs')
+            desired_configs: groupRecord.get('desiredConfigs'),
+            properties: groupRecord.get('properties')
           });
           });
         }
         }
       }
       }
@@ -698,12 +699,15 @@ App.ManageConfigGroupsController = Em.Controller.extend(App.ConfigOverridable, {
         App.store.load(App.ServiceConfigGroup, App.configGroupsMapper.generateDefaultGroup(self.get('serviceName'), defaultConfigGroup.get('hosts'), childConfigGroups));
         App.store.load(App.ServiceConfigGroup, App.configGroupsMapper.generateDefaultGroup(self.get('serviceName'), defaultConfigGroup.get('hosts'), childConfigGroups));
         App.store.commit();
         App.store.commit();
         if (duplicated) {
         if (duplicated) {
-          self.get('selectedConfigGroup.properties').forEach(function(item) {
+          self.get('selectedConfigGroup.properties').forEach(function (item) {
             var property = App.ServiceConfigProperty.create($.extend(false, {}, item));
             var property = App.ServiceConfigProperty.create($.extend(false, {}, item));
             property.set('group', App.ServiceConfigGroup.find(newGroupId));
             property.set('group', App.ServiceConfigGroup.find(newGroupId));
             properties.push(property);
             properties.push(property);
           });
           });
-          App.ServiceConfigGroup.find(newGroupId).set('properties', properties);
+          App.ServiceConfigGroup.find(newGroupId).setProperties({
+            'properties': properties,
+            'desiredConfigs': self.get('selectedConfigGroup.desiredConfigs')
+          });
         }
         }
         self.get('configGroups').pushObject(App.ServiceConfigGroup.find(newGroupId));
         self.get('configGroups').pushObject(App.ServiceConfigGroup.find(newGroupId));
         this.hide();
         this.hide();
@@ -896,8 +900,16 @@ App.ManageConfigGroupsController = Em.Controller.extend(App.ConfigOverridable, {
               if (errors.length > 0) {
               if (errors.length > 0) {
                 self.get('subViewController').set('errorMessage', errors.join(". "));
                 self.get('subViewController').set('errorMessage', errors.join(". "));
               } else {
               } else {
-                self.updateConfigGroupOnServicePage();
-                self.hide();
+                if (!self.get('isAddService') && !self.get('isInstaller') && !modifiedConfigGroups.toCreate.everyProperty('properties.length', 0)) {
+                  //update service config versions only if it is service configs page and at least one newly created group had properties
+                  App.router.get('mainServiceInfoConfigsController').loadServiceConfigVersions().done(function () {
+                    self.updateConfigGroupOnServicePage();
+                    self.hide();
+                  });
+                } else {
+                  self.updateConfigGroupOnServicePage();
+                  self.hide();
+                }
               }
               }
             });
             });
           });
           });

+ 1 - 0
ambari-web/app/mixins/common/configs/configs_loader.js

@@ -44,6 +44,7 @@ App.ConfigsLoader = Em.Mixin.create(App.GroupsMappingMixin, {
    * @returns {$.ajax}
    * @returns {$.ajax}
    */
    */
   loadServiceConfigVersions: function () {
   loadServiceConfigVersions: function () {
+    this.set('allVersionsLoaded', false);
     return App.ajax.send({
     return App.ajax.send({
       name: 'service.serviceConfigVersions.get',
       name: 'service.serviceConfigVersions.get',
       data: {
       data: {

+ 25 - 11
ambari-web/app/mixins/main/service/configs/config_overridable.js

@@ -225,19 +225,33 @@ App.ConfigOverridable = Em.Mixin.create({
    * @method postNewConfigurationGroup
    * @method postNewConfigurationGroup
    */
    */
   postNewConfigurationGroup: function (newConfigGroupData, callback) {
   postNewConfigurationGroup: function (newConfigGroupData, callback) {
-    var dataHosts = [];
-    newConfigGroupData.hosts.forEach(function (_host) {
-      dataHosts.push({
-        host_name: _host
-      });
-    }, this);
+    var properties = {};
+    newConfigGroupData.properties.forEach(function (propertiy) {
+      properties[propertiy.get('name')] = propertiy.get('value');
+    });
+    var newGroupData = {
+      "ConfigGroup": {
+        "group_name": newConfigGroupData.name,
+        "tag": newConfigGroupData.service_id,
+        "description": newConfigGroupData.description,
+        "desired_configs": newConfigGroupData.desired_configs.map(function (cst) {
+          return {
+            type: Em.get(cst, 'site') || Em.get(cst, 'type'),
+            tag: 'version' + (new Date).getTime(),
+            properties: properties
+          };
+        }),
+        "hosts": newConfigGroupData.hosts.map(function (h) {
+          return {
+            host_name: h
+          };
+        })
+      }
+    };
     var sendData = {
     var sendData = {
       name: 'config_groups.create',
       name: 'config_groups.create',
       data: {
       data: {
-        'group_name': newConfigGroupData.name,
-        'service_id': newConfigGroupData.service_id,
-        'description': newConfigGroupData.description,
-        'hosts': dataHosts
+        data: [newGroupData]
       },
       },
       success: 'successFunction',
       success: 'successFunction',
       error: 'errorFunction',
       error: 'errorFunction',
@@ -282,7 +296,7 @@ App.ConfigOverridable = Em.Mixin.create({
         }),
         }),
         desired_configs: desiredConfigs.map(function (cst) {
         desired_configs: desiredConfigs.map(function (cst) {
           return {
           return {
-            type: Em.get(cst, 'site') || Em.get(cst, 'type') ,
+            type: Em.get(cst, 'site') || Em.get(cst, 'type'),
             tag: Em.get(cst, 'tag')
             tag: Em.get(cst, 'tag')
           };
           };
         })
         })

+ 0 - 5
ambari-web/app/models/configs/config_group.js

@@ -16,11 +16,6 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
-/**
- * THIS IS NOT USED FOR NOW
- * FOR CONFIG GROUPS WE ARE USING OLD MODELS AND LOGIC
- */
-
 var App = require('app');
 var App = require('app');
 
 
 App.ServiceConfigGroup = DS.Model.extend({
 App.ServiceConfigGroup = DS.Model.extend({

+ 1 - 9
ambari-web/app/utils/ajax/ajax.js

@@ -2101,15 +2101,7 @@ var urls = {
     'format': function (data) {
     'format': function (data) {
       return {
       return {
         type: 'POST',
         type: 'POST',
-        data: JSON.stringify([{
-          "ConfigGroup": {
-            "group_name": data.group_name,
-            "tag": data.service_id,
-            "description": data.description,
-            "desired_configs": data.desired_configs,
-            "hosts": data.hosts
-          }
-        }])
+        data: JSON.stringify(data.data)
       }
       }
     }
     }
   },
   },

+ 5 - 2
ambari-web/app/views/common/configs/config_history_flow.js

@@ -183,8 +183,11 @@ App.ConfigHistoryFlowView = Em.View.extend({
     this.$('[data-toggle=tooltip], [data-toggle=arrow-tooltip]').remove();
     this.$('[data-toggle=tooltip], [data-toggle=arrow-tooltip]').remove();
   },
   },
 
 
-
   willInsertElement: function () {
   willInsertElement: function () {
+    this.setDisplayVersion();
+  },
+
+  setDisplayVersion: function () {
     var serviceVersions = this.get('serviceVersions');
     var serviceVersions = this.get('serviceVersions');
     var startIndex = 0;
     var startIndex = 0;
     var currentIndex = 0;
     var currentIndex = 0;
@@ -205,7 +208,7 @@ App.ConfigHistoryFlowView = Em.View.extend({
     }
     }
     this.set('startIndex', startIndex);
     this.set('startIndex', startIndex);
     this.adjustFlowView();
     this.adjustFlowView();
-  },
+  }.observes('allVersionsLoaded'),
 
 
   onChangeConfigGroup: function () {
   onChangeConfigGroup: function () {
     var serviceVersions = this.get('serviceVersions');
     var serviceVersions = this.get('serviceVersions');

+ 1 - 0
ambari-web/test/controllers/main/service/manage_config_groups_controller_test.js

@@ -306,6 +306,7 @@ describe('App.ManageConfigGroupsController', function() {
           popup.hide.restore();
           popup.hide.restore();
         });
         });
         it("", function () {
         it("", function () {
+          manageConfigGroupsController.set('hostsModifiedConfigGroups', {toCreate: []});
           popup.onPrimary();
           popup.onPrimary();
           expect(popup.runClearCGQueue.calledOnce).to.be.true;
           expect(popup.runClearCGQueue.calledOnce).to.be.true;
           expect(popup.runModifyCGQueue.calledOnce).to.be.true;
           expect(popup.runModifyCGQueue.calledOnce).to.be.true;