AMBARI-15724 Integrate Version Registration in Select Stack Page (zhewang)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0b77adc2 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0b77adc2 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0b77adc2 Branch: refs/heads/trunk Commit: 0b77adc2f79b4d2b9561bfb165dbc671c897834a Parents: 3a5ae33 Author: Zhe (Joe) Wang <[email protected]> Authored: Fri Apr 29 15:52:49 2016 -0700 Committer: Zhe (Joe) Wang <[email protected]> Committed: Fri Apr 29 15:52:49 2016 -0700 ---------------------------------------------------------------------- .../stackVersions/StackVersionsCreateCtrl.js | 159 ++++- .../stackVersions/StackVersionsEditCtrl.js | 10 + .../ui/admin-web/app/scripts/i18n.config.js | 4 + .../ui/admin-web/app/scripts/services/Stack.js | 43 +- .../resources/ui/admin-web/app/styles/main.css | 68 +- .../views/stackVersions/stackVersionPage.html | 91 ++- .../wizard/stack/HDP_version_definitions.json | 556 +++++++++++++++ ambari-web/app/controllers/installer.js | 344 +++++++++- .../main/admin/stack_and_upgrade_controller.js | 40 +- .../controllers/main/service/add_controller.js | 8 +- ambari-web/app/controllers/wizard.js | 29 + .../app/controllers/wizard/step1_controller.js | 85 ++- .../app/controllers/wizard/step8_controller.js | 34 +- .../app/mappers/repository_version_mapper.js | 13 + ambari-web/app/mappers/stack_mapper.js | 53 +- ambari-web/app/messages.js | 32 +- ambari-web/app/models/stack.js | 51 +- .../models/stack_version/repository_version.js | 1 + ambari-web/app/routes/add_service_routes.js | 9 +- ambari-web/app/styles/application.less | 155 +++++ .../admin/stack_upgrade/edit_repositories.hbs | 2 +- .../main/admin/stack_upgrade/services.hbs | 2 +- .../main/admin/stack_upgrade/versions.hbs | 10 +- ambari-web/app/templates/wizard/step1.hbs | 259 ++++--- ambari-web/app/templates/wizard/step4.hbs | 2 +- ambari-web/app/utils/ajax/ajax.js | 76 +++ ambari-web/app/utils/db.js | 16 + .../main/admin/stack_upgrade/services_view.js | 11 +- .../stack_upgrade/upgrade_version_box_view.js | 2 +- ambari-web/app/views/wizard/step1_view.js | 353 ++++++---- ambari-web/test/controllers/installer_test.js | 27 +- .../admin/stack_and_upgrade_controller_test.js | 5 +- .../test/controllers/wizard/step8_test.js | 47 +- ambari-web/test/mappers/stack_mapper_test.js | 674 ++++++++++++++----- .../admin/stack_upgrade/services_view_test.js | 25 +- ambari-web/test/views/wizard/step1_view_test.js | 311 +-------- 36 files changed, 2677 insertions(+), 930 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsCreateCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsCreateCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsCreateCtrl.js index 5596a7f..e6748b8 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsCreateCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsCreateCtrl.js @@ -36,14 +36,22 @@ angular.module('ambariAdminConsole') display_name: '' }; - $scope.option1 = { + $scope.publicOption = { index: 1, + hasError: false + }; + $scope.localOption = { + index: 2, + hasError: false + }; + $scope.option1 = { + index: 3, displayName: $t('versions.uploadFile'), file: '', hasError: false }; $scope.option2 = { - index: 2, + index: 4, displayName: $t('versions.enterURL'), url: $t('versions.defaultURL'), hasError: false @@ -51,20 +59,42 @@ angular.module('ambariAdminConsole') $scope.selectedOption = { index: 1 }; + $scope.selectedLocalOption = { + index: 3 + }; /** * User can select ONLY one option to upload version definition file */ + $scope.togglePublicLocalOptionSelect = function () { + $scope.option1.hasError = false; + $scope.option2.hasError = false; + }; $scope.toggleOptionSelect = function () { $scope.option1.hasError = false; $scope.option2.hasError = false; }; + $scope.togglePublicLocalOptionSelect = function () { + if ($scope.selectedOption.index == $scope.publicOption.index && $scope.selectedPublicRepoVersion) { + $scope.setVersionSelected($scope.selectedPublicRepoVersion); + } + }; $scope.clearOptionsError = function () { $scope.option1.hasError = false; $scope.option2.hasError = false; }; $scope.readInfoButtonDisabled = function () { - return $scope.option1.index == $scope.selectedOption.index ? !$scope.option1.file : !$scope.option2.url; + if ($scope.selectedOption.index == $scope.publicOption.index) return true; + return $scope.option1.index == $scope.selectedLocalOption.index ? !$scope.option1.file : !$scope.option2.url; + }; + $scope.isAddOsButtonDisabled = function () { + var selectedCnt = 0; + angular.forEach($scope.osList, function (os) { + if (os.selected) { + selectedCnt ++; + } + }); + return $scope.osList.length == selectedCnt; }; $scope.allInfoCategoriesBlank = function () { @@ -92,14 +122,14 @@ angular.module('ambariAdminConsole') $scope.readVersionInfo = function(){ var data = {}; var isXMLdata = false; - if ($scope.option2.index == $scope.selectedOption.index) { + if ($scope.option2.index == $scope.selectedLocalOption.index) { var url = $scope.option2.url; data = { "VersionDefinition": { "version_url": url } }; - } else if ($scope.option1.index == $scope.selectedOption.index) { + } else if ($scope.option1.index == $scope.selectedLocalOption.index) { isXMLdata = true; // load from file browser data = $scope.option1.file; @@ -109,34 +139,7 @@ angular.module('ambariAdminConsole') if (versionInfo.id && versionInfo.stackName && versionInfo.stackVersion) { Stack.getRepo(versionInfo.id, versionInfo.stackName, versionInfo.stackVersion) .then(function (response) { - $scope.id = response.id; - $scope.isPatch = response.type == 'PATCH'; - $scope.stackNameVersion = response.stackNameVersion || $t('common.NA'); - $scope.displayName = response.displayName || $t('common.NA'); - $scope.version = response.version || $t('common.NA'); - $scope.actualVersion = response.actualVersion || $t('common.NA'); - $scope.updateObj = response.updateObj; - $scope.upgradeStack = { - stack_name: response.stackName, - stack_version: response.stackVersion, - display_name: response.displayName - }; - $scope.services = response.services || []; - //save default values of repos to check if they were changed - $scope.defaulfOSRepos = {}; - response.updateObj.operating_systems.forEach(function(os) { - $scope.defaulfOSRepos[os.OperatingSystems.os_type] = { - defaultBaseUrl: os.repositories[0].Repositories.base_url, - defaultUtilsUrl: os.repositories[1].Repositories.base_url - }; - }); - $scope.repoVersionFullName = response.repoVersionFullName; - angular.forEach(response.osList, function (os) { - os.selected = true; - }); - $scope.osList = response.osList; - // load supported os type base on stack version - $scope.afterStackVersionRead(); + $scope.setVersionSelected(response); }); } }) @@ -233,7 +236,41 @@ angular.module('ambariAdminConsole') updateRepoUrl = true; } }); - $scope.updateRepoVersions(); + if ($scope.isPublicVersion) { + return Stack.validateBaseUrls($scope.skipValidation, $scope.osList, $scope.upgradeStack).then(function (invalidUrls) { + if (invalidUrls.length === 0) { + var data = { + "VersionDefinition": { + "available": $scope.id + } + }; + var repoUpdate = { + operating_systems: $scope.updateObj.operating_systems + }; + Stack.postVersionDefinitionFile(false, data).then(function (versionInfo) { + if (versionInfo.id && versionInfo.stackName && versionInfo.stackVersion) { + Stack.updateRepo(versionInfo.stackName, versionInfo.stackVersion, versionInfo.id, repoUpdate).then(function () { + Alert.success($t('versions.alerts.versionEdited', { + stackName: $scope.upgradeStack.stack_name, + versionName: $scope.actualVersion, + displayName: $scope.displayName + })); + $location.path('/stackVersions'); + }).catch(function (data) { + Alert.error($t('versions.alerts.versionUpdateError'), data.message); + }); + } + }) + .catch(function (data) { + Alert.error($t('versions.alerts.readVersionInfoError'), data.message); + }); + } else { + Stack.highlightInvalidUrls(invalidUrls); + } + }); + } else { + $scope.updateRepoVersions(); + } }; $scope.updateRepoVersions = function () { @@ -247,8 +284,8 @@ angular.module('ambariAdminConsole') })); $location.path('/stackVersions'); }).catch(function (data) { - Alert.error($t('versions.alerts.versionUpdateError'), data.message); - }); + Alert.error($t('versions.alerts.versionUpdateError'), data.message); + }); } else { Stack.highlightInvalidUrls(invalidUrls); } @@ -291,4 +328,54 @@ angular.module('ambariAdminConsole') } return hasErrors; }; + + + $scope.setVersionSelected = function (version) { + var response = version; + $scope.id = response.id; + $scope.isPatch = response.type == 'PATCH'; + $scope.stackNameVersion = response.stackNameVersion || $t('common.NA'); + $scope.displayName = response.displayName || $t('common.NA'); + $scope.actualVersion = response.repositoryVersion || response.actualVersion || $t('common.NA'); + $scope.isPublicVersion = response.showAvailable == true; + $scope.updateObj = response.updateObj; + $scope.upgradeStack = { + stack_name: response.stackName, + stack_version: response.stackVersion, + display_name: response.displayName || $t('common.NA') + }; + $scope.services = response.services || []; + //save default values of repos to check if they were changed + $scope.defaulfOSRepos = {}; + response.updateObj.operating_systems.forEach(function(os) { + $scope.defaulfOSRepos[os.OperatingSystems.os_type] = { + defaultBaseUrl: os.repositories[0].Repositories.base_url, + defaultUtilsUrl: os.repositories[1].Repositories.base_url + }; + }); + $scope.repoVersionFullName = response.repoVersionFullName; + angular.forEach(response.osList, function (os) { + os.selected = true; + }); + $scope.osList = response.osList; + // load supported os type base on stack version + $scope.afterStackVersionRead(); + }; + + $scope.selectRepoInList = function() { + $scope.selectedPublicRepoVersion = this.version; + $scope.setVersionSelected(this.version); + }; + + $scope.fetchPublicVersions = function () { + return Stack.allPublicStackVersions().then(function (versions) { + if (versions && versions.length) { + $scope.selectedPublicRepoVersion = versions[0]; + $scope.setVersionSelected(versions[0]); + $scope.availableStackRepoList = versions.length == 1 ? [] : versions; + } + }); + }; + + $scope.fetchPublicVersions(); }]); http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsEditCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsEditCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsEditCtrl.js index 3da088b..8246c2b 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsEditCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsEditCtrl.js @@ -236,6 +236,16 @@ angular.module('ambariAdminConsole') } }; + $scope.isAddOsButtonDisabled = function () { + var selectedCnt = 0; + angular.forEach($scope.osList, function (os) { + if (os.selected) { + selectedCnt ++; + } + }); + return $scope.osList.length == selectedCnt; + }; + $scope.hasNotDeletedRepo = function () { //check if any repository has been selected for deleting //if yes, drop down should be displayed http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-admin/src/main/resources/ui/admin-web/app/scripts/i18n.config.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/i18n.config.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/i18n.config.js index 3e475d9..6a927b6 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/i18n.config.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/i18n.config.js @@ -335,6 +335,10 @@ angular.module('ambariAdminConsole') 'current': 'Current', 'inUse': 'In Use', 'installed': 'Installed', + 'usePublic': "Use Public Repository", + 'selectVersion': "Select Version", + 'selectVersionEmpty': "No other repositories", + 'useLocal': "Use Local Repository", 'uploadFile': 'Upload Version Definition File', 'enterURL': 'Version Definition File URL', 'defaultURL': 'https://', http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Stack.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Stack.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Stack.js index fd3a8ba..f406b1a 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Stack.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Stack.js @@ -80,6 +80,44 @@ angular.module('ambariAdminConsole') return deferred.promise; }, + allPublicStackVersions: function() { + var url = '/version_definitions?fields=operating_systems/repositories/Repositories/*,VersionDefinition/stack_services,VersionDefinition/repository_version' + + '&VersionDefinition/show_available=true&VersionDefinition/stack_name=HDP'; + var deferred = $q.defer(); + $http.get(Settings.baseUrl + url, {mock: 'version/versions.json'}) + .success(function (data) { + var versions = []; + angular.forEach(data.items, function(version) { + var versionObj = { + id: version.VersionDefinition.id, + stackName: version.VersionDefinition.stack_name, + stackVersion: version.VersionDefinition.stack_version, + stackNameVersion: version.VersionDefinition.stack_name + '-' + version.VersionDefinition.stack_version, + displayName: version.VersionDefinition.stack_name + '-' + version.VersionDefinition.repository_version.split('-')[0], //HDP-2.3.4.0 + displayNameFull: version.VersionDefinition.stack_name + '-' + version.VersionDefinition.repository_version, //HDP-2.3.4.0-23 + repositoryVersion: version.VersionDefinition.repository_version, + showAvailable: version.VersionDefinition.show_available, + osList: version.operating_systems, + updateObj: version + }; + var services = []; + angular.forEach(version.VersionDefinition.stack_services, function (service) { + services.push({ + name: service.name, + version: service.versions[0] + }); + }); + versionObj.services = services; + versions.push(versionObj); + }); + deferred.resolve(versions) + }) + .error(function (data) { + deferred.reject(data); + }); + return deferred.promise; + }, + allRepos: function (filter, pagination) { var versionFilter = filter.version; var url = '/stacks?fields=versions/repository_versions/RepositoryVersions'; @@ -183,11 +221,10 @@ angular.module('ambariAdminConsole') updateObj: data.repository_versions[0] }; var services = []; - angular.forEach(data.repository_versions[0].RepositoryVersions.services, function (service) { + angular.forEach(data.repository_versions[0].RepositoryVersions.stack_services, function (service) { services.push({ name: service.name, - version: service.versions[0].version, - components: service.versions[0].components + version: service.versions[0] }); }); response.services = services; http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css b/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css index b4e70f6..167e661 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css +++ b/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css @@ -1451,43 +1451,73 @@ thead.view-permission-header > tr > th { color: white; } #upload-definition-file-panel { - background-color: #f9f9f9; - padding: 20px 10px 5px 10px; + padding: 5px 10px 5px 10px; margin-bottom: 15px; } -#upload-definition-file-panel .introduction-info { - padding: 10px 10px 15px 15px; - font-size: 15px; - line-height: 1.7; + +#upload-definition-file-panel .option-radio { + padding: 15px 5px; + font-weight: bold;; +} +#upload-definition-file-panel .stack-version-selection { + padding-left: 25px; + } +#upload-definition-file-panel .stack-version-selection .select-version-label { + padding-top: 4px; +} +#upload-definition-file-panel .stack-version-selection .select-version-label.disabled { + color: #999999; +} +#upload-definition-file-panel .dropdown-menu li a { + cursor: pointer; +} +.register-version-options { + padding-left: 25px; } .register-version-options .read-info-button { margin-top: 10px; } - .register-version-options .option-radio-button { padding-top: 5px; } - +.register-version-options .option-radio-button label { + font-weight: normal; +} .register-version-options .choose-file-input { padding-top: 6px; padding-bottom: 20px; } - .register-version-form .details-panel .patch-icon { color: #ff4500; } .register-version-form .deregister-button { - margin-top: -23px; + margin-top: -23px; } .register-version-form .version-info { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.register-version-form .details-panel .version-info-section { + margin-top: 10px; +} +.register-version-form .details-panel .version-contents-section { + max-height: 200px; + overflow: auto; + border: 1px solid #ddd; + padding: 8px 25px; + margin: 8px; +} + +.register-version-form .details-panel .control-label { + text-align: left; + padding: 7px 2px; + font-weight: normal; } -.register-version-form .contents-panel .version-contents-body { - max-height: 150px; - overflow: auto; +.register-version-form .details-panel .version-info { + font-weight: bold; + padding: 7px 2px; } .register-version-form .repos-panel .remove-icon { @@ -1504,6 +1534,12 @@ thead.view-permission-header > tr > th { .register-version-form .repos-panel .os-type-label { margin-top: 27px;; } +.register-version-form .dropdown-menu li a { + cursor: pointer; +} +.register-version-form .repos-panel .checkbox { + margin: 0px 5px; +} #stack-versions .no-version-alert { text-align: center; http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/stackVersionPage.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/stackVersionPage.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/stackVersionPage.html index 8e9d3e2..26068a2 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/stackVersionPage.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/stackVersionPage.html @@ -32,27 +32,56 @@ </div> <hr> + + <div id="upload-definition-file-panel" ng-if="createController"> - <div class="introduction-info hide-soft" ng-class="{'visible': allInfoCategoriesBlank()}" role="alert">{{'versions.introduction' | translate}}</div> + + <div class="col-sm-12 option-radio clearfix"> + <input type="radio" ng-model="selectedOption.index" value="1" ng-change="togglePublicLocalOptionSelect()"> {{'versions.usePublic' | translate}} + </div> + + <div class="clearfix stack-version-selection"> + <div class="col-sm-3 select-version-label" ng-class="{'disabled': selectedOption.index==2}"> + {{'versions.selectVersion' | translate}} + </div> + <div class="col-sm-7 right-stack-info"> + <div class="repo-list-button btn-group" dropdown> + <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" ng-disabled="(selectedOption.index==2)">{{selectedPublicRepoVersion.displayNameFull}} <span class="caret"></span></button> + <ul class="dropdown-menu available-repos-dropdown" ng-if="availableStackRepoList"> + <li ng-repeat="version in availableStackRepoList" class="" ng-if="version.displayNameFull !== selectedPublicRepoVersion.displayNameFull"> + <a ng-click="selectRepoInList()">{{version.displayNameFull}}</a></li> + </ul> + <ul class="dropdown-menu available-repos-dropdown" ng-if="!availableStackRepoList || availableStackRepoList.length == 0"> + <li class="disabled"><a>{{'versions.selectVersionEmpty' | translate}}</a></li> + </ul> + </div> + </div> + </div> + + <div class="col-sm-12 option-radio clearfix"> + <input type="radio" ng-model="selectedOption.index" value="2" ng-change="togglePublicLocalOptionSelect()"> {{'versions.useLocal' | translate}} + </div> + <div class="clearfix register-version-options"> <div class="col-sm-5 option-radio-button"> <label class="option-label"> - <input type="radio" ng-model="selectedOption.index" value="1" ng-change="toggleOptionSelect()"> {{'versions.uploadFile' | translate}} + <input type="radio" ng-model="selectedLocalOption.index" value="3" ng-change="toggleOptionSelect()" ng-disabled="(selectedOption.index==1)"> {{'versions.uploadFile' | translate}} </label> </div> <div class="col-sm-7"> - <input type="file" class="choose-file-input" ng-model="option1.file" onchange="angular.element(this).scope().onFileSelect(this)"/> + <input type="file" class="choose-file-input" ng-model="option1.file" ng-disabled="(selectedOption.index==1) || !(selectedLocalOption.index==3)" + onchange="angular.element(this).scope().onFileSelect(this)"/> </div> </div> <div class="clearfix register-version-options bottom-margin"> <div class="col-sm-5 option-radio-button"> <label class="option-label"> - <input type="radio" ng-model="selectedOption.index" value="2" ng-change="toggleOptionSelect()"> {{'versions.enterURL' | translate}} + <input type="radio" ng-model="selectedLocalOption.index" value="4" ng-change="toggleOptionSelect()" ng-disabled="(selectedOption.index==1)"> {{'versions.enterURL' | translate}} </label> </div> <div class="col-sm-7"> <div class="form-group {{option2.name}}" ng-class="{'has-error': option2.url.hasError }"> - <div class=""><input type="text" class="form-control" ng-model="option2.url" ng-change="clearOptionsError()" ng-disabled="!(selectedOption.index==2)"></div> + <div class=""><input type="text" class="form-control" ng-model="option2.url" ng-change="clearOptionsError()" ng-disabled="(selectedOption.index==1) || !(selectedLocalOption.index==4)"></div> </div> </div> <div class="col-sm-12 read-info-button"> @@ -95,34 +124,26 @@ </div> </div> <div class="panel-body"> - <div class="clearfix"> - <label class="control-label col-sm-3">{{'versions.details.stackName' | translate}}</label> - <div class="version-info col-sm-7">{{stackNameVersion}}</div> - <div class="col-sm-2 patch-icon" ng-if="isPatch"><span class="glyphicon glyphicon-tree-deciduous"></span>{{'versions.patch' | translate}}</div> - </div> - <div class="clearfix"> - <label class="control-label col-sm-3">{{'versions.details.displayName' | translate}}</label> - <div class="version-info col-sm-9">{{displayName}}</div> - </div> - <div class="clearfix"> - <label class="control-label col-sm-3">{{'versions.details.version' | translate}}</label> - <div class="version-info col-sm-9">{{version}}</div> - </div> - <div class="clearfix"> - <label class="control-label col-sm-3">{{'versions.details.actualVersion' | translate}}</label> - <div class="version-info col-sm-9">{{actualVersion}}</div> + <div class="col-sm-5 version-info-section"> + <div class="clearfix"> + <label class="control-label col-sm-7">{{'versions.details.stackName' | translate}}</label> + <div class="version-info col-sm-3">{{stackNameVersion}}</div> + <div class="col-sm-2 patch-icon" ng-if="isPatch"><span class="glyphicon glyphicon-tree-deciduous"></span>{{'versions.patch' | translate}}</div> + </div> + <div class="clearfix"> + <label class="control-label col-sm-7">{{'versions.details.displayName' | translate}}</label> + <div class="version-info col-sm-5">{{displayName}}</div> + </div> + <div class="clearfix"> + <label class="control-label col-sm-7">{{'versions.details.version' | translate}}</label> + <div class="version-info col-sm-5">{{actualVersion}}</div> + </div> </div> - </div> - </div> - <div class="panel panel-default contents-panel"> - <div class="panel-heading"> - <h3 class="panel-title">{{'versions.contents.title' | translate}}</h3> - </div> - <div class="panel-body version-contents-body"> - <div class="alert alert-info hide-soft" ng-class="{'visible' : !services || !services.length}" role="alert">{{'versions.contents.empty' | translate}}</div> - <div class="clearfix" ng-repeat="service in services"> - <label class="control-label col-sm-3">{{service.name}}</label> - <div class="version-info col-sm-9">{{service.version}}</div> + <div class="col-sm-6 version-contents-section"> + <div class="alert alert-info hide-soft" ng-class="{'visible' : !services || !services.length}" role="alert">{{'versions.contents.empty' | translate}}</div> + <div class="clearfix" ng-repeat="service in services"> + <div class="version-info col-sm-9">{{service.name}} ({{service.version}})</div> + </div> </div> </div> </div> @@ -164,14 +185,14 @@ </div> </div> <div class="btn-group pull-right" dropdown> - <button class="btn dropdown-toggle"> + <button class="btn dropdown-toggle" ng-disabled="isAddOsButtonDisabled()"> <span class="glyphicon glyphicon-plus"></span> {{'common.add' | translate: '{term: constants.os}'}} <span class="caret"></span></button> <ul class="dropdown-menu" ng-class="{'hidden': hasNotDeletedRepo()}"> <li ng-repeat="os in osList"><a ng-if="os.selected==false" ng-click="addOS()">{{os.OperatingSystems.os_type}}</a></li> </ul> </div> <div class="clearfix"> - <div class="col-sm-12" id="skip-validation"> + <div class="col-sm-9" id="skip-validation"> <div class="checkbox"> <label> <input type="checkbox" ng-model="skipValidation" ng-change="clearErrors()"> @@ -179,7 +200,7 @@ </label> </div> </div> - <div class="col-sm-12" id="use-redhat"> + <div class="col-sm-9" id="use-redhat"> <div class="checkbox"> <label> <input type="checkbox" ng-model="useRedhatSatellite" ng-change="clearErrors()"> http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json ---------------------------------------------------------------------- diff --git a/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json b/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json new file mode 100644 index 0000000..fde11e2 --- /dev/null +++ b/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json @@ -0,0 +1,556 @@ +{ + "href" : "http://c6401.ambari.apache.org:8080/api/v1/version_definitions?fields=operating_systems/repositories/Repositories/*,VersionDefinition/stack_services&show_available=true&VersionDefinition/stack_name=HDP", + "items" : [ + { + "VersionDefinition" : { + "id" : 1, + "show_available": true, + "stack_name" : "HDP", + "stack_version" : "2.3", + "repository_version" : "2.3.4.0-3396", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3396.xml", + "release" : { + "build" : "3396", + "compatible_with" : "2.3.[0-3].0", + "notes" : "http://example.com", + "version" : "2.3.4.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2.3396" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3.3396" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3.3396" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", + "OperatingSystems" : { + "os_type" : "redhat6", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + } + ] + }, + + { + "VersionDefinition" : { + "id" : 2, + "stack_name" : "HDP", + "stack_version" : "2.3", + "show_available": true, + "repository_version" : "2.3.4.0-3397", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3397.xml", + "release" : { + "build" : "3397", + "compatible_with" : "2.3.[0-3].0", + "notes" : "http://example.com", + "version" : "2.3.4.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-3397" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-3397" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", + "OperatingSystems" : { + "os_type" : "redhat6", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + } + ] + }, + + { + "VersionDefinition" : { + "id" : 5, + "stack_name" : "HDP", + "stack_version" : "2.3", + "show_available": true, + "repository_version" : "2.3.6.0-3646", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3646.xml", + "release" : { + "build" : "3646", + "compatible_with" : "2.3.[0-6].0", + "notes" : "http://example.com", + "version" : "2.3.6.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-3646" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-3646" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", + "OperatingSystems" : { + "os_type" : "redhat6", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + } + ] + }, + + + { + "VersionDefinition" : { + "id" : 3, + "stack_name" : "HDP", + "stack_version" : "2.4", + "show_available": true, + "repository_version" : "2.4.0.0-169", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_169.xml", + "release" : { + "build" : "169", + "compatible_with" : "2.4.[0-3].0", + "notes" : "http://example.com", + "version" : "2.4.0.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-169" + ] + }, + { + "name" : "MAPREDUCE2", + "display_name" : "MapReduce2", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Slider", + "display_name" : "Slider", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Pig", + "display_name" : "Pig", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Sqoop", + "display_name" : "Sqoop", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.4", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + } + } + ] + } + ] + } + ] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/controllers/installer.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js index 73f9801..39a7812 100644 --- a/ambari-web/app/controllers/installer.js +++ b/ambari-web/app/controllers/installer.js @@ -19,6 +19,7 @@ var App = require('app'); var stringUtils = require('utils/string_utils'); +var validator = require('utils/validator'); App.InstallerController = App.WizardController.extend({ @@ -139,7 +140,10 @@ App.InstallerController = App.WizardController.extend({ var stackServices = App.StackService.find().mapProperty('serviceName'); if (!(stackServices && !!stackServices.length && App.StackService.find().objectAt(0).get('stackVersion') == App.get('currentStackVersionNumber'))) { this.loadServiceComponents().complete(function () { - self.set('content.services', App.StackService.find()); + self.set('content.services', App.StackService.find().forEach(function (item) { + // user the service version from VersionDefinition + item.set('serviceVersionDisplay', App.Stack.find().findProperty('isSelected', true).get('stackServices').findProperty('name', item.get('serviceName')).get('latestVersion')); + })); dfd.resolve(); }); } else { @@ -241,7 +245,7 @@ App.InstallerController = App.WizardController.extend({ App.Tab.find().clear(); this.set('stackConfigsLoaded', false); if (stacks && stacks.get('length')) { - App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('id')); + App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('stackNameVersion')); dfd.resolve(true); } else { App.ajax.send({ @@ -278,12 +282,12 @@ App.InstallerController = App.WizardController.extend({ var requests = []; this.get('stackNames').forEach(function (stackName) { requests.push(App.ajax.send({ - name: 'wizard.stacks_versions', + name: 'wizard.stacks_versions_definitions', sender: this, data: { stackName: stackName }, - success: 'loadStacksVersionsSuccessCallback', + success: 'loadStacksVersionsDefinitionsSuccessCallback', error: 'loadStacksVersionsErrorCallback' })); }, this); @@ -299,30 +303,111 @@ App.InstallerController = App.WizardController.extend({ /** * Parse loaded data and create array of stacks objects */ - loadStacksVersionsSuccessCallback: function (data) { + loadStacksVersionsDefinitionsSuccessCallback: function (data) { + var self = this; var stacks = App.db.getStacks(); + var repos = App.db.getRepos(); var isStacksExistInDb = stacks && stacks.length; if (isStacksExistInDb) { stacks.forEach(function (_stack) { - var stack = data.items.filterProperty('Versions.stack_name', _stack.stack_name).findProperty('Versions.stack_version', _stack.stack_version); + var stack = data.items.findProperty('VersionDefinition.repository_version', _stack.repository_version); if (stack) { - stack.Versions.is_selected = _stack.is_selected; + stack.VersionDefinition.is_selected = _stack.is_selected; } }, this); } - App.stackMapper.map(data); - if (!this.decrementProperty('loadStacksRequestsCounter')) { - if (!isStacksExistInDb) { - var defaultStackVersion = App.Stack.find().findProperty('id', App.defaultStackVersion); - if (defaultStackVersion) { - defaultStackVersion.set('isSelected', true) + + var versionDefinition = data.items[0]; + // to display repos panel, should map all available operating systems including empty ones + this.getSupportedOSList(versionDefinition.VersionDefinition.stack_name, versionDefinition.VersionDefinition.stack_version).complete(function () { + var existedOS = versionDefinition.operating_systems; + var existedMap = {}; + existedOS.map(function (existedOS) { + existedOS.isSelected = true; + existedMap[existedOS.OperatingSystems.os_type] = existedOS; + }); + self.get('allSupportedOS').forEach(function(supportedOS) { + if(!existedMap[supportedOS.OperatingSystems.os_type]) { + supportedOS.isSelected = false; + supportedOS.repositories.forEach(function(repo) { + repo.Repositories.base_url = ''; + }); + existedOS.push(supportedOS); + } + }); + App.stackMapper.map(data.items, "VersionDefinition"); + if (!self.decrementProperty('loadStacksRequestsCounter')) { + + var versionData = self.getSelectedRepoVersionData(); + if (versionData) { + self.postVersionDefinitionFile(versionData.isXMLdata, versionData.data).done(function (versionInfo) { + self.mergeChanges(repos); + App.Stack.find().setEach('isSelected', false); + App.Stack.find().findProperty('id', versionInfo.stackNameVersion + "-" + versionInfo.actualVersion).set('isSelected', true); + self.setSelected(isStacksExistInDb); + }); } else { - App.Stack.find().objectAt(0).set('isSelected', true); + self.setSelected(isStacksExistInDb); } } - this.set('content.stacks', App.Stack.find()); - App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('id')); + }); + }, + + mergeChanges: function (repos) { + repos.forEach(function (repo) { + App.Repository.find().findProperty('id', repo.id).set('baseUrl', repo.base_url); + }); + }, + + setSelected: function (isStacksExistInDb) { + if (!isStacksExistInDb) { + var defaultStackVersion = App.Stack.find().findProperty('stackNameVersion', App.defaultStackVersion); + if (defaultStackVersion) { + defaultStackVersion.set('isSelected', true) + } else { + App.Stack.find().objectAt(0).set('isSelected', true); + } } + this.set('content.stacks', App.Stack.find()); + App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('stackNameVersion')); + }, + + /** + * Get the the repo version (to install) info, this data will be POST + * @method startDeploy + */ + getSelectedRepoVersionData: function () { + var vdfData = App.db.getLocalRepoVDFData(); + var selectedStack = App.Stack.find().findProperty('isSelected', true); + var isXMLdata = false; + var data = {}; + if (selectedStack && selectedStack.get('showAvailable')) { + //meaning user selected a public repo + data = { + "VersionDefinition": { + "available": selectedStack.get('id') + } + }; + isXMLdata = false; + } else if (vdfData && validator.isValidURL(vdfData)) { + // meaning user uploaded a VDF via entering URL + data = { + "VersionDefinition": { + "version_url": vdfData + } + }; + isXMLdata = false; + } else if (vdfData) { + // meaning user uploaded a local VDF.xml file + isXMLdata = true; + data = vdfData; + } else { + return null; + } + return { + isXMLdata: isXMLdata, + data: data + }; }, /** @@ -372,10 +457,13 @@ App.InstallerController = App.WizardController.extend({ * set stacks from server to content and local DB */ setStacks: function () { - var result = App.Stack.find() || []; - Em.assert('Stack model is not populated', result.get('length')); - App.db.setStacks(result.slice()); - this.set('content.stacks', result); + var stacks = App.Stack.find() || []; + Em.assert('Stack model is not populated', stacks.get('length')); + App.db.setStacks(stacks.slice()); + this.set('content.stacks', stacks); + + var repos = App.Repository.find() || []; + App.db.setRepos(repos.slice()); }, /** @@ -405,7 +493,6 @@ App.InstallerController = App.WizardController.extend({ * @param stepController App.WizardStep5Controller */ saveMasterComponentHosts: function (stepController) { - var obj = stepController.get('selectedServicesMasters'), hosts = this.getDBProperty('hosts'); @@ -506,13 +593,222 @@ App.InstallerController = App.WizardController.extend({ this.set('content.clients', clients); }, + /* + * Post version definition file (.xml) to server, DRY_RUN = TRUE + */ + postVersionDefinitionFile: function (isXMLdata, data) { + var dfd = $.Deferred(); + var name = isXMLdata? 'wizard.step1.post_version_definition_file.xml' : 'wizard.step1.post_version_definition_file.url'; + + App.ajax.send({ + name: name, + sender: this, + data: { + dfd: dfd, + data: data + }, + success: 'postVersionDefinitionFileSuccessCallback', + error: 'postVersionDefinitionFileErrorCallback' + }); + return dfd.promise(); + }, + + /** + * onSuccess callback for postVersionDefinitionFile. + */ + postVersionDefinitionFileSuccessCallback: function (_data, request, dataInfo) { + if (_data.resources.length && _data.resources[0].VersionDefinition) { + var data = _data.resources[0]; + var self = this; + // load the data info to display for details and contents panel + var response = { + id : data.VersionDefinition.id, + stackVersion : data.VersionDefinition.stack_version, + stackName: data.VersionDefinition.stack_name, + type: data.VersionDefinition.type, + stackNameVersion: data.VersionDefinition.stack_name + '-' + data.VersionDefinition.stack_version, /// HDP-2.3 + actualVersion: data.VersionDefinition.repository_version, /// 2.3.4.0-3846 + version: data.VersionDefinition.release ? data.VersionDefinition.release.version: null, /// 2.3.4.0 + releaseNotes: data.VersionDefinition.release ? data.VersionDefinition.release.notes: null, + displayName: data.VersionDefinition.release ? data.VersionDefinition.stack_name + '-' + data.VersionDefinition.release.version : + data.VersionDefinition.stack_name + '-' + data.VersionDefinition.repository_version, //HDP-2.3.4.0 + repoVersionFullName : data.VersionDefinition.stack_name + '-' + data.VersionDefinition.repository_version, + osList: data.operating_systems, + updateObj: data + }; + var services = []; + data.VersionDefinition.services.forEach(function (service) { + services.push({ + name: service.name, + version: service.versions[0].version, + components: service.versions[0].components + }); + }); + response.services = services; + + // to display repos panel, should map all available operating systems including empty ones + this.getSupportedOSList(response.stackName, response.stackVersion).complete(function () { + var existedOS = data.operating_systems; + var existedMap = {}; + existedOS.map(function (existedOS) { + existedOS.isSelected = true; + existedMap[existedOS.OperatingSystems.os_type] = existedOS; + }); + self.get('allSupportedOS').forEach(function(supportedOS) { + if(!existedMap[supportedOS.OperatingSystems.os_type]) { + supportedOS.isSelected = false; + supportedOS.repositories.forEach(function(repo) { + repo.Repositories.base_url = ''; + }); + existedOS.push(supportedOS); + } + }); + App.stackMapper.map(_data.resources, "VersionDefinition"); + dataInfo.dfd.resolve(response); + }); + } + }, + + /* + * Post version definition file (.xml) to server in step 8 + */ + postVersionDefinitionFileStep8: function (isXMLdata, data) { + var dfd = $.Deferred(); + var name = isXMLdata == true? 'wizard.step8.post_version_definition_file.xml' : 'wizard.step8.post_version_definition_file'; + App.ajax.send({ + name: name, + sender: this, + data: { + dfd: dfd, + data: data + }, + success: 'postVersionDefinitionFileStep8SuccessCallback', + error: 'postVersionDefinitionFileErrorCallback' + }); + return dfd.promise(); + }, + /** + * onSuccess callback for postVersionDefinitionFile. + */ + postVersionDefinitionFileStep8SuccessCallback: function (response, request, data) { + if (response.resources.length && response.resources[0].VersionDefinition) { + data.dfd.resolve( + { + stackName: response.resources[0].VersionDefinition.stack_name, + id: response.resources[0].VersionDefinition.id, + stackVersion: response.resources[0].VersionDefinition.stack_version + }); + } + }, + + /** + * onError callback for postVersionDefinitionFile. + */ + postVersionDefinitionFileErrorCallback: function (request, ajaxOptions, error, data, params) { + params.dfd.reject(data); + var header = Em.I18n.t('installer.step1.useLocalRepo.uploadFile.error.title'); + var body = ""; + if(request && request.responseText){ + try { + var json = $.parseJSON(request.responseText); + body = json.message; + } catch (err) {} + } + App.showAlertPopup(header, body); + }, + + getSupportedOSList: function (stackName, stackVersion) { + return App.ajax.send({ + name: 'wizard.step1.get_supported_os_types', + sender: this, + data: { + stackName: stackName, + stackVersion: stackVersion + }, + success: 'getSupportedOSListSuccessCallback', + error: 'getSupportedOSListErrorCallback' + }); + }, + + /** + * onSuccess callback for getSupportedOSList. + */ + getSupportedOSListSuccessCallback: function (response, request, data) { + if (response.operating_systems) { + this.set('allSupportedOS', response.operating_systems); + } + }, + + /** + * onError callback for getSupportedOSList + */ + getSupportedOSListErrorCallback: function (request, ajaxOptions, error, data, params) { + var header = Em.I18n.t('installer.step1.useLocalRepo.getSurpottedOs.error.title'); + var body = ""; + if(request && request.responseText){ + try { + var json = $.parseJSON(request.responseText); + body = json.message; + } catch (err) {} + } + App.showAlertPopup(header, body); + }, + + updateRepoOSInfo: function (repoToUpdate, repo) { + var deferred = $.Deferred(); + var repoVersion = this.prepareRepoForSaving(repo); + App.ajax.send({ + name: 'admin.stack_versions.edit.repo', + sender: this, + data: { + stackName: repoToUpdate.stackName, + stackVersion: repoToUpdate.stackVersion, + repoVersionId: repoToUpdate.id, + repoVersion: repoVersion + } + }).success(function() { + deferred.resolve([]); + }).error(function() { + deferred.resolve([]); + }); + return deferred.promise(); + }, + + /** + * transform repo data into json for + * saving changes to repository version + * @param {Em.Object} repo + * @returns {{operating_systems: Array}} + */ + prepareRepoForSaving: function(repo) { + var repoVersion = { "operating_systems": [] }; + repo.get('operatingSystems').forEach(function (os, k) { + repoVersion.operating_systems.push({ + "OperatingSystems": { + "os_type": os.get("osType") + }, + "repositories": [] + }); + os.get('repositories').forEach(function (repository) { + repoVersion.operating_systems[k].repositories.push({ + "Repositories": { + "base_url": repository.get('baseUrl'), + "repo_id": repository.get('repoId'), + "repo_name": repository.get('repoName') + } + }); + }); + }); + return repoVersion; + }, + /** * Check validation of the customized local urls */ checkRepoURL: function (wizardStep1Controller) { var selectedStack = this.get('content.stacks').findProperty('isSelected', true); selectedStack.set('reload', true); - var nameVersionCombo = selectedStack.get('id'); + var nameVersionCombo = selectedStack.get('stackNameVersion'); var stackName = nameVersionCombo.split('-')[0]; var stackVersion = nameVersionCombo.split('-')[1]; var dfd = $.Deferred(); @@ -624,7 +920,9 @@ App.InstallerController = App.WizardController.extend({ if (!stacksLoaded) { $.when.apply(this, this.loadStacksVersions()).done(function () { - dfd.resolve(stacksLoaded); + Em.run.later('sync', function() { + dfd.resolve(stacksLoaded); + }, 1000); }); } else { dfd.resolve(stacksLoaded); http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js index a056d3b..cdc2aa7 100644 --- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js +++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js @@ -231,7 +231,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, */ realStackUrl: function () { return App.get('apiPrefix') + '/clusters/' + App.get('clusterName') + - '/stack_versions?fields=*,repository_versions/*,repository_versions/operating_systems/repositories/*'; + '/stack_versions?fields=*,repository_versions/*,repository_versions/operating_systems/OperatingSystems/*,repository_versions/operating_systems/repositories/*'; }.property('App.clusterName'), /** @@ -1325,11 +1325,12 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, */ prepareRepoForSaving: function(repo) { var repoVersion = { "operating_systems": [] }; - + var ambari_managed_repositories = !repo.get('useRedhatSatellite'); repo.get('operatingSystems').forEach(function (os, k) { repoVersion.operating_systems.push({ "OperatingSystems": { - "os_type": os.get("osType") + "os_type": os.get("osType"), + "ambari_managed_repositories": ambari_managed_repositories }, "repositories": [] }); @@ -1794,5 +1795,36 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, newWindow = window.open(); newWindow.document.write(output); newWindow.focus(); - } + }, + + /** + * load version for services to display on Choose Servoces page + * should load from VersionDefinition endpoint + */ + loadServiceVersionFromVersionDefinitions: function () { + return App.ajax.send({ + name: 'cluster.load_current_repo_stack_services', + sender: this, + data: { + clusterName: App.clusterName + }, + success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback', + error: 'loadServiceVersionFromVersionDefinitionsErrorCallback' + }); + }, + + serviceVersionsMap: {}, + loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) { + var rv = jsonData.items[0].repository_versions[0].RepositoryVersions; + var map = this.get('serviceVersionsMap'); + if (rv) { + rv.stack_services.forEach(function (item) { + map[item.name] = item.versions[0]; + }); + } + }, + + loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) { + }, + }); http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/controllers/main/service/add_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/add_controller.js b/ambari-web/app/controllers/main/service/add_controller.js index 73abd59..a4fa9b7 100644 --- a/ambari-web/app/controllers/main/service/add_controller.js +++ b/ambari-web/app/controllers/main/service/add_controller.js @@ -192,7 +192,13 @@ App.AddServiceController = App.WizardController.extend(App.AddSecurityConfigs, { this.setSkipSlavesStep(App.StackService.find().filterProperty('isSelected').filterProperty('isInstalled', false), 3); } this.set('serviceToInstall', null); - this.set('content.services', App.StackService.find()); + var self = this; + this.loadServiceVersionFromVersionDefinitions().complete(function () { + self.set('content.services', App.StackService.find().forEach(function (item) { + // user the service version from VersionDefinition + Ember.set(item, 'serviceVersionDisplay', self.get('serviceVersionsMap')[item.get('serviceName')]); + })); + }); }, /** http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/controllers/wizard.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js index 2aacf28..64ee3dd 100644 --- a/ambari-web/app/controllers/wizard.js +++ b/ambari-web/app/controllers/wizard.js @@ -678,6 +678,35 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM }, /** + * load version for services to display on Choose Servoces page + * should load from VersionDefinition endpoint + */ + loadServiceVersionFromVersionDefinitions: function () { + return App.ajax.send({ + name: 'cluster.load_current_repo_stack_services', + sender: this, + data: { + clusterName: App.clusterName + }, + success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback', + error: 'loadServiceVersionFromVersionDefinitionsErrorCallback' + }); + }, + + serviceVersionsMap: {}, + loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) { + var rv = jsonData.items[0].repository_versions[0].RepositoryVersions; + var map = this.get('serviceVersionsMap'); + if (rv) { + rv.stack_services.forEach(function (item) { + map[item.name] = item.versions[0]; + }); + } + }, + loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) { + }, + + /** * Load config groups from local DB */ loadServiceConfigGroups: function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/controllers/wizard/step1_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard/step1_controller.js b/ambari-web/app/controllers/wizard/step1_controller.js index c357bf4..86117c8 100644 --- a/ambari-web/app/controllers/wizard/step1_controller.js +++ b/ambari-web/app/controllers/wizard/step1_controller.js @@ -31,7 +31,90 @@ App.WizardStep1Controller = Em.Controller.extend({ selectedStack: function() { return App.Stack.find().findProperty('isSelected'); - }.property('[email protected]') + }.property('[email protected]'), + optionsToSelect: { + 'usePublicRepo': { + index: 0, + isSelected: true + }, + 'useLocalRepo': { + index: 1, + isSelected: false, + 'uploadFile': { + index: 0, + name: 'uploadFile', + file: '', + hasError: false, + isSelected: true + }, + 'enterUrl': { + index: 1, + name: 'enterUrl', + url: 'http://', + hasError: false, + isSelected: false + } + } + }, + /** + * Used to set version definition file from FileUploader + * @method setVDFFile + * @param {string} vdf + */ + setVDFFile: function (vdf) { + this.set("optionsToSelect.useLocalRepo.uploadFile.file", vdf); + }, + + /** + * Load selected file to current page content + */ + readVersionInfo: function(){ + var data = {}; + var isXMLdata = false; + if (this.get("optionsToSelect.usePublicRepo.isSelected")) return; + if (this.get("optionsToSelect.useLocalRepo.isSelected") && this.get("optionsToSelect.useLocalRepo.enterUrl.isSelected")) { + var url = this.get("optionsToSelect.useLocalRepo.enterUrl.url"); + data = { + "VersionDefinition": { + "version_url": url + } + }; + App.db.setLocalRepoVDFData(url); + } else if (this.get("optionsToSelect.useLocalRepo.uploadFile.isSelected")) { + isXMLdata = true; + // load from file browser + data = this.get("optionsToSelect.useLocalRepo.uploadFile.file"); + App.db.setLocalRepoVDFData(data); + } + var installerController = App.router.get('installerController'); + var self = this; + installerController.postVersionDefinitionFile(isXMLdata, data).done(function (response) { + self.set('latestSelectedLocalRepoId', response.stackNameVersion + "-" + response.actualVersion); + // load successfully, so make this local stack repo as selectedStack + self.get('content.stacks').setEach('isSelected', false); + self.get('content.stacks').findProperty('id', response.stackNameVersion + "-" + response.actualVersion).set('isSelected', true); + Ember.run.next(function () { + $("[rel=skip-validation-tooltip]").tooltip({ placement: 'right'}); + $("[rel=use-redhat-tooltip]").tooltip({ placement: 'right'}); + }); + }); + }, + + /** + * On click handler for removing OS + */ + removeOS: function(event) { + var osToRemove = event.context; + Em.set(osToRemove, 'isSelected', false); + }, + + /** + * On click handler for adding new OS + */ + addOS: function(event) { + var osToAdd = event.context; + Em.set(osToAdd, 'isSelected', true); + } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/controllers/wizard/step8_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js index a5eb949..11ff7ed 100644 --- a/ambari-web/app/controllers/wizard/step8_controller.js +++ b/ambari-web/app/controllers/wizard/step8_controller.js @@ -18,6 +18,7 @@ var App = require('app'); var stringUtils = require('utils/string_utils'); +var validator = require('utils/validator'); App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wizardDeployProgressControllerMixin, App.ConfigOverridable, App.ConfigsSaverMixin, { @@ -827,11 +828,38 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz this.addRequestToAjaxQueue(ajaxOpts); } }, + /** - * Start deploy process + * To Start deploy process * @method startDeploy */ startDeploy: function () { + if (this.get('content.controllerName') !== 'installerController') { + this._startDeploy(); + } else { + var installerController = App.router.get('installerController'); + var versionData = installerController.getSelectedRepoVersionData(); + if (versionData) { + var self = this; + installerController.postVersionDefinitionFileStep8(versionData.isXMLdata, versionData.data).done(function (versionInfo) { + if (versionInfo.id && versionInfo.stackName && versionInfo.stackVersion) { + var selectedStack = App.Stack.find().findProperty('isSelected', true); + installerController.updateRepoOSInfo(versionInfo, selectedStack).done(function() { + self._startDeploy(); + }); + } + }); + } else { + this._startDeploy(); + } + } + }, + + /** + * Start deploy process + * @method startDeploy + */ + _startDeploy: function () { this.createCluster(); this.createSelectedServices(); if (this.get('content.controllerName') !== 'addHostController') { @@ -877,10 +905,11 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz createCluster: function () { if (this.get('content.controllerName') !== 'installerController') return; var stackVersion = (this.get('content.installOptions.localRepo')) ? App.currentStackVersion.replace(/(-\d+(\.\d)*)/ig, "Local$&") : App.currentStackVersion; + var selectedStack = App.Stack.find().findProperty('isSelected', true); this.addRequestToAjaxQueue({ name: 'wizard.step8.create_cluster', data: { - data: JSON.stringify({ "Clusters": {"version": stackVersion }}) + data: JSON.stringify({ "Clusters": {"version": stackVersion, "repository_version": selectedStack.get('repositoryVersion')}}) }, success: 'createClusterSuccess' }); @@ -1274,7 +1303,6 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz var masterHosts = this.get('content.masterComponentHosts'); // add all components with cardinality == ALL of selected services - var registeredHosts = this.getRegisteredHosts(); var notInstalledHosts = registeredHosts.filterProperty('isInstalled', false); this.get('content.services').filterProperty('isSelected').forEach(function (service) { http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/mappers/repository_version_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/repository_version_mapper.js b/ambari-web/app/mappers/repository_version_mapper.js index 67cfe64..04b9d73 100644 --- a/ambari-web/app/mappers/repository_version_mapper.js +++ b/ambari-web/app/mappers/repository_version_mapper.js @@ -34,6 +34,7 @@ App.repoVersionMapper = App.QuickDataMapper.create({ upgrade_pack: repoVersionsKey + '.upgrade_pack', stack_version_type: repoVersionsKey + '.stack_name', stack_version_number: repoVersionsKey + '.stack_version', + use_redhat_satellite: 'use_redhat_satellite', services_key: 'services', services_type: 'array', services: { @@ -128,7 +129,19 @@ App.repoVersionMapper = App.QuickDataMapper.create({ serviceArray.pushObject(serviceObj); resultService.push(this.parseIt(serviceObj, this.get('modelService'))); }, this); + } else if (item[repoVersionsKey].stack_services) { + item[repoVersionsKey].stack_services.forEach(function (service) { + var serviceObj = { + id: service.name, + name: service.name, + display_name: service.display_name, + latest_version: service.versions[0] ? service.versions[0]: '' + }; + serviceArray.pushObject(serviceObj); + resultService.push(this.parseIt(serviceObj, this.get('modelService'))); + }, this); } + repo.use_redhat_satellite = item.operating_systems[0].OperatingSystems.ambari_managed_repositories === false; repo.operating_systems = osArray; repo.services = serviceArray; resultRepoVersion.push(this.parseIt(repo, this.modelRepoVersion(isCurrentStackOnly))); http://git-wip-us.apache.org/repos/asf/ambari/blob/0b77adc2/ambari-web/app/mappers/stack_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/stack_mapper.js b/ambari-web/app/mappers/stack_mapper.js index 75245e0..4f73612 100644 --- a/ambari-web/app/mappers/stack_mapper.js +++ b/ambari-web/app/mappers/stack_mapper.js @@ -21,11 +21,15 @@ App.stackMapper = App.QuickDataMapper.create({ modelStack: App.Stack, modelOS: App.OperatingSystem, modelRepo: App.Repository, + modelServices: App.ServiceSimple, configStack: { id: 'id', stack_name: 'stack_name', stack_version: 'stack_version', + show_available: 'show_available', + type: 'type', + repository_version: 'repository_version', active: 'active', parent_stack_version: 'parent_stack_version', min_upgrade_version: 'min_upgrade_version', @@ -33,6 +37,11 @@ App.stackMapper = App.QuickDataMapper.create({ max_jdk_version: 'max_jdk', is_selected: 'is_selected', config_types: 'config_types', + stack_services_key: 'stack_services', + stack_services_type: 'array', + stack_services: { + item: 'id' + }, operating_systems_key: 'operating_systems', operating_systems_type: 'array', operating_systems: { @@ -46,12 +55,20 @@ App.stackMapper = App.QuickDataMapper.create({ stack_name: 'stack_name', stack_version: 'stack_version', stack_id: 'stack_id', + is_selected: 'is_selected', repositories_key: 'repositories', repositories_type: 'array', repositories: { item: 'id' } }, + + configService: { + id: 'id', + name: 'name', + display_name: 'display_name', + latest_version: 'latest_version' + }, configRepository: { id: 'id', @@ -67,42 +84,59 @@ App.stackMapper = App.QuickDataMapper.create({ operating_system_id: 'os_id' }, - map: function(json) { + map: function(json, key) { var modelStack = this.get('modelStack'); var modelOS = this.get('modelOS'); var modelRepo = this.get('modelRepo'); + var modelServices = this.get('modelServices'); var resultStack = []; var resultOS = []; var resultRepo = []; + var resultServices = []; - var stackVersions = json.items.filterProperty('Versions.active'); - stackVersions.sortProperty('Versions.stack_version').reverse().forEach(function(item) { - var stack = item.Versions; + var stackVersions = json; + var propertiesKey = key; + stackVersions.sortProperty(key + '.stack_version').reverse().forEach(function(item) { + var stack = item[key]; var operatingSystemsArray = []; + var servicesArray = []; - stack.id = stack.stack_name + "-" + stack.stack_version; + stack.id = stack.stack_name + "-" + stack.stack_version + "-" + stack.repository_version; //HDP-2.5-2.5.0.0 item.operating_systems.forEach(function(ops) { var operatingSystems = ops.OperatingSystems; var repositoriesArray = []; ops.repositories.forEach(function(repo) { - repo.Repositories.id = [repo.Repositories.stack_name, repo.Repositories.stack_version, repo.Repositories.os_type, repo.Repositories.repo_id].join('-'); - repo.Repositories.os_id = [repo.Repositories.stack_name, repo.Repositories.stack_version, repo.Repositories.os_type].join('-'); + repo.Repositories.id = [stack.id, repo.Repositories.os_type, repo.Repositories.repo_id].join('-'); + repo.Repositories.os_id = [stack.id, repo.Repositories.os_type].join('-'); + if (!repo.Repositories.latest_base_url) repo.Repositories.latest_base_url = repo.Repositories.base_url; resultRepo.push(this.parseIt(repo.Repositories, this.get('configRepository'))); repositoriesArray.pushObject(repo.Repositories); }, this); - operatingSystems.id = operatingSystems.stack_name + "-" + operatingSystems.stack_version + "-" + operatingSystems.os_type; + operatingSystems.id = stack.id + "-" + operatingSystems.os_type; operatingSystems.stack_id = operatingSystems.stack_name + "-" + operatingSystems.stack_version; operatingSystems.repositories = repositoriesArray; + operatingSystems.is_selected = (ops.isSelected == true || ops.isSelected == undefined); resultOS.push(this.parseIt(operatingSystems, this.get('configOS'))); operatingSystemsArray.pushObject(operatingSystems); }, this); - + stack.stack_services.forEach(function(service) { + var serviceObj = { + id: service.name + '-' + stack.id, + name: service.name, + display_name: service.display_name, + latest_version: service.versions? service.versions[0] : '' + }; + resultServices.push(this.parseIt(serviceObj, this.get('configService'))); + servicesArray.pushObject(serviceObj); + }, this); + + stack.stack_services = servicesArray; stack.operating_systems = operatingSystemsArray; resultStack.push(this.parseIt(stack, this.get('configStack'))); @@ -111,6 +145,7 @@ App.stackMapper = App.QuickDataMapper.create({ App.store.commit(); App.store.loadMany(modelRepo, resultRepo); App.store.loadMany(modelOS, resultOS); + App.store.loadMany(modelServices, resultServices); App.store.loadMany(modelStack, resultStack); } });
