소스 검색

AMBARI-8996. Kerberos Wizard: Stop services before Kerberizing Cluster, then start services when complete. (jaimin)

Jaimin Jetly 10 년 전
부모
커밋
14cb9b4ce8

+ 1 - 0
ambari-web/app/controllers.js

@@ -69,6 +69,7 @@ require('controllers/main/admin/kerberos/step3_controller');
 require('controllers/main/admin/kerberos/step4_controller');
 require('controllers/main/admin/kerberos/step5_controller');
 require('controllers/main/admin/kerberos/step6_controller');
+require('controllers/main/admin/kerberos/step7_controller');
 require('controllers/main/admin/security');
 require('controllers/main/admin/security/security_progress_controller');
 require('controllers/main/admin/security/disable');

+ 2 - 3
ambari-web/app/controllers/main/admin/kerberos/step4_controller.js

@@ -87,7 +87,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
    * Set realm property with value from previous configuration step.
    * Set appropriate category for all configs.
    *
-   * @param {App.ServiceCofigProperty[]} configs
+   * @param {App.ServiceConfigProperty[]} configs
    * @returns {App.ServiceConfigProperty[]}
    */
   prepareConfigProperties: function(configs) {
@@ -158,7 +158,6 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
     var kerberosDescriptor = this.get('kerberosDescriptor');
     var configs = this.get('stepConfigs')[0].get('configs');
     this.updateKerberosDescriptor(kerberosDescriptor, configs);
-    this.get('wizardController').setDBProperty('kerberosDescriptorConfigs', kerberosDescriptor);
-    this.set('wizardController.content.kerberosDescriptorConfigs', kerberosDescriptor);
+    this.get('wizardController').saveKerberosDescriptorConfigs(kerberosDescriptor);
   }
 });

+ 12 - 23
ambari-web/app/controllers/main/admin/kerberos/step5_controller.js

