1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069 |
- /**
- * 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 stringUtils = require('utils/string_utils');
- var validator = require('utils/validator');
- App.InstallerController = App.WizardController.extend({
- name: 'installerController',
- isCheckInProgress: false,
- totalSteps: 11,
- content: Em.Object.create({
- cluster: null,
- installOptions: null,
- hosts: null,
- services: null,
- slaveComponentHosts: null,
- masterComponentHosts: null,
- serviceConfigProperties: null,
- advancedServiceConfig: null,
- configGroups: [],
- slaveGroupProperties: null,
- stacks: null,
- clients: [],
- /**
- * recommendations for host groups loaded from server
- */
- recommendations: null,
- /**
- * recommendationsHostGroups - current component assignment after 5 and 6 steps,
- * or adding hiveserver2 interactive on "configure services" page
- * (uses for host groups validation and to load recommended configs)
- */
- recommendationsHostGroups: null,
- controllerName: 'installerController'
- }),
- /**
- * Wizard properties in local storage, which should be cleaned right after wizard has been finished
- */
- dbPropertiesToClean: [
- 'service',
- 'hosts',
- 'masterComponentHosts',
- 'slaveComponentHosts',
- 'cluster',
- 'allHostNames',
- 'installOptions',
- 'allHostNamesPattern',
- 'serviceComponents',
- 'clientInfo',
- 'selectedServiceNames',
- 'serviceConfigGroups',
- 'serviceConfigProperties',
- 'fileNamesToUpdate',
- 'bootStatus',
- 'stacksVersions',
- 'currentStep',
- 'serviceInfo',
- 'hostInfo',
- 'recommendations',
- 'recommendationsHostGroups',
- 'recommendationsConfigs'
- ],
- init: function () {
- this._super();
- this.get('isStepDisabled').setEach('value', true);
- this.get('isStepDisabled').pushObject(Ember.Object.create({
- step: 0,
- value: true
- }));
- },
- /**
- * redefined connectOutlet method to avoid view loading by unauthorized user
- * @param view
- * @param content
- */
- connectOutlet: function (view, content) {
- if (App.db.getAuthenticated()) {
- this._super(view, content);
- }
- },
- getCluster: function () {
- return jQuery.extend({}, this.get('clusterStatusTemplate'));
- },
- getHosts: function () {
- return [];
- },
- /**
- * Remove host from model. Used at <code>Confirm hosts(step2)</code> step
- * @param hosts Array of hosts, which we want to delete
- */
- removeHosts: function (hosts) {
- var dbHosts = this.getDBProperty('hosts');
- hosts.forEach(function (_hostInfo) {
- var host = _hostInfo.name;
- delete dbHosts[host];
- });
- this.setDBProperty('hosts', dbHosts);
- },
- /**
- * Load confirmed hosts.
- * Will be used at <code>Assign Masters(step5)</code> step
- */
- loadConfirmedHosts: function () {
- this.set('content.hosts', this.getDBProperty('hosts') || {});
- },
- /**
- * Load services data. Will be used at <code>Select services(step4)</code> step
- */
- loadServices: function () {
- var dfd = $.Deferred();
- var self = this;
- 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().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 {
- dfd.resolve();
- }
- return dfd.promise();
- },
- /**
- * total set of hosts registered to cluster, analog of App.Host model,
- * used in Installer wizard until hosts are installed
- */
- allHosts: function () {
- var rawHosts = this.get('content.hosts');
- var masterComponents = this.get('content.masterComponentHosts');
- var slaveComponents = this.get('content.slaveComponentHosts');
- var hosts = [];
- masterComponents.forEach(function (component) {
- var host = rawHosts[component.hostName];
- if (host.hostComponents) {
- host.hostComponents.push(Em.Object.create({
- componentName: component.component,
- displayName: component.display_name
- }));
- } else {
- rawHosts[component.hostName].hostComponents = [
- Em.Object.create({
- componentName: component.component,
- displayName: component.display_name
- })
- ]
- }
- });
- slaveComponents.forEach(function (component) {
- component.hosts.forEach(function (rawHost) {
- var host = rawHosts[rawHost.hostName];
- if (host.hostComponents) {
- host.hostComponents.push(Em.Object.create({
- componentName: component.componentName,
- displayName: component.displayName
- }));
- } else {
- rawHosts[rawHost.hostName].hostComponents = [
- Em.Object.create({
- componentName: component.componentName,
- displayName: component.displayName
- })
- ]
- }
- });
- });
- for (var hostName in rawHosts) {
- var host = rawHosts[hostName];
- var disksOverallCapacity = 0;
- var diskFree = 0;
- host.disk_info.forEach(function (disk) {
- disksOverallCapacity += parseFloat(disk.size);
- diskFree += parseFloat(disk.available);
- });
- hosts.pushObject(Em.Object.create({
- id: host.name,
- ip: host.ip,
- osType: host.os_type,
- osArch: host.os_arch,
- hostName: host.name,
- publicHostName: host.name,
- cpu: host.cpu,
- memory: host.memory,
- diskInfo: host.disk_info,
- diskTotal: disksOverallCapacity / (1024 * 1024),
- diskFree: diskFree / (1024 * 1024),
- hostComponents: host.hostComponents || []
- }
- ))
- }
- return hosts;
- }.property('content.hosts'),
- stacks: [],
- /**
- * stack names used as auxiliary data to query stacks by name
- */
- stackNames: [],
- /**
- * Load stacks data from server or take exist data from in memory variable {{content.stacks}}
- * The series of API calls will be called When landing first time on Select Stacks page
- * or on hitting refresh post select stacks page in installer wizard
- */
- loadStacks: function () {
- var stacks = this.get('content.stacks');
- var dfd = $.Deferred();
- if (stacks && stacks.get('length')) {
- App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('stackNameVersion'));
- dfd.resolve(true);
- } else {
- App.ajax.send({
- name: 'wizard.stacks',
- sender: this,
- success: 'loadStacksSuccessCallback',
- error: 'loadStacksErrorCallback'
- }).complete(function () {
- dfd.resolve(false);
- });
- }
- return dfd.promise();
- },
- /**
- * Send queries to load versions for each stack
- */
- loadStacksSuccessCallback: function (data) {
- this.get('stacks').clear();
- this.set('stackNames', data.items.mapProperty('Stacks.stack_name'));
- },
- /**
- * onError callback for loading stacks data
- */
- loadStacksErrorCallback: function () {
- },
- /**
- * query every stack names from server
- * @return {Array}
- */
- loadStacksVersions: function () {
- var requests = [];
- this.get('stackNames').forEach(function (stackName) {
- requests.push(App.ajax.send({
- name: 'wizard.stacks_versions_definitions',
- sender: this,
- data: {
- stackName: stackName
- },
- success: 'loadStacksVersionsDefinitionsSuccessCallback',
- error: 'loadStacksVersionsErrorCallback'
- }));
- }, this);
- this.set('loadStacksRequestsCounter', requests.length);
- return requests;
- },
- /**
- * Counter for counting number of successful requests to load stack versions
- */
- loadStacksRequestsCounter: 0,
- /**
- * Parse loaded data and create array of stacks objects
- */
- loadStacksVersionsDefinitionsSuccessCallback: function (data) {
- var stacks = App.db.getStacks();
- var repos = App.db.getRepos();
- this.decrementProperty('loadStacksRequestsCounter');
- var isStacksExistInDb = stacks && stacks.length;
- if (isStacksExistInDb) {
- stacks.forEach(function (_stack) {
- var stack = data.items.findProperty('VersionDefinition.repository_version', _stack.repository_version);
- if (stack) {
- stack.VersionDefinition.is_selected = _stack.is_selected;
- }
- }, this);
- }
- data.items.sortProperty('VersionDefinition.stack_version').reverse().forEach(function (versionDefinition) {
- // to display repos panel, should map all available operating systems including empty ones
- var stackInfo = {};
- stackInfo.isStacksExistInDb = isStacksExistInDb;
- stackInfo.stacks = stacks;
- stackInfo.repos = repos;
- this.getSupportedOSList(versionDefinition, stackInfo);
- }, this);
- },
- mergeChanges: function (repos, stacks) {
- var _repos = repos || [];
- var _stacks = stacks || [];
- _repos.forEach(function (repo) {
- App.Repository.find().findProperty('id', repo.id).set('baseUrl', repo.base_url);
- });
- _stacks.forEach(function (_stack) {
- var stack = App.Stack.find().findProperty('id', _stack.id);
- if (stack) {
- stack.set('useRedhatSatellite', _stack.use_redhat_satellite);
- }
- });
- },
- setSelected: function (isStacksExistInDb) {
- if (!isStacksExistInDb) {
- var stacks = App.Stack.find();
- stacks.setEach('isSelected', false);
- stacks.sortProperty('id').set('lastObject.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
- };
- },
- /**
- * onError callback for loading stacks data
- */
- loadStacksVersionsErrorCallback: function () {
- },
- /**
- * check server version and web client version
- */
- checkServerClientVersion: function () {
- var dfd = $.Deferred();
- var self = this;
- self.getServerVersion().done(function () {
- dfd.resolve();
- });
- return dfd.promise();
- },
- getServerVersion: function () {
- return App.ajax.send({
- name: 'ambari.service',
- sender: this,
- data: {
- fields: '?fields=RootServiceComponents/component_version,RootServiceComponents/properties/server.os_family&minimal_response=true'
- },
- success: 'getServerVersionSuccessCallback',
- error: 'getServerVersionErrorCallback'
- });
- },
- getServerVersionSuccessCallback: function (data) {
- var clientVersion = App.get('version');
- var serverVersion = data.RootServiceComponents.component_version.toString();
- this.set('ambariServerVersion', serverVersion);
- if (clientVersion) {
- this.set('versionConflictAlertBody', Em.I18n.t('app.versionMismatchAlert.body').format(serverVersion, clientVersion));
- this.set('isServerClientVersionMismatch', clientVersion !== serverVersion);
- } else {
- this.set('isServerClientVersionMismatch', false);
- }
- App.set('isManagedMySQLForHiveEnabled', App.config.isManagedMySQLForHiveAllowed(data.RootServiceComponents.properties['server.os_family']));
- },
- getServerVersionErrorCallback: function () {
- },
- /**
- * set stacks from server to content and local DB
- */
- setStacks: function () {
- 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());
- },
- /**
- * Save data to model
- * @param stepController App.WizardStep4Controller
- */
- saveServices: function (stepController) {
- var selectedServiceNames = [];
- var installedServiceNames = [];
- stepController.filterProperty('isSelected').forEach(function (item) {
- selectedServiceNames.push(item.get('serviceName'));
- });
- stepController.filterProperty('isInstalled').forEach(function (item) {
- installedServiceNames.push(item.get('serviceName'));
- });
- this.set('content.services', App.StackService.find());
- this.set('content.selectedServiceNames', selectedServiceNames);
- this.set('content.installedServiceNames', installedServiceNames);
- this.setDBProperties({
- selectedServiceNames: selectedServiceNames,
- installedServiceNames: installedServiceNames
- });
- },
- /**
- * Save Master Component Hosts data to Main Controller
- * @param stepController App.WizardStep5Controller
- */
- saveMasterComponentHosts: function (stepController) {
- var obj = stepController.get('selectedServicesMasters'),
- hosts = this.getDBProperty('hosts');
- var masterComponentHosts = [];
- obj.forEach(function (_component) {
- masterComponentHosts.push({
- display_name: _component.get('display_name'),
- component: _component.get('component_name'),
- serviceId: _component.get('serviceId'),
- isInstalled: false,
- host_id: hosts[_component.get('selectedHost')].id
- });
- });
- this.setDBProperty('masterComponentHosts', masterComponentHosts);
- this.set('content.masterComponentHosts', masterComponentHosts);
- },
- /**
- * Load master component hosts data for using in required step controllers
- */
- loadMasterComponentHosts: function () {
- var props = this.getDBProperties(['masterComponentHosts', 'hosts']);
- var masterComponentHosts = props.masterComponentHosts,
- hosts = props.hosts || {},
- hostNames = Em.keys(hosts);
- if (Em.isNone(masterComponentHosts)) {
- masterComponentHosts = [];
- }
- else {
- masterComponentHosts.forEach(function (component) {
- for (var i = 0; i < hostNames.length; i++) {
- if (hosts[hostNames[i]].id === component.host_id) {
- component.hostName = hostNames[i];
- break;
- }
- }
- });
- }
- this.set("content.masterComponentHosts", masterComponentHosts);
- },
- loadCurrentHostGroups: function () {
- this.set("content.recommendationsHostGroups", this.getDBProperty('recommendationsHostGroups'));
- },
- loadRecommendationsConfigs: function () {
- App.router.set("wizardStep7Controller.recommendationsConfigs", this.getDBProperty('recommendationsConfigs'));
- },
- /**
- * Load master component hosts data for using in required step controllers
- */
- loadSlaveComponentHosts: function () {
- var props = this.getDBProperties(['slaveComponentHosts', 'hosts']);
- var slaveComponentHosts = props.slaveComponentHosts,
- hosts = props.hosts || {},
- hostNames = Em.keys(hosts);
- if (!Em.isNone(slaveComponentHosts)) {
- slaveComponentHosts.forEach(function (component) {
- component.hosts.forEach(function (host) {
- for (var i = 0; i < hostNames.length; i++) {
- if (hosts[hostNames[i]].id === host.host_id) {
- host.hostName = hostNames[i];
- break;
- }
- }
- });
- });
- }
- this.set("content.slaveComponentHosts", slaveComponentHosts);
- },
- /**
- * Load serviceConfigProperties to model
- */
- loadServiceConfigProperties: function () {
- var serviceConfigProperties = this.getDBProperty('serviceConfigProperties');
- this.set('content.serviceConfigProperties', serviceConfigProperties);
- },
- /**
- * Generate clients list for selected services and save it to model
- * @param stepController step4WizardController
- */
- saveClients: function (stepController) {
- var clients = [];
- stepController.get('content').filterProperty('isSelected', true).forEach(function (_service) {
- var client = _service.get('serviceComponents').filterProperty('isClient', true);
- client.forEach(function (clientComponent) {
- clients.pushObject({
- component_name: clientComponent.get('componentName'),
- display_name: clientComponent.get('displayName'),
- isInstalled: false
- });
- }, this);
- }, this);
- this.setDBProperty('clientInfo', clients);
- 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];
- // load the data info to display for details and contents panel
- data.VersionDefinition.id = Em.get(dataInfo, 'data.VersionDefinition.available') || data.VersionDefinition.id;
- 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
- var stackInfo = {};
- stackInfo.dfd = dataInfo.dfd;
- stackInfo.response = response;
- this.getSupportedOSList(data, stackInfo);
- }
- },
- /*
- * 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.db.setLocalRepoVDFData(undefined);
- App.showAlertPopup(header, body);
- },
- getSupportedOSList: function (versionDefinition, stackInfo) {
- this.incrementProperty('loadStacksRequestsCounter');
- return App.ajax.send({
- name: 'wizard.step1.get_supported_os_types',
- sender: this,
- data: {
- stackName: versionDefinition.VersionDefinition.stack_name,
- stackVersion: versionDefinition.VersionDefinition.stack_version,
- versionDefinition: versionDefinition,
- stackInfo: stackInfo
- },
- success: 'getSupportedOSListSuccessCallback',
- error: 'getSupportedOSListErrorCallback'
- });
- },
- /**
- * onSuccess callback for getSupportedOSList.
- */
- getSupportedOSListSuccessCallback: function (response, request, data) {
- var self = this;
- var existedOS = data.versionDefinition.operating_systems;
- var existedMap = {};
- existedOS.map(function (existedOS) {
- existedOS.isSelected = true;
- existedMap[existedOS.OperatingSystems.os_type] = existedOS;
- });
- response.operating_systems.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.versionDefinition);
- if (!this.decrementProperty('loadStacksRequestsCounter')) {
- if (data.stackInfo.dfd) {
- data.stackInfo.dfd.resolve(data.stackInfo.response);
- } else {
- var versionData = this.getSelectedRepoVersionData();
- if (versionData) {
- this.postVersionDefinitionFile(versionData.isXMLdata, versionData.data).done(function (versionInfo) {
- self.mergeChanges(data.stackInfo.repos, data.stackInfo.stacks);
- App.Stack.find().setEach('isSelected', false);
- var stackId = Em.get(versionData, 'data.VersionDefinition.available') || versionInfo.stackNameVersion + "-" + versionInfo.actualVersion;
- App.Stack.find().findProperty('id', stackId).set('isSelected', true);
- self.setSelected(data.stackInfo.isStacksExistInDb);
- }).fail(function () {
- self.setSelected(data.stackInfo.isStacksExistInDb);
- });
- } else {
- this.setSelected(data.stackInfo.isStacksExistInDb);
- }
- }
- }
- },
- /**
- * 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": [] };
- var ambariManagedRepositories = !repo.get('useRedhatSatellite');
- repo.get('operatingSystems').forEach(function (os, k) {
- repoVersion.operating_systems.push({
- "OperatingSystems": {
- "os_type": os.get("osType"),
- "ambari_managed_repositories": ambariManagedRepositories
- },
- "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('stackNameVersion');
- var stackName = nameVersionCombo.split('-')[0];
- var stackVersion = nameVersionCombo.split('-')[1];
- var dfd = $.Deferred();
- if (selectedStack && selectedStack.get('operatingSystems')) {
- this.set('validationCnt', selectedStack.get('repositories').filterProperty('isSelected').length);
- var verifyBaseUrl = !wizardStep1Controller.get('skipValidationChecked') && !wizardStep1Controller.get('selectedStack.useRedhatSatellite');
- selectedStack.get('operatingSystems').forEach(function (os) {
- if (os.get('isSelected')) {
- os.get('repositories').forEach(function (repo) {
- repo.setProperties({
- errorTitle: '',
- errorContent: '',
- validation: App.Repository.validation.INPROGRESS
- });
- this.set('content.isCheckInProgress', true);
- App.ajax.send({
- name: 'wizard.advanced_repositories.valid_url',
- sender: this,
- data: {
- stackName: stackName,
- stackVersion: stackVersion,
- repoId: repo.get('repoId'),
- osType: os.get('osType'),
- osId: os.get('id'),
- dfd: dfd,
- data: {
- 'Repositories': {
- 'base_url': repo.get('baseUrl'),
- "verify_base_url": verifyBaseUrl
- }
- }
- },
- success: 'checkRepoURLSuccessCallback',
- error: 'checkRepoURLErrorCallback'
- });
- }, this);
- }
- }, this);
- }
- return dfd.promise();
- },
- /**
- * onSuccess callback for check Repo URL.
- */
- checkRepoURLSuccessCallback: function (response, request, data) {
- var selectedStack = this.get('content.stacks').findProperty('isSelected');
- if (selectedStack && selectedStack.get('operatingSystems')) {
- var os = selectedStack.get('operatingSystems').findProperty('id', data.osId);
- var repo = os.get('repositories').findProperty('repoId', data.repoId);
- if (repo) {
- repo.set('validation', App.Repository.validation.OK);
- }
- }
- this.set('validationCnt', this.get('validationCnt') - 1);
- if (!this.get('validationCnt')) {
- this.set('content.isCheckInProgress', false);
- data.dfd.resolve();
- }
- },
- /**
- * onError callback for check Repo URL.
- */
- checkRepoURLErrorCallback: function (request, ajaxOptions, error, data, params) {
- var selectedStack = this.get('content.stacks').findProperty('isSelected', true);
- if (selectedStack && selectedStack.get('operatingSystems')) {
- var os = selectedStack.get('operatingSystems').findProperty('id', params.osId);
- var repo = os.get('repositories').findProperty('repoId', params.repoId);
- if (repo) {
- repo.setProperties({
- validation: App.Repository.validation.INVALID,
- errorTitle: request.status + ":" + request.statusText,
- errorContent: $.parseJSON(request.responseText) ? $.parseJSON(request.responseText).message : ""
- });
- }
- }
- this.set('content.isCheckInProgress', false);
- params.dfd.reject();
- },
- loadMap: {
- '0': [
- {
- type: 'sync',
- callback: function () {
- this.load('cluster');
- }
- }
- ],
- '1': [
- {
- type: 'async',
- callback: function () {
- var dfd = $.Deferred();
- this.loadStacks().always(function() {
- App.router.get('clusterController').loadAmbariProperties().always(function() {
- dfd.resolve();
- });
- });
- return dfd.promise();
- }
- },
- {
- type: 'async',
- callback: function (stacksLoaded) {
- var dfd = $.Deferred();
- if (!stacksLoaded) {
- $.when.apply(this, this.loadStacksVersions()).done(function () {
- Em.run.later('sync', function() {
- dfd.resolve(stacksLoaded);
- }, 1000);
- });
- } else {
- dfd.resolve(stacksLoaded);
- }
- return dfd.promise();
- }
- }
- ],
- '2': [
- {
- type: 'sync',
- callback: function () {
- this.load('installOptions');
- }
- }
- ],
- '3': [
- {
- type: 'sync',
- callback: function () {
- this.loadConfirmedHosts();
- }
- }
- ],
- '4': [
- {
- type: 'async',
- callback: function () {
- return this.loadServices();
- }
- }
- ],
- '5': [
- {
- type: 'sync',
- callback: function () {
- this.setSkipSlavesStep(App.StackService.find().filterProperty('isSelected'), 6);
- this.loadMasterComponentHosts();
- this.loadConfirmedHosts();
- this.loadRecommendations();
- }
- }
- ],
- '6': [
- {
- type: 'sync',
- callback: function () {
- this.loadSlaveComponentHosts();
- this.loadClients();
- this.loadRecommendations();
- }
- }
- ],
- '7': [
- {
- type: 'async',
- callback: function () {
- this.loadServiceConfigGroups();
- this.loadServiceConfigProperties();
- this.loadCurrentHostGroups();
- this.loadRecommendationsConfigs();
- return this.loadConfigThemes();
- }
- }
- ]
- },
- /**
- * Clear all temporary data
- */
- finish: function () {
- this.setCurrentStep('0');
- this.clearStorageData();
- App.router.get('userSettingsController').postUserPref('show_bg', true);
- },
- /**
- * Save cluster provisioning state to the server
- * @param state cluster provisioning state
- */
- setClusterProvisioningState: function (state) {
- return App.ajax.send({
- name: 'cluster.save_provisioning_state',
- sender: this,
- data: {
- state: state
- }
- });
- },
- setStepsEnable: function () {
- for (var i = 0; i <= this.totalSteps; i++) {
- this.get('isStepDisabled').findProperty('step', i).set('value', i > this.get('currentStep'));
- }
- }.observes('currentStep'),
- setLowerStepsDisable: function (stepNo) {
- for (var i = 0; i < stepNo; i++) {
- var step = this.get('isStepDisabled').findProperty('step', i);
- step.set('value', true);
- }
- },
- /**
- * Compare jdk versions used for ambari and selected stack.
- * Validation check will fire only for non-custom jdk configuration.
- *
- * @param {Function} successCallback
- * @param {Function} failCallback
- */
- validateJDKVersion: function (successCallback, failCallback) {
- var selectedStack = App.Stack.find().findProperty('isSelected', true),
- currentJDKVersion = App.router.get('clusterController.ambariProperties')['java.version'],
- // use min as max, or max as min version, in case when some of them missed
- minJDKVersion = selectedStack.get('minJdkVersion') || selectedStack.get('maxJdkVersion'),
- maxJDKVersion = selectedStack.get('maxJdkVersion') || selectedStack.get('minJdkVersion'),
- t = Em.I18n.t,
- fCallback = failCallback || function() {},
- sCallback = successCallback || function() {};
- // Skip jdk check if min and max required version not set in stack definition.
- if (!minJDKVersion && !maxJDKVersion) {
- sCallback();
- return;
- }
- if (currentJDKVersion) {
- if (stringUtils.compareVersions(currentJDKVersion, minJDKVersion) < 0 ||
- stringUtils.compareVersions(maxJDKVersion, currentJDKVersion) < 0) {
- // checks and process only minor part for now
- var versionDistance = parseInt(maxJDKVersion.split('.')[1], 10) - parseInt(minJDKVersion.split('.')[1], 10);
- var versionsList = [minJDKVersion];
- for (var i = 1; i < versionDistance + 1; i++) {
- versionsList.push("" + minJDKVersion.split('.')[0] + '.' + (+minJDKVersion.split('.')[1] + i));
- }
- var versionsString = stringUtils.getFormattedStringFromArray(versionsList, t('or'));
- var popupBody = t('popup.jdkValidation.body').format(selectedStack.get('stackName') + ' ' + selectedStack.get('stackVersion'), versionsString, currentJDKVersion);
- App.showConfirmationPopup(sCallback, popupBody, fCallback, t('popup.jdkValidation.header'), t('common.proceedAnyway'), true);
- return;
- }
- }
- sCallback();
- }
- });
|