Ver Fonte

AMBARI-14904. Disable base URL inputs for all OS except one that the cluster is running (akovalenko)

Aleksandr Kovalenko há 9 anos atrás
pai
commit
5833aabd81

+ 15 - 3
ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsCreateCtrl.js

@@ -18,7 +18,7 @@
 'use strict';
 
 angular.module('ambariAdminConsole')
-.controller('StackVersionsCreateCtrl', ['$scope', 'Stack', '$routeParams', '$location', 'Alert', '$translate', function($scope, Stack, $routeParams, $location, Alert, $translate) {
+.controller('StackVersionsCreateCtrl', ['$scope', 'Stack', '$routeParams', '$location', 'Alert', '$translate', 'Cluster', function($scope, Stack, $routeParams, $location, Alert, $translate, Cluster) {
   var $t = $translate.instant;
   $scope.createController = true;
   $scope.osList = [];
@@ -43,7 +43,9 @@ angular.module('ambariAdminConsole')
       });
       $scope.upgradeStack.options = versions;
       $scope.upgradeStack.selected = versions[versions.length - 1];
-      $scope.afterStackVersionChange();
+      $scope.afterStackVersionChange().then(function(){
+        $scope.disableUnusedOS();
+      });
     })
     .catch(function (data) {
       Alert.error($t('versions.alerts.filterListError'), data.message);
@@ -71,7 +73,7 @@ angular.module('ambariAdminConsole')
   };
 
   $scope.afterStackVersionChange = function () {
-    Stack.getSupportedOSList($scope.upgradeStack.selected.stack_name, $scope.upgradeStack.selected.stack_version)
+    return Stack.getSupportedOSList($scope.upgradeStack.selected.stack_name, $scope.upgradeStack.selected.stack_version)
     .then(function (data) {
       var operatingSystems = data.operating_systems;
         $scope.osList = operatingSystems.map(function (os) {
@@ -87,6 +89,16 @@ angular.module('ambariAdminConsole')
     });
   };
 
+  $scope.disableUnusedOS = function() {
+    Cluster.getClusterOS().then(function(usedOS){
+      angular.forEach($scope.osList, function (os) {
+        if (os.OperatingSystems.os_type !== usedOS) {
+          os.disabled = true;
+        }
+      });
+    });
+  };
+
   $scope.updateCurrentVersionInput = function () {
     $scope.currentVersionInput = $scope.upgradeStack.selected.displayName + '.' + angular.element('[name="version"]')[0].value;
   };

+ 14 - 2
ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsEditCtrl.js

@@ -63,7 +63,9 @@ angular.module('ambariAdminConsole')
       } else {
         $scope.deleteEnabled = $scope.isDeletable();
       }
-      $scope.addMissingOSList();
+      $scope.addMissingOSList().then(function(){
+        $scope.disableUnusedOS();
+      });
     });
   };
 
@@ -72,7 +74,7 @@ angular.module('ambariAdminConsole')
   };
 
   $scope.addMissingOSList = function() {
-    Stack.getSupportedOSList($scope.stackName, $scope.stackVersion)
+    return Stack.getSupportedOSList($scope.stackName, $scope.stackVersion)
     .then(function (data) {
       var existingOSHash = {};
       angular.forEach($scope.osList, function (os) {
@@ -109,6 +111,16 @@ angular.module('ambariAdminConsole')
     });
   };
 
+  $scope.disableUnusedOS = function() {
+    Cluster.getClusterOS().then(function(usedOS){
+      angular.forEach($scope.osList, function (os) {
+        if (os.OperatingSystems.os_type !== usedOS) {
+          os.disabled = true;
+        }
+      });
+    });
+  };
+
   $scope.defaulfOSRepos = {};
 
   $scope.save = function () {

+ 14 - 1
ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Cluster.js

@@ -60,9 +60,22 @@ angular.module('ambariAdminConsole')
 
       return deferred.promise;
     },
+    getClusterOS: function() {
+      var deferred = $q.defer();
+
+      $http.get(Settings.baseUrl + '/services/AMBARI/components/AMBARI_SERVER?fields=RootServiceComponents/properties/server.os_family&minimal_response=true', {mock: 'redhat6'})
+      .then(function(data) {
+        deferred.resolve(data.data.RootServiceComponents.properties['server.os_family']);
+      })
+      .catch(function(data) {
+        deferred.reject(data);
+      });
+
+      return deferred.promise;
+    },
     getAmbariTimeout: function() {
       var deferred = $q.defer();
-      var url = '/services/AMBARI/components/AMBARI_SERVER?fields=RootServiceComponents/properties/user.inactivity.timeout.default'
+      var url = '/services/AMBARI/components/AMBARI_SERVER?fields=RootServiceComponents/properties/user.inactivity.timeout.default';
       $http.get(Settings.baseUrl + url)
       .then(function(data) {
         var properties = data.data.RootServiceComponents.properties;

+ 1 - 1
ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Stack.js

@@ -222,7 +222,7 @@ angular.module('ambariAdminConsole')
         deferred.resolve(invalidUrls);
       } else {
         osList.forEach(function (os) {
-          if (os.selected) {
+          if (os.selected && !os.disabled) {
             os.repositories.forEach(function (repo) {
               totalCalls++;
               $http.post(url + '/operating_systems/' + os.OperatingSystems.os_type + '/repositories/' + repo.Repositories.repo_id + '?validate_only=true',

+ 2 - 2
ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/stackVersionPage.html

@@ -71,7 +71,7 @@
         <div class="col-sm-2 os-checkbox">
           <div class="checkbox">
             <label>
-              <input type="checkbox" ng-model="os.selected" ng-change="toggleOSSelect()"> {{os.OperatingSystems.os_type}}
+              <input type="checkbox" ng-model="os.selected" ng-change="toggleOSSelect()" ng-disabled="os.disabled"> {{os.OperatingSystems.os_type}}
             </label>
           </div>
         </div>
@@ -79,7 +79,7 @@
           <div class="form-group {{repository.Repositories.repo_name}}" ng-class="{'has-error': repository.hasError }" ng-repeat="repository in os.repositories">
             <div class="col-sm-3"><label class="control-label">{{repository.Repositories.repo_name}}</label></div>
             <div class="col-sm-9"><input type="text" class="form-control" ng-model="repository.Repositories.base_url"
-                                         ng-change="clearError()" ng-disabled="!os.selected"></div>
+                                         ng-change="clearError()" ng-disabled="os.disabled"></div>
           </div>
         </div>
       </div>