@@ -19,31 +19,20 @@
 App.KerberosWizardStep5Controller = App.KerberosProgressPageController.extend({
   name: 'kerberosWizardStep5Controller',
   clusterDeployState: 'KERBEROS_DEPLOY',
-  isSingleRequestPage: true,
-  request: {},
+  commands: ['stopServices'],
 
-  setRequest: function (data, kerberosDescriptor) {
-    this.set('request', {
-      name: 'KERBERIZE_CLUSTER',
-      ajaxName: 'admin.kerberize.cluster',
-      ajaxData: {
-        data: {
-          Clusters: {
-            desired_config: data
-          },
-          kerberos_descriptor: kerberosDescriptor
+  stopServices: function () {
+    App.ajax.send({
+      name: 'common.services.update',
+      data: {
+        context: "Stop services",
+        "ServiceInfo": {
+          "state": "INSTALLED"
         }
-      }
+      },
+      sender: this,
+      success: 'startPolling',
+      error: 'onTaskError'
     });
-  },
-
-  contextForPollingRequest: Em.I18n.t('requestInfo.kerberizeCluster'),
-
-  commands: [],
-
-  retry: function () {
-    this.set('showRetry', false);
-    this.get('tasks').setEach('status','PENDING');
-    App.router.send('retry');
   }
 });

+ 21 - 28
ambari-web/app/controllers/main/admin/kerberos/step6_controller.js

@@ -19,38 +19,31 @@
 App.KerberosWizardStep6Controller = App.KerberosProgressPageController.extend({
   name: 'kerberosWizardStep6Controller',
   clusterDeployState: 'KERBEROS_DEPLOY',
-  commands: ['stopServices','startServices'],
+  isSingleRequestPage: true,
+  request: {},
 
-  stopServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      data: {
-        context: "Stop services",
-        "ServiceInfo": {
-          "state": "INSTALLED"
+  setRequest: function (data, kerberosDescriptor) {
+    this.set('request', {
+      name: 'KERBERIZE_CLUSTER',
+      ajaxName: 'admin.kerberize.cluster',
+      ajaxData: {
+        data: {
+          Clusters: {
+            desired_config: data
+          },
+          kerberos_descriptor: kerberosDescriptor
         }
-      },
-      sender: this,
-      success: 'startPolling',
-      error: 'onTaskError'
+      }
     });
   },
 
-  startServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: {
-        "context": "Start services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        urlParams: "params/run_smoke_test=true"
-      },
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
-  }
-});
+  contextForPollingRequest: Em.I18n.t('requestInfo.kerberizeCluster'),
 
+  commands: [],
 
+  retry: function () {
+    this.set('showRetry', false);
+    this.get('tasks').setEach('status','PENDING');
+    App.router.send('retry');
+  }
+});

+ 39 - 0
ambari-web/app/controllers/main/admin/kerberos/step7_controller.js

@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+App.KerberosWizardStep7Controller = App.KerberosProgressPageController.extend({
+  name: 'kerberosWizardStep6Controller',
+  clusterDeployState: 'KERBEROS_DEPLOY',
+  commands: ['startServices'],
+
+  startServices: function () {
+    App.ajax.send({
+      name: 'common.services.update',
+      sender: this,
+      data: {
+        "context": "Start services",
+        "ServiceInfo": {
+          "state": "STARTED"
+        },
+        urlParams: "params/run_smoke_test=true"
+      },
+      success: 'startPolling',
+      error: 'onTaskError'
+    });
+  }
+});

+ 29 - 2
ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js

@@ -23,7 +23,7 @@ App.KerberosWizardController = App.WizardController.extend({
 
   name: 'kerberosWizardController',
 
-  totalSteps: 6,
+  totalSteps: 7,
 
   isKerberosWizard: true,
 
@@ -38,7 +38,7 @@ App.KerberosWizardController = App.WizardController.extend({
     hosts: '',
     kerberosOption: null,
     cluster: null,
-    services: null,
+    services: [],
     advancedServiceConfig: null,
     serviceConfigProperties: [],
     kerberosDescriptorConfigs: null,
@@ -164,6 +164,11 @@ App.KerberosWizardController = App.WizardController.extend({
     });
   },
 
+  loadKerberosDescriptorConfigs: function () {
+    var kerberosDescriptorConfigs = this.getDBProperty('kerberosDescriptorConfigs');
+    this.set('content.kerberosDescriptorConfigs', kerberosDescriptorConfigs);
+  },
+
 
   saveRequestIds: function (requestIds) {
     this.setDBProperty('requestIds',requestIds);
@@ -189,6 +194,12 @@ App.KerberosWizardController = App.WizardController.extend({
     this.set('content.tasksRequestIds', requestIds);
   },
 
+  saveKerberosDescriptorConfigs: function (kerberosDescriptorConfigs) {
+    this.setDBProperty('kerberosDescriptorConfigs',kerberosDescriptorConfigs);
+    this.set('content.kerberosDescriptorConfigs', kerberosDescriptorConfigs);
+  },
+
+
   loadMap: {
     '1': [
       {
@@ -218,6 +229,22 @@ App.KerberosWizardController = App.WizardController.extend({
           this.loadRequestIds();
         }
       }
+    ],
+    '4': [
+      {
+        type: 'sync',
+        callback: function () {
+          this.loadKerberosDescriptorConfigs();
+        }
+      }
+    ],
+    '5': [
+      {
+        type: 'sync',
+        callback: function () {
+          this.loadKerberosDescriptorConfigs();
+        }
+      }
     ]
   },
 

+ 8 - 5
ambari-web/app/controllers/wizard/step7_controller.js

@@ -730,11 +730,14 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, {
     }
 
     if (!App.get('isHadoopWindowsStack')) {
-      c = serviceConfigs.findProperty('serviceName', 'HDFS').configs;
-      c.filterProperty('category', 'MetricsSink').map(function (config) {
-        c = c.without(config);
-      });
-      serviceConfigs.findProperty('serviceName', 'HDFS').configs = c;
+      var hdfsService =  serviceConfigs.findProperty('serviceName', 'HDFS');
+      if (hdfsService) {
+        c = hdfsService.configs;
+        c.filterProperty('category', 'MetricsSink').map(function (config) {
+          c = c.without(config);
+        });
+        serviceConfigs.findProperty('serviceName', 'HDFS').configs = c;
+      }
     }
 
     this.set('stepConfigs', serviceConfigs);

+ 11 - 8
ambari-web/app/messages.js

@@ -962,8 +962,9 @@ Em.I18n.translations = {
   'admin.kerberos.wizard.step2.header': 'Configure Kerberos',
   'admin.kerberos.wizard.step3.header': 'Install and Test Kerberos',
   'admin.kerberos.wizard.step4.header': 'Configure Identities',
-  'admin.kerberos.wizard.step5.header': 'Kerberize Cluster',
-  'admin.kerberos.wizard.step6.header': 'Test Services',
+  'admin.kerberos.wizard.step5.header': 'Stop Services',
+  'admin.kerberos.wizard.step6.header': 'Kerberize Cluster',
+  'admin.kerberos.wizard.step7.header': 'Start and Test Services',
   'admin.kerberos.wizard.step1.info.body': 'Welcome to the Ambari Security Wizard. Use this wizard to enable kerberos security in your cluster. </br>Let\'s get started.',
   'admin.kerberos.wizard.step1.alert.body': 'Note: This process requires services to be restarted and cluster downtime. As well, depending on the options you select, might require support from your Security administrators. Please plan accordingly.',
   'admin.kerberos.wizard.step1.body.text': 'What type of KDC do you plan on using?',
@@ -981,12 +982,14 @@ Em.I18n.translations = {
   'admin.kerberos.wizard.step3.notice.completed': 'Kerberos service has been installed and tested successfully.',
   'admin.kerberos.wizard.progressPage.notice.inProgress': 'Please wait while cluster is being kerberized',
   'admin.kerberos.wizard.step4.info.body': 'Configure principal name and keytab location for service users and hadoop service components.',
-  'admin.kerberos.wizard.step5.notice.inProgress': 'Please wait while cluster is being kerberized.',
-  'admin.kerberos.wizard.step5.notice.completed': 'Cluster has been successfully kerberized.',
-  'admin.kerberos.wizard.step6.notice.inProgress': 'Please wait while services are being restarted and tested.',
-  'admin.kerberos.wizard.step6.notice.completed': 'Services have been successfully tested with kerberos environment.',
-  'admin.kerberos.wizard.step6.task0.title' : 'Stop Services',
-  'admin.kerberos.wizard.step6.task1.title' : 'Start Services',
+  'admin.kerberos.wizard.step5.task0.title' : 'Stop Services',
+  'admin.kerberos.wizard.step5.notice.inProgress': 'Please wait while services are being stopped.',
+  'admin.kerberos.wizard.step5.notice.completed': 'Services have been successfully stopped.',
+  'admin.kerberos.wizard.step6.notice.inProgress': 'Please wait while cluster is being kerberized.',
+  'admin.kerberos.wizard.step6.notice.completed': 'Cluster has been successfully kerberized.',
+  'admin.kerberos.wizard.step7.notice.inProgress': 'Please wait while services are being started and tested.',
+  'admin.kerberos.wizard.step7.notice.completed': 'Services have been successfully tested with kerberos environment.',
+  'admin.kerberos.wizard.step7.task0.title' : 'Start and Test Services',
 
   'admin.highAvailability':' High Availability',
   'admin.highAvailability.button.enable':'Enable NameNode HA',

+ 58 - 24
ambari-web/app/routes/add_kerberos_routes.js

@@ -40,7 +40,7 @@ module.exports = App.WizardRoute.extend({
           controller.clearTasksData();
           controller.finish();
           App.router.get('updateController').set('isWorking', true);
-          if(App.get('testMode')){
+          if (App.get('testMode')) {
             App.router.transitionTo('adminKerberos.index');
             location.reload();
           }
@@ -48,10 +48,12 @@ module.exports = App.WizardRoute.extend({
             clusterName: App.router.getClusterName(),
             clusterState: 'DEFAULT',
             localdb: App.db.data
-          }, {alwaysCallback: function () {
-            self.hide();
-            App.router.transitionTo('adminKerberos.index');
-          }});
+          }, {
+            alwaysCallback: function () {
+              self.hide();
+              App.router.transitionTo('adminKerberos.index');
+            }
+          });
 
         },
         didInsertElement: function () {
@@ -156,7 +158,8 @@ module.exports = App.WizardRoute.extend({
     },
     back: Em.Router.transitionTo('step2'),
     next: function (router) {
-      // load kerberos descriptor for all services
+      var kerberosWizardController = router.get('kerberosWizardController');
+      kerberosWizardController.setDBProperty('kerberosDescriptorConfigs', null);
       router.transitionTo('step4');
     }
   }),
@@ -184,6 +187,9 @@ module.exports = App.WizardRoute.extend({
     },
     back: Em.Router.transitionTo('step3'),
     next: function (router) {
+      var kerberosWizardController = router.get('kerberosWizardController');
+      var kerberosWizardStep4Controller = router.get('kerberosWizardStep4Controller');
+      kerberosWizardController.saveServiceConfigProperties(kerberosWizardStep4Controller);
       router.transitionTo('step5');
     }
   }),
@@ -197,21 +203,46 @@ module.exports = App.WizardRoute.extend({
     connectOutlets: function (router) {
       console.log('in kerberosWizardController.step5:connectOutlets');
       var controller = router.get('kerberosWizardController');
-      var stepController = router.get('kerberosWizardStep5Controller');
+      controller.setLowerStepsDisable(5);
       controller.dataLoading().done(function () {
-        controller.getClusterEnvData().done(function(data){
+        controller.loadAllPriorSteps();
+        controller.connectOutlet('kerberosWizardStep5', controller.get('content'));
+      });
+    },
+    unroutePath: function () {
+      return false;
+    },
+    back: Em.Router.transitionTo('step4'),
+    next: function (router) {
+      router.transitionTo('step6');
+    }
+  }),
+
+  step6: Em.Route.extend({
+    route: '/step6',
+
+    enter: function (router) {
+      router.get('kerberosWizardController').setCurrentStep('6');
+    },
+    connectOutlets: function (router) {
+      console.log('in kerberosWizardController.step6:connectOutlets');
+      var controller = router.get('kerberosWizardController');
+      var stepController = router.get('kerberosWizardStep6Controller');
+      controller.setLowerStepsDisable(6);
+      controller.dataLoading().done(function () {
+        controller.getClusterEnvData().done(function (data) {
           controller.loadAllPriorSteps();
           var kerberosDescriptor = controller.get('content.kerberosDescriptorConfigs');
           stepController.setRequest(data, kerberosDescriptor);
-          controller.connectOutlet('kerberosWizardStep5', controller.get('content'));
+          controller.connectOutlet('kerberosWizardStep6', controller.get('content'));
         });
       });
     },
-    retry: function() {
+    retry: function () {
       var router = App.router;
       var controller = router.get('kerberosWizardController');
-      controller.getClusterEnvData().done(function(data) {
-        var stepController = router.get('kerberosWizardStep5Controller');
+      controller.getClusterEnvData().done(function (data) {
+        var stepController = router.get('kerberosWizardStep6Controller');
         var kerberosDescriptor = controller.get('content.kerberosDescriptorConfigs');
         stepController.setRequest(data, kerberosDescriptor);
         stepController.loadStep();
@@ -220,30 +251,31 @@ module.exports = App.WizardRoute.extend({
     unroutePath: function () {
       return false;
     },
-    back: Em.Router.transitionTo('step4'),
+    back: Em.Router.transitionTo('step5'),
     next: function (router) {
-      router.transitionTo('step6');
+      router.transitionTo('step7');
     }
   }),
 
-  step6: Em.Route.extend({
-    route: '/step6',
+  step7: Em.Route.extend({
+    route: '/step7',
 
     enter: function (router) {
-      router.get('kerberosWizardController').setCurrentStep('6');
+      router.get('kerberosWizardController').setCurrentStep('7');
     },
     connectOutlets: function (router) {
-      console.log('in kerberosWizardController.step6:connectOutlets');
+      console.log('in kerberosWizardController.step7:connectOutlets');
       var controller = router.get('kerberosWizardController');
-      controller.setLowerStepsDisable(6);
+      controller.setLowerStepsDisable(7);
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
-        controller.connectOutlet('kerberosWizardStep6', controller.get('content'));
+        controller.connectOutlet('kerberosWizardStep7', controller.get('content'));
       });
     },
     unroutePath: function () {
       return false;
     },
+    back: Em.Router.transitionTo('step6'),
     next: function (router) {
       var controller = router.get('kerberosWizardController');
       controller.finish();
@@ -251,10 +283,12 @@ module.exports = App.WizardRoute.extend({
         clusterName: App.router.getClusterName(),
         clusterState: 'DEFAULT',
         localdb: App.db.data
-      }, {alwaysCallback: function () {
-        self.hide();
-        App.router.transitionTo('adminKerberos.index');
-      }});
+      }, {
+        alwaysCallback: function () {
+          self.hide();
+          App.router.transitionTo('adminKerberos.index');
+        }
+      });
 
     }
   })

+ 1 - 1
ambari-web/app/templates/main/admin/kerberos/step6.hbs

@@ -17,4 +17,4 @@
 }}
 <div id="kerberos-wizard-step6">
   {{template "templates/common/progress"}}
-</div>
+</div>

+ 20 - 0
ambari-web/app/templates/main/admin/kerberos/step7.hbs

@@ -0,0 +1,20 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+<div id="kerberos-wizard-step7">
+  {{template "templates/common/progress"}}
+</div>

+ 1 - 0
ambari-web/app/templates/main/admin/kerberos/wizard.hbs

@@ -31,6 +31,7 @@
               <li {{bindAttr class="isStep4:active view.isStep4Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep4 target="controller"}}>{{t admin.kerberos.wizard.step4.header}}</a></li>
               <li {{bindAttr class="isStep5:active view.isStep5Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep5 target="controller"}}>{{t admin.kerberos.wizard.step5.header}}</a></li>
               <li {{bindAttr class="isStep6:active view.isStep6Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep6 target="controller"}}>{{t admin.kerberos.wizard.step6.header}}</a></li>
+              <li {{bindAttr class="isStep7:active view.isStep7Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep7 target="controller"}}>{{t admin.kerberos.wizard.step7.header}}</a></li>
             </ul>
           </div>
         </div>

+ 1 - 0
ambari-web/app/views.js

@@ -139,6 +139,7 @@ require('views/main/admin/kerberos/step3_view');
 require('views/main/admin/kerberos/step4_view');
 require('views/main/admin/kerberos/step5_view');
 require('views/main/admin/kerberos/step6_view');
+require('views/main/admin/kerberos/step7_view');
 
 require('views/main/admin/security');
 require('views/main/admin/security/disable');

+ 1 - 2
ambari-web/app/views/main/admin/kerberos/step5_view.js

@@ -26,6 +26,5 @@ App.KerberosWizardStep5View = App.KerberosProgressPageView.extend({
 
   submitButtonText: Em.I18n.t('common.next'),
 
-  showBackButton: true
-
+  showBackButton: false
 });

+ 2 - 1
ambari-web/app/views/main/admin/kerberos/step6_view.js

@@ -15,6 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 var App = require('app');
 
 App.KerberosWizardStep6View = App.KerberosProgressPageView.extend({
@@ -23,7 +24,7 @@ App.KerberosWizardStep6View = App.KerberosProgressPageView.extend({
 
   noticeCompleted: Em.I18n.t('admin.kerberos.wizard.step6.notice.completed'),
 
-  submitButtonText: Em.I18n.t('common.complete'),
+  submitButtonText: Em.I18n.t('common.next'),
 
   showBackButton: false
 

+ 30 - 0
ambari-web/app/views/main/admin/kerberos/step7_view.js

@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var App = require('app');
+
+App.KerberosWizardStep7View = App.KerberosProgressPageView.extend({
+
+  templateName: require('templates/main/admin/kerberos/step7'),
+
+  noticeCompleted: Em.I18n.t('admin.kerberos.wizard.step7.notice.completed'),
+
+  submitButtonText: Em.I18n.t('common.complete'),
+
+  showBackButton: false
+
+});