Repository: ambari Updated Branches: refs/heads/branch-feature-AMBARI-14714-ui fe57de61f -> 88dd72661
AMBARI-22239. [Modular Deployment][MVP] Download Products. (Ishan via Jaimin) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/88dd7266 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/88dd7266 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/88dd7266 Branch: refs/heads/branch-feature-AMBARI-14714-ui Commit: 88dd7266118920b879b68241cdda0168585c091f Parents: fe57de6 Author: Jaimin Jetly <[email protected]> Authored: Mon Oct 16 17:21:39 2017 -0700 Committer: Jaimin Jetly <[email protected]> Committed: Mon Oct 16 17:21:39 2017 -0700 ---------------------------------------------------------------------- ambari-web/app/controllers.js | 1 + ambari-web/app/controllers/installer.js | 59 ++++++++-- ambari-web/app/controllers/wizard.js | 4 + .../wizard/downloadProducts_controller.js | 110 +++++++++++++++++++ ambari-web/app/messages.js | 5 + .../app/mixins/wizard/wizard_menu_view.js | 2 + ambari-web/app/router.js | 4 +- ambari-web/app/routes/installer.js | 40 ++++++- ambari-web/app/styles/wizard.less | 32 ++++++ ambari-web/app/templates/installer.hbs | 17 +-- .../app/templates/wizard/downloadProducts.hbs | 97 ++++++++++++++++ ambari-web/app/utils/ajax/ajax.js | 22 ++++ ambari-web/app/views.js | 1 + .../app/views/wizard/downloadProducts_view.js | 35 ++++++ 14 files changed, 405 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/controllers.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js index 8e7e267..82b0f66 100644 --- a/ambari-web/app/controllers.js +++ b/ambari-web/app/controllers.js @@ -150,6 +150,7 @@ require('controllers/wizard/step1_controller'); require('controllers/wizard/step2_controller'); require('controllers/wizard/step3_controller'); require('controllers/wizard/configureDownload_controller'); +require('controllers/wizard/downloadProducts_controller'); require('controllers/wizard/step4_controller'); require('controllers/wizard/step5_controller'); require('controllers/wizard/step6_controller'); http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/controllers/installer.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js index 7afaf87..d4f656b 100644 --- a/ambari-web/app/controllers/installer.js +++ b/ambari-web/app/controllers/installer.js @@ -42,6 +42,7 @@ App.InstallerController = App.WizardController.extend(App.Persist, { "step2", "step3", "configureDownload", + "downloadProducts", "step1", "step4", "step5", @@ -948,7 +949,15 @@ App.InstallerController = App.WizardController.extend(App.Persist, { } } ], - 'step1': [ + 'step2': [ + { + type: 'sync', + callback: function () { + this.load('installOptions'); + } + } + ], + 'configureDownload': [ { type: 'async', callback: function () { @@ -980,23 +989,47 @@ App.InstallerController = App.WizardController.extend(App.Persist, { } } ], - 'step2': [ + 'downloadProducts': [ { - type: 'sync', + type: 'async', callback: function () { - this.load('installOptions'); + var dfd = $.Deferred(); + + this.loadStacks().done(function(stacksLoaded) { + App.router.get('clusterController').loadAmbariProperties().always(function() { + dfd.resolve(stacksLoaded); + }); + }); + + return dfd.promise(); + } + }, + { + type: 'async', + callback: function (stacksLoaded) { + var dfd = $.Deferred(); + + if (!stacksLoaded) { + $.when.apply(this, this.loadStacksVersions()).done(function () { + dfd.resolve(true); + }); + } else { + dfd.resolve(stacksLoaded); + } + + return dfd.promise(); } } ], - 'configureDownload': [ + 'step1': [ { type: 'async', callback: function () { var dfd = $.Deferred(); - this.loadStacks().always(function() { + this.loadStacks().done(function(stacksLoaded) { App.router.get('clusterController').loadAmbariProperties().always(function() { - dfd.resolve(); + dfd.resolve(stacksLoaded); }); }); @@ -1010,9 +1043,7 @@ App.InstallerController = App.WizardController.extend(App.Persist, { if (!stacksLoaded) { $.when.apply(this, this.loadStacksVersions()).done(function () { - Em.run.later('sync', function() { - dfd.resolve(stacksLoaded); - }, 1000); + dfd.resolve(true); }); } else { dfd.resolve(stacksLoaded); @@ -1145,6 +1176,10 @@ App.InstallerController = App.WizardController.extend(App.Persist, { this.gotoStep('configureDownload'); }, + gotoDownloadProducts: function () { + this.gotoStep('downloadProducts'); + }, + isStep0: function () { return this.get('currentStep') == this.getStepIndex('step0'); }.property('currentStep'), @@ -1193,6 +1228,10 @@ App.InstallerController = App.WizardController.extend(App.Persist, { return this.get('currentStep') == this.getStepIndex('configureDownload'); }.property('currentStep'), + isDownloadProducts: function () { + return this.get('currentStep') == this.getStepIndex('downloadProducts'); + }.property('currentStep'), + clearConfigActionComponents: function() { var masterComponentHosts = this.get('content.masterComponentHosts'); var componentsAddedFromConfigAction = this.get('content.componentsFromConfigs'); http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/controllers/wizard.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js index 711ad7b..9db923e 100644 --- a/ambari-web/app/controllers/wizard.js +++ b/ambari-web/app/controllers/wizard.js @@ -383,6 +383,10 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM this.gotoStep("configureDownload"); }, + gotoDownloadProducts: function () { + this.gotoStep("downloadProducts"); + }, + /** * Initialize host status info for step9 */ http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/controllers/wizard/downloadProducts_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard/downloadProducts_controller.js b/ambari-web/app/controllers/wizard/downloadProducts_controller.js new file mode 100644 index 0000000..7e95acf --- /dev/null +++ b/ambari-web/app/controllers/wizard/downloadProducts_controller.js @@ -0,0 +1,110 @@ +/** + * 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'); +var arrayUtils = require('utils/array_utils'); + +App.WizardDownloadProductsController = Em.Controller.extend({ + + name: 'wizardDownloadProductsController', + + selectedMpacks: + [ + { + "mpackName" : "HDP", + "displayName": "Hortonworks Data Platform Core", + "mpackVersion" : "3.0.0", + "registryId" : "1" + }, + { + "mpackName" : "EDW", + "displayName": "Data Warehousing", + "mpackVersion": "1.0.0", + "registryId": "1" + }, + { + "mpackName" : "HDS", + "displayName": "Data Science and Machine Learning", + "mpackVersion" : "3.0.0.0", + "registryId" : "1" + } + ], + + mpacks: [], + + addMpacks: function () { + var self = this; + this.get('selectedMpacks').forEach( function (mpack) { + self.get('mpacks').pushObject(Em.Object.create({ + name: mpack.mpackName, + displayName: mpack.displayName, + version: mpack.mpackVersion, + registryId:mpack.registryId, + inProgress: true, + failed: false, + success: false + })); + }); + }, + + registerMpacks: function () { + var mpacks = this.get('mpacks'); + var self = this; + mpacks.forEach(function (mpack) { + self.downloadMpack(mpack); + }); + }, + + downloadMpack: function (mpack) { + console.log("downloading mpacks"); + App.ajax.send({ + name:'mpack.download', + sender: this, + data: { + name: mpack.name, + version: mpack.version, + registry: mpack.registryId + }, + success: 'downloadMpackSuccess', + error: 'downloadMpackError', + }); + }, + + downloadMpackSuccess: function (data, opt, params) { + console.dir("Mpack " + params.name + " download completed with success code " + data.status); + this.get('mpacks').findProperty('name', params.name).set('inProgress', false); + this.get('mpacks').findProperty('name', params.name).set('success', true); + }, + + downloadMpackError: function (request, ajaxOptions, error, opt, params) { + if(request.status == 409) { + this.downloadMpackSuccess(request, opt, params); + } else { + console.dir("Mpack " + params.name + " download failed with error code " + request.status); + this.get('mpacks').findProperty('name', params.name).set('inProgress', false); + this.get('mpacks').findProperty('name', params.name).set('failed', true); + } + }, + + retryDownload: function (event) { + var mpack = event.context; + mpack.set('inProgress', true); + mpack.set('failed', false); + this.downloadMpack(mpack); + } + +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index 46218b8..f74c560 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -358,6 +358,7 @@ Em.I18n.translations = { 'common.rolling.downgrade': 'Rolling Downgrade', 'common.express.downgrade': 'Express Downgrade', 'common.views': 'Views', + 'common.mpack': 'Management Pack', 'models.alert_instance.tiggered.verbose': "Occurred on {0} <br> Checked on {1}", 'models.alert_definition.triggered.verbose': "Occurred on {0}", @@ -615,6 +616,10 @@ Em.I18n.translations = { 'installer.configureDownload.publicRepo.hoverDesc': 'Management Packs will be downloaded using the internet', 'installer.configureDownload.localRepo.hoverDesc': 'Management Packs will be downloaded from the specified local repository', + 'installer.downloadProducts.header': 'Download Products', + 'installer.downloadProducts.body.title': 'Downloading and validating Management Packs', + 'installer.downloadProducts.body.description': 'Ambari is downloading the Management Packs and validating its contents', + 'installer.step1.header':'Select Version', 'installer.step1.body':'Select the software version and method of delivery for your cluster.', 'installer.step1.repo.body':'Using a Public Repository requires Internet connectivity. Using a Local Repository requires you have configured the software in a repository available in your network.', http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/mixins/wizard/wizard_menu_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mixins/wizard/wizard_menu_view.js b/ambari-web/app/mixins/wizard/wizard_menu_view.js index 644b265..c2959e9 100644 --- a/ambari-web/app/mixins/wizard/wizard_menu_view.js +++ b/ambari-web/app/mixins/wizard/wizard_menu_view.js @@ -47,6 +47,7 @@ App.WizardMenuMixin = Em.Mixin.create({ isStep2Disabled: isStepDisabled("step2"), isStep3Disabled: isStepDisabled("step3"), isConfigureDownloadDisabled: isStepDisabled("configureDownload"), + isDownloadProductsDisabled: isStepDisabled("downloadProducts"), isStep4Disabled: isStepDisabled("step4"), isStep5Disabled: isStepDisabled("step5"), isStep6Disabled: isStepDisabled("step6"), @@ -60,6 +61,7 @@ App.WizardMenuMixin = Em.Mixin.create({ isStep2Completed: isStepCompleted("step2"), isStep3Completed: isStepCompleted("step3"), isConfigureDownloadCompleted: isStepCompleted("configureDownload"), + isDownloadProductsCompleted: isStepCompleted("downloadProducts"), isStep4Completed: isStepCompleted("step4"), isStep5Completed: isStepCompleted("step5"), isStep6Completed: isStepCompleted("step6"), http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/router.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js index 9c466c7..c2d2a75 100644 --- a/ambari-web/app/router.js +++ b/ambari-web/app/router.js @@ -43,7 +43,9 @@ App.WizardRoute = Em.Route.extend({ gotoStep10: Em.Router.transitionTo('step10'), - gotoStepConfigureDownload: Em.Router.transitionTo('configureDownload'), + gotoConfigureDownload: Em.Router.transitionTo('configureDownload'), + + gotoDownloadProducts: Em.Router.transitionTo('configureDownload'), isRoutable: function() { return typeof this.get('route') === 'string' && App.router.get('loggedIn'); http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/routes/installer.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js index deb76e1..5c3d806 100644 --- a/ambari-web/app/routes/installer.js +++ b/ambari-web/app/routes/installer.js @@ -160,7 +160,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, { console.timeEnd('step1 connectOutlets'); }); }, - back: Em.Router.transitionTo('step3'), + back: Em.Router.transitionTo('downloadProducts'), next: function (router) { console.time('step1 next'); if(router.get('btnClickInProgress')) { @@ -311,15 +311,45 @@ module.exports = Em.Route.extend(App.RouterRedirections, { if(router.get('btnClickInProgress')) { return; } - var configureDownloadController = router.get('configureDownloadController'); - var installerController = router.get('installerController'); App.set('router.nextBtnClickInProgress', true); - installerController.setDBProperty('service', undefined); - router.transitionTo('step1'); + router.transitionTo('downloadProducts'); console.timeEnd('configureDownload next'); } }), + downloadProducts: App.StepRoute.extend({ + route: '/downloadProducts', + connectOutlets: function (router) { + console.time('downloadProducts connectOutlets'); + var self = this; + var controller = router.get('installerController'); + var configureDownloadController = router.get('wizardDownloadProductsController'); + var newStepIndex = controller.getStepIndex('downloadProducts'); + router.setNavigationFlow(newStepIndex); + controller.setCurrentStep('downloadProducts'); + controller.loadAllPriorSteps().done(function () { + configureDownloadController.set('wizardController', controller); + controller.connectOutlet('wizardDownloadProducts', controller.get('content')); + self.scrollTop(); + console.timeEnd('downloadProducts connectOutlets'); + }); + }, + + backTransition: function (router) { + router.transitionTo('configureDownload'); + }, + + next: function (router) { + console.time('downloadProducts next'); + if(router.get('btnClickInProgress')) { + return; + } + App.set('router.nextBtnClickInProgress', true); + router.transitionTo('step1'); + console.timeEnd('downloadProducts next'); + } + }), + step4: App.StepRoute.extend({ route: '/step4', connectOutlets: function (router, context) { http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/styles/wizard.less ---------------------------------------------------------------------- diff --git a/ambari-web/app/styles/wizard.less b/ambari-web/app/styles/wizard.less index 89ae562..4962123 100644 --- a/ambari-web/app/styles/wizard.less +++ b/ambari-web/app/styles/wizard.less @@ -566,6 +566,38 @@ max-height: 440px; } +#download-step-content { + .panel-body .version-contents-body { + padding: 10px 0px 20px 0; + tbody > tr { + height:40px; + td { + vertical-align: middle; + padding: 6px; + button { + padding: 2px 8px; + font-size: 12px; + line-height: 1.5; + height: 25px; + } + } + .download-status { + font-size: 11px; + .progress-wrapper { + padding:0px; + .progress { + height:8px; + margin:5px 5px 5px 0; + .progress-bar { + width:100%; + } + } + } + } + } + } +} + #select-stack .stack-version-selection{ .select-version-label { padding: 5px 25px; http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/templates/installer.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/installer.hbs b/ambari-web/app/templates/installer.hbs index fec466b..20cf109 100644 --- a/ambari-web/app/templates/installer.hbs +++ b/ambari-web/app/templates/installer.hbs @@ -29,14 +29,15 @@ <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep2:active view.isStep2Disabled:disabled view.isStep2Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep2 target="controller"}}><i class="step-marker"><span class="step-index">1</span></i><p class="step-name">{{t installer.step2.header}}</p></a></li> <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep3:active view.isStep3Disabled:disabled view.isStep3Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep3 target="controller"}}><i class="step-marker"><span class="step-index">2</span></i><p class="step-name">{{t installer.step3.header}}</p></a></li> <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isConfigureDownload:active view.isConfigureDownloadDisabled:disabled view.isConfigureDownloadCompleted:completed"}}><a href="javascript:void(null);" {{action gotoConfigureDownload target="controller"}}><i class="step-marker"><span class="step-index">3</span></i><p class="step-name">{{t installer.configureDownload.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep1:active view.isStep1Disabled:disabled view.isStep1Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep1 target="controller"}}><i class="step-marker"><span class="step-index">4</span></i><p class="step-name">{{t installer.step1.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep4:active view.isStep4Disabled:disabled view.isStep4Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep4 target="controller"}}><i class="step-marker"><span class="step-index">5</span></i><p class="step-name">{{t installer.step4.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep5:active view.isStep5Disabled:disabled view.isStep5Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep5 target="controller"}}><i class="step-marker"><span class="step-index">6</span></i><p class="step-name">{{t installer.step5.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep6:active view.isStep6Disabled:disabled view.isStep6Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep6 target="controller"}}><i class="step-marker"><span class="step-index">7</span></i><p class="step-name">{{t installer.step6.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep7:active view.isStep7Disabled:disabled view.isStep7Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep7 target="controller"}}><i class="step-marker"><span class="step-index">8</span></i><p class="step-name">{{t installer.step7.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep8:active view.isStep8Disabled:disabled view.isStep8Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep8 target="controller"}}><i class="step-marker"><span class="step-index">9</span></i><p class="step-name">{{t installer.step8.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep9:active view.isStep9Disabled:disabled view.isStep9Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep9 target="controller"}}><i class="step-marker"><span class="step-index">10</span></i><p class="step-name">{{t installer.step9.header}}</p></a></li> - <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep10:active view.isStep10Disabled:disabled view.isStep10Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep10 target="controller"}}><i class="step-marker"><span class="step-index">11</span></i><p class="step-name">{{t installer.step10.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isDownloadProducts:active view.isDownloadProductsDisabled:disabled view.isDownloadProductsCompleted:completed"}}><a href="javascript:void(null);" {{action gotoDownloadProducts target="controller"}}><i class="step-marker"><span class="step-index">4</span></i><p class="step-name">{{t installer.downloadProducts.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep1:active view.isStep1Disabled:disabled view.isStep1Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep1 target="controller"}}><i class="step-marker"><span class="step-index">5</span></i><p class="step-name">{{t installer.step1.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep4:active view.isStep4Disabled:disabled view.isStep4Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep4 target="controller"}}><i class="step-marker"><span class="step-index">6</span></i><p class="step-name">{{t installer.step4.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep5:active view.isStep5Disabled:disabled view.isStep5Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep5 target="controller"}}><i class="step-marker"><span class="step-index">7</span></i><p class="step-name">{{t installer.step5.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep6:active view.isStep6Disabled:disabled view.isStep6Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep6 target="controller"}}><i class="step-marker"><span class="step-index">8</span></i><p class="step-name">{{t installer.step6.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep7:active view.isStep7Disabled:disabled view.isStep7Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep7 target="controller"}}><i class="step-marker"><span class="step-index">9</span></i><p class="step-name">{{t installer.step7.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep8:active view.isStep8Disabled:disabled view.isStep8Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep8 target="controller"}}><i class="step-marker"><span class="step-index">10</span></i><p class="step-name">{{t installer.step8.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep9:active view.isStep9Disabled:disabled view.isStep9Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep9 target="controller"}}><i class="step-marker"><span class="step-index">11</span></i><p class="step-name">{{t installer.step9.header}}</p></a></li> + <li {{QAAttr "wizard-nav-step"}} {{bindAttr class="isStep10:active view.isStep10Disabled:disabled view.isStep10Completed:completed"}}><a href="javascript:void(null);" {{action gotoStep10 target="controller"}}><i class="step-marker"><span class="step-index">12</span></i><p class="step-name">{{t installer.step10.header}}</p></a></li> </ul> </div> {{! outlet includes body and footer }} http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/templates/wizard/downloadProducts.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/wizard/downloadProducts.hbs b/ambari-web/app/templates/wizard/downloadProducts.hbs new file mode 100644 index 0000000..0cb383e --- /dev/null +++ b/ambari-web/app/templates/wizard/downloadProducts.hbs @@ -0,0 +1,97 @@ +{{! +* 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="download-step-content" class="wizard-content col-md-9" {{QAAttr "select-stack-page"}}> + <h4 class="step-title">{{t installer.downloadProducts.header}}</h4> + + <div class="panel panel-default"> + <div class="panel-body"> + {{#if App.router.nextBtnClickInProgress}} + {{view App.SpinnerView}} + {{else}} + <div class="panel panel-default"> + <div class="step-title"> + <p>{{t installer.downloadProducts.body.title}}</p> + </div> + <p class="step-description">{{t installer.downloadProducts.body.description}}</p> + + <div class="panel-body version-contents-body"> + <table class="table table-hover"> + <thead> + <tr> + <th class="col-sm-4">{{t common.mpack}}</th> + <th class="col-sm-4">{{t common.status}}</th> + <th class="col-sm-3">{{t common.actions}}</th> + </tr> + </thead> + <tbody> + {{#each mpack in mpacks}} + <tr> + <td class="col-sm-4">{{mpack.displayName}}</td> + <td class="download-status col-sm-4"> + {{#if mpack.inProgress}} + <div class="progress-wrapper col-sm-9"> + <div class="progress"> + <div class="active progress-bar-striped progress-bar"}}></div> + </div> + </div> + {{else}} + {{#if mpack.success}} + <i class="glyphicon glyphicon-ok"></i> + {{t common.download}} {{t common.complete}} + {{else}} + <i class="glyphicon glyphicon-remove"></i> + {{t common.download}} {{t common.failed}} + {{/if}} + {{/if}} + </td> + <td class="col-sm-3"> + {{#if mpack.failed}} + <button type="button" class="btn btn-default btn-xs" {{action retryDownload mpack target="controller"}}> + <i class="icon icon-repeat"></i> + {{t common.retry}} + </button> + {{/if}} + </td> + </tr> + {{/each}} + </tbody> + </table> + </div> + </div> + {{/if}} + + </div> + </div> + +</div> + +<div class="wizard-footer col-md-12"> + <button type="button" class="btn btn-default pull-left installer-back-btn" {{bindAttr disabled="App.router.btnClickInProgress"}} {{action back}} {{QAAttr "wizard-back"}}> + ← {{t common.back}} + {{#if App.router.backBtnClickInProgress}} + {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}} + {{/if}} + </button> + <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="view.isSubmitDisabled"}} {{action next}} {{QAAttr "wizard-next"}}> + {{#if App.router.nextBtnClickInProgress}} + {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}} + {{/if}} + {{t common.next}} → + </button> +</div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/utils/ajax/ajax.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js index 3dfbf1f..b6cae9b 100644 --- a/ambari-web/app/utils/ajax/ajax.js +++ b/ambari-web/app/utils/ajax/ajax.js @@ -3062,7 +3062,29 @@ var urls = { 'service.components.load': { real: '/clusters/{clusterName}/servicegroups/{defaultServiceGroupName}/services?fields=components&minimal_response=true', mock: '/data/services/components.json' + }, + + /** Mpack related APIs */ + + 'mpack.download': { + 'real': '/mpacks', + 'format': function (data) { + return { + type: 'POST', + data: JSON.stringify({ + Body: { + "MpackInfo" : { + "mpack_name" : data.name, + "mpack_version" : data.version, + "registry_id" : data.registry + } + } + }) + }; + } } + + }; /** * Replace data-placeholders to its values http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/views.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js index b8fd199..6924d8c 100644 --- a/ambari-web/app/views.js +++ b/ambari-web/app/views.js @@ -368,6 +368,7 @@ require('views/wizard/step3/hostLogPopupBody_view'); require('views/wizard/step3/hostWarningPopupBody_view'); require('views/wizard/step3/hostWarningPopupFooter_view'); require('views/wizard/configureDownload_view'); +require('views/wizard/downloadProducts_view'); require('views/wizard/step4_view'); require('views/wizard/step5_view'); require('views/wizard/step6_view'); http://git-wip-us.apache.org/repos/asf/ambari/blob/88dd7266/ambari-web/app/views/wizard/downloadProducts_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/wizard/downloadProducts_view.js b/ambari-web/app/views/wizard/downloadProducts_view.js new file mode 100644 index 0000000..b70275a --- /dev/null +++ b/ambari-web/app/views/wizard/downloadProducts_view.js @@ -0,0 +1,35 @@ +/** + * 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.WizardDownloadProductsView = Em.View.extend({ + + templateName: require('templates/wizard/downloadProducts'), + + didInsertElement: function () { + this._super(); + var controller = this.get('controller'); + controller.addMpacks(); + controller.registerMpacks(); + }, + + willDestroyElement: function () { + this.get('controller.mpacks').clear(); + } + +}); \ No newline at end of file
