add_service_routes.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  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. module.exports = App.WizardRoute.extend({
  21. route: '/service/add',
  22. enter: function (router) {
  23. if (App.isAuthorized('SERVICE.ADD_DELETE_SERVICES')) {
  24. // `getSecurityStatus` call is required to retrieve information related to kerberos type: Manual or automated kerberos
  25. router.get('mainController').isLoading.call(router.get('clusterController'),'isClusterNameLoaded').done(function () {
  26. App.router.get('mainAdminKerberosController').getSecurityStatus().always(function () {
  27. Em.run.next(function () {
  28. var addServiceController = router.get('addServiceController');
  29. App.router.get('updateController').set('isWorking', false);
  30. var popup = App.ModalPopup.show({
  31. classNames: ['full-width-modal', 'add-service-wizard-modal'],
  32. header: Em.I18n.t('services.add.header'),
  33. bodyClass: App.AddServiceView.extend({
  34. controllerBinding: 'App.router.addServiceController'
  35. }),
  36. primary: Em.I18n.t('form.cancel'),
  37. showFooter: false,
  38. secondary: null,
  39. onPrimary: function () {
  40. this.hide();
  41. App.router.transitionTo('main.services.index');
  42. },
  43. onClose: function () {
  44. this.set('showCloseButton', false); // prevent user to click "Close" many times
  45. App.router.get('updateController').set('isWorking', true);
  46. var self = this;
  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.finish();
  52. App.router.get('wizardWatcherController').resetUser();
  53. // We need to do recovery based on whether we are in Add Host or Installer wizard
  54. App.clusterStatus.setClusterStatus({
  55. clusterName: App.router.get('content.cluster.name'),
  56. clusterState: 'DEFAULT'
  57. }, {
  58. alwaysCallback: function () {
  59. self.hide();
  60. App.router.transitionTo(exitPath);
  61. Em.run.next(function() {
  62. location.reload();
  63. });
  64. }
  65. });
  66. },
  67. didInsertElement: function () {
  68. this.fitHeight();
  69. }
  70. });
  71. addServiceController.set('popup', popup);
  72. var currentClusterStatus = App.clusterStatus.get('value');
  73. if (currentClusterStatus) {
  74. switch (currentClusterStatus.clusterState) {
  75. case 'ADD_SERVICES_DEPLOY_PREP_2' :
  76. addServiceController.setCurrentStep('5');
  77. break;
  78. case 'ADD_SERVICES_INSTALLING_3' :
  79. case 'SERVICE_STARTING_3' :
  80. case 'ADD_SERVICES_INSTALLED_4' :
  81. addServiceController.setCurrentStep('7');
  82. break;
  83. default:
  84. if(App.db.data.AddService.currentStep != undefined) {
  85. addServiceController.setCurrentStep(App.db.data.AddService.currentStep);
  86. }
  87. break;
  88. }
  89. }
  90. App.router.get('wizardWatcherController').setUser(addServiceController.get('name'));
  91. router.transitionTo('step' + addServiceController.get('currentStep'));
  92. });
  93. });
  94. });
  95. } else {
  96. Em.run.next(function () {
  97. App.router.transitionTo('main.services');
  98. });
  99. }
  100. },
  101. step1: Em.Route.extend({
  102. route: '/step1',
  103. connectOutlets: function (router) {
  104. var controller = router.get('addServiceController');
  105. controller.setCurrentStep('1');
  106. controller.set('hideBackButton', true);
  107. controller.dataLoading().done(function () {
  108. controller.loadAllPriorSteps().done(function () {
  109. var wizardStep4Controller = router.get('wizardStep4Controller');
  110. wizardStep4Controller.set('wizardController', controller);
  111. controller.connectOutlet('wizardStep4', controller.get('content.services').filterProperty('isInstallable', true));
  112. });
  113. });
  114. },
  115. next: function (router) {
  116. var addServiceController = router.get('addServiceController');
  117. var wizardStep4Controller = router.get('wizardStep4Controller');
  118. addServiceController.saveServices(wizardStep4Controller);
  119. addServiceController.saveClients(wizardStep4Controller);
  120. addServiceController.setDBProperty('masterComponentHosts', undefined);
  121. var wizardStep5Controller = router.get('wizardStep5Controller');
  122. wizardStep5Controller.clearRecommendations(); // Force reload recommendation between steps 1 and 2
  123. addServiceController.setDBProperty('recommendations', undefined);
  124. addServiceController.set('stackConfigsLoaded', false);
  125. App.configsCollection.clearAll();
  126. router.transitionTo('step2');
  127. }
  128. }),
  129. step2: Em.Route.extend({
  130. route: '/step2',
  131. connectOutlets: function (router) {
  132. var controller = router.get('addServiceController');
  133. var wizardStep2Controller = router.get('wizardStep5Controller');
  134. controller.setCurrentStep('2');
  135. controller.set('hideBackButton', false);
  136. wizardStep2Controller.set('isInitialLayout', true);
  137. controller.dataLoading().done(function () {
  138. controller.loadAllPriorSteps().done(function () {
  139. controller.connectOutlet('wizardStep5', controller.get('content'));
  140. });
  141. });
  142. },
  143. back: Em.Router.transitionTo('step1'),
  144. next: function (router) {
  145. var addServiceController = router.get('addServiceController');
  146. var wizardStep5Controller = router.get('wizardStep5Controller');
  147. var wizardStep6Controller = router.get('wizardStep6Controller');
  148. addServiceController.saveMasterComponentHosts(wizardStep5Controller);
  149. addServiceController.setDBProperty('slaveComponentHosts', undefined);
  150. addServiceController.setDBProperty('recommendations', wizardStep5Controller.get('content.recommendations'));
  151. wizardStep6Controller.set('isClientsSet', false);
  152. router.transitionTo('step3');
  153. }
  154. }),
  155. step3: Em.Route.extend({
  156. route: '/step3',
  157. connectOutlets: function (router) {
  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. controller.connectOutlet('wizardStep6', controller.get('content'));
  165. });
  166. });
  167. },
  168. back: function (router) {
  169. var controller = router.get('addServiceController');
  170. if (!controller.get('content.skipMasterStep')) {
  171. router.transitionTo('step2');
  172. } else {
  173. router.transitionTo('step1');
  174. }
  175. },
  176. next: function (router) {
  177. var addServiceController = router.get('addServiceController');
  178. var wizardStep6Controller = router.get('wizardStep6Controller');
  179. wizardStep6Controller.callValidation(function () {
  180. wizardStep6Controller.showValidationIssuesAcceptBox(function () {
  181. addServiceController.saveSlaveComponentHosts(wizardStep6Controller);
  182. addServiceController.get('content').set('serviceConfigProperties', null);
  183. addServiceController.setDBProperties({
  184. serviceConfigProperties: null,
  185. groupsToDelete: null,
  186. recommendationsHostGroups: wizardStep6Controller.get('content.recommendationsHostGroups'),
  187. recommendationsConfigs: null
  188. });
  189. router.get('wizardStep7Controller').set('recommendationsConfigs', null);
  190. router.get('wizardStep7Controller').clearAllRecommendations();
  191. addServiceController.setDBProperty('serviceConfigGroups', undefined);
  192. router.transitionTo('step4');
  193. });
  194. });
  195. }
  196. }),
  197. step4: Em.Route.extend({
  198. route: '/step4',
  199. connectOutlets: function (router) {
  200. var controller = router.get('addServiceController');
  201. controller.setCurrentStep('4');
  202. controller.dataLoading().done(function () {
  203. var wizardStep7Controller = router.get('wizardStep7Controller');
  204. controller.loadAllPriorSteps().done(function () {
  205. wizardStep7Controller.getConfigTags();
  206. wizardStep7Controller.set('wizardController', controller);
  207. controller.usersLoading().done(function () {
  208. router.get('mainController').isLoading.call(router.get('clusterController'), 'isClusterNameLoaded').done(function () {
  209. router.get('mainController').isLoading.call(router.get('clusterController'), 'isServiceContentFullyLoaded').done(function () {
  210. controller.connectOutlet('wizardStep7', controller.get('content'));
  211. });
  212. });
  213. });
  214. });
  215. });
  216. },
  217. back: function (router) {
  218. var controller = router.get('addServiceController');
  219. if (!controller.get('content.skipSlavesStep')) {
  220. router.transitionTo('step3');
  221. } else if (!controller.get('content.skipMasterStep')) {
  222. router.transitionTo('step2');
  223. } else {
  224. router.transitionTo('step1');
  225. }
  226. },
  227. next: function (router) {
  228. var addServiceController = router.get('addServiceController');
  229. var wizardStep7Controller = router.get('wizardStep7Controller');
  230. addServiceController.saveServiceConfigProperties(wizardStep7Controller);
  231. addServiceController.saveServiceConfigGroups(wizardStep7Controller, true);
  232. if (App.get('isKerberosEnabled')) {
  233. addServiceController.clearCachedStepConfigValues(router.get('kerberosWizardStep4Controller'));
  234. router.transitionTo('step5');
  235. return;
  236. }
  237. router.transitionTo('step6');
  238. }
  239. }),
  240. step5: Em.Route.extend({
  241. route: '/step5',
  242. connectOutlets: function (router) {
  243. var controller = router.get('addServiceController');
  244. controller.setCurrentStep('5');
  245. controller.dataLoading().done(function () {
  246. var kerberosStep4Controller = router.get('kerberosWizardStep4Controller');
  247. controller.loadAllPriorSteps().done(function () {
  248. kerberosStep4Controller.set('wizardController', controller);
  249. controller.connectOutlet('kerberosWizardStep4', controller.get('content'));
  250. });
  251. });
  252. },
  253. back: function (router) {
  254. var controller = router.get('addServiceController');
  255. if (!controller.get('content.skipConfigStep')) {
  256. router.transitionTo('step4');
  257. }
  258. else {
  259. if (!controller.get('content.skipSlavesStep')) {
  260. router.transitionTo('step3');
  261. }
  262. else {
  263. if (!controller.get('content.skipMasterStep')) {
  264. router.transitionTo('step2');
  265. }
  266. else {
  267. router.transitionTo('step1');
  268. }
  269. }
  270. }
  271. },
  272. next: function (router) {
  273. if (App.Cluster.find().objectAt(0).get('isKerberosEnabled')) {
  274. if (router.get('mainAdminKerberosController.isManualKerberos')) {
  275. router.get('wizardStep8Controller').updateKerberosDescriptor(true);
  276. } else {
  277. router.get('kerberosWizardStep2Controller').createKerberosAdminSession(router.get('kerberosWizardStep4Controller.stepConfigs')[0].get('configs'));
  278. }
  279. router.get('addServiceController').cacheStepConfigValues(router.get('kerberosWizardStep4Controller'));
  280. }
  281. router.transitionTo('step6');
  282. }
  283. }),
  284. step6: Em.Route.extend({
  285. route: '/step6',
  286. connectOutlets: function (router, context) {
  287. var controller = router.get('addServiceController');
  288. controller.setCurrentStep('6');
  289. controller.dataLoading().done(function () {
  290. controller.loadAllPriorSteps().done(function () {
  291. var wizardStep8Controller = router.get('wizardStep8Controller');
  292. wizardStep8Controller.set('wizardController', controller);
  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. back: function (router) {
  301. var controller = router.get('addServiceController');
  302. if (App.get('isKerberosEnabled')) {
  303. router.transitionTo('step5');
  304. return;
  305. }
  306. if (!controller.get('content.skipConfigStep')) {
  307. router.transitionTo('step4');
  308. }
  309. else {
  310. if (!controller.get('content.skipSlavesStep')) {
  311. router.transitionTo('step3');
  312. }
  313. else {
  314. if (!controller.get('content.skipMasterStep')) {
  315. router.transitionTo('step2');
  316. }
  317. else {
  318. router.transitionTo('step1');
  319. }
  320. }
  321. }
  322. },
  323. next: function (router) {
  324. var addServiceController = router.get('addServiceController');
  325. addServiceController.installServices(function () {
  326. router.get('wizardStep8Controller').set('servicesInstalled', true);
  327. addServiceController.setInfoForStep9();
  328. addServiceController.saveClusterState('ADD_SERVICES_INSTALLING_3');
  329. App.router.transitionTo('step7');
  330. });
  331. }
  332. }),
  333. step7: Em.Route.extend({
  334. route: '/step7',
  335. connectOutlets: function (router, context) {
  336. var controller = router.get('addServiceController');
  337. controller.setCurrentStep('7');
  338. if (!App.get('testMode')) { //if test mode is ON don't disable prior steps link.
  339. controller.setLowerStepsDisable(7);
  340. }
  341. controller.dataLoading().done(function () {
  342. controller.loadAllPriorSteps().done(function () {
  343. var wizardStep9Controller = router.get('wizardStep9Controller');
  344. wizardStep9Controller.set('wizardController', controller);
  345. controller.connectOutlet('wizardStep9', controller.get('content'));
  346. });
  347. });
  348. },
  349. back: Em.Router.transitionTo('step6'),
  350. retry: function (router, context) {
  351. var addServiceController = router.get('addServiceController');
  352. var wizardStep9Controller = router.get('wizardStep9Controller');
  353. if (wizardStep9Controller.get('showRetry')) {
  354. if (wizardStep9Controller.get('content.cluster.status') === 'INSTALL FAILED') {
  355. addServiceController.installServices(function () {
  356. addServiceController.setInfoForStep9();
  357. wizardStep9Controller.resetHostsForRetry();
  358. // We need to do recovery based on whether we are in Add Host or Installer wizard
  359. addServiceController.saveClusterState('ADD_SERVICES_INSTALLING_3');
  360. wizardStep9Controller.navigateStep();
  361. });
  362. } else {
  363. wizardStep9Controller.navigateStep();
  364. }
  365. }
  366. },
  367. unroutePath: function () {
  368. return false;
  369. },
  370. next: function (router) {
  371. var addServiceController = router.get('addServiceController');
  372. var wizardStep9Controller = router.get('wizardStep9Controller');
  373. addServiceController.saveInstalledHosts(wizardStep9Controller);
  374. // We need to do recovery based on whether we are in Add Host or Installer wizard
  375. addServiceController.saveClusterState('ADD_SERVICES_INSTALLED_4');
  376. router.transitionTo('step8');
  377. }
  378. }),
  379. step8: Em.Route.extend({
  380. route: '/step8',
  381. connectOutlets: function (router, context) {
  382. var controller = router.get('addServiceController');
  383. controller.setCurrentStep('8');
  384. controller.setLowerStepsDisable(8);
  385. controller.dataLoading().done(function () {
  386. controller.loadAllPriorSteps().done(function () {
  387. controller.connectOutlet('wizardStep10', controller.get('content'));
  388. });
  389. });
  390. },
  391. back: Em.Router.transitionTo('step7'),
  392. complete: function (router, context) {
  393. var addServiceController = router.get('addServiceController');
  394. addServiceController.get('popup').onClose();
  395. }
  396. }),
  397. backToServices: function (router) {
  398. App.router.get('updateController').set('isWorking', true);
  399. router.transitionTo('services');
  400. }
  401. });