123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- /**
- * 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');
- module.exports = {
- installHostComponent: function(hostName, component) {
- var self = this;
- var componentName = component.get('componentName');
- var displayName = component.get('displayName');
- App.ajax.send({
- name: 'host.host_component.add_new_component',
- sender: self,
- data: {
- hostName: hostName,
- component: component,
- data: JSON.stringify({
- RequestInfo: {
- "context": Em.I18n.t('requestInfo.installHostComponent') + " " + displayName
- },
- Body: {
- host_components: [
- {
- HostRoles: {
- component_name: componentName
- }
- }
- ]
- }
- })
- },
- success: 'addNewComponentSuccessCallback',
- error: 'ajaxErrorCallback'
- });
- },
- /**
- * Success callback for add host component request
- * @param {object} data
- * @param {object} opt
- * @param {object} params
- * @method addNewComponentSuccessCallback
- */
- addNewComponentSuccessCallback: function (data, opt, params) {
- console.log('Send request for ADDING NEW COMPONENT successfully');
- App.ajax.send({
- name: 'common.host.host_component.update',
- sender: App.router.get('mainHostDetailsController'),
- data: {
- hostName: params.hostName,
- componentName: params.component.get('componentName'),
- serviceName: params.component.get('serviceName'),
- component: params.component,
- "context": Em.I18n.t('requestInfo.installNewHostComponent') + " " + params.component.get('displayName'),
- HostRoles: {
- state: 'INSTALLED'
- },
- urlParams: "HostRoles/state=INIT"
- },
- success: 'installNewComponentSuccessCallback',
- error: 'ajaxErrorCallback'
- });
- },
- /**
- * Default error-callback for ajax-requests in current page
- * @param {object} request
- * @param {object} ajaxOptions
- * @param {string} error
- * @param {object} opt
- * @param {object} params
- * @method ajaxErrorCallback
- */
- ajaxErrorCallback: function (request, ajaxOptions, error, opt, params) {
- console.log('error on change component host status');
- App.ajax.defaultErrorHandler(request, opt.url, opt.method);
- },
- downloadClientConfigs: function (data) {
- var isForHost = typeof data.hostName !== 'undefined';
- var url = App.get('apiPrefix') + '/clusters/' + App.router.getClusterName() + '/' +
- (isForHost ? 'hosts/' + data.hostName + '/host_components/' : 'services/' + data.serviceName + '/components/') +
- data.componentName + '?format=client_config_tar';
- try {
- var self = this;
- $.fileDownload(url).fail(function (error) {
- var errorMessage = '';
- var isNoConfigs = false;
- if (error && $(error).text()) {
- var errorObj = JSON.parse($(error).text());
- if (errorObj && errorObj.message && errorObj.status) {
- isNoConfigs = errorObj.message.indexOf(Em.I18n.t('services.service.actions.downloadClientConfigs.fail.noConfigFile')) !== -1;
- errorMessage += isNoConfigs ? Em.I18n.t('services.service.actions.downloadClientConfigs.fail.noConfigFile') :
- Em.I18n.t('services.service.actions.downloadClientConfigs.fail.popup.body.errorMessage').format(data.displayName, errorObj.status, errorObj.message);
- } else {
- errorMessage += Em.I18n.t('services.service.actions.downloadClientConfigs.fail.popup.body.noErrorMessage').format(data.displayName);
- }
- errorMessage += isNoConfigs ? '' : Em.I18n.t('services.service.actions.downloadClientConfigs.fail.popup.body.question');
- } else {
- errorMessage += Em.I18n.t('services.service.actions.downloadClientConfigs.fail.popup.body.noErrorMessage').format(data.displayName) +
- Em.I18n.t('services.service.actions.downloadClientConfigs.fail.popup.body.question');
- }
- App.ModalPopup.show({
- header: Em.I18n.t('services.service.actions.downloadClientConfigs.fail.popup.header').format(data.displayName),
- bodyClass: Ember.View.extend({
- template: Em.Handlebars.compile(errorMessage)
- }),
- secondary: isNoConfigs ? false : Em.I18n.t('common.cancel'),
- onPrimary: function () {
- this.hide();
- if (!isNoConfigs) {
- self.downloadClientConfigs({
- context: Em.Object.create(data)
- })
- }
- }
- });
- });
- } catch (err) {
- var newWindow = window.open(url);
- newWindow.focus();
- }
- },
- /**
- * Check if all required components are installed on host.
- * Available options:
- * scope: 'host' - dependency level `host`,`cluster` or `*`.
- * hostName: 'example.com' - host name to search installed components
- * installedComponents: ['A', 'B'] - names of installed components
- *
- * By default scope level is `*`
- * For host level dependency you should specify at least `hostName` or `installedComponents` attribute.
- *
- * @param {String} componentName
- * @param {Object} opt - options. Allowed options are `hostName`, `installedComponents`, `scope`.
- * @return {Array} - names of missed components
- */
- checkComponentDependencies: function(componentName, opt) {
- opt = opt || {};
- opt.scope = opt.scope || '*';
- var installedComponents;
- var dependencies = App.StackServiceComponent.find(componentName).get('dependencies');
- dependencies = opt.scope === '*' ? dependencies : dependencies.filterProperty('scope', opt.scope);
- if (dependencies.length == 0) return [];
- switch (opt.scope) {
- case 'host':
- Em.assert("You should pass at least `hostName` or `installedComponents` to options.", opt.hostName || opt.installedComponents);
- installedComponents = opt.installedComponents || App.HostComponent.find().filterProperty('hostName', opt.hostName).mapProperty('componentName').uniq();
- break;
- default:
- // @todo: use more appropriate value regarding installed components
- installedComponents = opt.installedComponents || App.HostComponent.find().mapProperty('componentName').uniq();
- break;
- }
- return dependencies.filter(function(dependency) {
- return !installedComponents.contains(dependency.componentName);
- }).mapProperty('componentName');
- }
- };
|