add_service_routes.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var App = require('app');
  19. // @todo: remove App.supports.kerberosAutomated after Kerberos Automation Wizard support
  20. var consoleMsg = Em.I18n.t('app.logger.wizard');
  21. module.exports = App.WizardRoute.extend({
  22. route: '/service/add',
  23. enter: function (router) {
  24. if (App.isAuthorized('SERVICE.ADD_DELETE_SERVICES')) {
  25. // `getSecurityStatus` call is required to retrieve information related to kerberos type: Manual or automated kerberos
  26. router.get('mainController').isLoading.call(router.get('clusterController'),'isClusterNameLoaded').done(function () {
  27. App.router.get('mainAdminKerberosController').getSecurityStatus().always(function () {
  28. Em.run.next(function () {
  29. var addServiceController = router.get('addServiceController');
  30. App.router.get('updateController').set('isWorking', false);
  31. var popup = App.ModalPopup.show({
  32. classNames: ['full-width-modal', 'add-service-wizard-modal'],
  33. header: Em.I18n.t('services.add.header'),
  34. bodyClass: App.AddServiceView.extend({
  35. controllerBinding: 'App.router.addServiceController'
  36. }),
  37. primary: Em.I18n.t('form.cancel'),
  38. showFooter: false,
  39. secondary: null,
  40. onPrimary: function () {
  41. this.hide();
  42. App.router.transitionTo('main.services.index');
  43. },
  44. onClose: function () {
  45. this.set('showCloseButton', false); // prevent user to click "Close" many times
  46. App.router.get('updateController').set('isWorking', true);
  47. App.router.get('updateController').updateServices(function () {
  48. App.router.get('updateController').updateServiceMetric();
  49. });
  50. var exitPath = addServiceController.getDBProperty('onClosePath') || 'main.services.index';
  51. addServiceController.resetOnClose(addServiceController, exitPath);
  52. },
  53. didInsertElement: function () {
  54. this._super();
  55. this.fitHeight();
  56. }
  57. });
  58. addServiceController.set('popup', popup);
  59. var currentClusterStatus = App.clusterStatus.get('value');
  60. if (currentClusterStatus) {
  61. switch (currentClusterStatus.clusterState) {
  62. case 'ADD_SERVICES_DEPLOY_PREP_2' :
  63. addServiceController.setCurrentStep('5');
  64. break;
  65. case 'ADD_SERVICES_INSTALLING_3' :
  66. case 'SERVICE_STARTING_3' :
  67. case 'ADD_SERVICES_INSTALLED_4' :
  68. addServiceController.setCurrentStep('7');
  69. break;
  70. default:
  71. if(App.db.data.AddService.currentStep && App.db.data.AddService.currentStep !== addServiceController.get('currentStep')) {
  72. addServiceController.setCurrentStep(App.db.data.AddService.currentStep);
  73. }
  74. break;
  75. }
  76. }
  77. App.router.get('wizardWatcherController').setUser(addServiceController.get('name'));
  78. router.transitionTo('step' + addServiceController.get('currentStep'));
  79. });
  80. });
  81. });
  82. } else {
  83. Em.run.next(function () {
  84. App.router.transitionTo('main.services');
  85. });
  86. }
  87. },
  88. step1: App.StepRoute.extend({
  89. route: '/step1',
  90. connectOutlets: function (router) {
  91. App.logger.setTimer(consoleMsg.format(1));
  92. var controller = router.get('addServiceController');
  93. controller.setCurrentStep('1');
  94. controller.set('hideBackButton', true);
  95. controller.dataLoading().done(function () {
  96. controller.loadAllPriorSteps().done(function () {
  97. var wizardStep4Controller = router.get('wizardStep4Controller');
  98. wizardStep4Controller.set('wizardController', controller);
  99. controller.loadServiceVersionFromVersionDefinitions().complete(function () {
  100. controller.set('content.services', App.StackService.find().forEach(function (item) {
  101. // user the service version from VersionDefinition
  102. Ember.set(item, 'serviceVersionDisplay', controller.get('serviceVersionsMap')[item.get('serviceName')]);
  103. //item.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[item.get('serviceName')]);
  104. }));
  105. App.logger.logTimerIfMoreThan(consoleMsg.format(1));
  106. controller.connectOutlet('wizardStep4', controller.get('content.services').filterProperty('isInstallable', true));
  107. });
  108. });
  109. });
  110. },
  111. nextTransition: function (router) {
  112. var addServiceController = router.get('addServiceController');
  113. var wizardStep4Controller = router.get('wizardStep4Controller');
  114. addServiceController.saveServices(wizardStep4Controller);
  115. addServiceController.saveClients(wizardStep4Controller);
  116. addServiceController.setDBProperty('masterComponentHosts', undefined);
  117. var wizardStep5Controller = router.get('wizardStep5Controller');
  118. wizardStep5Controller.clearRecommendations(); // Force reload recommendation between steps 1 and 2
  119. addServiceController.setDBProperty('recommendations', undefined);
  120. addServiceController.clearEnhancedConfigs();
  121. router.transitionTo('step2');
  122. }
  123. }),
  124. step2: App.StepRoute.extend({
  125. route: '/step2',
  126. connectOutlets: function (router) {
  127. App.logger.setTimer(consoleMsg.format(2));
  128. var controller = router.get('addServiceController');
  129. var wizardStep2Controller = router.get('wizardStep5Controller');
  130. controller.setCurrentStep('2');
  131. controller.set('hideBackButton', false);
  132. wizardStep2Controller.set('isInitialLayout', true);
  133. controller.dataLoading().done(function () {
  134. controller.loadAllPriorSteps().done(function () {
  135. App.logger.logTimerIfMoreThan(consoleMsg.format(2));
  136. controller.connectOutlet('wizardStep5', controller.get('content'));
  137. });
  138. });
  139. },
  140. backTransition: function (router) {
  141. router.transitionTo('step1');
  142. },
  143. next: function (router) {
  144. var addServiceController = router.get('addServiceController');
  145. var wizardStep5Controller = router.get('wizardStep5Controller');
  146. var wizardStep6Controller = router.get('wizardStep6Controller');
  147. addServiceController.saveMasterComponentHosts(wizardStep5Controller);
  148. addServiceController.setDBProperty('slaveComponentHosts', undefined);
  149. addServiceController.setDBProperty('recommendations', wizardStep5Controller.get('content.recommendations'));
  150. wizardStep6Controller.set('isClientsSet', false);
  151. router.transitionTo('step3');
  152. }
  153. }),
  154. step3: App.StepRoute.extend({
  155. route: '/step3',
  156. connectOutlets: function (router) {
  157. App.logger.setTimer(consoleMsg.format(3));
  158. var controller = router.get('addServiceController');
  159. controller.setCurrentStep('3');
  160. router.get('mainController').isLoading.call(router.get('clusterController'), 'isServiceContentFullyLoaded').done(function () {
  161. controller.loadAllPriorSteps().done(function () {
  162. var wizardStep6Controller = router.get('wizardStep6Controller');
  163. wizardStep6Controller.set('wizardController', controller);
  164. App.logger.logTimerIfMoreThan(consoleMsg.format(3));
  165. controller.connectOutlet('wizardStep6', controller.get('content'));
  166. });
  167. });
  168. },
  169. backTransition: function (router) {
  170. var controller = router.get('addServiceController');
  171. if (!controller.get('content.skipMasterStep')) {
  172. return router.transitionTo('step2');
  173. }
  174. return router.transitionTo('step1');
  175. },
  176. next: function (router) {
  177. App.set('router.nextBtnClickInProgress', true);
  178. var addServiceController = router.get('addServiceController');
  179. var wizardStep6Controller = router.get('wizardStep6Controller');
  180. wizardStep6Controller.callValidation(function () {
  181. wizardStep6Controller.showValidationIssuesAcceptBox(function () {
  182. addServiceController.saveSlaveComponentHosts(wizardStep6Controller);
  183. addServiceController.get('content').set('serviceConfigProperties', null);
  184. addServiceController.setDBProperties({
  185. serviceConfigProperties: null,
  186. groupsToDelete: null,
  187. recommendationsHostGroups: wizardStep6Controller.get('content.recommendationsHostGroups'),
  188. recommendationsConfigs: null
  189. });
  190. router.get('wizardStep7Controller').set('recommendationsConfigs', null);
  191. router.get('wizardStep7Controller').clearAllRecommendations();
  192. addServiceController.setDBProperty('serviceConfigGroups', undefined);
  193. router.transitionTo('step4');
  194. });
  195. });
  196. }
  197. }),
  198. step4: App.StepRoute.extend({
  199. route: '/step4',
  200. connectOutlets: function (router) {
  201. App.logger.setTimer(consoleMsg.format(4));
  202. var controller = router.get('addServiceController');
  203. controller.setCurrentStep('4');
  204. controller.dataLoading().done(function () {
  205. var wizardStep7Controller = router.get('wizardStep7Controller');
  206. controller.loadAllPriorSteps().done(function () {
  207. wizardStep7Controller.getConfigTags();
  208. wizardStep7Controller.set('wizardController', controller);
  209. controller.usersLoading().done(function () {
  210. router.get('mainController').isLoading.call(router.get('clusterController'), 'isClusterNameLoaded').done(function () {
  211. router.get('mainController').isLoading.call(router.get('clusterController'), 'isServiceContentFullyLoaded').done(function () {
  212. App.logger.logTimerIfMoreThan(consoleMsg.format(4));
  213. controller.connectOutlet('wizardStep7', controller.get('content'));
  214. });
  215. });
  216. });
  217. });
  218. });
  219. },
  220. backTransition: function (router) {
  221. var controller = router.get('addServiceController');
  222. if (!controller.get('content.skipSlavesStep')) {
  223. return router.transitionTo('step3');
  224. }
  225. if (!controller.get('content.skipMasterStep')) {
  226. return router.transitionTo('step2');
  227. }
  228. return router.transitionTo('step1');
  229. },
  230. next: function (router) {
  231. var addServiceController = router.get('addServiceController');
  232. var wizardStep7Controller = router.get('wizardStep7Controller');
  233. addServiceController.saveServiceConfigProperties(wizardStep7Controller);
  234. addServiceController.saveServiceConfigGroups(wizardStep7Controller, true);
  235. if (App.get('isKerberosEnabled')) {
  236. addServiceController.clearCachedStepConfigValues(router.get('kerberosWizardStep4Controller'));
  237. router.transitionTo('step5');
  238. return;
  239. }
  240. router.transitionTo('step6');
  241. }
  242. }),
  243. step5: Em.Route.extend({
  244. route: '/step5',
  245. connectOutlets: function (router) {
  246. App.logger.setTimer(consoleMsg.format(5));
  247. var controller = router.get('addServiceController');
  248. controller.setCurrentStep('5');
  249. controller.dataLoading().done(function () {
  250. var kerberosStep4Controller = router.get('kerberosWizardStep4Controller');
  251. controller.loadAllPriorSteps().done(function () {
  252. kerberosStep4Controller.set('wizardController', controller);
  253. App.logger.logTimerIfMoreThan(consoleMsg.format(5));
  254. controller.connectOutlet('kerberosWizardStep4', controller.get('content'));
  255. });
  256. });
  257. },
  258. back: function (router) {
  259. var controller = router.get('addServiceController');
  260. if (!controller.get('content.skipConfigStep')) {
  261. return router.transitionTo('step4');
  262. }
  263. if (!controller.get('content.skipSlavesStep')) {
  264. return router.transitionTo('step3');
  265. }
  266. if (!controller.get('content.skipMasterStep')) {
  267. return router.transitionTo('step2');
  268. }
  269. return router.transitionTo('step1');
  270. },
  271. next: function (router) {
  272. if (App.Cluster.find().objectAt(0).get('isKerberosEnabled')) {
  273. if (router.get('mainAdminKerberosController.isManualKerberos')) {
  274. router.get('wizardStep8Controller').set('wizardController', router.get('addServiceController'));
  275. router.get('wizardStep8Controller').updateKerberosDescriptor(true);
  276. }
  277. router.get('addServiceController').cacheStepConfigValues(router.get('kerberosWizardStep4Controller'));
  278. }
  279. router.transitionTo('step6');
  280. }
  281. }),
  282. step6: App.StepRoute.extend({
  283. route: '/step6',
  284. connectOutlets: function (router, context) {
  285. App.logger.setTimer(consoleMsg.format(6));
  286. var controller = router.get('addServiceController');
  287. controller.setCurrentStep('6');
  288. controller.dataLoading().done(function () {
  289. controller.loadAllPriorSteps().done(function () {
  290. var wizardStep8Controller = router.get('wizardStep8Controller');
  291. wizardStep8Controller.set('wizardController', controller);
  292. App.logger.logTimerIfMoreThan(consoleMsg.format(6));
  293. controller.connectOutlet('wizardStep8', controller.get('content'));
  294. });
  295. });
  296. if(!!App.get('router.mainAdminKerberosController.kdc_type')){
  297. router.get('kerberosWizardStep5Controller').getCSVData(true);
  298. }
  299. },
  300. backTransition: function (router) {
  301. var controller = router.get('addServiceController');
  302. if (App.get('isKerberosEnabled')) {
  303. return router.transitionTo('step5');
  304. }
  305. if (!controller.get('content.skipConfigStep')) {
  306. return router.transitionTo('step4');
  307. }
  308. if (!controller.get('content.skipSlavesStep')) {
  309. return router.transitionTo('step3');
  310. }
  311. if (!controller.get('content.skipMasterStep')) {
  312. return router.transitionTo('step2');
  313. }
  314. return router.transitionTo('step1');
  315. },
  316. next: function (router) {
  317. var addServiceController = router.get('addServiceController');
  318. addServiceController.installServices(function () {
  319. router.get('wizardStep8Controller').set('servicesInstalled', true);
  320. addServiceController.setInfoForStep9();
  321. addServiceController.saveClusterState('ADD_SERVICES_INSTALLING_3');
  322. App.router.transitionTo('step7');
  323. });
  324. }
  325. }),
  326. step7: Em.Route.extend({
  327. route: '/step7',
  328. connectOutlets: function (router, context) {
  329. App.logger.setTimer(consoleMsg.format(7));
  330. var controller = router.get('addServiceController');
  331. controller.setCurrentStep('7');
  332. if (!App.get('testMode')) { //if test mode is ON don't disable prior steps link.
  333. controller.setLowerStepsDisable(7);
  334. }
  335. controller.dataLoading().done(function () {
  336. controller.loadAllPriorSteps().done(function () {
  337. var wizardStep9Controller = router.get('wizardStep9Controller');
  338. wizardStep9Controller.set('wizardController', controller);
  339. App.logger.setTimer(consoleMsg.format(7));
  340. controller.connectOutlet('wizardStep9', controller.get('content'));
  341. });
  342. });
  343. },
  344. back: Em.Router.transitionTo('step6'),
  345. retry: function (router, context) {
  346. var addServiceController = router.get('addServiceController');
  347. var wizardStep9Controller = router.get('wizardStep9Controller');
  348. if (wizardStep9Controller.get('showRetry')) {
  349. if (wizardStep9Controller.get('content.cluster.status') === 'INSTALL FAILED') {
  350. addServiceController.installServices(function () {
  351. addServiceController.setInfoForStep9();
  352. wizardStep9Controller.resetHostsForRetry();
  353. // We need to do recovery based on whether we are in Add Host or Installer wizard
  354. addServiceController.saveClusterState('ADD_SERVICES_INSTALLING_3');
  355. wizardStep9Controller.navigateStep();
  356. });
  357. } else {
  358. wizardStep9Controller.navigateStep();
  359. }
  360. }
  361. },
  362. unroutePath: function () {
  363. return false;
  364. },
  365. next: function (router) {
  366. var addServiceController = router.get('addServiceController');
  367. var wizardStep9Controller = router.get('wizardStep9Controller');
  368. addServiceController.saveInstalledHosts(wizardStep9Controller);
  369. // We need to do recovery based on whether we are in Add Host or Installer wizard
  370. addServiceController.saveClusterState('ADD_SERVICES_INSTALLED_4');
  371. router.transitionTo('step8');
  372. }
  373. }),
  374. step8: Em.Route.extend({
  375. route: '/step8',
  376. connectOutlets: function (router, context) {
  377. var controller = router.get('addServiceController');
  378. controller.setCurrentStep('8');
  379. controller.setLowerStepsDisable(8);
  380. controller.dataLoading().done(function () {
  381. controller.loadAllPriorSteps().done(function () {
  382. controller.connectOutlet('wizardStep10', controller.get('content'));
  383. });
  384. });
  385. },
  386. back: Em.Router.transitionTo('step7'),
  387. complete: function (router, context) {
  388. var addServiceController = router.get('addServiceController');
  389. addServiceController.get('popup').onClose();
  390. }
  391. }),
  392. backToServices: function (router) {
  393. App.router.get('updateController').set('isWorking', true);
  394. router.transitionTo('services');
  395. }
  396. });