Browse Source

AMBARI-3774 Provide ability to add/remove hosts in manage-config-groups dialog. (atkach)

atkach 11 years ago
parent
commit
68eef9663c

+ 34 - 1
ambari-web/app/controllers/main/service/manage_config_groups_controller.js

@@ -18,8 +18,9 @@
 
 
 var App = require('app');
-App.ManageConfigGroupsController = App.WizardController.extend({
+var hostsManagement = require('utils/hosts');
 
+App.ManageConfigGroupsController = Em.Controller.extend({
   name: 'manageConfigGroupsController',
 
   isLoaded: false,
@@ -30,6 +31,8 @@ App.ManageConfigGroupsController = App.WizardController.extend({
 
   selectedConfigGroup: null,
 
+  selectedHosts: [],
+
   loadConfigGroups: function (serviceName) {
     this.set('serviceName', serviceName);
     App.ajax.send({
@@ -140,5 +143,35 @@ App.ManageConfigGroupsController = App.WizardController.extend({
     if (properies) {
       App.showAlertPopup(Em.I18n.t('services.service.config_groups_popup.properties'), properies);
     }
+  },
+  /**
+   * add hosts to group
+   * @return {Array}
+   */
+  addHosts: function () {
+    var availableHosts = this.get('selectedConfigGroup.availableHosts');
+    var group = this.get('selectedConfigGroup');
+    hostsManagement.launchHostsSelectionDialog(availableHosts, [], false, [], function (selectedHosts) {
+      if (selectedHosts) {
+        var defaultHosts = group.get('parentConfigGroup.hosts');
+        var configGroupHosts = group.get('hosts');
+        selectedHosts.forEach(function (hostName) {
+          configGroupHosts.pushObject(hostName);
+          defaultHosts.removeObject(hostName);
+        });
+      }
+    });
+  },
+  /**
+   * delete hosts from group
+   */
+  deleteHosts: function () {
+    var groupHosts = this.get('selectedConfigGroup.hosts');
+    var defaultGroupHosts = this.get('selectedConfigGroup.parentConfigGroup.hosts');
+    this.get('selectedHosts').forEach(function (hostName) {
+      defaultGroupHosts.pushObject(hostName);
+      groupHosts.removeObject(hostName);
+    });
+    this.set('selectedHosts', []);
   }
 });

+ 24 - 1
ambari-web/app/models/config_group.js

@@ -85,8 +85,31 @@ App.ConfigGroup = Ember.Object.extend({
    * non-default configuration groups.
    */
   availableHosts: function () {
+    if (this.get('isDefault')) return [];
+    var unusedHostsMap = {};
+    var availableHosts = [];
+    // parentConfigGroup.hosts(hosts from default group) - are available hosts, which don't belong to any group
+    this.get('parentConfigGroup.hosts').forEach(function (hostName) {
+      unusedHostsMap[hostName] = true;
+    });
+    App.Host.find().filter(function (host) {
+      if(unusedHostsMap[host.get('id')]) {
+        availableHosts.pushObject(Ember.Object.create({
+          selected: false,
+          host: host
+        }));
+      }
+    });
+    return availableHosts;
+  }.property('isDefault', 'parentConfigGroup', 'childConfigGroups', 'parentConfigGroup.hosts.@each'),
 
-  }.property('isDefault', 'parentConfigGroup', 'childConfigGroups'),
+  isAddHostsDisabled: function () {
+    return (this.get('isDefault') || this.get('availableHosts.length') === 0);
+  }.property('availableHosts.length'),
+
+  isDeleteHostsDisabled: function () {
+    return (this.get('isDefault') || this.get('hosts.length') === 0);
+  }.property('hosts.length'),
 
   /**
    * Collection of (site, tag) pairs representing properties.

+ 3 - 2
ambari-web/app/templates/main/service/manage_configuration_groups_popup.hbs

@@ -43,11 +43,12 @@
               contentBinding="selectedConfigGroup.hosts"
               multiple="multiple"
               class="group-select"
+              selectionBinding="selectedHosts"
             }}
           </div>
           <div class="button-group pull-right">
-            <a class="btn">+</a>
-            <a class="btn">-</a>
+            <button class="btn" {{bindAttr disabled="selectedConfigGroup.isAddHostsDisabled"}} {{action addHosts target="controller"}} >+</button>
+            <button class="btn" {{bindAttr disabled="selectedConfigGroup.isDeleteHostsDisabled"}} {{action deleteHosts target="controller"}} >-</button>
           </div>
         </div>
         <div class="row-fluid">

+ 1 - 0
ambari-web/app/views/main/service/manage_config_groups_view.js

@@ -33,6 +33,7 @@ App.MainServiceManageConfigGroupView = Em.View.extend({
     if (selectedConfigGroup.length > 1) {
       this.set('selectedConfigGroup', selectedConfigGroup[selectedConfigGroup.length - 1]);
     }
+    this.set('controller.selectedHosts', []);
   }.observes('selectedConfigGroup'),
 
   onLoad: function () {