12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079 |
- /**
- * 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();
- App.configsCollection.clearAll();
- App.Section.find().clear();
- App.SubSection.find().clear();
- App.SubSectionTab.find().clear();
- App.Tab.find().clear();
- this.set('stackConfigsLoaded', false);
- 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 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.findProperty('VersionDefinition.repository_version', _stack.repository_version);
- if (stack) {
- stack.VersionDefinition.is_selected = _stack.is_selected;
- }
- }, this);
- }
- 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, stacks);
- App.Stack.find().setEach('isSelected', false);
- App.Stack.find().findProperty('id', versionInfo.stackNameVersion + "-" + versionInfo.actualVersion).set('isSelected', true);
- self.setSelected(isStacksExistInDb);
- });
- } else {
- self.setSelected(isStacksExistInDb);
- }
- }
- });
- },
- mergeChanges: function (repos, 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 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
- };
- },
- /**
- * 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 || {},
- host_names = Em.keys(hosts);
- if (Em.isNone(masterComponentHosts)) {
- masterComponentHosts = [];
- }
- else {
- masterComponentHosts.forEach(function (component) {
- for (var i = 0; i < host_names.length; i++) {
- if (hosts[host_names[i]].id === component.host_id) {
- component.hostName = host_names[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 || {},
- host_names = Em.keys(hosts);
- if (!Em.isNone(slaveComponentHosts)) {
- slaveComponentHosts.forEach(function (component) {
- component.hosts.forEach(function (host) {
- for (var i = 0; i < host_names.length; i++) {
- if (hosts[host_names[i]].id === host.host_id) {
- host.hostName = host_names[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];
- 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": [] };
- var ambari_managed_repositories = !repo.get('useRedhatSatellite');
- repo.get('operatingSystems').forEach(function (os, k) {
- repoVersion.operating_systems.push({
- "OperatingSystems": {
- "os_type": os.get("osType"),
- "ambari_managed_repositories": ambari_managed_repositories
- },
- "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');
- 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]) - parseInt(minJDKVersion.split('.')[1]);
- 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();
- }
- });
|