Procházet zdrojové kódy

[AMBARI-24857] UI Changes for supporting Ozone deployment. (#2570)

* [AMBARI-24857] UI Changes for supporting Ozone deployment.

* minor code fix

* Minor code fix

* Minor code fix

* Minor code fix
Ishan Bhatt před 7 roky
rodič
revize
7e39765aec

+ 33 - 8
ambari-web/app/controllers/wizard/step4_controller.js

@@ -59,11 +59,27 @@ App.WizardStep4Controller = Em.ArrayController.extend({
    */
   errorStack: [],
 
+  isAddServiceWizard: Em.computed.equal('content.controllerName', 'addServiceController'),
+
+  isOzoneInstalled: function() {
+    let isOzone = this.findProperty('serviceName', 'OZONE');
+    return isOzone && isOzone.get('isInstalled');
+  }.property('@each.isInstalled'),
+
   /**
    * Services which are HDFS compatible
    */
   fileSystems: function() {
-    var fileSystems = this.filterProperty('isDFS', true);;
+    let fileSystems = [];
+    const self = this;
+    this.filterProperty('isDFS', true).forEach((fs) => {
+      if (self.get('isAddServiceWizard') && self.get('isOzoneInstalled') &&
+        fs.get('serviceName') === 'HDFS') {
+        return;
+      }
+      fileSystems.push(fs);
+    });
+
     return fileSystems.map(function(fs) {
       return App.FileSystem.create({content: fs, services: fileSystems});
     });
@@ -318,7 +334,7 @@ App.WizardStep4Controller = Em.ArrayController.extend({
    */
   isDFSStack: function () {
 	  var bDFSStack = false;
-    var dfsServices = ['HDFS', 'GLUSTERFS'];
+    var dfsServices = ['HDFS', 'GLUSTERFS', 'OZONE'];
     var availableServices = this.filterProperty('isInstalled',false);
     availableServices.forEach(function(service){
       if (dfsServices.contains(service.get('serviceName')) || service.get('serviceType') == 'HCFS' ) {
@@ -335,12 +351,26 @@ App.WizardStep4Controller = Em.ArrayController.extend({
    */
   fileSystemServiceValidation: function(callback) {
     if(this.isDFSStack()){
+      const self = this;
       var primaryDFS = this.findProperty('isPrimaryDFS',true);
       if (primaryDFS) {
         var primaryDfsDisplayName = primaryDFS.get('displayNameOnSelectServicePage');
         var primaryDfsServiceName = primaryDFS.get('serviceName');
+        //if multiple DFS are not selected, remove the related error from the error array
+        let removeFsError = function () {
+          let fsError = self.get('errorStack').findProperty('id',"multipleDFS");
+          if(fsError)
+          {
+            self.get('errorStack').removeObject(fsError);
+          }
+        };
         if (this.multipleDFSs()) {
           var dfsServices = this.filterProperty('isDFS',true).filterProperty('isSelected',true).mapProperty('serviceName');
+          //special case for HDFS and OZONE
+          if (dfsServices.length === 2 && dfsServices.includes('HDFS') && dfsServices.includes('OZONE')) {
+            removeFsError();
+            return;
+          }
           var services = dfsServices.map(function (item){
             return {
               serviceName: item,
@@ -355,12 +385,7 @@ App.WizardStep4Controller = Em.ArrayController.extend({
         }
         else
         {
-          //if multiple DFS are not selected, remove the related error from the error array
-          var fsError = this.get('errorStack').filterProperty('id',"multipleDFS");
-          if(fsError)
-          {
-             this.get('errorStack').removeObject(fsError[0]);
-          }
+          removeFsError();
         }
       }
     }

+ 4 - 1
ambari-web/app/controllers/wizard/step6_controller.js

@@ -302,9 +302,11 @@ App.WizardStep6Controller = Em.Controller.extend(App.HostComponentValidationMixi
     else if (this.get('isAddServiceWizard')) services = installedServices.concat(selectedServices);
 
     var headers = Em.A([]);
+    let doHideOzoneDataNodes = !!services.findProperty('serviceName', 'HDFS');
     services.forEach(function (stackService) {
       stackService.get('serviceComponents').forEach(function (serviceComponent) {
-        if (serviceComponent.get('isShownOnInstallerSlaveClientPage')) {
+        let hideComponent = serviceComponent.get('componentName') === 'OZONE_DATANODE' ? doHideOzoneDataNodes : false;
+        if (serviceComponent.get('isShownOnInstallerSlaveClientPage') && !hideComponent) {
           headers.pushObject(Em.Object.create({
             name: serviceComponent.get('componentName'),
             label: App.format.role(serviceComponent.get('componentName'), false),
@@ -339,6 +341,7 @@ App.WizardStep6Controller = Em.Controller.extend(App.HostComponentValidationMixi
     }
   },
 
+
   /**
    * Returns list of new hosts
    *

+ 16 - 1
ambari-web/app/models/stack_service.js

@@ -75,9 +75,24 @@ App.FileSystem = Ember.ObjectProxy.extend({
   content: null,
   services: [],
 
+  //special case for HDFS and OZONE. They can be selected together
+  shouldAllSelectionBeCleared: function () {
+    const dfsNames = this.get('services').mapProperty('serviceName');
+    const coExistingDfs = ['HDFS', 'OZONE'],
+      selectedServices = this.get('services').filterProperty('isSelected');
+    for (let i = 0; i < selectedServices.length; i++) {
+      if (!coExistingDfs.includes(selectedServices[i].get('serviceName'))) {
+        return true;
+      }
+    }
+    return !(dfsNames.includes('HDFS') && dfsNames.includes('OZONE') && coExistingDfs.includes(this.get('content.serviceName')));
+  },
+
   isSelected: function(key, aBoolean) {
     if (arguments.length > 1) {
-      this.clearAllSelection();
+      if (this.shouldAllSelectionBeCleared()) {
+        this.clearAllSelection();
+      }
       this.get('content').set('isSelected', aBoolean);
     }
     return this.get('content.isSelected');

+ 3 - 0
ambari-web/app/views/main/host/summary.js

@@ -229,6 +229,9 @@ App.MainHostSummaryView = Em.View.extend(App.HiveInteractiveCheck, App.TimeRange
             addableComponent.get('componentName') === 'HIVE_SERVER_INTERACTIVE' && !self.get('enableHiveInteractive')) {
             return;
           }
+          if (installedServices.includes('HDFS') && addableComponent.get('componentName') === 'OZONE_DATANODE') {
+            return;
+          }
           components.pushObject(self.addableComponentObject.create({
             'componentName': addableComponent.get('componentName'),
             'serviceName': addableComponent.get('serviceName')